Skip to content
Registry StackDocsDevelopment (unreleased)

Reserve a document under a policy and receive its upload path.

POST
/v1/documents
curl --request POST \
--url https://example.com/v1/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--data '{ "custodian": { "subject": "example" }, "expectedDigest": "example", "issuingInstitution": "example", "label": "example", "length": 1, "mediaType": "example", "policyId": "example" }'
Idempotency-Key
required
string
>= 1 characters <= 128 characters /^[!-~]+$/

The caller’s key for this request. A retry with the same key and body answers the first outcome; another body under the key is refused.

Media typeapplication/json

The body of POST /v1/documents: reserve one document and the upload of its single version. Size and media type are refused here, before any byte moves.

object
custodian
required

Who holds the document in custody.

object
subject
required

An identifier another system issues, written exactly as its issuer gives it.

string
>= 1 characters <= 512 characters /^[^\u0000-\u001F\u007F-\u009F]+$/
expectedDigest
required

The digest the content must have, sha256: and 64 lowercase hex.

string
/^sha256:[0-9a-f]{64}$/
issuingInstitution

The issuing institution, when the caller repeats it. The institution recorded is always the caller’s access profile’s; a different value is refused.

string
>= 1 characters <= 512 characters /^[^\u0000-\u001F\u007F-\u009F]+$/
label

A display label the caller chooses. It is stored and returned as written and never used for an authorization decision.

string
>= 1 characters <= 256 characters /^[^\p{Cc}]+$/
length
required

The exact content length in bytes.

integer format: uint64
mediaType
required

The media type the content is declared as; the content PUT must send exactly this Content-Type.

string
policyId
required

The document policy the document is held under.

string

Example generated

{
"custodian": {
"subject": "example"
},
"expectedDigest": "example",
"issuingInstitution": "example",
"label": "example",
"length": 1,
"mediaType": "example",
"policyId": "example"
}

The operation succeeded.

Media typeapplication/json

The answer to a reservation: the document, its version, and where to send the content.

object
document
required

One document as its custodian reads it.

object
actions
required

What the reading caller may do to this document now, in vocabulary order.

Array<string>
Allowed values: download share revoke-share list-shares request-erasure
custodian
required

The custodian a reservation names: a subject at the configured token issuer.

object
subject
required

An identifier another system issues, written exactly as its issuer gives it.

string
>= 1 characters <= 512 characters /^[^\u0000-\u001F\u007F-\u009F]+$/
id
required
string
label

The label the reserving caller chose, as written. Untrusted.

string
policy
required

The policy a document version was reserved under, frozen at reservation: its id, its authored version, and the digest of its whole authored body.

object
digest
required

A SHA-256 digest: sha256: followed by 64 lowercase hex digits.

string
/^sha256:[0-9a-f]{64}$/
id
required

A local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.

string
/^[a-z][a-z0-9_-]{0,63}$/
version
required
string
version
required

One document version: its declared and verified content, and the one status a client acts on.

object
expectedDigest
required

A SHA-256 digest: sha256: followed by 64 lowercase hex digits.

string
/^sha256:[0-9a-f]{64}$/
finalizedAt
string
id
required
string
length
required
integer format: uint64
mediaType
required
string
reservedAt
required
string
status
required
One of:

Reserved, or the reservation lapsed: no content is stored.

string
Allowed value: awaiting-content
uploadExpiresAt
required

When the reservation lapses if no matching content arrived, RFC 3339.

string
uploadPath
required

The route the content is sent to with PUT.

string

Example

{
"document": {
"actions": [
"download"
],
"version": {
"status": "awaiting-content"
}
}
}
Location
required
string

The path of the created resource.

A problem: request.invalid.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: request.invalid

Example

{
"code": "request.invalid",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: authentication.refused.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: authentication.refused

Example

{
"code": "authentication.refused",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}
WWW-Authenticate
required
string
Allowed value: Bearer

The bearer challenge.

A problem: custody.not-permitted, profile.not-authorized.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: custody.not-permitted profile.not-authorized

Example

{
"code": "custody.not-permitted",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: request.method-not-allowed.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: request.method-not-allowed

Example

{
"code": "request.method-not-allowed",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: idempotency.key-reused.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: idempotency.key-reused

Example

{
"code": "idempotency.key-reused",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: idempotency.expired.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: idempotency.expired

Example

{
"code": "idempotency.expired",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: request.body-too-large.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: request.body-too-large

Example

{
"code": "request.body-too-large",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: request.unsupported-media-type.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: request.unsupported-media-type

Example

{
"code": "request.unsupported-media-type",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: custody.quota-exceeded, document-policy.unknown, document.content-type-not-allowed, document.too-large, request.unprocessable.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: custody.quota-exceeded document-policy.unknown document.content-type-not-allowed document.too-large request.unprocessable

Example

{
"code": "custody.quota-exceeded",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}

A problem: service.unavailable.

Media typeapplication/problem+json
object
code
required
string
Allowed values: authentication.refused custody.not-permitted custody.quota-exceeded document-grant.expiry-out-of-range document-policy.unknown document-version.not-releasable document.content-type-not-allowed document.too-large idempotency.expired idempotency.key-reused profile.not-authorized request.body-too-large request.invalid request.method-not-allowed request.not-found request.unprocessable request.unsupported-media-type resource.not-found service.unavailable upload.content-type-mismatch upload.digest-mismatch upload.expired upload.finalized upload.length-mismatch
detail
required
string
status
required
integer
title
required
string
traceId
required
string
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-documents/authentication/refused https://id.registrystack.org/problems/registry-documents/custody/not-permitted https://id.registrystack.org/problems/registry-documents/custody/quota-exceeded https://id.registrystack.org/problems/registry-documents/document-grant/expiry-out-of-range https://id.registrystack.org/problems/registry-documents/document-policy/unknown https://id.registrystack.org/problems/registry-documents/document-version/not-releasable https://id.registrystack.org/problems/registry-documents/document/content-type-not-allowed https://id.registrystack.org/problems/registry-documents/document/too-large https://id.registrystack.org/problems/registry-documents/idempotency/expired https://id.registrystack.org/problems/registry-documents/idempotency/key-reused https://id.registrystack.org/problems/registry-documents/profile/not-authorized https://id.registrystack.org/problems/registry-documents/request/body-too-large https://id.registrystack.org/problems/registry-documents/request/invalid https://id.registrystack.org/problems/registry-documents/request/method-not-allowed https://id.registrystack.org/problems/registry-documents/request/not-found https://id.registrystack.org/problems/registry-documents/request/unprocessable https://id.registrystack.org/problems/registry-documents/request/unsupported-media-type https://id.registrystack.org/problems/registry-documents/resource/not-found https://id.registrystack.org/problems/registry-documents/service/unavailable https://id.registrystack.org/problems/registry-documents/upload/content-type-mismatch https://id.registrystack.org/problems/registry-documents/upload/digest-mismatch https://id.registrystack.org/problems/registry-documents/upload/expired https://id.registrystack.org/problems/registry-documents/upload/finalized https://id.registrystack.org/problems/registry-documents/upload/length-mismatch
code
required
Allowed values: service.unavailable

Example

{
"code": "service.unavailable",
"type": "https://id.registrystack.org/problems/registry-documents/authentication/refused"
}
Retry-After
required
integer
>= 1

Whole seconds to wait before trying again.