Merchants
Merchant lifecycle — create, submit for underwriting review, update, and close merchant accounts. Merchants progress through a state machine owned by Cresora Operations.
x-cresora-status: planned in the canonical contract: they have no route on any host and return 404 (or 501 for reserved discriminator variants) until released. There is no separate preview stream, no feature flag to enable one, and no enrollment — the badge on each operation tells you whether it is served. See the stable /api/v1 reference for what you can call today. Like the stable API, these operations are server-to-server: there is no interactive console here. Download the preview spec (YAML)./merchantsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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–100).
1 <= value <= 10025Merchant lifecycle state.
Renamed 2026-08 (one-way): UNDERWRITING was UNDER_REVIEW and
CONFIG_FAILED was BOOTSTRAP_FAILED. The retired values are never
reused; REVIEWING keeps its wire value (displayed "Under Review"). Added 2026-08: ACTIVE (the gateway-provisioned resting state — the
provisioning flow previously went straight to LIVE).
DRAFT— being edited by partner, not yet submittedSUBMITTED— awaiting Cresora Operations reviewREVIEWING— under active Cresora review (pre-underwriting; displayed "Under Review")AWAITING_MERCHANT_SIGNATURE— Cresora pre-check approved; the merchant processing agreement is out for the authorized signer's signature. Signature completion moves it toUNDERWRITING; a declined or abandoned envelope moves it toREJECTED(REJ_008)UNDERWRITING— submitted to Paysafe underwriting; status-only — the underwriting result transitions it toAPPROVEDorREJECTEDAPPROVED— underwriting passed, awaiting provisioningCONFIGURING— approved; per-processor payment-gateway provisioning in progressCONFIG_FAILED— gateway provisioning failed after retries; an admin can retry (resumes at the failed step)ACTIVE— gateway-provisioned and resting pre-go-live; probe/test transactions run in this window. Cresora Operations fires go-live once the go-live gate passesLIVE— processing real paymentsREJECTED— rejected withrejection_reason_code+rejection_reason(seeRejectionCode)AWAITING_CLARIFICATION— Cresora requested more information; editable by the partner, re-enters review on responseSUSPENDED— temporarily blocked by CresoraCLOSED— terminal state, cannot transition out
Value in
- "DRAFT"
- "SUBMITTED"
- "REVIEWING"
- "AWAITING_MERCHANT_SIGNATURE"
- "UNDERWRITING"
- "APPROVED"
- "CONFIGURING"
- "CONFIG_FAILED"
- "ACTIVE"
- "LIVE"
- "REJECTED"
- "AWAITING_CLARIFICATION"
- "SUSPENDED"
- "CLOSED"
Filter by exact merchant category code.
^[0-9]{4}$Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/merchants"{ "data": [ { "id": "01885fec-8c0f-7a31-9bbb-3e5b9a1f8c42", "partner_id": "01885d7a-1234-7abc-8def-987654321fed", "business_name": "Acme Pharmacy LLC", "contact_email": "owner@acmepharmacy.com", "contact_name": "Sarah Chen", "state": "LIVE", "merchant_category_code": "5912", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "880012345678" } ], "gateway_merchant_id": "wpg_m_8745", "location_count": 2, "resubmission_count": 0, "resubmission_limit": 3, "created_at": "2026-03-12T14:23:45Z", "version": 7 } ], "pagination": { "next_cursor": "eyJpZCI6IjAxODg1ZmVjLThjMGYtN2EzMSJ9", "has_more": true, "total_count": 147 }}/merchantsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Create a merchant under the authenticated partner.
Whether a merchant transacts with real funds is governed by the
gateway-side test flag on its reseller/merchant registration —
the platform itself carries no per-merchant environment field. Onboarding a merchant for real processing requires partner
certification to be CERTIFIED (see
Capabilities.certification_status).
Response 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/merchants" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "business_name": "Acme Pharmacy LLC", "contact_email": "owner@acmepharmacy.com", "contact_name": "Sarah Chen", "merchant_category_code": "5912" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Partial update. Only provided fields are modified. Only allowed while merchant is in DRAFT state.
Response 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 PATCH "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/submitAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/submit" \ -H "Idempotency-Key: string"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/resubmitAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/resubmit" \ -H "Idempotency-Key: string"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/respond-clarificationAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/respond-clarification" \ -H "Idempotency-Key: string"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "business_name": "string", "contact_email": "user@example.com", "contact_name": "string", "authorized_signer_name": "string", "authorized_signer_email": "string", "merchant_category_code": "string", "state": "DRAFT", "channel": "CNP_ONLY", "processor_mids": [ { "processor": "TSYS", "mid": "string" } ], "gateway_merchant_id": "string", "location_count": 0, "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "clarification_message": "string", "rejection_reason_code": "REJ_001", "rejection_reason": "string", "esign_envelope": { "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0 }, "restriction_reason": "string", "resubmission_count": 0, "resubmission_limit": 0, "submitted_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/envelope/resendAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/envelope/resend" \ -H "Idempotency-Key: string"{ "status": "SENT", "sent_at": "2019-08-24T14:15:22Z", "last_status_at": "2019-08-24T14:15:22Z", "reissue_count": 0}/merchants/{merchantId}/transitionsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
Opaque pagination cursor from previous response. Do not parse.
length <= 256Items per page (1–100).
1 <= value <= 10025Response 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/transitions"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "from_state": "string", "to_state": "string", "actor_type": "string", "actor_id": "string", "actor_label": "string", "reason": "string", "trace_id": "string", "occurred_at": "2019-08-24T14:15:22Z" } ], "pagination": { "next_cursor": "string", "has_more": true, "total_count": 0 }}/merchants/{merchantId}/go-live-gateAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/go-live-gate"{ "can_go_live": true, "items": [ { "id": "string", "label": "string", "verified_by": "string", "verification": "AUTO", "overridable": true, "status": "PASSED", "unresolved_reason": "string" } ]}/merchants/{merchantId}/applicationAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/application"{ "gateway_submission": { "requires_tax_identifiers": true, "awaiting_input": true, "awaiting_input_reason": "FIRST_SUBMISSION", "awaiting_since": "2019-08-24T14:15:22Z" }, "processing_profile": { "dba": "string", "business_type": "string", "tax_id_last2": "string", "business_address": { "address_line1": "string", "address_line2": "string", "city": "string", "state": "string", "zip": "string", "country": "US" }, "business_website": "string", "business_start_date": "2019-08-24", "estimated_monthly_volume": 0, "expected_annual_volume": 0, "estimated_avg_ticket": 0, "card_present_percentage": 0, "card_not_present_percentage": 0, "processing_history": { "previous_processor": "string", "years_processing": "string", "chargeback_rate": "string", "chargeback_notes": "string" }, "primary_contact_phone": "string" }, "beneficial_owners": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "full_legal_name": "string", "ownership_percentage": 0, "date_of_birth": "2019-08-24", "tax_identifier_type": "SSN", "business_title": "CEO_CFO", "is_control_person": true, "phone": "string", "email": "string", "residential_address": { "address_line1": "string", "address_line2": "string", "city": "string", "state": "string", "zip": "string", "country": "US" }, "kyc_status": "string" } ], "principal": { "first_name": "string", "last_name": "string", "title": "string", "ownership_percentage": 0, "email": "string", "phone": "string", "gov_id_type": "string", "gov_id_number_last4": "string", "gov_id_expiration": "2019-08-24", "gov_id_issuing_region": "string", "gov_id_issuing_country": "string" }, "bank_account": { "account_holder_name": "string", "routing_number": "string", "account_number_last4": "string", "account_type": "string", "funding_method": "string", "statement_descriptor": "string" }, "accepted_modalities": [ "string" ], "payment_config": { "hsa_fsa_iias": true, "surcharging": true, "settlement_frequency": "string", "settlement_currency": "string", "batch_close_time": "string", "timezone": "string" }}/merchants/{merchantId}/bank-verificationAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/bank-verification"{ "status": "NOT_STARTED", "updated_at": "2019-08-24T14:15:22Z"}/merchants/{merchantId}/bank-verification/checkAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/bank-verification/check" \ -H "Idempotency-Key: string"{ "status": "NOT_STARTED", "updated_at": "2019-08-24T14:15:22Z"}/merchants/{merchantId}/fee-settingsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/fee-settings"{ "surcharge": { "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "status": "NOT_CONFIGURED", "enabled": true, "waiting_period_expires_at": "2019-08-24T14:15:22Z", "notice_filed_at": "2019-08-24T14:15:22Z", "notice_attested_date": "2019-08-24", "default_rate": 0, "channel": "NONE", "disclosure_copy_template": "string", "attested_cost_of_acceptance_rate": 1, "cost_of_acceptance_attested_at": "2019-08-24T14:15:22Z", "differential_network_rates_attested": true, "differential_network_rates_attested_at": "2019-08-24T14:15:22Z", "network_policies": [ { "network": "Visa", "is_allowed": true, "custom_rate": 0 } ], "last_mirrored_at": "2019-08-24T14:15:22Z", "version": 0 }, "convenience_fee": { "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "enabled": true, "fee_type": "FIXED", "fixed_amount": 0.01, "percentage_rate": 1, "version": 0 }}/merchants/{merchantId}/fee-settings/surchargeAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The partner's edit of an EXISTING surcharge configuration — rate and channel only. Creating the configuration, filing the card-brand notice, enabling and the state overrides are Cresora Compliance operations on the Admin Console.
Response 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
application/problem+json
curl -X PUT "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/fee-settings/surcharge" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "default_rate": 0, "channel": "NONE" }'{ "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "status": "NOT_CONFIGURED", "enabled": true, "waiting_period_expires_at": "2019-08-24T14:15:22Z", "notice_filed_at": "2019-08-24T14:15:22Z", "notice_attested_date": "2019-08-24", "default_rate": 0, "channel": "NONE", "disclosure_copy_template": "string", "attested_cost_of_acceptance_rate": 1, "cost_of_acceptance_attested_at": "2019-08-24T14:15:22Z", "differential_network_rates_attested": true, "differential_network_rates_attested_at": "2019-08-24T14:15:22Z", "network_policies": [ { "network": "Visa", "is_allowed": true, "custom_rate": 0 } ], "last_mirrored_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/fee-settings/convenience-feeAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response 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 PUT "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/fee-settings/convenience-fee" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "fee_type": "FIXED" }'{ "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "enabled": true, "fee_type": "FIXED", "fixed_amount": 0.01, "percentage_rate": 1, "version": 0}/merchants/{merchantId}/fee-eligibilityAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/fee-eligibility"{ "profile": { "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "standard_channel": "IN_PERSON", "alternative_channel": "IN_PERSON", "alternative_channel_attested": true, "alternative_channel_attested_at": "2019-08-24T14:15:22Z", "gov_education_attested": true, "gov_education_attested_at": "2019-08-24T14:15:22Z", "api_disclosure_attested": true, "api_disclosure_attested_at": "2019-08-24T14:15:22Z", "platform_fee_agreement": true, "platform_fee_disclosed_in_terms": true, "version": 0 }, "determination": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "trigger": "MERCHANT_CREATED", "resolver_version": 1, "evaluated_at": "2019-08-24T14:15:22Z", "outcomes": [ { "instrument": "SURCHARGE", "verdict": "ELIGIBLE", "failures": [ { "reason": "CF_NO_CARD", "detail": "string", "capturable": true } ], "unmet_conditions": [ { "reason": "CF_NO_CARD", "detail": "string", "capturable": true } ] } ], "allowed_instruments": [ "SURCHARGE" ], "active_instrument_ineligible": true, "inputs": { "accepts_card": true, "accepts_ach": true, "boarded_processors": [ "string" ], "accepted_modalities": [ "string" ], "merchant_category_code": "string", "registered_state": "string", "registered_state_prohibited": true, "standard_channel": "IN_PERSON", "alternative_channel": "IN_PERSON", "alternative_channel_attested": true, "gov_education_attested": true, "api_disclosure_attested": true, "hosted_page_surface": true, "platform_fee_agreement": true, "platform_fee_disclosed_in_terms": true, "surcharge_program_enabled": true, "surcharge_notice_attested": true, "surcharge_cost_basis_recorded": true, "convenience_fee_enabled": true, "convenience_fee_shape": "FIXED", "convenience_fee_over_ceiling": true } }}/merchants/{merchantId}/fee-profileAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response 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 PUT "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/fee-profile" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{}'{ "profile": { "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "standard_channel": "IN_PERSON", "alternative_channel": "IN_PERSON", "alternative_channel_attested": true, "alternative_channel_attested_at": "2019-08-24T14:15:22Z", "gov_education_attested": true, "gov_education_attested_at": "2019-08-24T14:15:22Z", "api_disclosure_attested": true, "api_disclosure_attested_at": "2019-08-24T14:15:22Z", "platform_fee_agreement": true, "platform_fee_disclosed_in_terms": true, "version": 0 }, "determination": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "trigger": "MERCHANT_CREATED", "resolver_version": 1, "evaluated_at": "2019-08-24T14:15:22Z", "outcomes": [ { "instrument": "SURCHARGE", "verdict": "ELIGIBLE", "failures": [ { "reason": "CF_NO_CARD", "detail": "string", "capturable": true } ], "unmet_conditions": [ { "reason": "CF_NO_CARD", "detail": "string", "capturable": true } ] } ], "allowed_instruments": [ "SURCHARGE" ], "active_instrument_ineligible": true, "inputs": { "accepts_card": true, "accepts_ach": true, "boarded_processors": [ "string" ], "accepted_modalities": [ "string" ], "merchant_category_code": "string", "registered_state": "string", "registered_state_prohibited": true, "standard_channel": "IN_PERSON", "alternative_channel": "IN_PERSON", "alternative_channel_attested": true, "gov_education_attested": true, "api_disclosure_attested": true, "hosted_page_surface": true, "platform_fee_agreement": true, "platform_fee_disclosed_in_terms": true, "surcharge_program_enabled": true, "surcharge_notice_attested": true, "surcharge_cost_basis_recorded": true, "convenience_fee_enabled": true, "convenience_fee_shape": "FIXED", "convenience_fee_over_ceiling": true } }}/merchants/{merchantId}/locationsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
Opaque pagination cursor from previous response. Do not parse.
length <= 256Items per page (1–100).
1 <= value <= 10025Response 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/locations"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "location_name": "string", "address_line1": "string", "address_line2": "string", "city": "string", "state_province": "string", "postal_code": "string", "country": "string", "phone_number": "string", "contact_name": "string", "mid": "string", "merchant_category_code": "string", "is_active": true, "created_at": "2019-08-24T14:15:22Z", "version": 0 } ], "pagination": { "next_cursor": "string", "has_more": true, "total_count": 0 }}/merchants/{merchantId}/locationsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/locations" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "location_name": "string", "address_line1": "string", "city": "string", "state_province": "string", "postal_code": "string" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "location_name": "string", "address_line1": "string", "address_line2": "string", "city": "string", "state_province": "string", "postal_code": "string", "country": "string", "phone_number": "string", "contact_name": "string", "mid": "string", "merchant_category_code": "string", "is_active": true, "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/locations/{locationId}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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/locations/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "location_name": "string", "address_line1": "string", "address_line2": "string", "city": "string", "state_province": "string", "postal_code": "string", "country": "string", "phone_number": "string", "contact_name": "string", "mid": "string", "merchant_category_code": "string", "is_active": true, "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/locations/{locationId}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuiduuidHeader 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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Partial update — null/omitted fields are left unchanged. address_line2, phone_number, contact_name, and mid
accept "" to explicitly clear. For the other string fields, an empty
string "" is rejected with 400, but a whitespace-only
value (e.g. " ") is silently treated as no change — the
field is left unchanged, not rejected.
Response 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 PATCH "https://example.com/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/locations/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "location_name": "string", "address_line1": "string", "address_line2": "string", "city": "string", "state_province": "string", "postal_code": "string", "country": "string", "phone_number": "string", "contact_name": "string", "mid": "string", "merchant_category_code": "string", "is_active": true, "created_at": "2019-08-24T14:15:22Z", "version": 0}/merchants/{merchantId}/locations/{locationId}Authorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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/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/locations/497f6eca-6276-4993-bfeb-53cbbbba6f08"/merchants/{merchantId}/compliance-documentsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse 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/compliance-documents"[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "document_type": "PCI_SAQ_A", "status": "NOT_UPLOADED", "file_name": "string", "file_size_bytes": 0, "mime_type": "string", "uploaded_at": "2019-08-24T14:15:22Z", "uploaded_by": "string", "reviewed_by": "string", "reviewed_at": "2019-08-24T14:15:22Z", "rejection_reason": "string", "side": "FRONT" }]/merchants/{merchantId}/compliance-documentsAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/compliance-documents" \ -H "Idempotency-Key: string" \ -F document_type="PCI_SAQ_A" \ -F file="string"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "document_type": "PCI_SAQ_A", "status": "NOT_UPLOADED", "file_name": "string", "file_size_bytes": 0, "mime_type": "string", "uploaded_at": "2019-08-24T14:15:22Z", "side": "FRONT"}/merchants/{merchantId}/compliance/saq-typeAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
X-Idempotent-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 →
422 idempotency_key_reused. Generate a new key and retry, or re-send the original body. - 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 <= 128Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response 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/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/compliance/saq-type" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "saq_type": "A" }'{ "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "hipaa_baa_status": "NOT_REQUIRED", "pci_saq_type": "A", "baa_verified_by": "string", "baa_verified_at": "2019-08-24T14:15:22Z", "saq_confirmed_by": "string", "saq_confirmed_at": "2019-08-24T14:15:22Z"}/merchants/{merchantId}/compliance/baa-templateAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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
uuidResponse Body
application/pdf
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/compliance/baa-template""string"/onboarding/saq-typesAuthorization
BearerAuth Cresora API key, sent as an opaque bearer token in the
Authorization header. Format:
csk_<prefix>_<random><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/onboarding/saq-types"[ { "code": "string", "label": "string" }]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. The cross-tenant listing (`GET /iam/partners`) lives in the admin-only surface. `GET /iam/partners/{id}` and `/{id}/transitions` are partner-callable under `partner:read`, but row-level security scopes them to the caller's own tenant — a foreign id resolves to `404`, never to another partner's record.
Transactions
Process card sales, refunds, voids, authorizations and captures. Batch close operations for settlement timing.