---
title: "Read exact immutable policy routing projection"
method: GET
path: "/artifacts/{id}/policy/{requestId}/projection"
tags: ["artifacts"]
---

# Read exact immutable policy routing projection

`GET /artifacts/{id}/policy/{requestId}/projection`

## Request

- Base URL: `https://api.agentsky.dev/v1`
- URL: `https://api.agentsky.dev/v1/artifacts/{id}/policy/{requestId}/projection`
- Auth: HTTP bearer

After-commit/replay routing-cache proof. Requires original immutable operation actor, write scope and its current exact full/selected-alias management ceiling. Dedicated session callback accepts only this GET/UUID path with source_epoch and purpose=consumer_artifact_policy_projection, runtime sessionToken cookie header and exact purpose header; it reauthenticates the actual Better Auth session. Bearer presence never falls back to cookies. Current returns the caller-authorized scoped receipt. For alias recovery, the internal proof may select full current projection (selected_alias_id:null) only after the same principal passes and rechecks the existing full management ceiling; otherwise it stays selected-only. The external policy POST response remains narrow. superseded returns receipt:null with no obsolete raw tokens. No independent user action, content grant or global identity endpoint.

## Path parameters

- `id` string, required
- `requestId` string, uuid, required

## Query parameters

- `source_epoch` integer
- `purpose` 'consumer_artifact_policy_projection'

## Response `200`

Exact lifecycle receipt; private, no-store

- ArtifactPolicyProjection
  - `purpose` 'consumer_artifact_policy_projection', required
  - `source_id` string, required
  - `target_id` string, required
  - `source_epoch` integer, required
  - `request_id` string, uuid, required
  - `actor_user_id` string, required
  - `owner_user_id` string, required
  - `policy_version` integer, required
  - `selected_alias_id` string, nullable, required
  - `state` 'current' | 'superseded', required
  - `receipt` ArtifactPolicyReceipt, required
    - `id` string, required
    - `request_id` string, uuid, nullable, required
    - `policy_version` integer, required
    - `name` string, required
    - `version` integer, required
    - `policy` ArtifactAccessPolicy, required
      - `version` unknown, required
      - `placement` object, nullable, required
        - `slug` string, required
        - `created_at` string, date-time, required
      - `aliases` object[], required
        - `id` string, required
        - `workspace` object, nullable, required
          - `slug` string, required
          - `created_at` string, date-time, required
        - `workspace_access` 'none' | 'view' | 'edit', required
        - `members` object[], required
          - `user_id` string, required
          - `access` 'view' | 'edit', required
        - `revision` integer, required
        - `public_token_hash` string
        - `shared_token_hash` string
      - `public_token_hash` string
      - `public_version` integer, nullable, required
    - `tokens` object, required: Only exact newly issued/revoked public and alias token receipts; private to the owner
    - `archived_at` string, date-time, nullable, required

## Other responses

- `default`: Error { error: { code, message } }; changed facts are 409, unavailable recovery retains fences and capacity

## Changes

- **2026-11-02** `e5e8f0229a99`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/agentsky/apis/agentsky-developer-api/changes/artifacts/:id/policy/:requestId/projection/get.md)

---

[API](https://skmtc.dev/agentsky/apis/agentsky-developer-api.md) - [All operations](https://skmtc.dev/agentsky/apis/agentsky-developer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/agentsky/apis/agentsky-developer-api/revisions/0d435187cd55?raw)
