Partners
Partner self-service reads. The `/partner/me` endpoint returns the partner record bound to the authenticated caller's API key — useful for portal "who am I" displays and federated-identity contracts. Admin cross-tenant partner lookups (`GET /iam/partners` and `GET /iam/partners/{id}`) live in the admin-only surface — partners cannot use those paths.
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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/me"{
"id": "01960a7b-fb67-7e07-87a6-0e8b3445ed88",
"name": "Acme ISV",
"contact_email": "ops@acme.test",
"contact_name": "Ada Lovelace",
"partner_type": "ISV",
"state": "CERTIFIED",
"commercial_model": "RESELLER",
"rate_limit_tier": "STANDARD",
"assigned_csm_name": null,
"assigned_csm_email": null,
"created_at": "2026-03-15T14:22:11Z",
"version": 3
}{
"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"
}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
Header Parameters
Client-generated unique key — a UUIDv4 is the recommended form. Cresora deduplicates within a 24-hour window scoped to the partner.
Format: 1–128 characters of letters, digits, . _ : -. Anything else is rejected with 400 validation_error. The character
set is narrower than base64: padded base64 (+ / =) is NOT
accepted, base64url is. The key is forwarded verbatim to the payment
gateway on transaction creates, so it must satisfy the gateway's key
contract too — rejecting locally gives you an actionable error instead
of an opaque upstream failure mid-request.
Reserved prefixes — rejected with 400 idempotency_key_reserved:
hpp:,recurring:— Cresora's own server-minted deterministic keys. A client key in these namespaces could collide with a platform-generated record.rb:,inv-charge:,inv-installment:— reserved by the payment gateway for its internally-minted keys.
Replay semantics:
- Same key + same request body → Cresora returns the cached
response from the original call. Response includes header
Idempotency-Replay: trueso the client can distinguish replays from fresh executions. Status code, body and side effects are identical to the original call. - Same key + different body →
409 idempotency_key_conflict. Generate a new key and retry. - Key older than 24 hours → treated as a fresh key; no replay guarantee from beyond the window.
Retrying after an indeterminate failure. On 502 gateway_outcome_unknown the transaction is recorded as pending and
the outcome is not yet known — retry with the SAME key (a fresh key
risks a double charge) or poll the transaction. This is also what a
gateway-side "an earlier request with this key is still in flight"
response surfaces as.
Do NOT reuse keys across different partners. Scope is enforced
per partner_id so the same key in partner A and partner B
is independent.
^[A-Za-z0-9._:\-]+$1 <= length <= 128Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/partner/me/certification/prepare" \ -H "Idempotency-Key: 7f3e2a9c-b4c1-4e25-9ab3-d8f1e2c3a4b5"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06",
"status": "ACTIVE",
"features": [
"TERMINAL"
],
"created_at": "2019-08-24T14:15:22Z",
"completed_at": "2019-08-24T14:15:22Z",
"run_started_at": "2019-08-24T14:15:22Z",
"progress": {
"total": 0,
"passed": 0,
"failed": 0,
"waived": 0,
"skipped": 0,
"pending": 0,
"awaiting_admin_review": 0,
"percent": 0,
"steps": [
{
"step": 1,
"label": "string",
"total": 0,
"resolved": 0,
"failed": 0,
"awaiting_admin_review": 0,
"unlocked": true,
"complete": true
}
]
},
"checks": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"category": "string",
"label": "string",
"tier": "AUTOMATED",
"state": "PENDING",
"check_code": "string",
"tier_level": 1,
"step": 1,
"flag_group": "string",
"flag_group_label": "string",
"description": "string",
"pass_criteria": "string",
"attestation_statement": "string",
"result_notes": "string",
"waiver_reason": "string",
"submitted_by": "string",
"submitted_at": "2019-08-24T14:15:22Z",
"submittable": true,
"checked_by": "string",
"checked_at": "2019-08-24T14:15:22Z",
"last_run_at": "2019-08-24T14:15:22Z",
"failure_reason": "string",
"execution_logs": "string",
"request_payload": "string",
"retry_history": [
{
"attempt": 1,
"trigger": "RUN_START",
"verdict": "SATISFIED",
"resulting_state": "PENDING",
"failure_reason": "string",
"execution_logs": "string",
"evaluated_at": "2019-08-24T14:15:22Z",
"duration_ms": 0
}
]
}
]
}{
"type": "https://docs.cresoracommerce.com/errors/idempotency_key_required",
"title": "Bad Request",
"status": 400,
"detail": "Idempotency-Key header is required on write operations",
"instance": "urn:cresora:trace:0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "idempotency_key_required",
"retryable": false,
"error_id": "0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"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/idempotency_key_conflict",
"title": "Conflict",
"status": 409,
"detail": "Idempotency-Key was used 5 minutes ago with a different request body.",
"instance": "urn:cresora:trace:0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "idempotency_key_conflict",
"retryable": false,
"error_id": "0191c8a2-cbcd-7a31-8c44-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
Header Parameters
Client-generated unique key — a UUIDv4 is the recommended form. Cresora deduplicates within a 24-hour window scoped to the partner.
Format: 1–128 characters of letters, digits, . _ : -. Anything else is rejected with 400 validation_error. The character
set is narrower than base64: padded base64 (+ / =) is NOT
accepted, base64url is. The key is forwarded verbatim to the payment
gateway on transaction creates, so it must satisfy the gateway's key
contract too — rejecting locally gives you an actionable error instead
of an opaque upstream failure mid-request.
Reserved prefixes — rejected with 400 idempotency_key_reserved:
hpp:,recurring:— Cresora's own server-minted deterministic keys. A client key in these namespaces could collide with a platform-generated record.rb:,inv-charge:,inv-installment:— reserved by the payment gateway for its internally-minted keys.
Replay semantics:
- Same key + same request body → Cresora returns the cached
response from the original call. Response includes header
Idempotency-Replay: trueso the client can distinguish replays from fresh executions. Status code, body and side effects are identical to the original call. - Same key + different body →
409 idempotency_key_conflict. Generate a new key and retry. - Key older than 24 hours → treated as a fresh key; no replay guarantee from beyond the window.
Retrying after an indeterminate failure. On 502 gateway_outcome_unknown the transaction is recorded as pending and
the outcome is not yet known — retry with the SAME key (a fresh key
risks a double charge) or poll the transaction. This is also what a
gateway-side "an earlier request with this key is still in flight"
response surfaces as.
Do NOT reuse keys across different partners. Scope is enforced
per partner_id so the same key in partner A and partner B
is independent.
^[A-Za-z0-9._:\-]+$1 <= length <= 128Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/partner/me/certification/start" \ -H "Idempotency-Key: 7f3e2a9c-b4c1-4e25-9ab3-d8f1e2c3a4b5"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06",
"status": "ACTIVE",
"features": [
"TERMINAL"
],
"created_at": "2019-08-24T14:15:22Z",
"completed_at": "2019-08-24T14:15:22Z",
"run_started_at": "2019-08-24T14:15:22Z",
"progress": {
"total": 0,
"passed": 0,
"failed": 0,
"waived": 0,
"skipped": 0,
"pending": 0,
"awaiting_admin_review": 0,
"percent": 0,
"steps": [
{
"step": 1,
"label": "string",
"total": 0,
"resolved": 0,
"failed": 0,
"awaiting_admin_review": 0,
"unlocked": true,
"complete": true
}
]
},
"checks": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"category": "string",
"label": "string",
"tier": "AUTOMATED",
"state": "PENDING",
"check_code": "string",
"tier_level": 1,
"step": 1,
"flag_group": "string",
"flag_group_label": "string",
"description": "string",
"pass_criteria": "string",
"attestation_statement": "string",
"result_notes": "string",
"waiver_reason": "string",
"submitted_by": "string",
"submitted_at": "2019-08-24T14:15:22Z",
"submittable": true,
"checked_by": "string",
"checked_at": "2019-08-24T14:15:22Z",
"last_run_at": "2019-08-24T14:15:22Z",
"failure_reason": "string",
"execution_logs": "string",
"request_payload": "string",
"retry_history": [
{
"attempt": 1,
"trigger": "RUN_START",
"verdict": "SATISFIED",
"resulting_state": "PENDING",
"failure_reason": "string",
"execution_logs": "string",
"evaluated_at": "2019-08-24T14:15:22Z",
"duration_ms": 0
}
]
}
]
}{
"type": "https://docs.cresoracommerce.com/errors/idempotency_key_required",
"title": "Bad Request",
"status": 400,
"detail": "Idempotency-Key header is required on write operations",
"instance": "urn:cresora:trace:0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "idempotency_key_required",
"retryable": false,
"error_id": "0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"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/idempotency_key_conflict",
"title": "Conflict",
"status": 409,
"detail": "Idempotency-Key was used 5 minutes ago with a different request body.",
"instance": "urn:cresora:trace:0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "idempotency_key_conflict",
"retryable": false,
"error_id": "0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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
Program step number — 1 (Validate your Integration) or 2 (Compliance & Documentation).
1 <= value <= 2Header Parameters
Client-generated unique key — a UUIDv4 is the recommended form. Cresora deduplicates within a 24-hour window scoped to the partner.
Format: 1–128 characters of letters, digits, . _ : -. Anything else is rejected with 400 validation_error. The character
set is narrower than base64: padded base64 (+ / =) is NOT
accepted, base64url is. The key is forwarded verbatim to the payment
gateway on transaction creates, so it must satisfy the gateway's key
contract too — rejecting locally gives you an actionable error instead
of an opaque upstream failure mid-request.
Reserved prefixes — rejected with 400 idempotency_key_reserved:
hpp:,recurring:— Cresora's own server-minted deterministic keys. A client key in these namespaces could collide with a platform-generated record.rb:,inv-charge:,inv-installment:— reserved by the payment gateway for its internally-minted keys.
Replay semantics:
- Same key + same request body → Cresora returns the cached
response from the original call. Response includes header
Idempotency-Replay: trueso the client can distinguish replays from fresh executions. Status code, body and side effects are identical to the original call. - Same key + different body →
409 idempotency_key_conflict. Generate a new key and retry. - Key older than 24 hours → treated as a fresh key; no replay guarantee from beyond the window.
Retrying after an indeterminate failure. On 502 gateway_outcome_unknown the transaction is recorded as pending and
the outcome is not yet known — retry with the SAME key (a fresh key
risks a double charge) or poll the transaction. This is also what a
gateway-side "an earlier request with this key is still in flight"
response surfaces as.
Do NOT reuse keys across different partners. Scope is enforced
per partner_id so the same key in partner A and partner B
is independent.
^[A-Za-z0-9._:\-]+$1 <= length <= 128Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/partner/me/certification/steps/1/rerun" \ -H "Idempotency-Key: 7f3e2a9c-b4c1-4e25-9ab3-d8f1e2c3a4b5"{
"flow_id": "0746f03b-16cc-49fb-9833-df3713d407d2",
"step": 1,
"evaluated": 0,
"passed": 0,
"failed": 0,
"skipped": 0,
"not_asserted": 0
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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/idempotency_key_conflict",
"title": "Conflict",
"status": 409,
"detail": "Idempotency-Key was used 5 minutes ago with a different request body.",
"instance": "urn:cresora:trace:0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "idempotency_key_conflict",
"retryable": false,
"error_id": "0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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
uuidHeader Parameters
Client-generated unique key — a UUIDv4 is the recommended form. Cresora deduplicates within a 24-hour window scoped to the partner.
Format: 1–128 characters of letters, digits, . _ : -. Anything else is rejected with 400 validation_error. The character
set is narrower than base64: padded base64 (+ / =) is NOT
accepted, base64url is. The key is forwarded verbatim to the payment
gateway on transaction creates, so it must satisfy the gateway's key
contract too — rejecting locally gives you an actionable error instead
of an opaque upstream failure mid-request.
Reserved prefixes — rejected with 400 idempotency_key_reserved:
hpp:,recurring:— Cresora's own server-minted deterministic keys. A client key in these namespaces could collide with a platform-generated record.rb:,inv-charge:,inv-installment:— reserved by the payment gateway for its internally-minted keys.
Replay semantics:
- Same key + same request body → Cresora returns the cached
response from the original call. Response includes header
Idempotency-Replay: trueso the client can distinguish replays from fresh executions. Status code, body and side effects are identical to the original call. - Same key + different body →
409 idempotency_key_conflict. Generate a new key and retry. - Key older than 24 hours → treated as a fresh key; no replay guarantee from beyond the window.
Retrying after an indeterminate failure. On 502 gateway_outcome_unknown the transaction is recorded as pending and
the outcome is not yet known — retry with the SAME key (a fresh key
risks a double charge) or poll the transaction. This is also what a
gateway-side "an earlier request with this key is still in flight"
response surfaces as.
Do NOT reuse keys across different partners. Scope is enforced
per partner_id so the same key in partner A and partner B
is independent.
^[A-Za-z0-9._:\-]+$1 <= length <= 128Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/partner/me/certification/checks/497f6eca-6276-4993-bfeb-53cbbbba6f08/submit" \ -H "Idempotency-Key: 7f3e2a9c-b4c1-4e25-9ab3-d8f1e2c3a4b5"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"category": "string",
"label": "string",
"tier": "AUTOMATED",
"state": "PENDING",
"check_code": "string",
"tier_level": 1,
"step": 1,
"flag_group": "string",
"flag_group_label": "string",
"description": "string",
"pass_criteria": "string",
"attestation_statement": "string",
"result_notes": "string",
"waiver_reason": "string",
"submitted_by": "string",
"submitted_at": "2019-08-24T14:15:22Z",
"submittable": true,
"checked_by": "string",
"checked_at": "2019-08-24T14:15:22Z",
"last_run_at": "2019-08-24T14:15:22Z",
"failure_reason": "string",
"execution_logs": "string",
"request_payload": "string",
"retry_history": [
{
"attempt": 1,
"trigger": "RUN_START",
"verdict": "SATISFIED",
"resulting_state": "PENDING",
"failure_reason": "string",
"execution_logs": "string",
"evaluated_at": "2019-08-24T14:15:22Z",
"duration_ms": 0
}
]
}{
"type": "https://docs.cresoracommerce.com/errors/idempotency_key_required",
"title": "Bad Request",
"status": 400,
"detail": "Idempotency-Key header is required on write operations",
"instance": "urn:cresora:trace:0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "idempotency_key_required",
"retryable": false,
"error_id": "0191c8a2-aa3e-7c21-9ab3-d8f1e2c3a4b5"
}{
"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/idempotency_key_conflict",
"title": "Conflict",
"status": 409,
"detail": "Idempotency-Key was used 5 minutes ago with a different request body.",
"instance": "urn:cresora:trace:0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5",
"code": "idempotency_key_conflict",
"retryable": false,
"error_id": "0191c8a2-cbcd-7a31-8c44-d8f1e2c3a4b5"
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b5",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/onboarding-state"{
"partner_id": "01960a7b-fb67-7e07-87a6-0e8b3445ed88",
"degraded": false,
"as_of": "2026-05-25T12:00:00Z",
"steps": [
{
"id": "accept-invite",
"done": true,
"degraded": false
},
{
"id": "create-api-key",
"done": true,
"degraded": false
},
{
"id": "create-merchant",
"done": true,
"degraded": false
},
{
"id": "configure-webhook",
"done": false,
"degraded": false
},
{
"id": "first-transaction",
"done": false,
"degraded": false
}
]
}{
"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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/status"{
"partner_id": "01960a7b-fb67-7e07-87a6-0e8b3445ed88",
"state": "ACTIVE",
"blockers": [
"no_live_merchants",
"webhook_unconfigured"
],
"degraded": false,
"as_of": "2026-05-25T12:00:00Z"
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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
Query Parameters
Opaque pagination cursor from previous response. Do not parse.
length <= 256Items per page (1–200).
501 <= value <= 200Partner-facing actor class filter. Repeatable. One of
partner_user, api_key, cresora.
Aggregate type filter (repeatable), e.g. Merchant.
Exact-match filter on a specific entity id.
Exact-match filter on a request correlation id.
Inclusive lower bound (RFC 3339 instant).
date-timeExclusive upper bound (RFC 3339 instant).
date-timeResponse Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/audit-log"{
"data": [
{
"id": "01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42",
"occurred_at": "2026-06-25T10:00:00Z",
"trace_id": "01960a7b-3c11-7e44-9b21-0a1b2c3d4e5f",
"actor_type": "partner_user",
"actor_id": "01885fec-8c0f-7a31-9bbb-3e5b9a1f8c01",
"actor_label": "dana.ops@acme-isv.test",
"action": "api_key_rotated",
"entity_type": "ApiKey",
"entity_id": "csk_a91f2d4c",
"old_value": {
"last4": "2d4c"
},
"new_value": {
"last4": "8f10"
},
"metadata": {
"reason": "Scheduled 90-day rotation"
}
}
],
"pagination": {
"next_cursor": "eyJpZCI6IjAxSFhZWi4uLiJ9",
"has_more": true,
"total_count": 0
}
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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/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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/dashboard/summary"{
"partner_id": "01960a7b-fb67-7e07-87a6-0e8b3445ed88",
"transactions_last_24h": {
"total": 100,
"succeeded": 80,
"failed": 5,
"pending": 15
},
"active_merchants": 3,
"active_api_keys": 2,
"webhook_health": {
"p99_latency_ms": 250,
"failure_rate_pct": "0.50",
"dlq_depth": 0
},
"recent_transactions": [
{
"id": "01960a7b-fb67-7e07-87a6-0e8b3445ed88",
"type": "Sale",
"state": "CAPTURED",
"amount": "42.50",
"created_at": "2026-05-25T11:30:00Z"
}
],
"degraded": false,
"as_of": "2026-05-25T12:00:00Z"
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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/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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/action-items"{
"data": [
{
"id": "string",
"kind": "string",
"label": "string",
"detail": "string",
"severity": "string"
}
],
"degraded": true
}{
"type": "https://docs.cresoracommerce.com/errors/validation_error",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for 1 field(s)",
"instance": "urn:cresora:trace:0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"code": "validation_error",
"retryable": false,
"error_id": "0191c8a2-7f3e-7c21-9ab3-d8f1e2c3a4b6",
"errors": [
{
"field": "merchant_category_code",
"code": "Pattern",
"message": "must match pattern ^[0-9]{4}$"
}
]
}{
"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/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
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/partner/system-status"{
"components": [
{
"key": "payment_gateway",
"label": "Payment Gateway",
"status": "operational"
}
],
"overall": "operational"
}{
"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/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"
}