Merchants
Merchant lifecycle — create, submit for underwriting review, update, and close merchant accounts. Merchants progress through a state machine owned by Cresora Operations.
/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.