Stored credentials
The tokenization vault — cards a merchant has stored for reuse. Entries are minted at a hosted-page (HPP) establishing completion, not created directly; ISVs list, inspect, and revoke them, and charge a stored card by its opaque vault token (`stored_credential:read` / `:revoke` / `:charge`). The charge path is part of the stored-credential (MIT/COF) reuse program, which is gated on a pending gateway release — calls return `503` until it is enabled for the deployment.
404 (or 501) today; do not build against them yet. This spec is generated from the canonical contract — see the stable /api/v1 reference for production-ready endpoints.Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk__
<prefix>— 8 URL-safe chars, shown in UI and logs for identification without revealing the full key (e.g.csk_Ab3kX9mQ…). UseApiKey.prefixto match.<random>— 24+ cryptographically random URL-safe chars.
Obtain via Partner Portal → Settings → API keys. Keys are only shown in full at creation/rotation time — Cresora does not retain the full value in retrievable form. Rotate any key that may have been exposed via logs, client code, or source control.
In: header
Path Parameters
uuidQuery Parameters
Optional filter to one customer's stored credentials.
uuidOpaque pagination cursor from previous response. Do not parse.
length <= 256Items per page (1–100).
251 <= value <= 100Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/stored-credentials"{
"data": [
{
"id": "01885fec-3333-7a31-9bbb-3e5b9a1f8c42",
"vault_token": "cvt_01885fec-4444-7a31-9bbb-3e5b9a1f8c42",
"merchant_id": "01885fec-1111-7a31-9bbb-3e5b9a1f8c42",
"partner_id": "01885fec-2222-7a31-9bbb-3e5b9a1f8c42",
"customer_id": "01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42",
"processor": null,
"card": {
"brand": "Visa",
"last4": "4242",
"exp_month": 12,
"exp_year": 2030
},
"scope": [
"RECURRING"
],
"enrollment_terms": {
"amount": "49.99",
"frequency": "monthly",
"duration": "12 payments"
},
"consent_captured": true,
"state": "ACTIVE",
"created_at": "2026-07-17T14:03:00Z",
"version": 1
}
],
"pagination": {
"next_cursor": "eyJpZCI6IjAxSFhZWi4uLiJ9",
"has_more": true,
"total_count": 0
}
}{
"type": "https://docs.cresoracommerce.com/errors/invalid_api_key",
"title": "Unauthorized",
"status": 401,
"detail": "API key not recognized or revoked.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "invalid_api_key",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/permission_denied",
"title": "Forbidden",
"status": 403,
"detail": "API key lacks scope 'transactions.write' required for this endpoint.",
"instance": "urn:cresora:trace:0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5",
"code": "permission_denied",
"retryable": false,
"error_id": "0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/merchant_not_found",
"title": "Not Found",
"status": 404,
"detail": "Merchant 01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42 does not exist or is not accessible.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "merchant_not_found",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/rate_limit_exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "Too many requests. Retry after 60 seconds.",
"instance": "urn:cresora:trace:0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "rate_limit_exceeded",
"retryable": true,
"error_id": "0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/internal_error",
"title": "Internal Server Error",
"status": 500,
"detail": "An internal error occurred. Please retry; if the error persists, contact support with the error_id.",
"instance": "urn:cresora:trace:0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "internal_error",
"retryable": true,
"error_id": "0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5"
}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk__
<prefix>— 8 URL-safe chars, shown in UI and logs for identification without revealing the full key (e.g.csk_Ab3kX9mQ…). UseApiKey.prefixto match.<random>— 24+ cryptographically random URL-safe chars.
Obtain via Partner Portal → Settings → API keys. Keys are only shown in full at creation/rotation time — Cresora does not retain the full value in retrievable form. Rotate any key that may have been exposed via logs, client code, or source control.
In: header
Path Parameters
uuiduuidResponse Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/stored-credentials/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"id": "01885fec-3333-7a31-9bbb-3e5b9a1f8c42",
"vault_token": "cvt_01885fec-4444-7a31-9bbb-3e5b9a1f8c42",
"merchant_id": "01885fec-1111-7a31-9bbb-3e5b9a1f8c42",
"partner_id": "01885fec-2222-7a31-9bbb-3e5b9a1f8c42",
"customer_id": "01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42",
"processor": null,
"card": {
"brand": "Visa",
"last4": "4242",
"exp_month": 12,
"exp_year": 2030
},
"scope": [
"RECURRING"
],
"enrollment_terms": {
"amount": "49.99",
"frequency": "monthly",
"duration": "12 payments"
},
"consent_captured": true,
"state": "ACTIVE",
"created_at": "2026-07-17T14:03:00Z",
"version": 1
}{
"type": "https://docs.cresoracommerce.com/errors/invalid_api_key",
"title": "Unauthorized",
"status": 401,
"detail": "API key not recognized or revoked.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "invalid_api_key",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/permission_denied",
"title": "Forbidden",
"status": 403,
"detail": "API key lacks scope 'transactions.write' required for this endpoint.",
"instance": "urn:cresora:trace:0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5",
"code": "permission_denied",
"retryable": false,
"error_id": "0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/merchant_not_found",
"title": "Not Found",
"status": 404,
"detail": "Merchant 01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42 does not exist or is not accessible.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "merchant_not_found",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/rate_limit_exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "Too many requests. Retry after 60 seconds.",
"instance": "urn:cresora:trace:0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "rate_limit_exceeded",
"retryable": true,
"error_id": "0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/internal_error",
"title": "Internal Server Error",
"status": 500,
"detail": "An internal error occurred. Please retry; if the error persists, contact support with the error_id.",
"instance": "urn:cresora:trace:0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "internal_error",
"retryable": true,
"error_id": "0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5"
}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk__
<prefix>— 8 URL-safe chars, shown in UI and logs for identification without revealing the full key (e.g.csk_Ab3kX9mQ…). UseApiKey.prefixto match.<random>— 24+ cryptographically random URL-safe chars.
Obtain via Partner Portal → Settings → API keys. Keys are only shown in full at creation/rotation time — Cresora does not retain the full value in retrievable form. Rotate any key that may have been exposed via logs, client code, or source control.
In: header
Path Parameters
uuiduuidQuery Parameters
Optional free-text revocation reason (recorded in the audit trail).
length <= 500Response Body
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X DELETE "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/stored-credentials/497f6eca-6276-4993-bfeb-53cbbbba6f08"{
"type": "https://docs.cresoracommerce.com/errors/invalid_api_key",
"title": "Unauthorized",
"status": 401,
"detail": "API key not recognized or revoked.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "invalid_api_key",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/permission_denied",
"title": "Forbidden",
"status": 403,
"detail": "API key lacks scope 'transactions.write' required for this endpoint.",
"instance": "urn:cresora:trace:0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5",
"code": "permission_denied",
"retryable": false,
"error_id": "0191c8a2-9b7c-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/merchant_not_found",
"title": "Not Found",
"status": 404,
"detail": "Merchant 01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42 does not exist or is not accessible.",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "merchant_not_found",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/rate_limit_exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "Too many requests. Retry after 60 seconds.",
"instance": "urn:cresora:trace:0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "rate_limit_exceeded",
"retryable": true,
"error_id": "0191c8a2-dbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/internal_error",
"title": "Internal Server Error",
"status": 500,
"detail": "An internal error occurred. Please retry; if the error persists, contact support with the error_id.",
"instance": "urn:cresora:trace:0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "internal_error",
"retryable": true,
"error_id": "0191c8a2-fbcd-7a31-8c44-d8f1e2c3a4b5"
}