Config
Partner configuration — webhook URL, IP allowlist, HPP defaults, rate-limit tier, AVS decline policy. Read your own config; write via `PUT /config/partners/{partnerId}`. Rate-limit tier and AVS decline policy are Cresora-managed (admin-only); webhook URL, HPP settings, and IP allowlist are partner self-service.
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)./config/feature-flags/meAuthorization
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/config/feature-flags/me"[ { "flag_name": "string", "display_name": "string", "description": "string", "enabled": true, "globally_available": true, "depends_on": [ "string" ], "unmet_dependencies": [ "string" ] }]/config/feature-flags/me/{flagName}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
Feature flag key (snake_case, 1..100 chars).
1 <= length <= 100Header 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 own on/off choice for a granted feature. enabled
is mandatory — an absent field is rejected with 400 rather than
defaulting to off.
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 PUT "https://example.com/config/feature-flags/me/string" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "enabled": true }'{ "flag_name": "string", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "enabled": true, "updated_at": "2019-08-24T14:15:22Z", "updated_by": "string", "version": 0}/config/mcc-catalogAuthorization
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/config/mcc-catalog"[ { "code": "string", "label": "string", "risk": "green", "baa_requirement": "required" }]/config/us-statesAuthorization
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/config/us-states"[ { "code": "string", "name": "string" }]/config/partners/{partnerId}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
The partner UUID. Partners may only target their own partner_id; admin actors may target any.
uuidResponse Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/config/partners/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "api_version": "string", "webhook_url": "string", "rate_limit_tier": "STANDARD", "hpp_settings": { "gateway_hpp_page_id": "string", "accepted_methods": [ "credit_card" ] }, "ip_allowlist": [ "string" ], "avs_decline_policy": "NEVER_DECLINE", "version": 1}/config/partners/{partnerId}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
The partner UUID. Partners may only target their own partner_id; admin actors may target any.
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 body for PUT /config/partners/{partnerId}. Every field is nullable; null / omitted = leave unchanged. webhook_url == "" (empty string) clears the column.
Response Body
application/json
application/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/config/partners/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "webhook_url": "https://api.acmepay.com/webhooks/cresora", "ip_allowlist": [ "203.0.113.0/24", "198.51.100.42/32" ], "hpp_settings": { "accepted_methods": [ "credit_card", "debit_card" ] } }'{ "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "api_version": "string", "webhook_url": "string", "rate_limit_tier": "STANDARD", "hpp_settings": { "gateway_hpp_page_id": "string", "accepted_methods": [ "credit_card" ] }, "ip_allowlist": [ "string" ], "avs_decline_policy": "NEVER_DECLINE", "version": 1}/config/hpp-pageAuthorization
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
Resolve the effective config for this merchant (override-or-template). Omit for the template.
uuidResponse Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/config/hpp-page"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "is_template": true, "is_active": true, "appearance": { "presetKey": "string", "logo": { "mode": "cresora", "dataUrl": "string", "fileName": "string" }, "page": { "bg": "string", "border": "string" }, "header": { "bg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "panel": { "bg": "string", "border": "string" }, "input": { "bg": "string", "focusBg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "button": { "fill": "string", "border": "string" }, "typography": { "fontFamily": "string", "fontSize": 0, "fontColor": "string" }, "fields": { "order": { "invoiceNumber": false, "tax": false, "shipping": false, "total": true, "customerSetsInvoice": false }, "address": { "billingAddress": false, "shippingAddress": false, "hideAddressPhone": false }, "collectEmail": false, "resultScreenLabel": "string", "headerText": "string", "processButtonText": "string", "footerLinks": { "terms": { "enabled": true, "url": "http://example.com" }, "privacy": { "enabled": true, "url": "http://example.com" }, "support": { "enabled": true, "url": "http://example.com" }, "about": { "enabled": true, "url": "http://example.com" } }, "poweredBy": { "mode": "custom", "text": "string" }, "copyright": { "mode": "custom", "text": "string" } }, "redirects": { "submitUrl": "http://example.com", "editUrl": "http://example.com", "continueUrl": "http://example.com" }, "customCss": "string", "paymentMethods": [ "card" ], "allowLevel3LineItems": false, "allowedEmbeddingDomains": [ "string" ], "supportTokenization": false, "hideTitle": false, "hideMerchantName": false, "allowTransparentEmbedding": false, "achWebAuthorizationText": "string", "achRecurringWebAuthorizationText": "string", "achSaveOnlyWebAuthorizationText": "string" }, "version": 0, "provisioning": { "status": "UNPROVISIONED", "hosted_page_id": "string", "error": "string", "gateway_required_fields": [ "collect_email" ] }, "platform_required_fields": [ "convenience_fee" ]}/config/hpp-pageAuthorization
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.
Save body for the HPP template (PUT /config/hpp-page) or a merchant override (PUT /config/hpp-page/merchants/{merchantId}).
Response Body
application/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/config/hpp-page" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "appearance": {} }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "is_template": true, "is_active": true, "appearance": { "presetKey": "string", "logo": { "mode": "cresora", "dataUrl": "string", "fileName": "string" }, "page": { "bg": "string", "border": "string" }, "header": { "bg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "panel": { "bg": "string", "border": "string" }, "input": { "bg": "string", "focusBg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "button": { "fill": "string", "border": "string" }, "typography": { "fontFamily": "string", "fontSize": 0, "fontColor": "string" }, "fields": { "order": { "invoiceNumber": false, "tax": false, "shipping": false, "total": true, "customerSetsInvoice": false }, "address": { "billingAddress": false, "shippingAddress": false, "hideAddressPhone": false }, "collectEmail": false, "resultScreenLabel": "string", "headerText": "string", "processButtonText": "string", "footerLinks": { "terms": { "enabled": true, "url": "http://example.com" }, "privacy": { "enabled": true, "url": "http://example.com" }, "support": { "enabled": true, "url": "http://example.com" }, "about": { "enabled": true, "url": "http://example.com" } }, "poweredBy": { "mode": "custom", "text": "string" }, "copyright": { "mode": "custom", "text": "string" } }, "redirects": { "submitUrl": "http://example.com", "editUrl": "http://example.com", "continueUrl": "http://example.com" }, "customCss": "string", "paymentMethods": [ "card" ], "allowLevel3LineItems": false, "allowedEmbeddingDomains": [ "string" ], "supportTokenization": false, "hideTitle": false, "hideMerchantName": false, "allowTransparentEmbedding": false, "achWebAuthorizationText": "string", "achRecurringWebAuthorizationText": "string", "achSaveOnlyWebAuthorizationText": "string" }, "version": 0, "provisioning": { "status": "UNPROVISIONED", "hosted_page_id": "string", "error": "string", "gateway_required_fields": [ "collect_email" ] }, "platform_required_fields": [ "convenience_fee" ]}/config/hpp-page/configsAuthorization
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/config/hpp-page/configs"[ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "is_template": true, "is_active": true, "appearance": { "presetKey": "string", "logo": { "mode": "cresora", "dataUrl": "string", "fileName": "string" }, "page": { "bg": "string", "border": "string" }, "header": { "bg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "panel": { "bg": "string", "border": "string" }, "input": { "bg": "string", "focusBg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "button": { "fill": "string", "border": "string" }, "typography": { "fontFamily": "string", "fontSize": 0, "fontColor": "string" }, "fields": { "order": { "invoiceNumber": false, "tax": false, "shipping": false, "total": true, "customerSetsInvoice": false }, "address": { "billingAddress": false, "shippingAddress": false, "hideAddressPhone": false }, "collectEmail": false, "resultScreenLabel": "string", "headerText": "string", "processButtonText": "string", "footerLinks": { "terms": { "enabled": true, "url": "http://example.com" }, "privacy": { "enabled": true, "url": "http://example.com" }, "support": { "enabled": true, "url": "http://example.com" }, "about": { "enabled": true, "url": "http://example.com" } }, "poweredBy": { "mode": "custom", "text": "string" }, "copyright": { "mode": "custom", "text": "string" } }, "redirects": { "submitUrl": "http://example.com", "editUrl": "http://example.com", "continueUrl": "http://example.com" }, "customCss": "string", "paymentMethods": [ "card" ], "allowLevel3LineItems": false, "allowedEmbeddingDomains": [ "string" ], "supportTokenization": false, "hideTitle": false, "hideMerchantName": false, "allowTransparentEmbedding": false, "achWebAuthorizationText": "string", "achRecurringWebAuthorizationText": "string", "achSaveOnlyWebAuthorizationText": "string" }, "version": 0, "provisioning": { "status": "UNPROVISIONED", "hosted_page_id": "string", "error": "string", "gateway_required_fields": [ "collect_email" ] }, "platform_required_fields": [ "convenience_fee" ] }]/config/hpp-page/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
The merchant whose HPP override is being managed. Must belong to the authenticated partner.
uuidResponse Body
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X DELETE "https://example.com/config/hpp-page/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08"/config/hpp-page/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
The merchant whose HPP override is being managed. Must belong to the authenticated partner.
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.
Save body for the HPP template (PUT /config/hpp-page) or a merchant override (PUT /config/hpp-page/merchants/{merchantId}).
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 PUT "https://example.com/config/hpp-page/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "appearance": {} }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "partner_id": "6a3a39f6-861b-4a48-b868-5de838400e06", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "is_template": true, "is_active": true, "appearance": { "presetKey": "string", "logo": { "mode": "cresora", "dataUrl": "string", "fileName": "string" }, "page": { "bg": "string", "border": "string" }, "header": { "bg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "panel": { "bg": "string", "border": "string" }, "input": { "bg": "string", "focusBg": "string", "border": "string", "fontSize": 0, "fontColor": "string" }, "button": { "fill": "string", "border": "string" }, "typography": { "fontFamily": "string", "fontSize": 0, "fontColor": "string" }, "fields": { "order": { "invoiceNumber": false, "tax": false, "shipping": false, "total": true, "customerSetsInvoice": false }, "address": { "billingAddress": false, "shippingAddress": false, "hideAddressPhone": false }, "collectEmail": false, "resultScreenLabel": "string", "headerText": "string", "processButtonText": "string", "footerLinks": { "terms": { "enabled": true, "url": "http://example.com" }, "privacy": { "enabled": true, "url": "http://example.com" }, "support": { "enabled": true, "url": "http://example.com" }, "about": { "enabled": true, "url": "http://example.com" } }, "poweredBy": { "mode": "custom", "text": "string" }, "copyright": { "mode": "custom", "text": "string" } }, "redirects": { "submitUrl": "http://example.com", "editUrl": "http://example.com", "continueUrl": "http://example.com" }, "customCss": "string", "paymentMethods": [ "card" ], "allowLevel3LineItems": false, "allowedEmbeddingDomains": [ "string" ], "supportTokenization": false, "hideTitle": false, "hideMerchantName": false, "allowTransparentEmbedding": false, "achWebAuthorizationText": "string", "achRecurringWebAuthorizationText": "string", "achSaveOnlyWebAuthorizationText": "string" }, "version": 0, "provisioning": { "status": "UNPROVISIONED", "hosted_page_id": "string", "error": "string", "gateway_required_fields": [ "collect_email" ] }, "platform_required_fields": [ "convenience_fee" ]}/config/hpp-page/merchants/{merchantId}/embedding-domainsAuthorization
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
The merchant whose HPP iframe embedding allow-list is managed. Must belong to the authenticated partner.
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
application/problem+json
curl -X PUT "https://example.com/config/hpp-page/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/embedding-domains" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "allowed_embedding_domains": [ "shop.example.com", "*.checkout.example.com" ] }'{ "allowed_embedding_domains": [ "string" ]}/config/hpp-page/merchants/{merchantId}/embedding-domains/addAuthorization
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
The merchant whose HPP iframe embedding allow-list is extended. Must belong to the authenticated partner.
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
application/problem+json
curl -X POST "https://example.com/config/hpp-page/merchants/497f6eca-6276-4993-bfeb-53cbbbba6f08/embedding-domains/add" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "allowed_embedding_domains": [ "admin.example.com" ] }'{ "allowed_embedding_domains": [ "string" ]}Capabilities
Query what your partner can do today — enabled features, certification status, MCC scope.
Notifications
Partner-portal notification feed — the bell dropdown and `/notifications` page. Read state is tracked per portal user: one teammate marking a notification as read does not clear it for the rest of the team. Primarily a portal-session surface; API keys can read it with the `notification:read` / `notification:update` scopes.