GET/v1/artifacts/:aid
Auth: tenant — Status: stable
Tenant-scoped lookup by artifact id — the conversation id is inferred from the row. Same semantics as the conversation-scoped variant; cross-tenant ids surface as 404 (never 403, to avoid id-existence side channels).
Request
| Path param | Type | Description |
|---|---|---|
aid | int | Artifact id. |
curl -H "Authorization: Bearer atr_…" \
http://arbiter.example.com/v1/artifacts/12
Response
200 OK
ArtifactRecord (no content). Field schemas: Data model → ArtifactRecord.
Failure modes
| Status | When | Body |
|---|---|---|
| 401 | Missing / invalid bearer. | {"error": "..."} |
| 404 | Id doesn't exist or belongs to another tenant. | {"error": "artifact not found"} |
See also
GET/v1/artifacts/:aid/raw— content blob.GET/v1/conversations/:id/artifacts/:aid— same semantics, conversation-scoped path.