recipes
Enabled customer-safe recipe capabilities and supported media.
| Method | Path | Operation ID |
|---|---|---|
| GET | /v1/capabilities |
getCapabilities |
| GET | /v1/image-profiles |
listImageProfiles |
| GET | /v1/recipes |
listRecipes |
| GET | /v1/recipes/{recipe_id} |
getRecipe |
GET /v1/capabilities
Section titled “GET /v1/capabilities”Operation ID: getCapabilities
Read privacy-safe configured and currently available runtime capabilities.
Returns the current reviewed media, upload, recipe, capture-readiness, and public contract facts. Live availability is reported separately from configuration; storage coordinates, provider identities, signing material, and internal topology are excluded.
Authentication: Authorization: Bearer <API key or console session> (Authentication).
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json CapabilityDiscoveryResponse |
| 401 | The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. | application/json HttpErrorResponse |
| 403 | The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. |
application/json HttpErrorResponse or ErrorResponse |
| 409 | Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. | application/json HttpErrorResponse |
| 422 | A verified email is unavailable for account provisioning. | application/json HttpErrorResponse |
| 429 | The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. |
application/json ErrorResponse |
| 503 | Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. | application/json HttpErrorResponse |
200 response fields
Section titled “200 response fields”| Field | Type | Required | Description |
|---|---|---|---|
capture |
CaptureCapabilityResponse | yes | |
contract |
ContractCapabilityResponse | yes | |
media |
array of MediaCapabilityResponse | yes | |
recipes |
array of ReviewedRecipeAvailabilityResponse | yes | |
schema_version |
const “op.capability-discovery.v1” | yes |
GET /v1/image-profiles
Section titled “GET /v1/image-profiles”Operation ID: listImageProfiles
List every reviewed image profile with its accepted capability, planned envelope, limits, and availability.
Returns every reviewed image profile, available or not, with its accepted capability separated from its planned envelope. Profiles that are reviewed and deliberately not executable are listed with a reason rather than hidden, so a client can distinguish a format we have not assessed from one we assessed and cannot ship. accepted_* is the only field that describes what works today.
Authentication: Authorization: Bearer <API key or console session> (Authentication).
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json ImageProfileListResponse |
| 401 | The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. | application/json HttpErrorResponse |
| 403 | The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. |
application/json HttpErrorResponse or ErrorResponse |
| 409 | Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. | application/json HttpErrorResponse |
| 422 | A verified email is unavailable for account provisioning. | application/json HttpErrorResponse |
| 429 | The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. |
application/json ErrorResponse |
| 503 | Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. | application/json HttpErrorResponse |
200 response fields
Section titled “200 response fields”| Field | Type | Required | Description |
|---|---|---|---|
profiles |
array of ImageProfileResponse | yes |
GET /v1/recipes
Section titled “GET /v1/recipes”Operation ID: listRecipes
List the enabled reviewed recipes, with display names, and their media formats.
Returns only currently enabled recipe identifiers, display names and summaries, immutable versions, ordered public capabilities, and supported media types. Provider identities, algorithms, configuration, and recipe DAG internals are intentionally excluded.
Authentication: Authorization: Bearer <API key or console session> (Authentication).
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json RecipeListResponse |
| 401 | The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. | application/json HttpErrorResponse |
| 403 | The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. |
application/json HttpErrorResponse or ErrorResponse |
| 409 | Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. | application/json HttpErrorResponse |
| 422 | A verified email is unavailable for account provisioning. | application/json HttpErrorResponse |
| 429 | The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. |
application/json ErrorResponse |
| 503 | Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. | application/json HttpErrorResponse |
200 response fields
Section titled “200 response fields”| Field | Type | Required | Description |
|---|---|---|---|
recipes |
array of RecipeResponse | yes |
GET /v1/recipes/{recipe_id}
Section titled “GET /v1/recipes/{recipe_id}”Operation ID: getRecipe
Read one exact active version from the approved immutable recipe catalog.
Authentication: Authorization: Bearer <API key or console session> (Authentication).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
recipe_id |
path | string | yes | Pattern: ^rcp_[a-z0-9_]{3,64}$. |
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json RecipeCatalogResponse |
| 401 | The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. | application/json HttpErrorResponse |
| 403 | The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. |
application/json HttpErrorResponse or ErrorResponse |
| 404 | Not Found | application/json ErrorResponse |
| 409 | Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. | application/json HttpErrorResponse |
| 422 | A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. | application/json HttpErrorResponse or ErrorResponse |
| 429 | The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. |
application/json ErrorResponse |
| 503 | Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. | application/json HttpErrorResponse or ErrorResponse |
200 response fields
Section titled “200 response fields”| Field | Type | Required | Description |
|---|---|---|---|
available |
boolean | yes | |
catalog_version |
const “op.recipe-catalog.v1” | no | Default "op.recipe-catalog.v1". |
definition_sha256 |
string | yes | Pattern: ^[0-9a-f]{64}$. |
kind |
RecipeCatalogKind | yes | One of: sign_only, watermark_only, watermark_then_sign. |
name |
string | yes | Max length 200. |
recipe_id |
string | yes | Pattern: ^rcp_[a-z0-9_]{3,64}$. |
recipe_url |
string | yes | Pattern: ^/v1/recipes/rcp_[a-z0-9_]{3,64}$. |
required_capabilities |
array of string | yes | |
required_steps |
array of string | yes | |
schema_version |
string | yes | Pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]*$. Max length 100. |
supported_media_types |
array of enum | yes | |
unavailable_reason |
RecipeUnavailableReason or null | yes | |
version |
integer | yes | Minimum 1. |
