Vault API

2026-10-22

Vault API

Vault stores write-only credentials through /vault/v1, with a compatibility face at /anthropic/v1/vaults. Concepts and behavior follow Anthropic vaults (credential collections, write-only values, rotation and archival), so Anthropic experience applies. Differences: native secrets use names and static/oauth kinds; native OAuth uses authorizations, while compatible mcp_oauth creation and updates return 501; explicit allowed_hosts are required, with no unrestricted mode; Agent sessions reject nonempty vault_ids, so vault-backed MCP authentication is unavailable; application vault references return 501, including praxis_vault_ref bindings and secret writes with a vault source. Metadata labels do not attach credentials to either resource. Start with praxis.vault.vaults.create to create the containing vault.

Use your API Key as a Bearer credential to manage vaults and secrets at the address below. Secret values are write-only; no endpoint returns them.

https://api.deepraxis.ai/vault/v1

Guide →

ResourcePath
Vaults/vault/v1/vaults
Secret/vault/v1/vaults/{vault_id}/secrets
Templates/vault/v1/templates
Authorizations/vault/v1/authorizations

Address a secret by its name or its vsec_ ID. Lists page with cursor and limit (default 50, at most 200); a null next_cursor means there is no next page.

The same vaults are also reachable through the Claude Managed Agents vaults API: Claude Managed Agents

Error codes

Vaults

Create and manage vaults, check availability, and read audit events without secret values.

Guide →

Base URL and authentication

Audit events are newest first. Filter by secret name or ID; an unknown secret returns an empty list. limit defaults to 50 and caps at 200; invalid limits or cursors return 400 INVALID_PARAMS. Events have no time-based expiry; archiving retains them, while deletion removes the resource's history and leaves a deletion record.

List vaults

GET /vault/v1/vaults

ParameterLocationDescription
cursorquerynext_cursor from the previous page.
limitqueryItems per page. (default: 50) (1–200)
include_archivedqueryInclude archived items. (default: false)

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
dataVault[]yesResult items
data[].idstringyesObject ID
data[].type"vault"yesObject type
data[].display_namestringyesDisplay name, 1–255 characters
data[].metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
data[].status"active" / "archived"yesCurrent status
data[].secret_countintegeryesActive secret count
data[].needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
data[].created_atdate-timeyesCreation time
data[].updated_atdate-timeyesLast update time
data[].archived_atdate-time / nullyesArchive time, or null
next_cursorstring / nullyesNext page cursor, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/vaults" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Create vault

POST /vault/v1/vaults

Request body

FieldType / enumRequiredDescription
display_namestringyesDisplay name, 1–255 characters
metadataobjectnoUp to 16 caller labels; keys at most 64 characters, values at most 512

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault"yesObject type
display_namestringyesDisplay name, 1–255 characters
metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
status"active" / "archived"yesCurrent status
secret_countintegeryesActive secret count
needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"display_name":"Agent credentials"}'

Check vaults

POST /vault/v1/vaults:check

Request body

FieldType / enumRequiredDescription
vault_idsstring[]yesVault IDs to check (at most 50)

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
dataobject[]yesResult items
data[].vault_idstringyesVault ID
data[].status"ok" / "not_found" / "archived"yesCurrent status

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults:check" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"vault_ids\":[\"${VAULT_ID}\"]}"

Get vault

GET /vault/v1/vaults/{vault_id}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault"yesObject type
display_namestringyesDisplay name, 1–255 characters
metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
status"active" / "archived"yesCurrent status
secret_countintegeryesActive secret count
needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Update vault

POST /vault/v1/vaults/{vault_id}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Request body

FieldType / enumRequiredDescription
display_namestringnoDisplay name, 1–255 characters
metadataobjectnoMerge by key: strings upsert, null deletes, omitted keys remain; up to 16 caller labels

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault"yesObject type
display_namestringyesDisplay name, 1–255 characters
metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
status"active" / "archived"yesCurrent status
secret_countintegeryesActive secret count
needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"metadata":{"team":"growth"}}'

Delete vault

DELETE /vault/v1/vaults/{vault_id}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_deleted"yesObject type

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
curl -X DELETE "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Archive vault

POST /vault/v1/vaults/{vault_id}/archive

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault"yesObject type
display_namestringyesDisplay name, 1–255 characters
metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
status"active" / "archived"yesCurrent status
secret_countintegeryesActive secret count
needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/archive" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

List events

GET /vault/v1/vaults/{vault_id}/events

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretqueryOnly events of this secret (name or vsec_ ID).
cursorquerynext_cursor from the previous page.
limitqueryItems per page. (default: 50) (1–200)

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
dataVaultEvent[]yesResult items
data[].iduuidyesObject ID
data[].type"vault.created" / "vault.updated" / "vault.archived" / "vault.deleted" / "vault_secret.created" / "vault_secret.updated" / "vault_secret.archived" / "vault_secret.deleted" / "vault_secret.used" / "vault_secret.refreshed" / "vault_secret.refresh_failed" / "vault_authorization.completed" / "vault_authorization.failed" / "vault_authorization.expired"yesObject type
data[].secret_idstring / nullyesAssociated secret ID, or null
data[].secret_namestring / nullyesAssociated secret name
data[].atdate-timeyesEvent or error time
data[].detailobject / nullyesEvent facts, never secret values; changed lists updated fields
data[].detail.changedstring[]noFields updated, such as value and allowed_hosts
next_cursorstring / nullyesNext page cursor, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/events" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Vault

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault"yesObject type
display_namestringyesDisplay name, 1–255 characters
metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
status"active" / "archived"yesCurrent status
secret_countintegeryesActive secret count
needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

VaultPage

FieldType / enumRequiredDescription
dataVault[]yesResult items
data[].idstringyesObject ID
data[].type"vault"yesObject type
data[].display_namestringyesDisplay name, 1–255 characters
data[].metadataobjectyesUp to 16 caller labels; keys at most 64 characters, values at most 512
data[].status"active" / "archived"yesCurrent status
data[].secret_countintegeryesActive secret count
data[].needs_reauthorization_countintegeryesOAuth secrets needing reauthorization after a failed refresh
data[].created_atdate-timeyesCreation time
data[].updated_atdate-timeyesLast update time
data[].archived_atdate-time / nullyesArchive time, or null
next_cursorstring / nullyesNext page cursor, or null

VaultEvent

FieldType / enumRequiredDescription
iduuidyesObject ID
type"vault.created" / "vault.updated" / "vault.archived" / "vault.deleted" / "vault_secret.created" / "vault_secret.updated" / "vault_secret.archived" / "vault_secret.deleted" / "vault_secret.used" / "vault_secret.refreshed" / "vault_secret.refresh_failed" / "vault_authorization.completed" / "vault_authorization.failed" / "vault_authorization.expired"yesObject type
secret_idstring / nullyesAssociated secret ID, or null
secret_namestring / nullyesAssociated secret name
atdate-timeyesEvent or error time
detailobject / nullyesEvent facts, never secret values; changed lists updated fields
detail.changedstring[]noFields updated, such as value and allowed_hosts

Secrets

Add, import and update write-only secrets; validation and refresh apply only to OAuth secrets.

Guide →

Base URL and authentication

Import replaces only the value of an existing name. Hosts change only from that line's own allowed_hosts, never from top-level defaults. New lines use their own hosts or the top-level defaults. Per-line failures appear in failed under HTTP 200 (including SECRET_TOO_LARGE, VAULT_LIMIT_EXCEEDED and INVALID_PARAMS); other lines are still written. Lookup by an invalid name returns 404 SECRET_NOT_FOUND.

List secrets

GET /vault/v1/vaults/{vault_id}/secrets

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
cursorquerynext_cursor from the previous page.
limitqueryItems per page. (default: 50) (1–200)
include_archivedqueryInclude archived items. (default: false)

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
dataSecret[]yesResult items
data[].idstringyesObject ID
data[].type"vault_secret"yesObject type
data[].vault_idstringyesVault ID
data[].namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
data[].kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
data[].allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
data[].descriptionstring / nullyesDescription; null clears it on update, omission preserves it
data[].metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
data[].status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
data[].oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
data[].oauth.expires_atdate-time / nullyesExpiry time, or null
data[].oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
data[].oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
data[].oauth.scopestring / nullyesGranted scope, or null
data[].oauth.last_errorobject / nullyesLast refresh failure, or null
data[].oauth.last_error.codestringyesStable error code
data[].oauth.last_error.messagestringyesHuman-readable error message
data[].oauth.last_error.atdate-timeyesEvent or error time
data[].versionintegeryesIncrements each time the value changes
data[].last_used_atdate-time / nullyesLast use time, or null
data[].created_atdate-timeyesCreation time
data[].updated_atdate-timeyesLast update time
data[].archived_atdate-time / nullyesArchive time, or null
next_cursorstring / nullyesNext page cursor, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Create secret

POST /vault/v1/vaults/{vault_id}/secrets

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Request body

FieldType / enumRequiredDescription
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
valuestringyesWrite-only secret value, at most 16 KiB
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullnoDescription; null clears it on update, omission preserves it
metadataobjectnoUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
template_id"github" / "openai" / "anthropic" / "stripe"noStatic template ID only; recorded as metadata.template
kind"static"noMust be static; create OAuth secrets through authorization

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
SECRET_CONFLICT409Name already exists on creation; rename or update the existing secretvalidation_failurenoneno
VAULT_LIMIT_EXCEEDED400Active-secret limit exceeded; remove unused secretsvalidation_failurenoneno
SECRET_TOO_LARGE413Value exceeds 16384 bytes; reduce its sizevalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"GITHUB_TOKEN","value":"ghp_example","allowed_hosts":["api.github.com"]}'

Import secrets

POST /vault/v1/vaults/{vault_id}/secrets:import

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.

Request body

FieldType / enumRequiredDescription
linesImportLine[]noImportLine entries
lines[].namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
lines[].valuestringyesWrite-only secret value, at most 16 KiB
lines[].allowed_hostsstring[]noNew entries use line hosts or import defaults; replacements change hosts only with explicit per-line allowed_hosts
dotenvstringnoKEY=VALUE lines; provide exactly one of dotenv or lines
allowed_hostsstring[]noNew entries use line hosts or import defaults; replacements change hosts only with explicit per-line allowed_hosts

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
createdstring[]yesCreated secret names
replacedstring[]yesReplaced secret names
failedobject[]yesFailed import lines
failed[].lineintegeryesFailed line number, starting at 1
failed[].namestring / nullyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
failed[].code"VAULT_NOT_FOUND" / "SECRET_NOT_FOUND" / "AUTHORIZATION_NOT_FOUND" / "SECRET_CONFLICT" / "VAULT_INVALID_STATE" / "VAULT_LIMIT_EXCEEDED" / "INVALID_PARAMS" / "SECRET_KIND_MISMATCH" / "VALIDATE_UNSUPPORTED" / "SECRET_TOO_LARGE" / "RATE_LIMITED" / "AUTHORIZATION_EXPIRED" / "OAUTH_DISCOVERY_FAILED" / "OAUTH_REGISTRATION_UNSUPPORTED" / "OAUTH_ISSUER_MISMATCH" / "OAUTH_STATE_INVALID" / "OAUTH_EXCHANGE_FAILED" / "NOT_IMPLEMENTED"yesStable error code
failed[].messagestringyesHuman-readable error message

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets:import" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dotenv":"OPENAI_API_KEY=sk-example\nLINEAR_API_KEY=lin_example","allowed_hosts":["api.openai.com","api.linear.app"]}'

Get secret

GET /vault/v1/vaults/{vault_id}/secrets/{secret}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/GITHUB_TOKEN" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Update secret

POST /vault/v1/vaults/{vault_id}/secrets/{secret}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Request body

FieldType / enumRequiredDescription
valuestringnoWrite-only secret value, at most 16 KiB
allowed_hostsstring[]no1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullnoDescription; null clears it on update, omission preserves it
metadataobjectnoMerge by key: strings upsert, null deletes, omitted keys remain; source and template are reserved

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
SECRET_TOO_LARGE413Value exceeds 16384 bytes; reduce its sizevalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/GITHUB_TOKEN" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":"ghp_rotated"}'

Delete secret

DELETE /vault/v1/vaults/{vault_id}/secrets/{secret}

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret_deleted"yesObject type

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
curl -X DELETE "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/GITHUB_TOKEN" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Archive secret

POST /vault/v1/vaults/{vault_id}/secrets/{secret}/archive

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/GITHUB_TOKEN/archive" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Validate secret

POST /vault/v1/vaults/{vault_id}/secrets/{secret}/validate

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
type"vault_secret_validation"yesObject type
secret_idstringyesAssociated secret ID, or null
vault_idstringyesVault ID
validated_atdate-timeyesValidation time
has_refresh_tokenbooleanyesWhether a refresh token is stored
status"valid" / "invalid" / "unknown"yesCurrent status
probeobjectyesResource probe
probe.method"GET"yesProbe method, currently GET
probe.http_responseHttpCapture / nullyesHTTP response summary, or null when no response was received
probe.http_response.status_codeintegeryesHTTP status code
probe.http_response.content_typestring / nullyesResponse content type, or null
probe.http_response.bodystringyesRedacted response body
probe.http_response.body_truncatedbooleanyesWhether the body was truncated
refreshobjectyesRefresh attempt
refresh.status"succeeded" / "failed" / "connect_error" / "no_refresh_token" / "skipped"yesCurrent status
refresh.http_responseHttpCapture / nullyesHTTP response summary, or null when no response was received
refresh.http_response.status_codeintegeryesHTTP status code
refresh.http_response.content_typestring / nullyesResponse content type, or null
refresh.http_response.bodystringyesRedacted response body
refresh.http_response.body_truncatedbooleanyesWhether the body was truncated

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
VALIDATE_UNSUPPORTED400Validating a static secret; only OAuth secrets support validationvalidation_failurenoneno
RATE_LIMITED429Authorization or validation minute quota exceeded; wait for the next windowrate_limitwait_then_retryyes

OAuth secrets only. Complete authorization and set OAUTH_SECRET_ID to its secret_id before running this example; do not use a static secret.

curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/${OAUTH_SECRET_ID}/validate" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Refresh secret

POST /vault/v1/vaults/{vault_id}/secrets/{secret}/refresh

ParameterLocationDescription
vault_idpathID of the vault in your account, returned when the vault is created.
secretpathSecret name, or its vsec_ ID.

Request body

FieldType / enumRequiredDescription
reason"unauthorized"nounauthorized: the resource returned HTTP 401

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
SECRET_KIND_MISMATCH400Refreshing a static secret or another kind mismatch; use an OAuth secretvalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno

OAuth secrets only. Complete authorization and set OAUTH_SECRET_ID to its secret_id before running this example; do not use a static secret.

curl -X POST "https://api.deepraxis.ai/vault/v1/vaults/${VAULT_ID}/secrets/${OAUTH_SECRET_ID}/refresh" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason":"unauthorized"}'

Secret

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_secret"yesObject type
vault_idstringyesVault ID
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
descriptionstring / nullyesDescription; null clears it on update, omission preserves it
metadataobjectyesUp to 16 caller labels. System keys source and template are reserved and excluded from that limit
status"active" / "refreshing" / "refresh_failed" / "archived"yesCurrent status
oauthSecretOAuthSummary / nullyesOAuth summary; null for static secrets
oauth.expires_atdate-time / nullyesExpiry time, or null
oauth.last_refreshed_atdate-time / nullyesLast refresh time, or null
oauth.next_refresh_atdate-time / nullyesNext scheduled refresh, or null
oauth.scopestring / nullyesGranted scope, or null
oauth.last_errorobject / nullyesLast refresh failure, or null
oauth.last_error.codestringyesStable error code
oauth.last_error.messagestringyesHuman-readable error message
oauth.last_error.atdate-timeyesEvent or error time
versionintegeryesIncrements each time the value changes
last_used_atdate-time / nullyesLast use time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time
archived_atdate-time / nullyesArchive time, or null

SecretOAuthSummary

FieldType / enumRequiredDescription
expires_atdate-time / nullyesExpiry time, or null
last_refreshed_atdate-time / nullyesLast refresh time, or null
next_refresh_atdate-time / nullyesNext scheduled refresh, or null
scopestring / nullyesGranted scope, or null
last_errorobject / nullyesLast refresh failure, or null
last_error.codestringyesStable error code
last_error.messagestringyesHuman-readable error message
last_error.atdate-timeyesEvent or error time

ImportLine

FieldType / enumRequiredDescription
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
valuestringyesWrite-only secret value, at most 16 KiB
allowed_hostsstring[]noNew entries use line hosts or import defaults; replacements change hosts only with explicit per-line allowed_hosts

ImportResult

FieldType / enumRequiredDescription
createdstring[]yesCreated secret names
replacedstring[]yesReplaced secret names
failedobject[]yesFailed import lines
failed[].lineintegeryesFailed line number, starting at 1
failed[].namestring / nullyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
failed[].code"VAULT_NOT_FOUND" / "SECRET_NOT_FOUND" / "AUTHORIZATION_NOT_FOUND" / "SECRET_CONFLICT" / "VAULT_INVALID_STATE" / "VAULT_LIMIT_EXCEEDED" / "INVALID_PARAMS" / "SECRET_KIND_MISMATCH" / "VALIDATE_UNSUPPORTED" / "SECRET_TOO_LARGE" / "RATE_LIMITED" / "AUTHORIZATION_EXPIRED" / "OAUTH_DISCOVERY_FAILED" / "OAUTH_REGISTRATION_UNSUPPORTED" / "OAUTH_ISSUER_MISMATCH" / "OAUTH_STATE_INVALID" / "OAUTH_EXCHANGE_FAILED" / "NOT_IMPLEMENTED"yesStable error code
failed[].messagestringyesHuman-readable error message

SecretValidation

FieldType / enumRequiredDescription
type"vault_secret_validation"yesObject type
secret_idstringyesAssociated secret ID, or null
vault_idstringyesVault ID
validated_atdate-timeyesValidation time
has_refresh_tokenbooleanyesWhether a refresh token is stored
status"valid" / "invalid" / "unknown"yesCurrent status
probeobjectyesResource probe
probe.method"GET"yesProbe method, currently GET
probe.http_responseHttpCapture / nullyesHTTP response summary, or null when no response was received
probe.http_response.status_codeintegeryesHTTP status code
probe.http_response.content_typestring / nullyesResponse content type, or null
probe.http_response.bodystringyesRedacted response body
probe.http_response.body_truncatedbooleanyesWhether the body was truncated
refreshobjectyesRefresh attempt
refresh.status"succeeded" / "failed" / "connect_error" / "no_refresh_token" / "skipped"yesCurrent status
refresh.http_responseHttpCapture / nullyesHTTP response summary, or null when no response was received
refresh.http_response.status_codeintegeryesHTTP status code
refresh.http_response.content_typestring / nullyesResponse content type, or null
refresh.http_response.bodystringyesRedacted response body
refresh.http_response.body_truncatedbooleanyesWhether the body was truncated

HttpCapture

FieldType / enumRequiredDescription
status_codeintegeryesHTTP status code
content_typestring / nullyesResponse content type, or null
bodystringyesRedacted response body
body_truncatedbooleanyesWhether the body was truncated

Templates

Find template IDs, secret names, kinds and allowed hosts for common services.

Guide →

Base URL and authentication

template_idkindService
githubstaticGitHub (api.github.com, uploads.github.com)
openaistaticOpenAI
anthropicstaticAnthropic
stripestaticStripe
linearoauthLinear (CIMD)
atlassianoauthAtlassian (DCR)

List templates

GET /vault/v1/templates

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
dataVaultTemplate[]yesResult items
data[].idstringyesObject ID
data[].display_namestringyesDisplay name, 1–255 characters
data[].kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
data[].namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
data[].allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
data[].value_hintstring / nullyesSuggested value format, or null

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED. No additional domain errors.

curl "https://api.deepraxis.ai/vault/v1/templates" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

VaultTemplate

FieldType / enumRequiredDescription
idstringyesObject ID
display_namestringyesDisplay name, 1–255 characters
kind"static" / "oauth"yesstatic: supplied value; oauth: authorized and refreshed by the platform
namestringyesSecret name: 1–128 uppercase letters, digits or underscores; starts with a letter or underscore
allowed_hostsstring[]yes1–16 hosts, public IPv4 addresses or *.example.com (excluding the apex). Rejects IPv6, single-label hosts, localhost, *.internal, platform domains and loopback/link-local/private/CGNAT IPv4; normalized and deduplicated
value_hintstring / nullyesSuggested value format, or null

Authorizations

Authorize third-party services and manage one-time links and return URLs.

Guide →

Base URL and authentication

Authorization produces a secret of kind oauth for services that support OAuth. Create an authorization and give connect_url to the end user; once they approve on the confirmation page and on the service, the secret is written to the vault and the platform keeps it refreshed. The confirmation page, the callback and the client metadata need no API Key.

Create authorization

POST /vault/v1/authorizations

Request body

FieldType / enumRequiredDescription
vault_idstringyesVault ID
template_id"linear" / "atlassian"noOAuth template ID; provide exactly one of template_id or resource_url
resource_urlstringnoResource URL to authorize
return_urlstringnoReturn URL; must be on the account allowlist

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_authorization"yesObject type
vault_idstringyesVault ID
status"pending" / "authorizing" / "completed" / "failed" / "expired"yesCurrent status
resourcestringyesAuthorized resource URL
secret_namestringyesAssociated secret name
connect_urlstringyesOne-time confirmation page, valid for 30 minutes
client_registration"cimd" / "dcr" / nullyescimd: Client ID Metadata Document; dcr: Dynamic Client Registration; null before registration
secret_idstring / nullyesAssociated secret ID, or null
errorobject / nullyesFailure details, or null
error.codestringyesStable error code
error.messagestringyesHuman-readable error message
expires_atdate-timeyesExpiry time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
RATE_LIMITED429Authorization or validation minute quota exceeded; wait for the next windowrate_limitwait_then_retryyes
OAUTH_DISCOVERY_FAILED400OAuth metadata discovery failed; check the resource URLvalidation_failurecontinue_from_problemno
OAUTH_REGISTRATION_UNSUPPORTED400Provider does not accept automatic client registration; add credentials manuallyvalidation_failurecontinue_from_problemno
OAUTH_ISSUER_MISMATCH400Authorization issuer differs from the expected issuer; check the service URLprovider_upstreamretry_from_userno
curl -X POST "https://api.deepraxis.ai/vault/v1/authorizations" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"vault_id\":\"${VAULT_ID}\",\"template_id\":\"linear\"}"

Get authorization

GET /vault/v1/authorizations/{authorization_id}

ParameterLocationDescription
authorization_idpathID of the authorization in your account, returned when authorization is created.

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_authorization"yesObject type
vault_idstringyesVault ID
status"pending" / "authorizing" / "completed" / "failed" / "expired"yesCurrent status
resourcestringyesAuthorized resource URL
secret_namestringyesAssociated secret name
connect_urlstringyesOne-time confirmation page, valid for 30 minutes
client_registration"cimd" / "dcr" / nullyescimd: Client ID Metadata Document; dcr: Dynamic Client Registration; null before registration
secret_idstring / nullyesAssociated secret ID, or null
errorobject / nullyesFailure details, or null
error.codestringyesStable error code
error.messagestringyesHuman-readable error message
expires_atdate-timeyesExpiry time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
AUTHORIZATION_NOT_FOUND404Authorization or connect link absent; start authorization againvalidation_failurenoneno
curl "https://api.deepraxis.ai/vault/v1/authorizations/${AUTHORIZATION_ID}" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Get return URLs

GET /vault/v1/settings/return_urls

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
urlsstring[]yesAt most 10 HTTPS URLs, matched exactly

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED. No additional domain errors.

curl "https://api.deepraxis.ai/vault/v1/settings/return_urls" \
  -H "Authorization: Bearer $PRAXIS_API_KEY"

Set return URLs

PUT /vault/v1/settings/return_urls

Request body

FieldType / enumRequiredDescription
urlsstring[]yesAt most 10 HTTPS URLs, matched exactly

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
urlsstring[]yesAt most 10 HTTPS URLs, matched exactly

Error responses

A missing or invalid API Key returns 401 UNAUTHENTICATED.

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
curl -X PUT "https://api.deepraxis.ai/vault/v1/settings/return_urls" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://app.example.com/connected"]}'

Authorization callback

GET /vault/v1/authorizations/callback · No API Key

ParameterLocationDescription
codequeryAuthorization code from the provider
statequerySingle-use authorization state
errorqueryProvider denial code
issqueryAuthorization server issuer

Response

HTTP 200

text/html

Confirmation or result page displayed by the browser.

HTTP 302

The Location header redirects to the provider or an allowed return URL.

Error responses

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
OAUTH_STATE_INVALID400Callback state missing, invalid or replayed; start authorization againvalidation_failurenoneno
OAUTH_ISSUER_MISMATCH400Authorization issuer differs from the expected issuer; check the service URLprovider_upstreamretry_from_userno
OAUTH_EXCHANGE_FAILED502Provider rejected the authorization-code exchange; authorize againprovider_upstreamretry_from_userno
AUTHORIZATION_EXPIRED410Authorization link expired after 30 minutes or was consumed; start againvalidation_failureretry_from_userno

Returns 302 when return_url is set; otherwise returns an HTTP 200 result page.

curl "https://api.deepraxis.ai/vault/v1/authorizations/callback"

OAuth client metadata

GET /vault/v1/oauth/client.json · No API Key

Response

HTTP 200

application/json

FieldType / enumRequiredDescription
client_idstringyesClient metadata URL
client_namestringyesClient display name
redirect_urisstring[]yesAllowed OAuth callback URLs
token_endpoint_auth_method"none"yesToken endpoint authentication method
grant_types"authorization_code" / "refresh_token"[]noSupported grant types
response_types"code"[]noSupported authorization response types

Error responses

No additional domain errors.

curl "https://api.deepraxis.ai/vault/v1/oauth/client.json"

Connect page

GET /vault/v1/connect/{token} · No API Key

ParameterLocationDescription
tokenpathOne-time token from connect_url.

Response

HTTP 200

text/html

Confirmation or result page displayed by the browser.

HTTP 410

text/html

Confirmation or result page displayed by the browser.

Error responses

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
AUTHORIZATION_NOT_FOUND404Authorization or connect link absent; start authorization againvalidation_failurenoneno
AUTHORIZATION_EXPIRED410Authorization link expired after 30 minutes or was consumed; start againvalidation_failureretry_from_userno

Invalid links return 404; expired or consumed links return 410, as HTML pages.

curl "https://api.deepraxis.ai/vault/v1/connect/${TOKEN}"

Continue authorization

POST /vault/v1/connect/{token}/continue · No API Key

ParameterLocationDescription
tokenpathOne-time token from connect_url.

Response

HTTP 302

The Location header redirects to the provider or an allowed return URL.

Error responses

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
AUTHORIZATION_NOT_FOUND404Authorization or connect link absent; start authorization againvalidation_failurenoneno
AUTHORIZATION_EXPIRED410Authorization link expired after 30 minutes or was consumed; start againvalidation_failureretry_from_userno
OAUTH_DISCOVERY_FAILED400OAuth metadata discovery failed; check the resource URLvalidation_failurecontinue_from_problemno
curl -X POST "https://api.deepraxis.ai/vault/v1/connect/${TOKEN}/continue"

Deny authorization

POST /vault/v1/connect/{token}/deny · No API Key

ParameterLocationDescription
tokenpathOne-time token from connect_url.

Response

HTTP 200

text/html

Confirmation or result page displayed by the browser.

HTTP 302

The Location header redirects to the provider or an allowed return URL.

Error responses

CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
AUTHORIZATION_NOT_FOUND404Authorization or connect link absent; start authorization againvalidation_failurenoneno
AUTHORIZATION_EXPIRED410Authorization link expired after 30 minutes or was consumed; start againvalidation_failureretry_from_userno

Returns 302 when return_url is set; otherwise returns an HTTP 200 result page.

curl -X POST "https://api.deepraxis.ai/vault/v1/connect/${TOKEN}/deny"

Authorization

FieldType / enumRequiredDescription
idstringyesObject ID
type"vault_authorization"yesObject type
vault_idstringyesVault ID
status"pending" / "authorizing" / "completed" / "failed" / "expired"yesCurrent status
resourcestringyesAuthorized resource URL
secret_namestringyesAssociated secret name
connect_urlstringyesOne-time confirmation page, valid for 30 minutes
client_registration"cimd" / "dcr" / nullyescimd: Client ID Metadata Document; dcr: Dynamic Client Registration; null before registration
secret_idstring / nullyesAssociated secret ID, or null
errorobject / nullyesFailure details, or null
error.codestringyesStable error code
error.messagestringyesHuman-readable error message
expires_atdate-timeyesExpiry time, or null
created_atdate-timeyesCreation time
updated_atdate-timeyesLast update time

ReturnUrls

FieldType / enumRequiredDescription
urlsstring[]yesAt most 10 HTTPS URLs, matched exactly

Error codes

Every error response has the shape below; code is the stable error code and message is for people.

{
  "request_id": "req_example",
  "error": {
    "code": "SECRET_CONFLICT",
    "message": "A secret named GITHUB_TOKEN already exists",
    "kind": "validation_failure",
    "recovery": "none",
    "retryable": false
  }
}

Error bodies include request_id for tracing. Compatibility endpoints use the following shape; 409 maps to conflict_error, and non-retryable errors carry x-should-retry: false.

{
  "type": "error",
  "error": {
    "type": "conflict_error",
    "message": "A credential with this name already exists"
  },
  "request_id": "req_example"
}
CodeHTTPMeaning, trigger and actionkindrecoveryRetryable
VAULT_NOT_FOUND404Vault absent or outside this account; check the vault IDvalidation_failurenoneno
SECRET_NOT_FOUND404Secret absent, including lookup by an invalid name; check name or IDvalidation_failurenoneno
AUTHORIZATION_NOT_FOUND404Authorization or connect link absent; start authorization againvalidation_failurenoneno
SECRET_CONFLICT409Name already exists on creation; rename or update the existing secretvalidation_failurenoneno
VAULT_INVALID_STATE409Writing to an archived vault or secret; use an active resourcevalidation_failurenoneno
VAULT_LIMIT_EXCEEDED400Active-secret limit exceeded; remove unused secretsvalidation_failurenoneno
INVALID_PARAMS400Invalid fields, names, hosts, metadata, pagination or return URL; correct the requestvalidation_failurenoneno
SECRET_KIND_MISMATCH400Refreshing a static secret or another kind mismatch; use an OAuth secretvalidation_failurenoneno
VALIDATE_UNSUPPORTED400Validating a static secret; only OAuth secrets support validationvalidation_failurenoneno
SECRET_TOO_LARGE413Value exceeds 16384 bytes; reduce its sizevalidation_failurenoneno
RATE_LIMITED429Authorization or validation minute quota exceeded; wait for the next windowrate_limitwait_then_retryyes
AUTHORIZATION_EXPIRED410Authorization link expired after 30 minutes or was consumed; start againvalidation_failureretry_from_userno
OAUTH_DISCOVERY_FAILED400OAuth metadata discovery failed; check the resource URLvalidation_failurecontinue_from_problemno
OAUTH_REGISTRATION_UNSUPPORTED400Provider does not accept automatic client registration; add credentials manuallyvalidation_failurecontinue_from_problemno
OAUTH_ISSUER_MISMATCH400Authorization issuer differs from the expected issuer; check the service URLprovider_upstreamretry_from_userno
OAUTH_STATE_INVALID400Callback state missing, invalid or replayed; start authorization againvalidation_failurenoneno
OAUTH_EXCHANGE_FAILED502Provider rejected the authorization-code exchange; authorize againprovider_upstreamretry_from_userno
NOT_IMPLEMENTED501Capability unavailable; use a documented alternativeexecution_failednoneno