{"info":{"title":"Odus Orchestration API","description":"Official Odus Orchestration API reference. Odus is a payment orchestration platform that simplifies payment processing by integrating multiple payment gateways into a single API.","version":"1.0","contact":{}},"servers":[{"url":"https://api.odus.com","description":"Production URL"},{"url":"https://sandbox-api.odus.com","description":"Sandbox URL"}],"tags":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"API Key","type":"http","description":"To authenticate, generate a Secret API Key from your Odus Dashboard and include it in the `Authorization` header as follows: `Authorization: ******"}},"schemas":{"ErrorResponse":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP status code","example":400},"requestId":{"type":"string","description":"Unique identifier for the request","example":"dfc10de3-36bb-4bcc-b081-316216194033"},"message":{"type":"string","description":"Human-readable description of the failure","example":"An error occurred"},"type":{"type":"string","enum":["invalid_request_error","authentication_error","permission_error","not_found_error","invalid_state_error","conflict_error","rate_limit_error","payment_error","api_error"],"description":"Coarse, stable classifier for the failure. Present on every error response including 5xx. This is the field to branch on: `statusCode` is too coarse and `message` is human prose that may be reworded. The set is closed and every member is permanent, so it is safe to handle exhaustively.","example":"invalid_request_error"},"code":{"type":"string","description":"Fine-grained identifier for the failure, present only where it adds something `type` does not — for example separating a replayed idempotency key from a held lock, or naming the reason a payment was declined. The set is open and grows over time, so treat an unrecognised value as absent and fall back to `type`.","example":"validation_failed"}},"required":["statusCode","requestId","message","type"]},"ValidationErrorResponse":{"properties":{"statusCode":{"type":"number","description":"HTTP status code","example":400},"requestId":{"type":"string","description":"Unique identifier for the request","example":"dfc10de3-36bb-4bcc-b081-316216194033"},"message":{"type":"string","description":"The first error message from the validation errors","example":"email must be a valid email address"},"type":{"type":"string","enum":["invalid_request_error","authentication_error","permission_error","not_found_error","invalid_state_error","conflict_error","rate_limit_error","payment_error","api_error"],"description":"Coarse, stable classifier for the failure. Present on every error response including 5xx. This is the field to branch on: `statusCode` is too coarse and `message` is human prose that may be reworded. The set is closed and every member is permanent, so it is safe to handle exhaustively.","example":"invalid_request_error"},"code":{"type":"string","description":"Fine-grained identifier for the failure, present only where it adds something `type` does not — for example separating a replayed idempotency key from a held lock, or naming the reason a payment was declined. The set is open and grows over time, so treat an unrecognised value as absent and fall back to `type`.","example":"validation_failed"},"errors":{"type":"array","description":"Complete list of validation errors","example":["email must be a valid email address.","password must be at least 8 characters long."],"items":{"type":"string"}}},"required":["statusCode","requestId","message","type"]},"ProvisioningInProgress":{"type":"object","required":["status","merchantAccountId"],"properties":{"status":{"type":"string","enum":["provisioning"],"description":"Signals the merchant environment is still being provisioned."},"merchantAccountId":{"type":"string","description":"The merchant account whose environment is being provisioned.","example":"dAI3aa87ROOeupeBCjNSKCOBOisBCYjB"}}},"AccountDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"ID of the account"},"name":{"type":"string","description":"Name of the account","example":"Zezima Studios"}},"required":["createdAt","updatedAt","id","name"]},"GatewayProfilePartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods"]},"GatewayProfileDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"},"configuration":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["stripe"],"description":"Gateway integration type","example":"stripe"},"environment":{"type":"string","enum":["live","test"],"description":"Gateway environment","example":"test"},"secretKey":{"type":"string","description":"Stripe secret key","example":"sk_test_..."},"webhookSecret":{"description":"Webhook signing secret for signature verification","type":"string","nullable":true}},"required":["type","environment","secretKey"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["adyen"],"description":"Gateway integration type","example":"adyen"},"environment":{"type":"string","enum":["live","test"],"description":"Gateway environment","example":"test"},"apiKey":{"type":"string","description":"Adyen API key","example":"your-api-key"},"merchantAccount":{"type":"string","description":"Adyen merchant account name","example":"MerchantAccountName"},"liveUrlPrefix":{"type":"string","description":"Live endpoint URL prefix","example":"0b3c1310cad152c9-MyCompany","nullable":true},"webhookSecret":{"description":"Webhook HMAC key for signature verification","type":"string","nullable":true}},"required":["type","environment","apiKey","merchantAccount"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["checkout"],"description":"Gateway integration type","example":"checkout"},"environment":{"type":"string","enum":["live","test"],"description":"Gateway environment","example":"test"},"secretKey":{"type":"string","description":"Checkout.com secret key","example":"sk_sbox_..."},"processingChannel":{"type":"string","description":"Checkout.com processing channel ID","example":"pc_..."},"webhookSecret":{"description":"Webhook signing secret for signature verification","type":"string","nullable":true},"merchantCity":{"description":"Merchant city for billing descriptor","example":"Tallinn","type":"string","nullable":true}},"required":["type","environment","secretKey","processingChannel"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["paypal"],"description":"Gateway integration type","example":"paypal"},"environment":{"type":"string","enum":["live","test"],"description":"Gateway environment","example":"test"},"clientId":{"type":"string","description":"PayPal application client ID","example":"client-id-from-paypal-app"},"secretKey":{"type":"string","description":"PayPal application secret key","example":"secret-key-from-paypal-app"},"integrationMode":{"type":"string","enum":["vault","billingAgreement"],"description":"Integration mode: \"vault\" uses PayPal Vaulting, \"billingAgreement\" uses Billing Agreements API"},"collectShippingAddress":{"type":"boolean","description":"Whether to collect shipping address from PayPal. Only available for Vault integration mode."},"webhookId":{"description":"PayPal webhook ID for signature verification","example":"0NH55953DH663215D","type":"string","nullable":true}},"required":["type","environment","clientId","secretKey","integrationMode","collectShippingAddress"],"additionalProperties":false}],"description":"Gateway-specific configuration. The schema depends on the `integration` field: use StripeConfigDTO for Stripe, AdyenConfigDTO for Adyen, CheckoutConfigDTO for Checkout, and PaypalConfigDTO for PayPal."}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods","configuration"]},"CascadePartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the cascade"},"name":{"type":"string","example":"My Cascade"},"description":{"example":"Simple cascade","type":"string","nullable":true},"active":{"type":"boolean","description":"Whether the cascade is active and available for routing","example":true},"algorithm":{"type":"string","enum":["roundRobin","weightedRoundRobin","priorityQueue"],"example":"weightedRoundRobin","description":"The algorithm used for gateway selection. Available options: roundRobin, weightedRoundRobin, priorityQueue"}},"required":["createdAt","updatedAt","id","name","description","active","algorithm"]},"CascadeDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the cascade"},"name":{"type":"string","example":"My Cascade"},"description":{"example":"Simple cascade","type":"string","nullable":true},"active":{"type":"boolean","description":"Whether the cascade is active and available for routing","example":true},"algorithm":{"type":"string","enum":["roundRobin","weightedRoundRobin","priorityQueue"],"example":"weightedRoundRobin","description":"The algorithm used for gateway selection. Available options: roundRobin, weightedRoundRobin, priorityQueue"},"gateways":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the cascade gateway entry"},"profile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"The gateway profile associated with this cascade entry"},"position":{"type":"number","example":1,"description":"Order in which this gateway is tried in the cascade"},"weight":{"example":80,"description":"Relative weight for weighted routing algorithms","type":"number","nullable":true},"transactionLimit":{"example":100,"description":"Maximum transaction amount this gateway can process","type":"number","nullable":true},"transactionLimitCounter":{"example":0,"description":"Current counter value for the transaction limit","type":"number"},"transactionLimitPeriod":{"example":"day","description":"Time period for the transaction limit","type":"string","enum":["day","week","month",null],"nullable":true},"isTransactionLimitExhausted":{"type":"boolean","description":"Whether the transaction limit has been reached for the current period","example":false},"transactionCap":{"example":10000,"description":"Maximum number of transactions in a period","type":"number","nullable":true},"transactionCapCounter":{"example":0,"description":"Current counter value for the transaction cap","type":"number"},"transactionCapPeriod":{"example":"month","description":"Time period for the transaction cap","type":"string","enum":["day","week","month",null],"nullable":true},"isTransactionCapExhausted":{"type":"boolean","description":"Whether the transaction cap has been reached for the current period","example":false}},"required":["createdAt","updatedAt","id","profile","position","weight","transactionLimit","transactionLimitCounter","transactionLimitPeriod","isTransactionLimitExhausted","transactionCap","transactionCapCounter","transactionCapPeriod","isTransactionCapExhausted"],"additionalProperties":false},"description":"The list of gateway profiles configured for this cascade"},"lastAttempted":{"description":"The cascade gateway entry that was last attempted for routing","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the last-used cascade gateway entry"}},"required":["createdAt","updatedAt","id"],"additionalProperties":false,"nullable":true},"lastBilled":{"description":"The cascade gateway entry that last successfully processed a payment","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the last-used cascade gateway entry"}},"required":["createdAt","updatedAt","id"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","name","description","active","algorithm","gateways"]},"MerchantConfigDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the merchant configuration"},"defaultPaymentMethodOptions":{"type":"object","properties":{"captureMethod":{"description":"Capture method for the payment. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual"]},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring charges. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring charges. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"card":{"description":"Card-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"The processing mode for card payments","example":"cascade"},"gatewayProfile":{"description":"Specific gateway profile to use, bypassing cascade routing. Only present if `mode` is `direct`","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"nullable":true},"cascade":{"description":"The cascade to use for gateway routing. Only present if `mode` is `cascade`","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the cascade"},"name":{"type":"string","example":"My Cascade"},"description":{"example":"Simple cascade","type":"string","nullable":true},"active":{"type":"boolean","description":"Whether the cascade is active and available for routing","example":true},"algorithm":{"type":"string","enum":["roundRobin","weightedRoundRobin","priorityQueue"],"example":"weightedRoundRobin","description":"The algorithm used for gateway selection. Available options: roundRobin, weightedRoundRobin, priorityQueue"}},"required":["createdAt","updatedAt","id","name","description","active","algorithm"],"additionalProperties":false,"nullable":true},"captureMethod":{"description":"Capture method for card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring charges. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","cascade","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true},"paypal":{"description":"PayPal-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"Processing mode for PayPal payments, will always be `direct`","example":"direct"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile ID for PayPal processing"},"captureMethod":{"description":"Capture method for PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs for PayPal payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring PayPal payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true},"applePay":{"description":"Apple Pay-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"Processing mode for Apple Pay payments, will always be `direct`","example":"direct"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile ID for Apple Pay processing"},"captureMethod":{"description":"Capture method for Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs for Apple Pay payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring Apple Pay payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"Default payment method options for the merchant.","required":["captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"]},"displayCurrency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Display currency for the merchant. Used in statistics.","example":"usd"},"timezone":{"type":"string","description":"Timezone for the merchant, in IANA format.","example":"UTC"},"enableRecurringPaymentBundling":{"type":"boolean","description":"Whether to bundle recurring payments for the same customer into a single charge.","example":false},"preferCaptureAtNight":{"type":"boolean","description":"Whether delayed captures should be scheduled at night in the shopper's local time, derived from the UTC offset their browser reported at authorization. Captures fall back to the standard schedule when no offset was reported.","example":false},"lineItemDescriptionSource":{"type":"string","enum":["price","product"],"description":"Which name a line item description defaults to when none is supplied on the request: the name of the price it references, or the name of the product behind that price.","example":"price"},"relatedSubscriptionWindowMinutes":{"type":"number","description":"How many minutes apart two of the same customer's subscriptions may be created and still be presented as related in the dashboard. 0 disables the time window; subscriptions sharing a setup payment are grouped regardless.","example":0}},"required":["createdAt","updatedAt","id","defaultPaymentMethodOptions","displayCurrency","timezone","enableRecurringPaymentBundling","preferCaptureAtNight","lineItemDescriptionSource","relatedSubscriptionWindowMinutes"]},"EntityRemovedDTO":{"type":"object","properties":{"deleted":{"type":"boolean","example":true,"description":"Whether the entity was deleted or not"}},"required":["deleted"]},"CustomerBlacklistDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the customer blacklist entry"},"email":{"type":"string","description":"Email address of the blacklisted customer","example":"user@example.com"},"reason":{"description":"Reason for blacklisting this customer","example":"Fraudulent activity detected","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","email","reason"]},"IsBlacklistedDTO":{"type":"object","properties":{"blacklisted":{"type":"boolean"}},"required":["blacklisted"]},"WebhookSubscriberDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the webhook subscriber"},"active":{"type":"boolean","description":"Whether the webhook subscriber is active and will receive events","example":true},"recipientUrl":{"type":"string","description":"The URL where webhook events will be delivered via HTTP POST","example":"https://my-backend.com/webhooks"},"subscribedTo":{"type":"array","items":{"type":"string","enum":["customer.created","customer.updated","blacklist.added","blacklist.removed","subscription.active","subscription.cancelled","subscription.updated","payment.created","payment.succeeded","payment.captured","payment.attempt_failed","payment.requires_action","payment.updated","payment.cancelled","payment.chargebacked","payment.reversed","transaction.reverse_failed","transaction.capture_failed","invoice.created","invoice.paid","invoice.voided","invoice.updated","product.created","product.updated","price.created","price.updated","price.deleted"]},"description":"The list of event types this subscriber receives webhooks for. Covers lifecycle events for customers, subscriptions, payments, transactions, invoices, products, and prices.","example":["customer.created","customer.updated"]}},"required":["createdAt","updatedAt","id","active","recipientUrl","subscribedTo"]},"WebhookSubscriberWithSecretDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the webhook subscriber"},"active":{"type":"boolean","description":"Whether the webhook subscriber is active and will receive events","example":true},"recipientUrl":{"type":"string","description":"The URL where webhook events will be delivered via HTTP POST","example":"https://my-backend.com/webhooks"},"subscribedTo":{"type":"array","items":{"type":"string","enum":["customer.created","customer.updated","blacklist.added","blacklist.removed","subscription.active","subscription.cancelled","subscription.updated","payment.created","payment.succeeded","payment.captured","payment.attempt_failed","payment.requires_action","payment.updated","payment.cancelled","payment.chargebacked","payment.reversed","transaction.reverse_failed","transaction.capture_failed","invoice.created","invoice.paid","invoice.voided","invoice.updated","product.created","product.updated","price.created","price.updated","price.deleted"]},"description":"The list of event types this subscriber receives webhooks for. Covers lifecycle events for customers, subscriptions, payments, transactions, invoices, products, and prices.","example":["customer.created","customer.updated"]},"sharedSecret":{"type":"string","description":"The shared secret used to verify webhook signatures. Only returned once upon creation and cannot be retrieved again.","example":"218f5208d105f754025bb5cfa6b6aefd"}},"required":["createdAt","updatedAt","id","active","recipientUrl","subscribedTo","sharedSecret"]},"PaymentMethodPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"]},"PaymentMethodDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"]},"PriceDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for `recurring` prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"bsch_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the billing schedule"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing schedule","example":"usd"},"cycleDefinitions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"position":{"type":"number","description":"Position of the billing cycle in the schedule. Used for ordering.","example":1},"amount":{"type":"number","description":"Amount to be charged for this billing cycle in minor units (e.g., cents)","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing cycle","example":"usd"},"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Unit of time for the billing cycle interval"},"intervalValue":{"type":"number","description":"Value of the billing cycle interval"}},"required":["createdAt","updatedAt","metadata","position","amount","currency","intervalUnit","intervalValue"],"additionalProperties":false}}},"required":["createdAt","updatedAt","metadata","id","currency","cycleDefinitions"],"additionalProperties":false,"nullable":true},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","type","active","amount","quantity","currency"]},"PricePartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","type","active","amount","quantity","currency"]},"CustomerDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"paymentMethods":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false},"description":"The list of payment methods associated with the customer"},"subscriptions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"sub_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the subscription"},"status":{"type":"string","enum":["active","cancelled"],"example":"active","description":"The status of the subscription"},"isRecovering":{"type":"boolean","example":false,"description":"Whether the subscription is recovering from a failed payment"},"autoBillingEnabled":{"type":"boolean","example":true,"description":"Whether the subscription is going to be billed automatically"},"autoBillingDisabledAt":{"description":"The date when auto billing was disabled","type":"string","format":"date-time","nullable":true},"autoBillingDisabledReason":{"example":"subscription_cancelled","description":"The reason why auto billing was disabled","type":"string","enum":["recurring_payment_errored","subscription_cancelled","latest_invoice_retrying",null],"nullable":true},"startDate":{"description":"The start date of the subscription","type":"string","format":"date-time"},"endDate":{"description":"The end date of the subscription, if it has ended","type":"string","format":"date-time","nullable":true},"cancelAtPeriodEnd":{"type":"boolean","example":true,"description":"Whether the subscription should be cancelled when current billing cycle ends"},"cancelAtCycle":{"example":2,"description":"The cycle at whose end the subscription is scheduled to be cancelled, or absent when no cancellation is scheduled. Equals `currentCycle` once `cancelAtPeriodEnd` is true","type":"number","nullable":true},"currentCycle":{"type":"number","example":1,"description":"The current cycle of the subscription, starting from 1"},"currentPeriodStart":{"description":"The start date of the current billing period","type":"string","format":"date-time"},"currentPeriodEnd":{"description":"The end date of the current billing period","type":"string","format":"date-time"},"setupInvoice":{"type":"string","description":"The ID of the invoice that set up the subscription"},"setupLineItem":{"description":"The ID of the line item that set up the subscription","type":"string","nullable":true},"billingSettings":{"type":"object","properties":{"paymentMethodType":{"type":"string","enum":["card","paypal","applePay"],"description":"The payment method type used for recurring billing"},"gatewayProfile":{"type":"string","description":"The gateway profile used for recurring billing"},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"The capture method used for recurring billing"},"captureDelay":{"example":3,"description":"The capture delay in days, if applicable","type":"number","nullable":true}},"required":["paymentMethodType","gatewayProfile","captureMethod","captureDelay"],"additionalProperties":false,"description":"The billing settings for recurring charges"},"upcomingInvoice":{"description":"The upcoming invoice details","type":"object","properties":{"amount":{"type":"number","description":"Amount to be charged for the upcoming invoice.","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the upcoming invoice.","example":"usd"},"periodStart":{"description":"Start date of the billing period.","example":"2023-01-01T00:00:00Z","type":"string","format":"date-time"},"periodEnd":{"description":"End date of the billing period.","example":"2023-01-31T23:59:59Z","type":"string","format":"date-time"},"statementDescriptor":{"description":"Statement descriptor for the upcoming invoice.","example":"SUBSCRIPTION","type":"string","nullable":true},"comment":{"description":"Comment for the upcoming invoice.","example":"Invoice for subscription 123, period January 2023","type":"string","nullable":true}},"required":["amount","currency","periodStart","periodEnd","statementDescriptor","comment"],"additionalProperties":false,"nullable":true},"price":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for `recurring` prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"bsch_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the billing schedule"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing schedule","example":"usd"},"cycleDefinitions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"position":{"type":"number","description":"Position of the billing cycle in the schedule. Used for ordering.","example":1},"amount":{"type":"number","description":"Amount to be charged for this billing cycle in minor units (e.g., cents)","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing cycle","example":"usd"},"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Unit of time for the billing cycle interval"},"intervalValue":{"type":"number","description":"Value of the billing cycle interval"}},"required":["createdAt","updatedAt","metadata","position","amount","currency","intervalUnit","intervalValue"],"additionalProperties":false}}},"required":["createdAt","updatedAt","metadata","id","currency","cycleDefinitions"],"additionalProperties":false,"nullable":true},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","type","active","amount","quantity","currency"],"additionalProperties":false,"description":"The price details of the subscription"},"invoices":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The ID of the invoice"},"status":{"type":"string","enum":["open","paid","voided"],"example":"open","description":"The status of the invoice"},"voidedReason":{"example":"Grace period expired","description":"The reason for voiding the invoice","type":"string","nullable":true},"comment":{"example":"This is a comment for the invoice","description":"An optional comment for the invoice","type":"string","nullable":true},"amount":{"type":"number","example":999,"description":"The intended amount to pay for the invoice. The actual amount paid can differ if retrying with a percentage discount, in which case the actual amount paid can be found in `payment.amount`"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"The currency of the amount to be charged"},"type":{"type":"string","enum":["setup","recurring"],"example":"setup","description":"Indicates whether the invoice is the one that sets up the subscription, or a recurring one"},"number":{"type":"string","description":"Sequential, unique, and human-readable number of the invoice","example":"2W12-1004"},"subscription":{"type":"string","description":"The ID of the subscription associated with this invoice","nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"],"additionalProperties":false,"description":"The customer associated with this invoice"}},"required":["createdAt","updatedAt","id","status","voidedReason","comment","amount","currency","type","number","subscription","customer"],"additionalProperties":false},"description":"The list of invoices associated with the subscription"}},"required":["createdAt","updatedAt","id","status","isRecovering","autoBillingEnabled","autoBillingDisabledAt","autoBillingDisabledReason","startDate","endDate","cancelAtPeriodEnd","cancelAtCycle","currentCycle","currentPeriodStart","currentPeriodEnd","setupInvoice","setupLineItem","billingSettings","upcomingInvoice","price","invoices"],"additionalProperties":false},"description":"The list of subscriptions associated with the customer"}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress","paymentMethods","subscriptions"]},"CustomerPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"]},"GatewayOperationDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the gateway operation"},"type":{"type":"string","enum":["authorize","capture","refund","void","confirm","create_apple_pay_session","process_webhook"],"description":"The type of operation performed against the payment service provider","example":"authorize"},"status":{"type":"string","enum":["pending","completed"],"description":"Current status of the gateway operation","example":"completed"},"amount":{"description":"Operation amount in minor currency units (e.g., 1500 for $15.00)","example":1500,"type":"number","nullable":true},"currency":{"description":"Currency of the operation","example":"usd","type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk",null],"nullable":true},"processorId":{"description":"The external identifier returned by the payment service provider. Only available from the dashboard.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"processorResponse":{"description":"The raw response returned by the payment service provider. A string where the provider answered with a non-JSON body. May contain redacted card data for PCI compliance. Only available from the dashboard.","anyOf":[{"type":"object","additionalProperties":true},{"type":"string"}],"nullable":true},"request":{"description":"The sanitized request sent to the payment service provider. May contain redacted sensitive data for PCI compliance. Only available from the dashboard.","type":"object","properties":{"requestUrl":{"type":"string"},"method":{"type":"string"},"requestHeaders":{"type":"object","additionalProperties":true},"requestBody":{"type":"object","additionalProperties":true,"nullable":true}},"required":["requestUrl","method","requestBody"],"additionalProperties":false,"nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"transaction":{"description":"The ID of the transaction this operation belongs to","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","type","status","amount","currency","transaction"]},"TransactionDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the transaction"},"status":{"type":"string","enum":["pending","confirmation_requested","authorized","failed"],"description":"Current status of the transaction","example":"authorized"},"authentication":{"type":"string","enum":["not_requested","pending","succeeded","failed"],"description":"How far the transaction got through customer authentication — 3-D Secure for a card, the equivalent payer-action step for a redirect-based method. `not_requested` when the gateway never asked for it, so an absent challenge is distinguishable from a failed one.","example":"not_requested"},"amount":{"type":"number","description":"Transaction amount in minor currency units (e.g., 1500 for $15.00)","example":1500},"initiator":{"type":"string","enum":["customer","merchant"],"description":"The initiator of the transaction","example":"customer"},"statementDescriptor":{"description":"The statement descriptor that will appear on the customer's statement. Only available from the dashboard or the API using a secret key.","example":"Hello World","type":"string","nullable":true},"amountReversed":{"type":"number","description":"The amount that has been reversed by refunds or voids","example":0},"amountCaptured":{"type":"number","description":"The amount that has been captured","example":1500},"isReversed":{"type":"boolean","description":"Whether the transaction has been reversed","example":false},"isFullyReversed":{"type":"boolean","description":"Whether the transaction has been fully reversed","example":false},"isCaptureFailed":{"type":"boolean","description":"Whether the capture operation failed","example":false},"isReverseFailed":{"type":"boolean","description":"Whether the reverse operation failed","example":false},"isRefundFailed":{"type":"boolean","description":"Whether the refund operation failed","example":false},"isVoidFailed":{"type":"boolean","description":"Whether the void operation failed","example":false},"isCaptured":{"type":"boolean","description":"Whether the transaction has been captured","example":true},"isChargebacked":{"type":"boolean","description":"Whether the transaction has a chargeback recorded","example":false},"chargebackRecordedAt":{"description":"The timestamp when a chargeback was recorded for this transaction","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"Capture method used for this transaction","example":"automatic"},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable for 'automaticDelayed' capture method.","example":0,"type":"number","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the transaction","example":"usd"},"processorId":{"description":"The external transaction ID from the payment processor. Only available from the dashboard or the API using a secret key.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"payment":{"type":"string","description":"The ID of the payment this transaction belongs to"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile used for this transaction. Only available from the dashboard or the API using a secret key."},"execution":{"description":"The cascade execution associated with this transaction. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false,"description":"The payment method used for this transaction"},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"],"additionalProperties":false,"description":"The customer associated with this transaction","nullable":true}},"required":["createdAt","updatedAt","id","status","authentication","amount","initiator","amountReversed","amountCaptured","isReversed","isFullyReversed","isCaptureFailed","isReverseFailed","isRefundFailed","isVoidFailed","isCaptured","isChargebacked","captureMethod","captureDelay","currency","payment","paymentMethod","customer"]},"TransactionPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the transaction"},"status":{"type":"string","enum":["pending","confirmation_requested","authorized","failed"],"description":"Current status of the transaction","example":"authorized"},"authentication":{"type":"string","enum":["not_requested","pending","succeeded","failed"],"description":"How far the transaction got through customer authentication — 3-D Secure for a card, the equivalent payer-action step for a redirect-based method. `not_requested` when the gateway never asked for it, so an absent challenge is distinguishable from a failed one.","example":"not_requested"},"amount":{"type":"number","description":"Transaction amount in minor currency units (e.g., 1500 for $15.00)","example":1500},"initiator":{"type":"string","enum":["customer","merchant"],"description":"The initiator of the transaction","example":"customer"},"statementDescriptor":{"description":"The statement descriptor that will appear on the customer's statement. Only available from the dashboard or the API using a secret key.","example":"Hello World","type":"string","nullable":true},"amountReversed":{"type":"number","description":"The amount that has been reversed by refunds or voids","example":0},"amountCaptured":{"type":"number","description":"The amount that has been captured","example":1500},"isReversed":{"type":"boolean","description":"Whether the transaction has been reversed","example":false},"isFullyReversed":{"type":"boolean","description":"Whether the transaction has been fully reversed","example":false},"isCaptureFailed":{"type":"boolean","description":"Whether the capture operation failed","example":false},"isReverseFailed":{"type":"boolean","description":"Whether the reverse operation failed","example":false},"isRefundFailed":{"type":"boolean","description":"Whether the refund operation failed","example":false},"isVoidFailed":{"type":"boolean","description":"Whether the void operation failed","example":false},"isCaptured":{"type":"boolean","description":"Whether the transaction has been captured","example":true},"isChargebacked":{"type":"boolean","description":"Whether the transaction has a chargeback recorded","example":false},"chargebackRecordedAt":{"description":"The timestamp when a chargeback was recorded for this transaction","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"Capture method used for this transaction","example":"automatic"},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable for 'automaticDelayed' capture method.","example":0,"type":"number","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the transaction","example":"usd"},"processorId":{"description":"The external transaction ID from the payment processor. Only available from the dashboard or the API using a secret key.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"payment":{"type":"string","description":"The ID of the payment this transaction belongs to"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile used for this transaction. Only available from the dashboard or the API using a secret key."},"execution":{"description":"The cascade execution associated with this transaction. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false,"description":"The payment method used for this transaction"},"customer":{"description":"The ID of the customer associated with this transaction","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","status","authentication","amount","initiator","amountReversed","amountCaptured","isReversed","isFullyReversed","isCaptureFailed","isReverseFailed","isRefundFailed","isVoidFailed","isCaptured","isChargebacked","captureMethod","captureDelay","currency","payment","paymentMethod","customer"]},"ProductDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","id","active"]},"ProductPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","id","active"]},"PaymentDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"id":{"type":"string","example":"pay_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the payment"},"status":{"type":"string","enum":["open","requires_action","succeeded","cancelled"],"example":"succeeded","description":"Status of the payment"},"displayStatus":{"type":"string","enum":["retrying","chargeback","reversed","cancelled","partially_reversed","succeeded","uncaptured","incomplete","failed","unattempted"],"example":"succeeded","description":"A user-friendly aggregate status for display purposes"},"amount":{"type":"number","example":1500,"description":"Payment amount in minor currency, e.g. 1500 for 15.00 USD"},"note":{"example":"This is a note for the payment","description":"Optional note for the payment. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the payment"},"amountReversed":{"type":"number","example":0,"description":"Amount reversed for the payment"},"amountCaptured":{"type":"number","example":1500,"description":"Amount captured for the payment"},"isCaptured":{"type":"boolean","example":true,"description":"Indicates if the payment has been captured"},"isRedirectRequired":{"type":"boolean","example":false,"description":"Indicates if a redirect is required for the payment"},"isReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been partially reversed"},"isFullyReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been fully reversed"},"isRecovered":{"type":"boolean","example":true,"description":"Whether the payment recovered after one or more retry attempts and eventually succeeded."},"isRetrying":{"type":"boolean","example":true,"description":"Whether the payment is currently in a retrying state after a failed attempt."},"isChargebacked":{"type":"boolean","example":false,"description":"Whether a chargeback has been recorded for this payment. Only available from the dashboard or the API using a secret key."},"chargebackRecordedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when a chargeback was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"authorizedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when an authorization was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"capturedAt":{"example":"2026-01-15T10:35:00.000Z","description":"The timestamp when a capture was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"reversedAt":{"example":"2026-01-20T14:00:00.000Z","description":"The timestamp when a reversal was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"initiator":{"type":"string","enum":["customer","merchant"],"example":"customer","description":"The initiator of the payment, indicating who initiated the payment."},"offSessionType":{"example":"recurring","description":"The off-session type of the payment. Only present for merchant-initiated payments.","type":"string","enum":["recurring","unscheduled",null],"nullable":true},"statementDescriptor":{"example":"Some product","description":"Statement to be shown on bank statement. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"latestMessage":{"example":"Payment was declined by the issuing bank.","description":"Latest message available for the payment. This message is non-sensitive and may be displayed to the customer.","type":"string","nullable":true},"latestDeclineType":{"example":"hard_decline","description":"The decline type for the latest transaction. Only available from the dashboard or the API using a secret key.","type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"action":{"description":"The action that needs to be taken for this payment, e.g. redirecting the customer to a payment gateway.","type":"object","properties":{"redirectUrl":{"type":"string","description":"URL to redirect the customer to for completing payment authentication (e.g., 3D Secure)","example":"https://example.com"}},"required":["redirectUrl"],"additionalProperties":false,"nullable":true},"checkoutKey":{"type":"string","example":"ck_live_abc123def456","description":"The checkout key for this payment, used for client-side payment processing by the Checkout SDK."},"metadata":{"example":{},"description":"Metadata for the payment.","type":"object","additionalProperties":true,"nullable":true},"attribution":{"description":"Attribution data for marketing tracking, including UTM parameters and platform click IDs.","type":"object","properties":{"utm_source":{"description":"Traffic source (platform/site)","example":"google","type":"string","nullable":true},"utm_medium":{"description":"Marketing medium/channel","example":"cpc","type":"string","nullable":true},"utm_campaign":{"description":"Campaign name/identifier","example":"summer_sale","type":"string","nullable":true},"utm_term":{"description":"Paid search keywords","example":"running+shoes","type":"string","nullable":true},"utm_content":{"description":"Differentiates ads/links","example":"banner_a","type":"string","nullable":true},"utm_id":{"description":"Used in URLs to assign a unique identifier or numerical ID to a specific marketing campaign","example":"utm_123","type":"string","nullable":true},"utm_contentid":{"description":"Content ID for tracking","example":"content_123","type":"string","nullable":true},"ref_id":{"description":"Reference ID for tracking","example":"ref_abc","type":"string","nullable":true},"fbclid":{"description":"Facebook click identifier","example":"fbclid_abc","type":"string","nullable":true},"cmpid":{"description":"Campaign ID","example":"cmp_123","type":"string","nullable":true},"sub1":{"description":"Sub-tracking parameter 1","type":"string","nullable":true},"sub2":{"description":"Sub-tracking parameter 2","type":"string","nullable":true},"sub3":{"description":"Sub-tracking parameter 3","type":"string","nullable":true},"sub4":{"description":"Sub-tracking parameter 4","type":"string","nullable":true},"sub5":{"description":"Sub-tracking parameter 5","type":"string","nullable":true},"sub6":{"description":"Sub-tracking parameter 6","type":"string","nullable":true},"sub7":{"description":"Sub-tracking parameter 7","type":"string","nullable":true},"sub8":{"description":"Sub-tracking parameter 8","type":"string","nullable":true},"sub9":{"description":"Sub-tracking parameter 9","type":"string","nullable":true},"sub10":{"description":"Sub-tracking parameter 10","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_id","utm_contentid","ref_id","fbclid","cmpid","sub1","sub2","sub3","sub4","sub5","sub6","sub7","sub8","sub9","sub10"]},"retry":{"description":"Retry details for this payment.","type":"object","properties":{"attempts":{"type":"number","description":"The number of retry attempts made","example":2},"nextAt":{"description":"The date when the next retry attempt is scheduled","type":"string","format":"date-time","nullable":true},"nextAmount":{"description":"The amount to be charged for the next retry attempt","example":999,"type":"number","nullable":true}},"required":["attempts","nextAt","nextAmount"],"additionalProperties":false,"nullable":true},"cart":{"description":"Cart associated with the payment, if any","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"ID of the cart"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the cart","example":"eur"},"items":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"ID of the line item"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the line item","example":"usd"},"description":{"type":"string","description":"Buyer-facing text for the line item. Defaults at creation to the price name or the product name, following the merchant's `lineItemDescriptionSource` setting, and can be overridden per line item.","example":"Pro Plan"},"amount":{"type":"number","description":"Amount of the line item in minor units (e.g., cents)","example":1500},"lineAmount":{"type":"number","description":"Line amount of the line item in minor units (e.g., cents), calculated as `amount` * `quantity`","example":3000},"quantity":{"type":"number","description":"Quantity of the line item","example":2},"subscription":{"description":"The subscription ID associated with this line item, if any","type":"string","nullable":true},"price":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","metadata","id","type","active","name","amount","quantity","currency","product","recurringSchedule"],"additionalProperties":false,"description":"The price used for this line item. Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","currency","description","amount","lineAmount","quantity","subscription"],"additionalProperties":false},"description":"List of items in the cart"}},"required":["createdAt","updatedAt","id","currency","items"],"additionalProperties":false,"nullable":true},"paymentMethodOptions":{"type":"object","properties":{"captureMethod":{"description":"Capture method for the payment. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual"]},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring charges. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring charges. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"card":{"description":"Card-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"The processing mode for card payments","example":"cascade"},"gatewayProfile":{"description":"Specific gateway profile to use, bypassing cascade routing. Only present if `mode` is `direct`","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"nullable":true},"cascade":{"description":"The cascade to use for gateway routing. Only present if `mode` is `cascade`","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the cascade"},"name":{"type":"string","example":"My Cascade"},"description":{"example":"Simple cascade","type":"string","nullable":true},"active":{"type":"boolean","description":"Whether the cascade is active and available for routing","example":true},"algorithm":{"type":"string","enum":["roundRobin","weightedRoundRobin","priorityQueue"],"example":"weightedRoundRobin","description":"The algorithm used for gateway selection. Available options: roundRobin, weightedRoundRobin, priorityQueue"}},"required":["createdAt","updatedAt","metadata","id","name","description","active","algorithm"],"additionalProperties":false,"nullable":true},"captureMethod":{"description":"Capture method for card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring charges. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","cascade","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true},"paypal":{"description":"PayPal-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"Processing mode for PayPal payments, will always be `direct`","example":"direct"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile ID for PayPal processing"},"captureMethod":{"description":"Capture method for PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs for PayPal payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring PayPal payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true},"applePay":{"description":"Apple Pay-specific processing options","type":"object","properties":{"mode":{"type":"string","enum":["cascade","direct"],"description":"Processing mode for Apple Pay payments, will always be `direct`","example":"direct"},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile ID for Apple Pay processing"},"captureMethod":{"description":"Capture method for Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"captureDelay":{"description":"Delay in days before capture occurs for Apple Pay payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true},"recurringCaptureMethod":{"description":"Capture method to use for recurring Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic","type":"string","enum":["automatic","automaticDelayed","manual",null],"nullable":true},"recurringCaptureDelay":{"description":"Delay in days before capture occurs for recurring Apple Pay payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7,"type":"number","nullable":true}},"required":["mode","gatewayProfile","captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay"],"additionalProperties":false,"nullable":true}},"additionalProperties":false,"description":"Processing options for the payment. Only available from the dashboard or the API using a secret key.","required":["captureMethod","captureDelay","recurringCaptureMethod","recurringCaptureDelay","card","paypal","applePay"]},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress"],"additionalProperties":false,"description":"Customer associated with the payment","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","metadata","id","type","customer","isDefault"],"additionalProperties":false,"description":"Payment method used for the payment. Only available from the dashboard or the API using a secret key.","nullable":true},"latestTransaction":{"description":"The latest transaction for this payment. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the transaction"},"status":{"type":"string","enum":["pending","confirmation_requested","authorized","failed"],"description":"Current status of the transaction","example":"authorized"},"authentication":{"type":"string","enum":["not_requested","pending","succeeded","failed"],"description":"How far the transaction got through customer authentication — 3-D Secure for a card, the equivalent payer-action step for a redirect-based method. `not_requested` when the gateway never asked for it, so an absent challenge is distinguishable from a failed one.","example":"not_requested"},"amount":{"type":"number","description":"Transaction amount in minor currency units (e.g., 1500 for $15.00)","example":1500},"initiator":{"type":"string","enum":["customer","merchant"],"description":"The initiator of the transaction","example":"customer"},"statementDescriptor":{"description":"The statement descriptor that will appear on the customer's statement. Only available from the dashboard or the API using a secret key.","example":"Hello World","type":"string","nullable":true},"amountReversed":{"type":"number","description":"The amount that has been reversed by refunds or voids","example":0},"amountCaptured":{"type":"number","description":"The amount that has been captured","example":1500},"isReversed":{"type":"boolean","description":"Whether the transaction has been reversed","example":false},"isFullyReversed":{"type":"boolean","description":"Whether the transaction has been fully reversed","example":false},"isCaptureFailed":{"type":"boolean","description":"Whether the capture operation failed","example":false},"isReverseFailed":{"type":"boolean","description":"Whether the reverse operation failed","example":false},"isRefundFailed":{"type":"boolean","description":"Whether the refund operation failed","example":false},"isVoidFailed":{"type":"boolean","description":"Whether the void operation failed","example":false},"isCaptured":{"type":"boolean","description":"Whether the transaction has been captured","example":true},"isChargebacked":{"type":"boolean","description":"Whether the transaction has a chargeback recorded","example":false},"chargebackRecordedAt":{"description":"The timestamp when a chargeback was recorded for this transaction","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"Capture method used for this transaction","example":"automatic"},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable for 'automaticDelayed' capture method.","example":0,"type":"number","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the transaction","example":"usd"},"processorId":{"description":"The external transaction ID from the payment processor. Only available from the dashboard or the API using a secret key.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile used for this transaction. Only available from the dashboard or the API using a secret key."},"execution":{"description":"The cascade execution associated with this transaction. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false,"description":"The payment method used for this transaction"},"customer":{"description":"The ID of the customer associated with this transaction","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","status","authentication","amount","initiator","amountReversed","amountCaptured","isReversed","isFullyReversed","isCaptureFailed","isReverseFailed","isRefundFailed","isVoidFailed","isCaptured","isChargebacked","captureMethod","captureDelay","currency","paymentMethod","customer"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","status","displayStatus","amount","currency","amountReversed","amountCaptured","isCaptured","isRedirectRequired","isReversed","isFullyReversed","isRecovered","isRetrying","initiator","offSessionType","latestMessage","action","metadata","attribution","cart","latestTransaction"]},"PaymentPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"id":{"type":"string","example":"pay_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the payment"},"status":{"type":"string","enum":["open","requires_action","succeeded","cancelled"],"example":"succeeded","description":"Status of the payment"},"displayStatus":{"type":"string","enum":["retrying","chargeback","reversed","cancelled","partially_reversed","succeeded","uncaptured","incomplete","failed","unattempted"],"example":"succeeded","description":"A user-friendly aggregate status for display purposes"},"amount":{"type":"number","example":1500,"description":"Payment amount in minor currency, e.g. 1500 for 15.00 USD"},"note":{"example":"This is a note for the payment","description":"Optional note for the payment. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the payment"},"amountReversed":{"type":"number","example":0,"description":"Amount reversed for the payment"},"amountCaptured":{"type":"number","example":1500,"description":"Amount captured for the payment"},"isCaptured":{"type":"boolean","example":true,"description":"Indicates if the payment has been captured"},"isRedirectRequired":{"type":"boolean","example":false,"description":"Indicates if a redirect is required for the payment"},"isReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been partially reversed"},"isFullyReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been fully reversed"},"isRecovered":{"type":"boolean","example":true,"description":"Whether the payment recovered after one or more retry attempts and eventually succeeded."},"isRetrying":{"type":"boolean","example":true,"description":"Whether the payment is currently in a retrying state after a failed attempt."},"isChargebacked":{"type":"boolean","example":false,"description":"Whether a chargeback has been recorded for this payment. Only available from the dashboard or the API using a secret key."},"chargebackRecordedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when a chargeback was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"authorizedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when an authorization was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"capturedAt":{"example":"2026-01-15T10:35:00.000Z","description":"The timestamp when a capture was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"reversedAt":{"example":"2026-01-20T14:00:00.000Z","description":"The timestamp when a reversal was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"initiator":{"type":"string","enum":["customer","merchant"],"example":"customer","description":"The initiator of the payment, indicating who initiated the payment."},"offSessionType":{"example":"recurring","description":"The off-session type of the payment. Only present for merchant-initiated payments.","type":"string","enum":["recurring","unscheduled",null],"nullable":true},"statementDescriptor":{"example":"Some product","description":"Statement to be shown on bank statement. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"latestMessage":{"example":"Payment was declined by the issuing bank.","description":"Latest message available for the payment. This message is non-sensitive and may be displayed to the customer.","type":"string","nullable":true},"latestDeclineType":{"example":"hard_decline","description":"The decline type for the latest transaction. Only available from the dashboard or the API using a secret key.","type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"action":{"description":"The action that needs to be taken for this payment, e.g. redirecting the customer to a payment gateway.","type":"object","properties":{"redirectUrl":{"type":"string","description":"URL to redirect the customer to for completing payment authentication (e.g., 3D Secure)","example":"https://example.com"}},"required":["redirectUrl"],"additionalProperties":false,"nullable":true},"checkoutKey":{"type":"string","example":"ck_live_abc123def456","description":"The checkout key for this payment, used for client-side payment processing by the Checkout SDK."},"metadata":{"example":{},"description":"Metadata for the payment.","type":"object","additionalProperties":true,"nullable":true},"attribution":{"description":"Attribution data for marketing tracking, including UTM parameters and platform click IDs.","type":"object","properties":{"utm_source":{"description":"Traffic source (platform/site)","example":"google","type":"string","nullable":true},"utm_medium":{"description":"Marketing medium/channel","example":"cpc","type":"string","nullable":true},"utm_campaign":{"description":"Campaign name/identifier","example":"summer_sale","type":"string","nullable":true},"utm_term":{"description":"Paid search keywords","example":"running+shoes","type":"string","nullable":true},"utm_content":{"description":"Differentiates ads/links","example":"banner_a","type":"string","nullable":true},"utm_id":{"description":"Used in URLs to assign a unique identifier or numerical ID to a specific marketing campaign","example":"utm_123","type":"string","nullable":true},"utm_contentid":{"description":"Content ID for tracking","example":"content_123","type":"string","nullable":true},"ref_id":{"description":"Reference ID for tracking","example":"ref_abc","type":"string","nullable":true},"fbclid":{"description":"Facebook click identifier","example":"fbclid_abc","type":"string","nullable":true},"cmpid":{"description":"Campaign ID","example":"cmp_123","type":"string","nullable":true},"sub1":{"description":"Sub-tracking parameter 1","type":"string","nullable":true},"sub2":{"description":"Sub-tracking parameter 2","type":"string","nullable":true},"sub3":{"description":"Sub-tracking parameter 3","type":"string","nullable":true},"sub4":{"description":"Sub-tracking parameter 4","type":"string","nullable":true},"sub5":{"description":"Sub-tracking parameter 5","type":"string","nullable":true},"sub6":{"description":"Sub-tracking parameter 6","type":"string","nullable":true},"sub7":{"description":"Sub-tracking parameter 7","type":"string","nullable":true},"sub8":{"description":"Sub-tracking parameter 8","type":"string","nullable":true},"sub9":{"description":"Sub-tracking parameter 9","type":"string","nullable":true},"sub10":{"description":"Sub-tracking parameter 10","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_id","utm_contentid","ref_id","fbclid","cmpid","sub1","sub2","sub3","sub4","sub5","sub6","sub7","sub8","sub9","sub10"]},"retry":{"description":"Retry details for this payment.","type":"object","properties":{"attempts":{"type":"number","description":"The number of retry attempts made","example":2},"nextAt":{"description":"The date when the next retry attempt is scheduled","type":"string","format":"date-time","nullable":true},"nextAmount":{"description":"The amount to be charged for the next retry attempt","example":999,"type":"number","nullable":true}},"required":["attempts","nextAt","nextAmount"],"additionalProperties":false,"nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress"],"additionalProperties":false,"description":"Customer associated with the payment","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","metadata","id","type","customer","isDefault"],"additionalProperties":false,"description":"Payment method used for the payment. Only available from the dashboard or the API using a secret key.","nullable":true},"latestTransaction":{"description":"The latest transaction for this payment. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the transaction"},"status":{"type":"string","enum":["pending","confirmation_requested","authorized","failed"],"description":"Current status of the transaction","example":"authorized"},"authentication":{"type":"string","enum":["not_requested","pending","succeeded","failed"],"description":"How far the transaction got through customer authentication — 3-D Secure for a card, the equivalent payer-action step for a redirect-based method. `not_requested` when the gateway never asked for it, so an absent challenge is distinguishable from a failed one.","example":"not_requested"},"amount":{"type":"number","description":"Transaction amount in minor currency units (e.g., 1500 for $15.00)","example":1500},"initiator":{"type":"string","enum":["customer","merchant"],"description":"The initiator of the transaction","example":"customer"},"statementDescriptor":{"description":"The statement descriptor that will appear on the customer's statement. Only available from the dashboard or the API using a secret key.","example":"Hello World","type":"string","nullable":true},"amountReversed":{"type":"number","description":"The amount that has been reversed by refunds or voids","example":0},"amountCaptured":{"type":"number","description":"The amount that has been captured","example":1500},"isReversed":{"type":"boolean","description":"Whether the transaction has been reversed","example":false},"isFullyReversed":{"type":"boolean","description":"Whether the transaction has been fully reversed","example":false},"isCaptureFailed":{"type":"boolean","description":"Whether the capture operation failed","example":false},"isReverseFailed":{"type":"boolean","description":"Whether the reverse operation failed","example":false},"isRefundFailed":{"type":"boolean","description":"Whether the refund operation failed","example":false},"isVoidFailed":{"type":"boolean","description":"Whether the void operation failed","example":false},"isCaptured":{"type":"boolean","description":"Whether the transaction has been captured","example":true},"isChargebacked":{"type":"boolean","description":"Whether the transaction has a chargeback recorded","example":false},"chargebackRecordedAt":{"description":"The timestamp when a chargeback was recorded for this transaction","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"Capture method used for this transaction","example":"automatic"},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable for 'automaticDelayed' capture method.","example":0,"type":"number","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the transaction","example":"usd"},"processorId":{"description":"The external transaction ID from the payment processor. Only available from the dashboard or the API using a secret key.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile used for this transaction. Only available from the dashboard or the API using a secret key."},"execution":{"description":"The cascade execution associated with this transaction. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false,"description":"The payment method used for this transaction"},"customer":{"description":"The ID of the customer associated with this transaction","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","status","authentication","amount","initiator","amountReversed","amountCaptured","isReversed","isFullyReversed","isCaptureFailed","isReverseFailed","isRefundFailed","isVoidFailed","isCaptured","isChargebacked","captureMethod","captureDelay","currency","paymentMethod","customer"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","status","displayStatus","amount","currency","amountReversed","amountCaptured","isCaptured","isRedirectRequired","isReversed","isFullyReversed","isRecovered","isRetrying","initiator","offSessionType","latestMessage","action","metadata","attribution","latestTransaction"]},"CreateApplePaySessionResponseDTO":{"type":"object","properties":{"sessionData":{"type":"string","description":"Base-64 encoded Apple Pay session data"}},"required":["sessionData"]},"CheckoutDetailsDTO":{"type":"object","properties":{"payment":{"type":"string","description":"ID of the payment associated with this checkout session"},"amount":{"type":"number","description":"Amount in smallest currency unit"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency code in ISO 4217 format","example":"usd"},"countryCode":{"type":"string","description":"Country code in ISO 3166-1 alpha-2 format"},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"List of supported payment method types for this checkout session"},"vgsJwt":{"description":"Short-lived VGS access token for initializing VGS Collect. Only present when VGS is configured.","type":"string"}},"required":["payment","amount","currency","countryCode","supportedPaymentMethods"]},"PaymentSupportedPaymentMethodsDTO":{"type":"object","properties":{"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Array of supported payment methods for this payment","example":["card","paypal"]}},"required":["supportedPaymentMethods"]},"RetryPolicyDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the retry policy"},"title":{"type":"string","description":"Human-readable name for the retry policy","example":"Default Retry Policy"},"isDefault":{"type":"boolean","description":"Whether this policy is the default retry policy applied when no specific policy is configured","example":false},"isEnabled":{"type":"boolean","description":"Whether payment retries are active for this policy","example":true},"steps":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"retryPolicy":{"type":"string","description":"The unique identifier of the parent retry policy"},"position":{"type":"number","description":"Position of this step in the retry sequence (lower = earlier)","example":8},"isEnabled":{"type":"boolean","description":"Whether this retry step is enabled","example":true},"useInitialGateway":{"type":"boolean","description":"Whether to use the same gateway that was used for the initial payment attempt","example":true},"gatewayProfile":{"description":"The ID of the gateway profile to use for this retry step","type":"string","nullable":true},"priceReductionPercentage":{"type":"number","description":"Percentage to reduce the original price by for this retry attempt (0-100)","example":15},"retryDelay":{"type":"number","description":"Delay in days before this retry step is executed","example":3}},"required":["createdAt","updatedAt","retryPolicy","position","useInitialGateway","gatewayProfile","priceReductionPercentage","retryDelay"],"additionalProperties":false},"description":"The ordered list of retry steps that define the retry strategy"}},"required":["createdAt","updatedAt","id","title","isDefault","steps"]},"PublishableKeyDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pkey_2Qd6jF5e5bTGCQuQi0u5Uru0k1h","description":"Unique identifier of the publishable key"},"value":{"type":"string","description":"The publishable key value, safe for client-side exposure and used in checkout integration","example":"pk_live_a1b2c3d4e5f6g7h8"},"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"List of CORS allowed origins for this key, specified as URLs including the protocol","example":["https://example.com","https://www.example.com"]},"isActive":{"type":"boolean","description":"Whether this publishable key is currently active","example":true}},"required":["createdAt","updatedAt","id","value","allowedOrigins","isActive"]},"InvoiceDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The ID of the invoice"},"status":{"type":"string","enum":["open","paid","voided"],"example":"open","description":"The status of the invoice"},"voidedReason":{"example":"Grace period expired","description":"The reason for voiding the invoice","type":"string","nullable":true},"comment":{"example":"This is a comment for the invoice","description":"An optional comment for the invoice","type":"string","nullable":true},"amount":{"type":"number","example":999,"description":"The intended amount to pay for the invoice. The actual amount paid can differ if retrying with a percentage discount, in which case the actual amount paid can be found in `payment.amount`"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"The currency of the amount to be charged"},"type":{"type":"string","enum":["setup","recurring"],"example":"setup","description":"Indicates whether the invoice is the one that sets up the subscription, or a recurring one"},"number":{"type":"string","description":"Sequential, unique, and human-readable number of the invoice","example":"2W12-1004"},"subscription":{"type":"string","description":"The ID of the subscription associated with this invoice","nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"],"additionalProperties":false,"description":"The customer associated with this invoice"},"payment":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"id":{"type":"string","example":"pay_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the payment"},"status":{"type":"string","enum":["open","requires_action","succeeded","cancelled"],"example":"succeeded","description":"Status of the payment"},"displayStatus":{"type":"string","enum":["retrying","chargeback","reversed","cancelled","partially_reversed","succeeded","uncaptured","incomplete","failed","unattempted"],"example":"succeeded","description":"A user-friendly aggregate status for display purposes"},"amount":{"type":"number","example":1500,"description":"Payment amount in minor currency, e.g. 1500 for 15.00 USD"},"note":{"example":"This is a note for the payment","description":"Optional note for the payment. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the payment"},"amountReversed":{"type":"number","example":0,"description":"Amount reversed for the payment"},"amountCaptured":{"type":"number","example":1500,"description":"Amount captured for the payment"},"isCaptured":{"type":"boolean","example":true,"description":"Indicates if the payment has been captured"},"isRedirectRequired":{"type":"boolean","example":false,"description":"Indicates if a redirect is required for the payment"},"isReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been partially reversed"},"isFullyReversed":{"type":"boolean","example":false,"description":"Indicates if the payment has been fully reversed"},"isRecovered":{"type":"boolean","example":true,"description":"Whether the payment recovered after one or more retry attempts and eventually succeeded."},"isRetrying":{"type":"boolean","example":true,"description":"Whether the payment is currently in a retrying state after a failed attempt."},"isChargebacked":{"type":"boolean","example":false,"description":"Whether a chargeback has been recorded for this payment. Only available from the dashboard or the API using a secret key."},"chargebackRecordedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when a chargeback was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"authorizedAt":{"example":"2026-01-15T10:30:00.000Z","description":"The timestamp when an authorization was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"capturedAt":{"example":"2026-01-15T10:35:00.000Z","description":"The timestamp when a capture was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"reversedAt":{"example":"2026-01-20T14:00:00.000Z","description":"The timestamp when a reversal was recorded for this payment. Only available from the dashboard or the API using a secret key.","type":"string","format":"date-time","nullable":true},"initiator":{"type":"string","enum":["customer","merchant"],"example":"customer","description":"The initiator of the payment, indicating who initiated the payment."},"offSessionType":{"example":"recurring","description":"The off-session type of the payment. Only present for merchant-initiated payments.","type":"string","enum":["recurring","unscheduled",null],"nullable":true},"statementDescriptor":{"example":"Some product","description":"Statement to be shown on bank statement. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"latestMessage":{"example":"Payment was declined by the issuing bank.","description":"Latest message available for the payment. This message is non-sensitive and may be displayed to the customer.","type":"string","nullable":true},"latestDeclineType":{"example":"hard_decline","description":"The decline type for the latest transaction. Only available from the dashboard or the API using a secret key.","type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"action":{"description":"The action that needs to be taken for this payment, e.g. redirecting the customer to a payment gateway.","type":"object","properties":{"redirectUrl":{"type":"string","description":"URL to redirect the customer to for completing payment authentication (e.g., 3D Secure)","example":"https://example.com"}},"required":["redirectUrl"],"additionalProperties":false,"nullable":true},"checkoutKey":{"type":"string","example":"ck_live_abc123def456","description":"The checkout key for this payment, used for client-side payment processing by the Checkout SDK."},"metadata":{"example":{},"description":"Metadata for the payment.","type":"object","additionalProperties":true,"nullable":true},"attribution":{"description":"Attribution data for marketing tracking, including UTM parameters and platform click IDs.","type":"object","properties":{"utm_source":{"description":"Traffic source (platform/site)","example":"google","type":"string","nullable":true},"utm_medium":{"description":"Marketing medium/channel","example":"cpc","type":"string","nullable":true},"utm_campaign":{"description":"Campaign name/identifier","example":"summer_sale","type":"string","nullable":true},"utm_term":{"description":"Paid search keywords","example":"running+shoes","type":"string","nullable":true},"utm_content":{"description":"Differentiates ads/links","example":"banner_a","type":"string","nullable":true},"utm_id":{"description":"Used in URLs to assign a unique identifier or numerical ID to a specific marketing campaign","example":"utm_123","type":"string","nullable":true},"utm_contentid":{"description":"Content ID for tracking","example":"content_123","type":"string","nullable":true},"ref_id":{"description":"Reference ID for tracking","example":"ref_abc","type":"string","nullable":true},"fbclid":{"description":"Facebook click identifier","example":"fbclid_abc","type":"string","nullable":true},"cmpid":{"description":"Campaign ID","example":"cmp_123","type":"string","nullable":true},"sub1":{"description":"Sub-tracking parameter 1","type":"string","nullable":true},"sub2":{"description":"Sub-tracking parameter 2","type":"string","nullable":true},"sub3":{"description":"Sub-tracking parameter 3","type":"string","nullable":true},"sub4":{"description":"Sub-tracking parameter 4","type":"string","nullable":true},"sub5":{"description":"Sub-tracking parameter 5","type":"string","nullable":true},"sub6":{"description":"Sub-tracking parameter 6","type":"string","nullable":true},"sub7":{"description":"Sub-tracking parameter 7","type":"string","nullable":true},"sub8":{"description":"Sub-tracking parameter 8","type":"string","nullable":true},"sub9":{"description":"Sub-tracking parameter 9","type":"string","nullable":true},"sub10":{"description":"Sub-tracking parameter 10","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_id","utm_contentid","ref_id","fbclid","cmpid","sub1","sub2","sub3","sub4","sub5","sub6","sub7","sub8","sub9","sub10"]},"retry":{"description":"Retry details for this payment.","type":"object","properties":{"attempts":{"type":"number","description":"The number of retry attempts made","example":2},"nextAt":{"description":"The date when the next retry attempt is scheduled","type":"string","format":"date-time","nullable":true},"nextAmount":{"description":"The amount to be charged for the next retry attempt","example":999,"type":"number","nullable":true}},"required":["attempts","nextAt","nextAmount"],"additionalProperties":false,"nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress"],"additionalProperties":false,"description":"Customer associated with the payment","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","metadata","id","type","customer","isDefault"],"additionalProperties":false,"description":"Payment method used for the payment. Only available from the dashboard or the API using a secret key.","nullable":true},"latestTransaction":{"description":"The latest transaction for this payment. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the transaction"},"status":{"type":"string","enum":["pending","confirmation_requested","authorized","failed"],"description":"Current status of the transaction","example":"authorized"},"authentication":{"type":"string","enum":["not_requested","pending","succeeded","failed"],"description":"How far the transaction got through customer authentication — 3-D Secure for a card, the equivalent payer-action step for a redirect-based method. `not_requested` when the gateway never asked for it, so an absent challenge is distinguishable from a failed one.","example":"not_requested"},"amount":{"type":"number","description":"Transaction amount in minor currency units (e.g., 1500 for $15.00)","example":1500},"initiator":{"type":"string","enum":["customer","merchant"],"description":"The initiator of the transaction","example":"customer"},"statementDescriptor":{"description":"The statement descriptor that will appear on the customer's statement. Only available from the dashboard or the API using a secret key.","example":"Hello World","type":"string","nullable":true},"amountReversed":{"type":"number","description":"The amount that has been reversed by refunds or voids","example":0},"amountCaptured":{"type":"number","description":"The amount that has been captured","example":1500},"isReversed":{"type":"boolean","description":"Whether the transaction has been reversed","example":false},"isFullyReversed":{"type":"boolean","description":"Whether the transaction has been fully reversed","example":false},"isCaptureFailed":{"type":"boolean","description":"Whether the capture operation failed","example":false},"isReverseFailed":{"type":"boolean","description":"Whether the reverse operation failed","example":false},"isRefundFailed":{"type":"boolean","description":"Whether the refund operation failed","example":false},"isVoidFailed":{"type":"boolean","description":"Whether the void operation failed","example":false},"isCaptured":{"type":"boolean","description":"Whether the transaction has been captured","example":true},"isChargebacked":{"type":"boolean","description":"Whether the transaction has a chargeback recorded","example":false},"chargebackRecordedAt":{"description":"The timestamp when a chargeback was recorded for this transaction","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"Capture method used for this transaction","example":"automatic"},"captureDelay":{"description":"Delay in days before capture occurs. Only applicable for 'automaticDelayed' capture method.","example":0,"type":"number","nullable":true},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the transaction","example":"usd"},"processorId":{"description":"The external transaction ID from the payment processor. Only available from the dashboard or the API using a secret key.","example":"ch_1J8lZpJ9j1bSv2Jr6sVjXZ1N","type":"string","nullable":true},"outcome":{"description":"Outcome details from the gateway operation. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"status":{"type":"string","enum":["success","partial","failure"]},"errorCode":{"type":"string","enum":["internal_error","not_supported","generic_decline","insufficient_funds","authentication_failed","authentication_cancelled","authentication_unavailable","cancelled","invalid_card_details","expired_card","transaction_not_permitted","generic_issuer_error","generic_processor_error","processor_rate_limited","processor_timeout","fraud_suspected","card_restricted","authentication_rejected","generic_hard_decline",null],"nullable":true},"errorMessage":{"type":"string","nullable":true},"errorCodeUnmapped":{"type":"boolean","nullable":true},"safeErrorMessage":{"type":"string","nullable":true},"declineType":{"type":"string","enum":["soft_decline","hard_decline",null],"nullable":true},"retryStrategy":{"type":"string","enum":["never_retry","retry_with_new_payment_method","retry_after_delay","retry_immediately",null],"nullable":true},"specialCode":{"type":"string","enum":["confirmation_requested",null],"nullable":true},"processorCode":{"type":"string","nullable":true},"processorMessage":{"type":"string","nullable":true}},"required":["status","errorCode","errorMessage","safeErrorMessage","declineType","retryStrategy","specialCode","processorCode","processorMessage"],"additionalProperties":false,"nullable":true},"gatewayProfile":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"gwp_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the Gateway Profile"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active and available for processing"},"title":{"type":"string","example":"Profile #1","description":"Title of the Gateway Profile"},"integration":{"type":"string","enum":["stripe","adyen","checkout","paypal"],"example":"stripe","description":"Associated Gateway Integration"},"environment":{"example":"test","description":"The environment the gateway profile operates in","type":"string","enum":["live","test",null],"nullable":true},"supportedPaymentMethods":{"type":"array","items":{"type":"string","enum":["card","paypal","applePay"]},"description":"Supported payment methods for the Gateway Profile"}},"required":["createdAt","updatedAt","metadata","id","active","title","integration","environment","supportedPaymentMethods"],"additionalProperties":false,"description":"Gateway profile used for this transaction. Only available from the dashboard or the API using a secret key."},"execution":{"description":"The cascade execution associated with this transaction. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"paymentMethod":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"pm_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the payment method"},"type":{"type":"string","enum":["card","paypal","applePay"],"example":"card","description":"The type of the payment method"},"customer":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer who this payment method belongs to","nullable":true},"isDefault":{"type":"boolean","example":false,"description":"Whether the payment method is the default one for the customer"},"card":{"description":"The card details of the payment method, only present if the type is `card`","type":"object","properties":{"brand":{"example":"amex","description":"The brand of the card","type":"string","enum":["visa","mastercard","amex","discover",null],"nullable":true},"lastFour":{"type":"string","example":"1234","description":"The last four digits of the card"},"bin":{"type":"string","example":"123456","description":"The card BIN/IIN (Bank/Issuer Identification Number) - 4 to 8 digits"},"expMonth":{"example":"12","description":"The expiration month of the card (in MM format)","type":"string","nullable":true},"expYear":{"example":"2025","description":"The expiration year of the card (in YYYY format)","type":"string","nullable":true},"cardholderName":{"example":"John Doe","description":"The name on the card","type":"string","nullable":true}},"required":["brand","lastFour","bin","expMonth","expYear","cardholderName"],"additionalProperties":false,"nullable":true},"applePay":{"description":"The Apple Pay details of the payment method, only present if the type is `apple_pay`","type":"object","properties":{"displayName":{"description":"The display name of the Apple Pay payment method","example":"MasterCard 1234","type":"string","nullable":true}},"additionalProperties":false,"nullable":true,"required":["displayName"]}},"required":["createdAt","updatedAt","id","type","customer","isDefault"],"additionalProperties":false,"description":"The payment method used for this transaction"},"customer":{"description":"The ID of the customer associated with this transaction","type":"string","nullable":true}},"required":["createdAt","updatedAt","id","status","authentication","amount","initiator","amountReversed","amountCaptured","isReversed","isFullyReversed","isCaptureFailed","isReverseFailed","isRefundFailed","isVoidFailed","isCaptured","isChargebacked","captureMethod","captureDelay","currency","paymentMethod","customer"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","status","displayStatus","amount","currency","amountReversed","amountCaptured","isCaptured","isRedirectRequired","isReversed","isFullyReversed","isRecovered","isRetrying","initiator","offSessionType","latestMessage","action","metadata","attribution","latestTransaction"],"additionalProperties":false,"description":"The payment associated with this invoice","nullable":true}},"required":["createdAt","updatedAt","id","status","voidedReason","comment","amount","currency","type","number","subscription","customer","payment"]},"InvoicePartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The ID of the invoice"},"status":{"type":"string","enum":["open","paid","voided"],"example":"open","description":"The status of the invoice"},"voidedReason":{"example":"Grace period expired","description":"The reason for voiding the invoice","type":"string","nullable":true},"comment":{"example":"This is a comment for the invoice","description":"An optional comment for the invoice","type":"string","nullable":true},"amount":{"type":"number","example":999,"description":"The intended amount to pay for the invoice. The actual amount paid can differ if retrying with a percentage discount, in which case the actual amount paid can be found in `payment.amount`"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"The currency of the amount to be charged"},"type":{"type":"string","enum":["setup","recurring"],"example":"setup","description":"Indicates whether the invoice is the one that sets up the subscription, or a recurring one"},"number":{"type":"string","description":"Sequential, unique, and human-readable number of the invoice","example":"2W12-1004"},"subscription":{"type":"string","description":"The ID of the subscription associated with this invoice","nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"],"additionalProperties":false,"description":"The customer associated with this invoice"}},"required":["createdAt","updatedAt","id","status","voidedReason","comment","amount","currency","type","number","subscription","customer"]},"JobItemDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"job_item_2QEpCL2gXIgEslJf7iSvHLTuZ9N","description":"The unique identifier of the job item"},"status":{"type":"string","enum":["queued","in_progress","completed","failed"],"description":"Current status of the job item","example":"completed"},"statusMessage":{"description":"Optional status message providing additional details","example":"Processed successfully","type":"string","nullable":true},"input":{"type":"object","additionalProperties":true,"description":"Input data for the job item","example":{"userId":"user_123","action":"send_email"}}},"required":["createdAt","updatedAt","id","status","statusMessage","input"]},"JobDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the job"},"type":{"type":"string","description":"Type of the job","example":"subscription-migrate-price"},"name":{"type":"string","description":"Name of the job","example":"Migrate subscriptions from price_abc to price_xyz"},"status":{"type":"string","enum":["queued","in_progress","completed","failed"],"description":"Current status of the job","example":"failed"},"statusMessage":{"description":"Optional status message providing additional details about the job","example":"Failed due to timeout","type":"string","nullable":true},"input":{"type":"object","additionalProperties":true,"description":"Input data for the job","example":{"priceFrom":"price_abc","priceTo":"price_xyz"}},"progress":{"type":"number","description":"Progress of the job as a percentage, 0-100","example":75}},"required":["createdAt","updatedAt","id","type","name","status","statusMessage","input","progress"]},"RequestLogDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"req_log_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The unique identifier of the request log entry"},"requestId":{"type":"string","description":"Unique request identifier for correlating log entries","example":"abc123"},"url":{"type":"string","description":"The URL path of the API request","example":"/api/payments"},"method":{"type":"string","description":"HTTP method of the request","example":"POST"},"clientIp":{"description":"IP address of the client that made the request","example":"192.168.1.1","type":"string","nullable":true},"userAgent":{"description":"User-Agent header from the client request","example":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)","type":"string","nullable":true},"requestHeaders":{"description":"HTTP request headers captured for this log entry","type":"object","additionalProperties":true,"nullable":true},"requestBody":{"description":"The request body payload. May be redacted for PCI compliance.","type":"object","additionalProperties":true,"nullable":true},"responseBody":{"description":"The response body payload. May be redacted for PCI compliance.","type":"object","additionalProperties":true,"nullable":true},"statusCode":{"description":"HTTP response status code","example":200,"type":"number","nullable":true},"initiator":{"description":"The type of access key used to make the request","type":"string","enum":["publishableKey","secretKey","checkoutKey","sessionKey","identityToken",null],"nullable":true}},"required":["createdAt","updatedAt","id","requestId","url","method","clientIp","userAgent","requestHeaders","requestBody","responseBody","statusCode","initiator"]},"SecretKeyDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"skey_2R6lBd1IxNUPqtsQLcJU2PFtyAD","description":"Unique identifier of the secret key"},"active":{"type":"boolean","description":"Whether the secret key is active and can be used for API authentication","example":true},"maskedValue":{"type":"string","description":"Masked representation of the secret key, showing only the last four characters","example":"sk_****...a1b2"},"note":{"type":"string","description":"User-provided note for identifying this secret key","example":"Production backend key","nullable":true},"permissions":{"type":"array","items":{"type":"string","enum":["customer:read","customer:create","customer:update","customer:manage_restrictions","payment:read","payment:create","payment:authorize","payment:update","payment:capture","payment:reverse","payment:record_chargeback","payment:create_apple_pay_session","price:read","price:create","price:update","price:delete","job:read","product:read","product:create","product:update","secret_key:read","secret_key:create","secret_key:update","secret_key:delete","publishable_key:read","publishable_key:roll","publishable_key:update","invoice:read","invoice:void","gateway_profile:read","gateway_profile:create","gateway_profile:update","gateway_operation:read","customer_blacklist:read","customer_blacklist:create","customer_blacklist:delete","payment_method:read","request_log:read","cascade:read","cascade:create","cascade:update","webhook_subscriber:read","webhook_subscriber:create","webhook_subscriber:update","retry_policy:read","retry_policy:create","retry_policy:update","user:read","user:create","user:update","user:delete","subscription:read","subscription:cancel","subscription:resume","subscription:force_bill","subscription:preview","subscription:update","checkout_profile:read","checkout_profile:create","checkout_profile:update","merchant_config:read","merchant_config:update","search:read","report:read"]},"description":"Permissions of the secret key","example":["payment:read","payment:create"]}},"required":["createdAt","updatedAt","id","active","maskedValue","note","permissions"]},"SecretKeyPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"skey_2R6lBd1IxNUPqtsQLcJU2PFtyAD","description":"Unique identifier of the secret key"},"active":{"type":"boolean","description":"Whether the secret key is active and can be used for API authentication","example":true},"maskedValue":{"type":"string","description":"Masked representation of the secret key, showing only the last four characters","example":"sk_****...a1b2"},"note":{"type":"string","description":"User-provided note for identifying this secret key","example":"Production backend key","nullable":true},"permissions":{"type":"array","items":{"type":"string","enum":["customer:read","customer:create","customer:update","customer:manage_restrictions","payment:read","payment:create","payment:authorize","payment:update","payment:capture","payment:reverse","payment:record_chargeback","payment:create_apple_pay_session","price:read","price:create","price:update","price:delete","job:read","product:read","product:create","product:update","secret_key:read","secret_key:create","secret_key:update","secret_key:delete","publishable_key:read","publishable_key:roll","publishable_key:update","invoice:read","invoice:void","gateway_profile:read","gateway_profile:create","gateway_profile:update","gateway_operation:read","customer_blacklist:read","customer_blacklist:create","customer_blacklist:delete","payment_method:read","request_log:read","cascade:read","cascade:create","cascade:update","webhook_subscriber:read","webhook_subscriber:create","webhook_subscriber:update","retry_policy:read","retry_policy:create","retry_policy:update","user:read","user:create","user:update","user:delete","subscription:read","subscription:cancel","subscription:resume","subscription:force_bill","subscription:preview","subscription:update","checkout_profile:read","checkout_profile:create","checkout_profile:update","merchant_config:read","merchant_config:update","search:read","report:read"]},"description":"Permissions of the secret key","example":["payment:read","payment:create"]}},"required":["createdAt","updatedAt","id","active","maskedValue","note","permissions"]},"SecretKeyWithKeyDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"skey_2R6lBd1IxNUPqtsQLcJU2PFtyAD","description":"Unique identifier of the secret key"},"active":{"type":"boolean","description":"Whether the secret key is active and can be used for API authentication","example":true},"maskedValue":{"type":"string","description":"Masked representation of the secret key, showing only the last four characters","example":"sk_****...a1b2"},"note":{"type":"string","description":"User-provided note for identifying this secret key","example":"Production backend key","nullable":true},"permissions":{"type":"array","items":{"type":"string","enum":["customer:read","customer:create","customer:update","customer:manage_restrictions","payment:read","payment:create","payment:authorize","payment:update","payment:capture","payment:reverse","payment:record_chargeback","payment:create_apple_pay_session","price:read","price:create","price:update","price:delete","job:read","product:read","product:create","product:update","secret_key:read","secret_key:create","secret_key:update","secret_key:delete","publishable_key:read","publishable_key:roll","publishable_key:update","invoice:read","invoice:void","gateway_profile:read","gateway_profile:create","gateway_profile:update","gateway_operation:read","customer_blacklist:read","customer_blacklist:create","customer_blacklist:delete","payment_method:read","request_log:read","cascade:read","cascade:create","cascade:update","webhook_subscriber:read","webhook_subscriber:create","webhook_subscriber:update","retry_policy:read","retry_policy:create","retry_policy:update","user:read","user:create","user:update","user:delete","subscription:read","subscription:cancel","subscription:resume","subscription:force_bill","subscription:preview","subscription:update","checkout_profile:read","checkout_profile:create","checkout_profile:update","merchant_config:read","merchant_config:update","search:read","report:read"]},"description":"Permissions of the secret key","example":["payment:read","payment:create"]},"value":{"type":"string","description":"The full secret key value. Only returned once upon creation and cannot be retrieved again","example":"sk_live_a1b2c3d4e5f6g7h8i9j0"}},"required":["createdAt","updatedAt","id","active","maskedValue","note","permissions","value"]},"SubscriptionDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"sub_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the subscription"},"status":{"type":"string","enum":["active","cancelled"],"example":"active","description":"The status of the subscription"},"isRecovering":{"type":"boolean","example":false,"description":"Whether the subscription is recovering from a failed payment"},"autoBillingEnabled":{"type":"boolean","example":true,"description":"Whether the subscription is going to be billed automatically"},"autoBillingDisabledAt":{"description":"The date when auto billing was disabled","type":"string","format":"date-time","nullable":true},"autoBillingDisabledReason":{"example":"subscription_cancelled","description":"The reason why auto billing was disabled","type":"string","enum":["recurring_payment_errored","subscription_cancelled","latest_invoice_retrying",null],"nullable":true},"startDate":{"description":"The start date of the subscription","type":"string","format":"date-time"},"endDate":{"description":"The end date of the subscription, if it has ended","type":"string","format":"date-time","nullable":true},"cancelAtPeriodEnd":{"type":"boolean","example":true,"description":"Whether the subscription should be cancelled when current billing cycle ends"},"cancelAtCycle":{"example":2,"description":"The cycle at whose end the subscription is scheduled to be cancelled, or absent when no cancellation is scheduled. Equals `currentCycle` once `cancelAtPeriodEnd` is true","type":"number","nullable":true},"currentCycle":{"type":"number","example":1,"description":"The current cycle of the subscription, starting from 1"},"currentPeriodStart":{"description":"The start date of the current billing period","type":"string","format":"date-time"},"currentPeriodEnd":{"description":"The end date of the current billing period","type":"string","format":"date-time"},"setupInvoice":{"type":"string","description":"The ID of the invoice that set up the subscription"},"setupLineItem":{"description":"The ID of the line item that set up the subscription","type":"string","nullable":true},"billingSettings":{"type":"object","properties":{"paymentMethodType":{"type":"string","enum":["card","paypal","applePay"],"description":"The payment method type used for recurring billing"},"gatewayProfile":{"type":"string","description":"The gateway profile used for recurring billing"},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"The capture method used for recurring billing"},"captureDelay":{"example":3,"description":"The capture delay in days, if applicable","type":"number","nullable":true}},"required":["paymentMethodType","gatewayProfile","captureMethod","captureDelay"],"additionalProperties":false,"description":"The billing settings for recurring charges"},"upcomingInvoice":{"description":"The upcoming invoice details","type":"object","properties":{"amount":{"type":"number","description":"Amount to be charged for the upcoming invoice.","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the upcoming invoice.","example":"usd"},"periodStart":{"description":"Start date of the billing period.","example":"2023-01-01T00:00:00Z","type":"string","format":"date-time"},"periodEnd":{"description":"End date of the billing period.","example":"2023-01-31T23:59:59Z","type":"string","format":"date-time"},"statementDescriptor":{"description":"Statement descriptor for the upcoming invoice.","example":"SUBSCRIPTION","type":"string","nullable":true},"comment":{"description":"Comment for the upcoming invoice.","example":"Invoice for subscription 123, period January 2023","type":"string","nullable":true}},"required":["amount","currency","periodStart","periodEnd","statementDescriptor","comment"],"additionalProperties":false,"nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress"],"additionalProperties":false,"description":"The customer associated with the subscription"},"price":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for `recurring` prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"bsch_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the billing schedule"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing schedule","example":"usd"},"cycleDefinitions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"position":{"type":"number","description":"Position of the billing cycle in the schedule. Used for ordering.","example":1},"amount":{"type":"number","description":"Amount to be charged for this billing cycle in minor units (e.g., cents)","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing cycle","example":"usd"},"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Unit of time for the billing cycle interval"},"intervalValue":{"type":"number","description":"Value of the billing cycle interval"}},"required":["createdAt","updatedAt","metadata","position","amount","currency","intervalUnit","intervalValue"],"additionalProperties":false}}},"required":["createdAt","updatedAt","metadata","id","currency","cycleDefinitions"],"additionalProperties":false,"nullable":true},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","type","active","amount","quantity","currency"],"additionalProperties":false,"description":"The price details of the subscription"},"invoices":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The ID of the invoice"},"status":{"type":"string","enum":["open","paid","voided"],"example":"open","description":"The status of the invoice"},"voidedReason":{"example":"Grace period expired","description":"The reason for voiding the invoice","type":"string","nullable":true},"comment":{"example":"This is a comment for the invoice","description":"An optional comment for the invoice","type":"string","nullable":true},"amount":{"type":"number","example":999,"description":"The intended amount to pay for the invoice. The actual amount paid can differ if retrying with a percentage discount, in which case the actual amount paid can be found in `payment.amount`"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"The currency of the amount to be charged"},"type":{"type":"string","enum":["setup","recurring"],"example":"setup","description":"Indicates whether the invoice is the one that sets up the subscription, or a recurring one"},"number":{"type":"string","description":"Sequential, unique, and human-readable number of the invoice","example":"2W12-1004"},"subscription":{"type":"string","description":"The ID of the subscription associated with this invoice","nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender"],"additionalProperties":false,"description":"The customer associated with this invoice"}},"required":["createdAt","updatedAt","id","status","voidedReason","comment","amount","currency","type","number","subscription","customer"],"additionalProperties":false},"description":"The list of invoices associated with the subscription"}},"required":["createdAt","updatedAt","id","status","isRecovering","autoBillingEnabled","autoBillingDisabledAt","autoBillingDisabledReason","startDate","endDate","cancelAtPeriodEnd","cancelAtCycle","currentCycle","currentPeriodStart","currentPeriodEnd","setupInvoice","setupLineItem","billingSettings","upcomingInvoice","customer","price","invoices"]},"SubscriptionPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"sub_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the subscription"},"status":{"type":"string","enum":["active","cancelled"],"example":"active","description":"The status of the subscription"},"isRecovering":{"type":"boolean","example":false,"description":"Whether the subscription is recovering from a failed payment"},"autoBillingEnabled":{"type":"boolean","example":true,"description":"Whether the subscription is going to be billed automatically"},"autoBillingDisabledAt":{"description":"The date when auto billing was disabled","type":"string","format":"date-time","nullable":true},"autoBillingDisabledReason":{"example":"subscription_cancelled","description":"The reason why auto billing was disabled","type":"string","enum":["recurring_payment_errored","subscription_cancelled","latest_invoice_retrying",null],"nullable":true},"startDate":{"description":"The start date of the subscription","type":"string","format":"date-time"},"endDate":{"description":"The end date of the subscription, if it has ended","type":"string","format":"date-time","nullable":true},"cancelAtPeriodEnd":{"type":"boolean","example":true,"description":"Whether the subscription should be cancelled when current billing cycle ends"},"cancelAtCycle":{"example":2,"description":"The cycle at whose end the subscription is scheduled to be cancelled, or absent when no cancellation is scheduled. Equals `currentCycle` once `cancelAtPeriodEnd` is true","type":"number","nullable":true},"currentCycle":{"type":"number","example":1,"description":"The current cycle of the subscription, starting from 1"},"currentPeriodStart":{"description":"The start date of the current billing period","type":"string","format":"date-time"},"currentPeriodEnd":{"description":"The end date of the current billing period","type":"string","format":"date-time"},"setupInvoice":{"type":"string","description":"The ID of the invoice that set up the subscription"},"setupLineItem":{"description":"The ID of the line item that set up the subscription","type":"string","nullable":true},"billingSettings":{"type":"object","properties":{"paymentMethodType":{"type":"string","enum":["card","paypal","applePay"],"description":"The payment method type used for recurring billing"},"gatewayProfile":{"type":"string","description":"The gateway profile used for recurring billing"},"captureMethod":{"type":"string","enum":["automatic","automaticDelayed","manual"],"description":"The capture method used for recurring billing"},"captureDelay":{"example":3,"description":"The capture delay in days, if applicable","type":"number","nullable":true}},"required":["paymentMethodType","gatewayProfile","captureMethod","captureDelay"],"additionalProperties":false,"description":"The billing settings for recurring charges"},"upcomingInvoice":{"description":"The upcoming invoice details","type":"object","properties":{"amount":{"type":"number","description":"Amount to be charged for the upcoming invoice.","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the upcoming invoice.","example":"usd"},"periodStart":{"description":"Start date of the billing period.","example":"2023-01-01T00:00:00Z","type":"string","format":"date-time"},"periodEnd":{"description":"End date of the billing period.","example":"2023-01-31T23:59:59Z","type":"string","format":"date-time"},"statementDescriptor":{"description":"Statement descriptor for the upcoming invoice.","example":"SUBSCRIPTION","type":"string","nullable":true},"comment":{"description":"Comment for the upcoming invoice.","example":"Invoice for subscription 123, period January 2023","type":"string","nullable":true}},"required":["amount","currency","periodStart","periodEnd","statementDescriptor","comment"],"additionalProperties":false,"nullable":true},"customer":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"cus_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the customer"},"email":{"type":"string","example":"user@gmail.com","description":"The email of the customer"},"name":{"example":"John Doe","description":"The name of the customer","type":"string","nullable":true},"phoneNumber":{"example":"+1234567890","description":"The phone number of the customer","type":"string","nullable":true},"dateOfBirth":{"example":"2020-01-01","description":"The date of birth of the customer","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","nullable":true},"gender":{"example":"male","description":"The gender of the customer","type":"string","enum":["male","female","other",null],"nullable":true},"restrictMit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making merchant-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictCit":{"type":"boolean","example":false,"description":"Whether the customer is restricted from making customer-initiated payments. Only available from the dashboard or the API using a secret key."},"restrictReason":{"example":"Customer restricted due to suspicious activity","description":"Reason for restricting the customer. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"isRestricted":{"type":"boolean","example":true,"description":"Whether the customer has at least one restriction applied (either `restrictMit` or `restrictCit`). Only available from the dashboard or the API using a secret key."},"billingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The billing address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]},"shippingAddress":{"type":"object","properties":{"firstName":{"type":"string","nullable":true},"lastName":{"type":"string","nullable":true},"companyName":{"type":"string","nullable":true},"line1":{"type":"string","nullable":true},"line2":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"postalCode":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}},"additionalProperties":false,"description":"The shipping address of the customer","required":["firstName","lastName","companyName","line1","line2","city","state","postalCode","country"]}},"required":["createdAt","updatedAt","id","email","name","phoneNumber","dateOfBirth","gender","billingAddress","shippingAddress"],"additionalProperties":false,"description":"The customer associated with the subscription"},"price":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"ID of the price"},"type":{"type":"string","enum":["one_time","recurring"],"example":"recurring","description":"Type of the price"},"active":{"type":"boolean","example":true,"description":"Indicates if the price is currently active. Inactive prices will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My Digital Subscription","description":"Name of the price. Only available from the dashboard or the API using a secret key."},"amount":{"type":"number","example":1500,"description":"Amount of the price in minor units (e.g., cents)"},"quantity":{"type":"number","example":1,"description":"Number of units this price represents. The `amount` covers all of them, so a line item referencing this price gets this quantity at a per-unit amount of `amount / quantity`."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"Currency of the price"},"product":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"prod_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the product"},"active":{"type":"boolean","example":true,"description":"Indicates if the product is currently active. Inactive products will be hidden from the dashboard, but can still be used in the API."},"name":{"type":"string","example":"My product","description":"Name of the product. Only available from the dashboard or the API using a secret key."},"description":{"example":"Best selling product","description":"Description of the product. Only available from the dashboard or the API using a secret key.","type":"string","nullable":true},"statementDescriptor":{"example":"Face Yoga subscription","description":"Statement descriptor for the product that will be used in the bank statement","type":"string","nullable":true},"category":{"example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment. Only available from the dashboard or the API using a secret key.","type":"string","enum":["digital","physical",null],"nullable":true},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Only available from the dashboard or the API using a secret key."},"sku":{"nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships: an item without one is kept on the order but never fulfilled. Null when the product has none. Only available from the dashboard or the API using a secret key.","type":"string"}},"required":["createdAt","updatedAt","metadata","id","active","name","description","statementDescriptor","category","shippable","sku"],"additionalProperties":false,"description":"The product that this price represents. Only available from the dashboard or the API using a secret key."},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for `recurring` prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","example":"bsch_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"ID of the billing schedule"},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing schedule","example":"usd"},"cycleDefinitions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"position":{"type":"number","description":"Position of the billing cycle in the schedule. Used for ordering.","example":1},"amount":{"type":"number","description":"Amount to be charged for this billing cycle in minor units (e.g., cents)","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the billing cycle","example":"usd"},"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Unit of time for the billing cycle interval"},"intervalValue":{"type":"number","description":"Value of the billing cycle interval"}},"required":["createdAt","updatedAt","metadata","position","amount","currency","intervalUnit","intervalValue"],"additionalProperties":false}}},"required":["createdAt","updatedAt","metadata","id","currency","cycleDefinitions"],"additionalProperties":false,"nullable":true},"recurringSchedule":{"description":"Recurring schedule for recurring prices. Only available from the dashboard or the API using a secret key.","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details when present","type":"object","properties":{"intervalUnit":{"type":"string","enum":["minute","hour","day","week","month","year"],"description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units. This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"],"additionalProperties":false,"nullable":true}},"required":["intervalUnit","intervalCount","trial"],"additionalProperties":false,"nullable":true}},"required":["createdAt","updatedAt","id","type","active","amount","quantity","currency"],"additionalProperties":false,"description":"The price details of the subscription"}},"required":["createdAt","updatedAt","id","status","isRecovering","autoBillingEnabled","autoBillingDisabledAt","autoBillingDisabledReason","startDate","endDate","cancelAtPeriodEnd","cancelAtCycle","currentCycle","currentPeriodStart","currentPeriodEnd","setupInvoice","setupLineItem","billingSettings","upcomingInvoice","customer","price"]},"UpdatePreviewDTO":{"type":"object","properties":{"id":{"type":"string","example":"sub_preview_2pKw553IpHphT79MHhZh8jEf2cT","description":"The ID of the preview"},"subscription":{"type":"object","properties":{"id":{"type":"string","example":"sub_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the subscription"},"price":{"type":"string","description":"The ID of the price associated with the subscription"},"currentCycle":{"type":"number","example":1,"description":"The current cycle of the subscription, starting from 1"},"currentPeriodStart":{"description":"The start date of the current period","type":"string","format":"date-time"},"currentPeriodEnd":{"description":"The end date of the current period","type":"string","format":"date-time"},"upcomingInvoice":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to be charged for the upcoming invoice.","example":1500},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"description":"Currency of the upcoming invoice.","example":"usd"},"periodStart":{"description":"Start date of the billing period.","example":"2023-01-01T00:00:00Z","type":"string","format":"date-time"},"periodEnd":{"description":"End date of the billing period.","example":"2023-01-31T23:59:59Z","type":"string","format":"date-time"},"statementDescriptor":{"description":"Statement descriptor for the upcoming invoice.","example":"SUBSCRIPTION","type":"string","nullable":true},"comment":{"description":"Comment for the upcoming invoice.","example":"Invoice for subscription 123, period January 2023","type":"string","nullable":true}},"required":["amount","currency","periodStart","periodEnd","statementDescriptor","comment"],"additionalProperties":false,"description":"The upcoming invoice details"}},"required":["id","price","currentCycle","currentPeriodStart","currentPeriodEnd","upcomingInvoice"],"additionalProperties":false,"description":"How subscription will be updated, if the preview is applied"},"previewValidUntil":{"description":"The date until the preview is valid.","type":"string","format":"date-time"}},"required":["id","subscription","previewValidUntil"]},"SubscriptionBulkUpdatePreviewDTO":{"type":"object","properties":{"affected":{"type":"number","description":"Estimated number of subscriptions that would be affected by the bulk update job"},"excluded":{"type":"object","properties":{"cancelled":{"type":"number","description":"Estimated number of subscriptions excluded due to being cancelled"},"retrying":{"type":"number","description":"Estimated number of subscriptions excluded due to auto-billing being disabled"},"cancelAtPeriodEnd":{"type":"number","description":"Estimated number of subscriptions excluded due to being scheduled for cancellation, whether at the end of the current or of a later billing cycle"},"other":{"type":"number","description":"Estimated number of subscriptions excluded for other reasons"}},"required":["cancelled","retrying","cancelAtPeriodEnd","other"],"additionalProperties":false,"description":"Details about subscriptions excluded from the bulk update job"}},"required":["affected","excluded"]},"SubscriptionBulkUpdateResultDTO":{"type":"object","properties":{"job":{"type":"string","description":"The ID of the bulk update job"},"affected":{"type":"number","description":"Number of subscriptions that are affected by the bulk update job"}},"required":["job","affected"]},"RelatedSubscriptionsDTO":{"type":"object","properties":{"windowMinutes":{"type":"number","example":0,"description":"The merchant's configured grouping window, in minutes, that this lookup applied. `0` means only the setup payment was used."},"subscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"sub_2QC7PqoUeOxQEWscJJt6B3PkvyL","description":"The ID of the related subscription"},"status":{"type":"string","enum":["active","cancelled"],"example":"active","description":"The status of the related subscription"},"cancelAtPeriodEnd":{"type":"boolean","example":false,"description":"Whether the related subscription is cancelled when its current billing cycle ends"},"cancelAtCycle":{"type":"number","example":2,"description":"The cycle at whose end the related subscription is scheduled to be cancelled, or `null` when no cancellation is scheduled","nullable":true},"createdAt":{"description":"When the related subscription was created","type":"string","format":"date-time"},"createdAtDeltaSeconds":{"type":"number","example":42,"description":"Seconds between the creation of the subscription being viewed and this one. Negative when this one was created first."},"amount":{"type":"number","example":0,"description":"Amount charged each billing cycle, in cents. `0` marks a free subscription — the case this grouping exists to surface."},"currency":{"type":"string","enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"example":"usd","description":"The currency of the recurring amount"},"priceName":{"type":"string","example":"Monthly membership","description":"The name of the price the related subscription bills on"},"productName":{"type":"string","example":"Membership","description":"The name of the product behind that price"},"matchedOn":{"type":"string","enum":["setup_payment","creation_window"],"example":"setup_payment","description":"Why this subscription is part of the group: it shares the viewed subscription’s setup payment, or it was created within the merchant’s configured window"}},"required":["id","status","cancelAtPeriodEnd","cancelAtCycle","createdAt","createdAtDeltaSeconds","amount","currency","priceName","productName","matchedOn"],"additionalProperties":false},"description":"The other subscriptions of the same customer that belong to the same purchase, oldest first"}},"required":["windowMinutes","subscriptions"]},"UserDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the user"},"firstName":{"description":"First name of the user","example":"John","type":"string","nullable":true},"lastName":{"description":"Last name of the user","example":"Doe","type":"string","nullable":true},"username":{"description":"Username of the user, can be used for authorization.","example":"johndoe","type":"string","nullable":true},"email":{"type":"string","description":"Email of the user, can be used for authorization.","example":"john@example.com"},"sessions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the user session"},"lastActiveAt":{"description":"Timestamp of the last activity in this session","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true}},"required":["createdAt","updatedAt","id","lastActiveAt"],"additionalProperties":false},"description":"Sessions associated with the user"},"role":{"type":"string","enum":["admin","developer","supportAgent","viewer"],"description":"Role of the user","example":"supportAgent"},"immutable":{"type":"boolean","description":"Indicates if the user is immutable, meaning it cannot be modified or deleted by other users.","example":false}},"required":["createdAt","updatedAt","id","firstName","lastName","username","email","sessions","role","immutable"]},"UserPartialDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the user"},"firstName":{"description":"First name of the user","example":"John","type":"string","nullable":true},"lastName":{"description":"Last name of the user","example":"Doe","type":"string","nullable":true},"username":{"description":"Username of the user, can be used for authorization.","example":"johndoe","type":"string","nullable":true},"email":{"type":"string","description":"Email of the user, can be used for authorization.","example":"john@example.com"},"sessions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the user session"},"lastActiveAt":{"description":"Timestamp of the last activity in this session","example":"2026-01-15T10:30:00.000Z","type":"string","format":"date-time","nullable":true}},"required":["createdAt","updatedAt","id","lastActiveAt"],"additionalProperties":false},"description":"Sessions associated with the user"},"role":{"type":"string","enum":["admin","developer","supportAgent","viewer"],"description":"Role of the user","example":"supportAgent"},"immutable":{"type":"boolean","description":"Indicates if the user is immutable, meaning it cannot be modified or deleted by other users.","example":false}},"required":["createdAt","updatedAt","id","firstName","lastName","username","email","sessions","role","immutable"]},"UserLoggedInDTO":{"type":"object","properties":{"sessionKey":{"type":"string","description":"Session key for the user, used as a bearer token for authenticating subsequent API requests","example":"ses_2NbEEFCdoSDvUqAm1plbRBs0sXv"}},"required":["sessionKey"]},"WebhookResponseDTO":{"type":"object","properties":{"createdAt":{"example":"2024-02-18T12:00:00Z","description":"The date and time when the entity was created.","type":"string","format":"date-time"},"updatedAt":{"example":"2024-02-21T12:15:00Z","description":"The date and time when the entity was last updated.","type":"string","format":"date-time","nullable":true},"metadata":{"description":"Metadata used by merchants to store additional information about the entity.","example":{"key1":"value1","key2":"value2"},"type":"object","additionalProperties":{"type":"string"},"nullable":true},"id":{"type":"string","description":"The unique identifier of the webhook delivery"},"success":{"type":"boolean","description":"Whether the webhook delivery was successful"},"url":{"type":"string","description":"The URL the webhook was delivered to"},"attempts":{"type":"number","description":"Number of delivery attempts made"},"latestResponseStatus":{"description":"HTTP status code from the latest delivery attempt","type":"number","nullable":true},"firstDispatchedAt":{"description":"Timestamp of the first delivery attempt","type":"string","format":"date-time","nullable":true},"lastDispatchedAt":{"description":"Timestamp of the most recent delivery attempt","type":"string","format":"date-time","nullable":true},"abandonedAt":{"description":"Timestamp at which this delivery was abandoned without ever succeeding, because it stayed undelivered past the delivery deadline — typically because the subscriber was left inactive. Null for deliveries that succeeded, that failed after exhausting their retries, or that are still in flight.","type":"string","format":"date-time","nullable":true},"subscriber":{"type":"string","description":"The ID of the webhook subscriber"},"event":{"type":"object","properties":{"id":{"type":"string","description":"The unique identifier of the event"},"type":{"type":"string","enum":["customer.created","customer.updated","blacklist.added","blacklist.removed","subscription.active","subscription.cancelled","subscription.updated","payment.created","payment.succeeded","payment.captured","payment.attempt_failed","payment.requires_action","payment.updated","payment.cancelled","payment.chargebacked","payment.reversed","transaction.reverse_failed","transaction.capture_failed","invoice.created","invoice.paid","invoice.voided","invoice.updated","product.created","product.updated","price.created","price.updated","price.deleted"],"description":"The event type"}},"required":["id","type"],"additionalProperties":false,"description":"The event that triggered this delivery"}},"required":["createdAt","updatedAt","id","success","url","attempts","latestResponseStatus","firstDispatchedAt","lastDispatchedAt","abandonedAt","subscriber","event"]},"CalendarDataDTO":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date for the calendar entry","example":"2025-09-02T19:25:42.282Z"},"upcomingRecurringPayments":{"type":"number","description":"Count of upcoming recurring payments for this date","example":5},"upcomingRetries":{"type":"number","description":"Count of upcoming retries for this date","example":2},"successfulRebills":{"type":"number","description":"Count of successful rebills for this date","example":3},"softDeclines":{"type":"number","description":"Count of soft declines for this date","example":1},"hardDeclines":{"type":"number","description":"Count of hard declines for this date","example":0}},"required":["date","upcomingRecurringPayments","upcomingRetries","successfulRebills","softDeclines","hardDeclines"],"additionalProperties":false},"description":"Date for the calendar entry"}},"required":["data"]},"CheckoutIframeConfigurationDTO":{"type":"object","properties":{"supportedPaymentMethods":{"type":"object","properties":{"card":{"type":"boolean","description":"Whether card payments are supported","example":true},"paypal":{"type":"boolean","description":"Whether PayPal payments are supported","example":false}},"required":["card","paypal"],"additionalProperties":false,"description":"Payment methods available for this checkout session"},"timestamp":{"type":"string","description":"Configuration timestamp in ISO 8601 format","example":"2024-01-15T12:00:00.000Z"},"tokenExID":{"type":"string","description":"Token exchange identifier for secure iframe initialization","example":"5fae838b-c767-4b84-b36c-ee8a6eb8a37b"},"tokenScheme":{"type":"string","description":"Authentication scheme used for iframe token communication","example":"PCI"},"authenticationKey":{"type":"string","description":"HMAC authentication key for verifying iframe requests","example":"a1b2c3d4e5f6a1b2c3d4e5f6"},"pci":{"type":"boolean","description":"Whether PCI-compliant tokenization mode is enabled","example":true}},"required":["supportedPaymentMethods","timestamp","tokenExID","tokenScheme","authenticationKey","pci"]},"CustomerValueReportResponseDTO":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"USD","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"eur","type":"string","nullable":true},"fcQuantity":{"description":"Number of first-charge conversions","example":150,"type":"number"},"fcAmount":{"description":"Total first-charge amount (in display currency)","example":30000,"type":"number"},"fcAov":{"description":"Average order value for first-charge payments (in display currency)","example":200,"type":"number"},"upsellsQuantity":{"description":"Number of upsell transactions","example":45,"type":"number"},"upsellsItemsCount":{"description":"Total number of line items across upsell transactions. May exceed `upsellsQuantity` when upsells contain multiple line items.","example":72,"type":"number"},"upsellsAmount":{"description":"Total upsell amount (in display currency)","example":9000,"type":"number"},"upsellsAov":{"description":"Average order value for upsell transactions (in display currency)","example":200,"type":"number"},"totalAov":{"description":"Overall average order value including first-charges and upsells (in display currency)","example":260,"type":"number"},"rebillsQuantity":{"description":"Number of rebill transactions","example":300,"type":"number"},"rebillsItemsCount":{"description":"Total number of line items across rebill transactions. May exceed `rebillsQuantity` when rebills contain multiple line items.","example":480,"type":"number"},"rebillsAmount":{"description":"Total rebill amount (in display currency)","example":60000,"type":"number"},"ltv":{"description":"Customer lifetime value (in display currency)","example":660,"type":"number"}},"additionalProperties":false},"description":"Report data rows grouped by the specified field"},"total":{"description":"Aggregated totals across all groups (only present when withTotal is enabled)","type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"USD","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"eur","type":"string","nullable":true},"fcQuantity":{"description":"Number of first-charge conversions","example":150,"type":"number"},"fcAmount":{"description":"Total first-charge amount (in display currency)","example":30000,"type":"number"},"fcAov":{"description":"Average order value for first-charge payments (in display currency)","example":200,"type":"number"},"upsellsQuantity":{"description":"Number of upsell transactions","example":45,"type":"number"},"upsellsItemsCount":{"description":"Total number of line items across upsell transactions. May exceed `upsellsQuantity` when upsells contain multiple line items.","example":72,"type":"number"},"upsellsAmount":{"description":"Total upsell amount (in display currency)","example":9000,"type":"number"},"upsellsAov":{"description":"Average order value for upsell transactions (in display currency)","example":200,"type":"number"},"totalAov":{"description":"Overall average order value including first-charges and upsells (in display currency)","example":260,"type":"number"},"rebillsQuantity":{"description":"Number of rebill transactions","example":300,"type":"number"},"rebillsItemsCount":{"description":"Total number of line items across rebill transactions. May exceed `rebillsQuantity` when rebills contain multiple line items.","example":480,"type":"number"},"rebillsAmount":{"description":"Total rebill amount (in display currency)","example":60000,"type":"number"},"ltv":{"description":"Customer lifetime value (in display currency)","example":660,"type":"number"}},"additionalProperties":false}},"required":["data"]},"PaymentSummaryReportResponseDTO":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"USD","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"eur","type":"string","nullable":true},"fcPaymentsCount":{"description":"Number of first-charge payments","example":42,"type":"number"},"fcSuccessfulCount":{"description":"Number of successful first-charge payments","example":35,"type":"number"},"fcSuccessfulItemCount":{"description":"Total number of line items across successful first-charge payments. May exceed `fcSuccessfulCount` when payments contain multiple line items.","example":58,"type":"number"},"fcIncompleteCount":{"description":"Number of incomplete first-charge payments","example":3,"type":"number"},"fcFailedCount":{"description":"Number of failed first-charge payments","example":4,"type":"number"},"fcRevenue":{"description":"Total revenue from first-charge payments (in display currency)","example":15000,"type":"number"},"fcApprovalRate":{"description":"Approval rate for first-charge payments (percentage)","example":89.74,"type":"number"},"recurringPaymentsCount":{"description":"Number of recurring payments","example":120,"type":"number"},"recurringSuccessfulCount":{"description":"Number of successful recurring payments","example":110,"type":"number"},"recurringSuccessfulItemCount":{"description":"Total number of line items across successful recurring payments. May exceed `recurringSuccessfulCount` when payments contain multiple line items.","example":185,"type":"number"},"recurringDeclinedCount":{"description":"Number of declined recurring payments","example":10,"type":"number"},"recurringRevenue":{"description":"Total revenue from recurring payments (in display currency)","example":45000,"type":"number"},"recurringApprovalRate":{"description":"Approval rate for recurring payments (percentage)","example":91.67,"type":"number"},"refundedPaymentsCount":{"description":"Number of refunded payments","example":5,"type":"number"},"refundAmount":{"description":"Total refund amount (in display currency)","example":2500,"type":"number"},"refundPercentage":{"description":"Refund percentage relative to gross revenue","example":4.17,"type":"number"},"chargebacksCount":{"description":"Number of chargebacked payments","example":2,"type":"number"},"chargebackAmount":{"description":"Total chargeback amount (in display currency)","example":1000,"type":"number"},"chargebackPercentage":{"description":"Chargeback percentage relative to gross revenue","example":1.67,"type":"number"},"fcRefundAmount":{"description":"Total refund amount on first-charge payments (in display currency)","example":1500,"type":"number"},"fcChargebackAmount":{"description":"Total chargeback amount on first-charge payments (in display currency)","example":600,"type":"number"},"recurringRefundAmount":{"description":"Total refund amount on recurring payments (in display currency)","example":1000,"type":"number"},"recurringChargebackAmount":{"description":"Total chargeback amount on recurring payments (in display currency)","example":400,"type":"number"},"totalGrossRevenue":{"description":"Total gross revenue (in display currency)","example":60000,"type":"number"},"totalNetRevenue":{"description":"Total net revenue after refunds and chargebacks (in display currency)","example":56500,"type":"number"}},"additionalProperties":false},"description":"Report data rows grouped by the specified field"},"total":{"description":"Aggregated totals across all groups (only present when withTotal is enabled)","type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"USD","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"eur","type":"string","nullable":true},"fcPaymentsCount":{"description":"Number of first-charge payments","example":42,"type":"number"},"fcSuccessfulCount":{"description":"Number of successful first-charge payments","example":35,"type":"number"},"fcSuccessfulItemCount":{"description":"Total number of line items across successful first-charge payments. May exceed `fcSuccessfulCount` when payments contain multiple line items.","example":58,"type":"number"},"fcIncompleteCount":{"description":"Number of incomplete first-charge payments","example":3,"type":"number"},"fcFailedCount":{"description":"Number of failed first-charge payments","example":4,"type":"number"},"fcRevenue":{"description":"Total revenue from first-charge payments (in display currency)","example":15000,"type":"number"},"fcApprovalRate":{"description":"Approval rate for first-charge payments (percentage)","example":89.74,"type":"number"},"recurringPaymentsCount":{"description":"Number of recurring payments","example":120,"type":"number"},"recurringSuccessfulCount":{"description":"Number of successful recurring payments","example":110,"type":"number"},"recurringSuccessfulItemCount":{"description":"Total number of line items across successful recurring payments. May exceed `recurringSuccessfulCount` when payments contain multiple line items.","example":185,"type":"number"},"recurringDeclinedCount":{"description":"Number of declined recurring payments","example":10,"type":"number"},"recurringRevenue":{"description":"Total revenue from recurring payments (in display currency)","example":45000,"type":"number"},"recurringApprovalRate":{"description":"Approval rate for recurring payments (percentage)","example":91.67,"type":"number"},"refundedPaymentsCount":{"description":"Number of refunded payments","example":5,"type":"number"},"refundAmount":{"description":"Total refund amount (in display currency)","example":2500,"type":"number"},"refundPercentage":{"description":"Refund percentage relative to gross revenue","example":4.17,"type":"number"},"chargebacksCount":{"description":"Number of chargebacked payments","example":2,"type":"number"},"chargebackAmount":{"description":"Total chargeback amount (in display currency)","example":1000,"type":"number"},"chargebackPercentage":{"description":"Chargeback percentage relative to gross revenue","example":1.67,"type":"number"},"fcRefundAmount":{"description":"Total refund amount on first-charge payments (in display currency)","example":1500,"type":"number"},"fcChargebackAmount":{"description":"Total chargeback amount on first-charge payments (in display currency)","example":600,"type":"number"},"recurringRefundAmount":{"description":"Total refund amount on recurring payments (in display currency)","example":1000,"type":"number"},"recurringChargebackAmount":{"description":"Total chargeback amount on recurring payments (in display currency)","example":400,"type":"number"},"totalGrossRevenue":{"description":"Total gross revenue (in display currency)","example":60000,"type":"number"},"totalNetRevenue":{"description":"Total net revenue after refunds and chargebacks (in display currency)","example":56500,"type":"number"}},"additionalProperties":false}},"required":["data"]},"ProjectedBillingReportResponseDTO":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"usd","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"2026-05-21T00:00:00.000Z","type":"string","nullable":true},"rebillsCount":{"description":"Total number of upcoming rebill + recycle attempts in the bucket","example":128,"type":"number"},"projectedRevenue":{"description":"Projected revenue across all upcoming attempts, in the merchant display currency's minor units (integer). Both rebills and recycles apply the per-attempt approval rate directly.","example":1834200,"type":"number"},"rebillBucket1Count":{"description":"Number of upcoming Rebill #1 attempts","type":"number"},"rebillBucket1BaseAmount":{"description":"Total invoice amount of upcoming Rebill #1 attempts","type":"number"},"rebillBucket2Count":{"description":"Number of upcoming Rebill #2 attempts","type":"number"},"rebillBucket2BaseAmount":{"description":"Total invoice amount of upcoming Rebill #2 attempts","type":"number"},"rebillBucket3Count":{"description":"Number of upcoming Rebill #3 attempts","type":"number"},"rebillBucket3BaseAmount":{"description":"Total invoice amount of upcoming Rebill #3 attempts","type":"number"},"rebillBucketAdditionalCount":{"description":"Number of upcoming Rebill #4+ (additional) attempts","type":"number"},"rebillBucketAdditionalBaseAmount":{"description":"Total invoice amount of upcoming Rebill #4+ (additional) attempts","type":"number"},"recycleBucket1Count":{"description":"Number of upcoming Recycle #1 attempts","type":"number"},"recycleBucket1BaseAmount":{"description":"Total invoice amount of upcoming Recycle #1 attempts","type":"number"},"recycleBucket2Count":{"description":"Number of upcoming Recycle #2 attempts","type":"number"},"recycleBucket2BaseAmount":{"description":"Total invoice amount of upcoming Recycle #2 attempts","type":"number"},"recycleBucket3Count":{"description":"Number of upcoming Recycle #3 attempts","type":"number"},"recycleBucket3BaseAmount":{"description":"Total invoice amount of upcoming Recycle #3 attempts","type":"number"},"recycleBucketAdditionalCount":{"description":"Number of upcoming Recycle #4+ (additional) attempts","type":"number"},"recycleBucketAdditionalBaseAmount":{"description":"Total invoice amount of upcoming Recycle #4+ (additional) attempts","type":"number"}},"additionalProperties":false}},"total":{"type":"object","properties":{"groupBy":{"description":"The value of the groupBy field (field name varies based on groupBy parameter)","example":"usd","type":"string","nullable":true},"secondaryGroupBy":{"description":"The value of the secondaryGroupBy field (present only when secondaryGroupBy was supplied)","example":"2026-05-21T00:00:00.000Z","type":"string","nullable":true},"rebillsCount":{"description":"Total number of upcoming rebill + recycle attempts in the bucket","example":128,"type":"number"},"projectedRevenue":{"description":"Projected revenue across all upcoming attempts, in the merchant display currency's minor units (integer). Both rebills and recycles apply the per-attempt approval rate directly.","example":1834200,"type":"number"},"rebillBucket1Count":{"description":"Number of upcoming Rebill #1 attempts","type":"number"},"rebillBucket1BaseAmount":{"description":"Total invoice amount of upcoming Rebill #1 attempts","type":"number"},"rebillBucket2Count":{"description":"Number of upcoming Rebill #2 attempts","type":"number"},"rebillBucket2BaseAmount":{"description":"Total invoice amount of upcoming Rebill #2 attempts","type":"number"},"rebillBucket3Count":{"description":"Number of upcoming Rebill #3 attempts","type":"number"},"rebillBucket3BaseAmount":{"description":"Total invoice amount of upcoming Rebill #3 attempts","type":"number"},"rebillBucketAdditionalCount":{"description":"Number of upcoming Rebill #4+ (additional) attempts","type":"number"},"rebillBucketAdditionalBaseAmount":{"description":"Total invoice amount of upcoming Rebill #4+ (additional) attempts","type":"number"},"recycleBucket1Count":{"description":"Number of upcoming Recycle #1 attempts","type":"number"},"recycleBucket1BaseAmount":{"description":"Total invoice amount of upcoming Recycle #1 attempts","type":"number"},"recycleBucket2Count":{"description":"Number of upcoming Recycle #2 attempts","type":"number"},"recycleBucket2BaseAmount":{"description":"Total invoice amount of upcoming Recycle #2 attempts","type":"number"},"recycleBucket3Count":{"description":"Number of upcoming Recycle #3 attempts","type":"number"},"recycleBucket3BaseAmount":{"description":"Total invoice amount of upcoming Recycle #3 attempts","type":"number"},"recycleBucketAdditionalCount":{"description":"Number of upcoming Recycle #4+ (additional) attempts","type":"number"},"recycleBucketAdditionalBaseAmount":{"description":"Total invoice amount of upcoming Recycle #4+ (additional) attempts","type":"number"}},"additionalProperties":false}},"required":["data"]},"SearchResultsDTO":{"type":"object","properties":{"payments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the matched entity","example":"pay_2abc3def4ghi5jkl"},"label":{"type":"string","description":"Primary identifier of the entity (e.g. customer email, payment ID)","example":"john@example.com"},"sublabel":{"description":"Secondary context for the entity (e.g. customer name, payment amount)","example":"John Doe","type":"string","nullable":true},"entityType":{"type":"string","enum":["payment","customer","subscription","invoice","price"],"description":"The type of entity this search result represents"}},"required":["id","label","entityType"],"additionalProperties":false},"description":"Matching payment results"},"customers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the matched entity","example":"pay_2abc3def4ghi5jkl"},"label":{"type":"string","description":"Primary identifier of the entity (e.g. customer email, payment ID)","example":"john@example.com"},"sublabel":{"description":"Secondary context for the entity (e.g. customer name, payment amount)","example":"John Doe","type":"string","nullable":true},"entityType":{"type":"string","enum":["payment","customer","subscription","invoice","price"],"description":"The type of entity this search result represents"}},"required":["id","label","entityType"],"additionalProperties":false},"description":"Matching customer results"},"subscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the matched entity","example":"pay_2abc3def4ghi5jkl"},"label":{"type":"string","description":"Primary identifier of the entity (e.g. customer email, payment ID)","example":"john@example.com"},"sublabel":{"description":"Secondary context for the entity (e.g. customer name, payment amount)","example":"John Doe","type":"string","nullable":true},"entityType":{"type":"string","enum":["payment","customer","subscription","invoice","price"],"description":"The type of entity this search result represents"}},"required":["id","label","entityType"],"additionalProperties":false},"description":"Matching subscription results"},"invoices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the matched entity","example":"pay_2abc3def4ghi5jkl"},"label":{"type":"string","description":"Primary identifier of the entity (e.g. customer email, payment ID)","example":"john@example.com"},"sublabel":{"description":"Secondary context for the entity (e.g. customer name, payment amount)","example":"John Doe","type":"string","nullable":true},"entityType":{"type":"string","enum":["payment","customer","subscription","invoice","price"],"description":"The type of entity this search result represents"}},"required":["id","label","entityType"],"additionalProperties":false},"description":"Matching invoice results"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the matched entity","example":"pay_2abc3def4ghi5jkl"},"label":{"type":"string","description":"Primary identifier of the entity (e.g. customer email, payment ID)","example":"john@example.com"},"sublabel":{"description":"Secondary context for the entity (e.g. customer name, payment amount)","example":"John Doe","type":"string","nullable":true},"entityType":{"type":"string","enum":["payment","customer","subscription","invoice","price"],"description":"The type of entity this search result represents"}},"required":["id","label","entityType"],"additionalProperties":false},"description":"Matching price results"}},"required":["payments","customers","subscriptions","invoices","prices"]},"ExchangeTokenResponseDTO":{"type":"object","properties":{"token":{"type":"string","description":"Short-lived (60 s) HMAC-SHA256-signed exchange token. The Base64URL-encoded payload contains: userId, merchantId, accountSlug, iat, exp, and nonce.","example":"eyJ1c2VySWQiOiJ1c3JfMTIzIiwibWVyY2hhbnRJZCI6Im1jaF8xMjMifQ.c2lnbmF0dXJl"}},"required":["token"]},"OffsetPageMetaDTO":{"type":"object","properties":{"mode":{"default":"offset","description":"Discriminator identifying offset-based pagination metadata.","example":"offset","type":"string","enum":["offset"]},"pageSize":{"type":"number","minimum":1,"description":"Number of items per page.","example":10},"hasNextPage":{"type":"boolean","description":"Whether a next page exists.","example":false},"hasPreviousPage":{"type":"boolean","description":"Whether a previous page exists.","example":true},"page":{"type":"number","minimum":1,"maximum":100,"description":"Current page number (1-indexed).","example":2},"itemCount":{"type":"number","description":"Total number of items across all pages.","example":11},"pageCount":{"type":"number","description":"Total number of pages.","example":2}},"required":["mode","pageSize","hasNextPage","hasPreviousPage","page","itemCount","pageCount"]},"CursorPageMetaDTO":{"type":"object","properties":{"mode":{"default":"cursor","description":"Discriminator identifying cursor-based pagination metadata.","example":"cursor","type":"string","enum":["cursor"]},"pageSize":{"type":"number","minimum":1,"description":"Number of items per page.","example":10},"hasNextPage":{"type":"boolean","description":"Whether a next page exists.","example":false},"hasPreviousPage":{"type":"boolean","description":"Whether a previous page exists.","example":true},"nextCursor":{"nullable":true,"description":"Opaque cursor for fetching the next page. Null when there is no next page.","example":"eyJzIjoiY3JlYXRlZEF0IiwiZCI6ImFzYyIsIm4iOiJmb3J3YXJkIn0","type":"string"},"prevCursor":{"nullable":true,"description":"Opaque cursor for fetching the previous page. Null when there is no previous page.","example":"eyJzIjoiY3JlYXRlZEF0IiwiZCI6ImFzYyIsIm4iOiJiYWNrd2FyZCJ9","type":"string"}},"required":["mode","pageSize","hasNextPage","hasPreviousPage","nextCursor","prevCursor"]},"CreateCustomerBlacklistDTO":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"user@example.com","description":"The blacklisted email. Stored lowercased."},"reason":{"type":"string"}},"required":["email"]},"CreateCascadeRequestDTO":{"type":"object","properties":{"name":{"type":"string","example":"My Cascade","description":"The cascade's name"},"description":{"type":"string","description":"The cascade's description"},"algorithm":{"enum":["roundRobin","weightedRoundRobin","priorityQueue"],"type":"string","example":"weightedRoundRobin","description":"The algorithm to be used to route payments in the cascade"},"gateways":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateCascadeGatewayCascadeDTO"},"description":"Gateway profiles that are utilised by the cascade and their configuration"}},"required":["name","algorithm","gateways"]},"CreateCascadeGatewayCascadeDTO":{"type":"object","properties":{"profile":{"type":"string","example":"gwp_2QUGPTQo8As1cNIvgKlSFDxjJDd","description":"The gateway profile ID"},"position":{"type":"number","minimum":1,"maximum":10,"example":1,"description":"The position in which the gateway is used in the cascade, from lowest to highest."},"weight":{"type":"number","minimum":0,"maximum":100,"example":80,"description":"The weight of the gateway in the cascade, which represents the percentage of payments that are processed with the gateway. Is required for cascades using the weighted algorithm."},"transactionLimit":{"type":"number","minimum":1,"example":100,"description":"The maximum number of transactions allowed in the limit period."},"transactionLimitPeriod":{"enum":["day","week","month"],"type":"string","example":"day","description":"The period in which the transaction limit applies. Required if `transactionLimit` is set."},"transactionCap":{"type":"number","minimum":1,"example":10000,"description":"The maximum total amount (in minor units) charged in the cap period."},"transactionCapPeriod":{"enum":["day","week","month"],"type":"string","example":"day","description":"The period in which the cap value applies. Required if `transactionCap` is set."}},"required":["profile"]},"UpdateCascadeRequestDTO":{"type":"object","properties":{"name":{"type":"string","example":"My Cascade","description":"The cascade's name"},"description":{"type":"string","description":"The cascade's description"},"algorithm":{"enum":["roundRobin","weightedRoundRobin","priorityQueue"],"type":"string","example":"weightedRoundRobin","description":"The algorithm to be used to route payments in the cascade"},"gateways":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateCascadeGatewayCascadeDTO"},"description":"Gateway profiles that are utilised by the cascade and their configuration"},"active":{"type":"boolean","description":"Whether the cascade is active and available for routing"}}},"InitCheckoutDTO":{"type":"object","properties":{"payment":{"type":"string","example":"pay_2QUtVTDMuiW05FVr0wOgEpYHUeX","description":"The payment used for the checkout process. Must be an `open` payment."}},"required":["payment"]},"CreateCustomerRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"email":{"type":"string","format":"email","example":"user@gmail.com","description":"The customer's email. Stored lowercased."},"name":{"type":"string","example":"John Doe","description":"The customer's name"},"phoneNumber":{"type":"string","example":"+1234567890","description":"The customer's phone number"},"dateOfBirth":{"type":"string","format":"date-time","example":"2020-01-01","description":"The customer's date of birth"},"gender":{"enum":["male","female","other"],"type":"string","example":"male","description":"The customer's gender"},"billingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"},"shippingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"}},"required":["email"]},"CreateAddressDTO":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"companyName":{"type":"string"},"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}}},"UpdateCustomerRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"email":{"type":"string","format":"email","example":"user@gmail.com","description":"The customer's email. Stored lowercased."},"name":{"type":"string","example":"John Doe","description":"The customer's name"},"phoneNumber":{"type":"string","example":"+1234567890","description":"The customer's phone number"},"dateOfBirth":{"type":"string","format":"date-time","example":"2020-01-01","description":"The customer's date of birth"},"gender":{"enum":["male","female","other"],"type":"string","example":"male","description":"The customer's gender"},"billingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"},"shippingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"}}},"ManageCustomerRestrictionsRequestDTO":{"type":"object","properties":{"customer":{"type":"string","example":"cus_2R0uWz4tu9wxTMBXxj9CJfSE9vV","description":"ID of the customer to manage restrictions for"},"restrictMit":{"type":"boolean","description":"Whether to restrict the customer from making merchant-initiated payments, e.g recurring subscription payments."},"restrictCit":{"type":"boolean","description":"Whether to restrict the customer from making customer-initiated payments, e.g payments made through the Checkout SDK."},"restrictReason":{"type":"string","example":"The customer is restricted due to compliance issues","description":"Reason for restricting the customer."}},"required":["customer"]},"CreateGatewayProfileRequestDTO":{"type":"object","properties":{"title":{"type":"string","description":"Display name for the gateway profile","example":"Stripe Test mode"},"integration":{"enum":["stripe","adyen","checkout","paypal"],"type":"string","example":"stripe","description":"Gateway integration type"},"configuration":{"description":"Gateway integration configuration","oneOf":[{"$ref":"#/components/schemas/GatewayIntegrationStripeConfigurationDTO"},{"$ref":"#/components/schemas/GatewayIntegrationAdyenConfigurationDTO"},{"$ref":"#/components/schemas/GatewayIntegrationCheckoutConfigurationDTO"},{"$ref":"#/components/schemas/GatewayIntegrationPaypalConfigurationDTO"}]}},"required":["title","integration","configuration"]},"GatewayIntegrationStripeConfigurationDTO":{"type":"object","properties":{"type":{"default":"stripe","enum":["stripe"],"type":"string","description":"Gateway integration type","example":"stripe"},"environment":{"enum":["live","test"],"type":"string","description":"Gateway environment","example":"test"},"secretKey":{"type":"string","pattern":"sk_(test|live)_.","example":"sk_test_...","description":"Stripe secret key"},"webhookSecret":{"type":"string","example":"whsec_w051d0fwarc","description":"The secret for validating webhooks (Stripe -> Developer -> Webhooks)"}},"required":["type","environment","secretKey"]},"GatewayIntegrationAdyenConfigurationDTO":{"type":"object","properties":{"type":{"default":"adyen","enum":["adyen"],"type":"string","description":"Gateway integration type","example":"adyen"},"environment":{"enum":["live","test"],"type":"string","description":"Gateway environment","example":"test"},"merchantAccount":{"type":"string","description":"Adyen merchant account name","example":"MerchantAccountName"},"apiKey":{"type":"string","description":"Adyen API key","example":"your-api-key"},"liveUrlPrefix":{"type":"string","example":"0b3c1310cad152c9-MyCompany","description":"The prefix of the live endpoint URL (Adyen Dashboard -> Developers -> API URLs -> Prefix)"},"webhookSecret":{"type":"string","example":"your-webhook-hmac-from-adyen-dashboard","description":"The webhook hmac for validating webhooks (Adyen Dashboard -> Developers -> Webhooks -> Edit -> HMAC Key)"}},"required":["type","environment","merchantAccount","apiKey"]},"GatewayIntegrationCheckoutConfigurationDTO":{"type":"object","properties":{"type":{"default":"checkout","enum":["checkout"],"type":"string","description":"Gateway integration type","example":"checkout"},"environment":{"enum":["live","test"],"type":"string","description":"Gateway environment","example":"test"},"secretKey":{"type":"string","pattern":"^sk_(sbox_)?[a-z0-9]+$","example":"sk_sbox_...","description":"Checkout secret key"},"processingChannel":{"type":"string","pattern":"^pc_[a-z0-9]+$","example":"pc_...","description":"Checkout.com processing channel ID"},"webhookSecret":{"type":"string","example":"whsec_w051d0fwarc","description":"The secret for validating webhooks"},"merchantCity":{"type":"string","example":"Tallinn","description":"Merchant city for billing descriptor"}},"required":["type","environment","secretKey","processingChannel"]},"GatewayIntegrationPaypalConfigurationDTO":{"type":"object","properties":{"type":{"default":"paypal","enum":["paypal"],"type":"string","description":"Gateway integration type","example":"paypal"},"environment":{"enum":["live","test"],"type":"string","description":"Gateway environment","example":"test"},"clientId":{"type":"string","description":"PayPal application client ID","example":"client-id-from-paypal-app"},"secretKey":{"type":"string","description":"PayPal application secret key","example":"secret-key-from-paypal-app"},"integrationMode":{"enum":["vault","billingAgreement"],"type":"string","description":"Integration mode: \"vault\" uses PayPal Vaulting, \"billingAgreement\" uses Billing Agreements API","example":"billingAgreement"},"webhookId":{"type":"string","example":"0NH55953DH663215D","description":"The Webhook ID from PayPal Dashboard (used for signature verification)"},"collectShippingAddress":{"type":"boolean","example":false,"description":"Whether to collect shipping address from PayPal. Only available for Vault integration mode."}},"required":["type","environment","clientId","secretKey","integrationMode"]},"UpdateGatewayProfileRequestDTO":{"type":"object","properties":{"title":{"type":"string","description":"Display name for the gateway profile","example":"Stripe Test mode"},"active":{"type":"boolean","example":true,"description":"Whether the gateway profile is active"},"configuration":{"description":"Gateway integration configuration (integrationMode cannot be changed for PayPal)","oneOf":[{"$ref":"#/components/schemas/GatewayIntegrationStripeConfigurationDTO"},{"$ref":"#/components/schemas/GatewayIntegrationAdyenConfigurationDTO"},{"$ref":"#/components/schemas/GatewayIntegrationCheckoutConfigurationDTO"},{"$ref":"#/components/schemas/UpdateGatewayIntegrationPaypalConfigurationDTO"}]}}},"UpdateGatewayIntegrationPaypalConfigurationDTO":{"type":"object","properties":{"type":{"default":"paypal","enum":["paypal"],"type":"string","description":"Gateway integration type","example":"paypal"},"environment":{"enum":["live","test"],"type":"string","description":"Gateway environment","example":"test"},"clientId":{"type":"string","description":"PayPal application client ID","example":"client-id-from-paypal-app"},"secretKey":{"type":"string","description":"PayPal application secret key","example":"secret-key-from-paypal-app"},"webhookId":{"type":"string","example":"0NH55953DH663215D","description":"The Webhook ID from PayPal Dashboard (used for signature verification)"},"collectShippingAddress":{"type":"boolean","example":false,"description":"Whether to collect shipping address from PayPal. Only available for Vault integration mode."}},"required":["type","environment","clientId","secretKey"]},"VoidInvoiceRequestDTO":{"type":"object","properties":{"reason":{"default":"No reason provided","type":"string","description":"Reason for voiding the invoice","example":"Customer requested cancellation"}}},"CreateKlaviyoProfileRequestDTO":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"UpdateMerchantConfigRequestDTO":{"type":"object","properties":{"defaultPaymentMethodOptions":{"description":"Default payment method options","allOf":[{"$ref":"#/components/schemas/CreatePaymentMethodOptionsDTO"}]},"displayCurrency":{"enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"type":"string","example":"usd","description":"Display currency to be used for the merchant. If not provided, will be set to USD."},"timezone":{"type":"string","description":"Timezone for the merchant, in IANA format. If not provided, will be set to UTC.","example":"Europe/Paris"},"enableRecurringPaymentBundling":{"type":"boolean","description":"Whether to bundle recurring payments for the same customer into a single charge.","example":false},"preferCaptureAtNight":{"type":"boolean","description":"Whether delayed captures should be scheduled at night in the shopper's local time, derived from the UTC offset their browser reported at authorization. Captures fall back to the standard schedule when no offset was reported.","example":false},"lineItemDescriptionSource":{"enum":["price","product"],"type":"string","description":"Which name a line item description defaults to when none is supplied on the request: the name of the price it references, or the name of the product behind that price. If not provided, will be set to price.","example":"price"},"relatedSubscriptionWindowMinutes":{"type":"integer","minimum":0,"maximum":1440,"description":"How many minutes apart two of the same customer's subscriptions may be created and still be presented as related in the dashboard. 0 disables the time window; subscriptions sharing a setup payment are grouped regardless. If not provided, will be set to 0.","example":0}}},"CreatePaymentMethodOptionsDTO":{"type":"object","properties":{"card":{"description":"Card-specific processing options","allOf":[{"$ref":"#/components/schemas/CreateCardPaymentMethodOptionsDTO"}]},"paypal":{"description":"PayPal-specific processing options","allOf":[{"$ref":"#/components/schemas/CreatePaypalPaymentMethodOptionsDTO"}]},"applePay":{"description":"Apple Pay-specific processing options","allOf":[{"$ref":"#/components/schemas/CreateApplePayPaymentMethodOptionsDTO"}]},"captureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Default capture method to use for this payment. If provided on a payment method level, it will override this value."},"captureDelay":{"type":"number","maximum":5,"description":"Default capture delay to use for this payment. If provided on a payment method level, it will override this value."},"recurringCaptureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method to use for recurring charges on this payment. If provided on a payment method level, it will override this value."},"recurringCaptureDelay":{"type":"number","maximum":5,"description":"Capture delay to use for recurring charges on this payment. If provided on a payment method level, it will override this value."}}},"CreateCardPaymentMethodOptionsDTO":{"type":"object","properties":{"mode":{"enum":["cascade","direct"],"type":"string","description":"The processing mode for card payments","example":"cascade"},"gatewayProfile":{"type":"string","description":"Specific gateway profile to use, bypassing cascade routing. Required for `direct` processing and ignored otherwise"},"cascade":{"type":"string","description":"The cascade to use for gateway routing. Required for `cascade` processing and ignored otherwise"},"captureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method for card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic"},"captureDelay":{"type":"number","maximum":5,"description":"Delay in days before capture occurs. Only applicable when captureMethod is 'automaticDelayed'.","example":7},"recurringCaptureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method to use for recurring card payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic"},"recurringCaptureDelay":{"type":"number","maximum":5,"description":"Delay in days before capture occurs for recurring card charges. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7}}},"CreatePaypalPaymentMethodOptionsDTO":{"type":"object","properties":{"gatewayProfile":{"type":"string","description":"Gateway profile ID for PayPal processing"},"captureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method for PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic"},"captureDelay":{"type":"number","maximum":15,"description":"Delay in days before capture occurs for PayPal payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7},"recurringCaptureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method to use for recurring PayPal payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic"},"recurringCaptureDelay":{"type":"number","maximum":15,"description":"Delay in days before capture occurs for recurring PayPal payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7}}},"CreateApplePayPaymentMethodOptionsDTO":{"type":"object","properties":{"gatewayProfile":{"type":"string","description":"Gateway profile ID for Apple Pay processing"},"captureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method for Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a configurable delay, 'manual' requires a separate capture request.","example":"automatic"},"captureDelay":{"type":"number","maximum":5,"description":"Delay in days before capture occurs for Apple Pay payments. Only applicable when captureMethod is 'automaticDelayed'.","example":7},"recurringCaptureMethod":{"enum":["automatic","automaticDelayed","manual"],"type":"string","description":"Capture method to use for recurring Apple Pay payments. 'automatic' captures immediately, 'automaticDelayed' captures after a delay, 'manual' requires a separate capture request.","example":"automatic"},"recurringCaptureDelay":{"type":"number","maximum":5,"description":"Delay in days before capture occurs for recurring Apple Pay payments. Only applicable when recurringCaptureMethod is 'automaticDelayed'.","example":7}}},"RequestPasswordResetDTO":{"type":"object","properties":{"accountName":{"type":"string","description":"Name of the merchant account"},"email":{"type":"string","format":"email","description":"Email address of the user"}},"required":["accountName","email"]},"ConfirmPasswordResetDTO":{"type":"object","properties":{"accountId":{"type":"string","description":"ID of the merchant account"},"token":{"type":"string","description":"Password reset token from the email link"},"newPassword":{"type":"string","description":"New password for the user"}},"required":["accountId","token","newPassword"]},"CreatePaymentRequestDTO":{"type":"object","properties":{"customer":{"type":"string","example":"cus_2R0uWz4tu9wxTMBXxj9CJfSE9vV","description":"ID of the customer associated with the payment"},"customerData":{"description":"Customer data for the payment. Required if customer ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/CreateCustomerDTO"}]},"paymentMethod":{"type":"string","example":"pm_2RTUw7lL6IuBUwGQOD1EB0OAmx7","description":"ID of the payment method to use for the payment. Can only be provided at the creation time."},"paymentMethodData":{"description":"Payment method data for the payment. Required if payment method ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/PaymentCreatePaymentMethodDTO"}]},"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"amount":{"type":"number","example":1500,"description":"Payment amount in minor currency, e.g. cents for USD. Required if no `cart` is provided."},"note":{"type":"string","example":"This is a note for the payment","description":"Optional note for the payment."},"cart":{"description":"Cart data for the payment. Required if no `amount` is provided.","allOf":[{"$ref":"#/components/schemas/CreatePaymentCartDTO"}]},"currency":{"enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"type":"string","example":"usd","description":"Payment currency. Required when no `cart.items` are provided. When `cart.items` are provided, currency is derived from the items and must be the same across all items. Any value supplied here is ignored and stripped when `cart.items` are present."},"paymentMethodOptions":{"description":"Payment method options for the payment.","allOf":[{"$ref":"#/components/schemas/CreatePaymentMethodOptionsDTO"}]},"initiator":{"default":"customer","enum":["customer","merchant"],"type":"string","example":"customer","description":"Determines whether the payment is on- or off-session. Set to `customer` for on-session payments where the customer is actively involved in the payment process, and is ready to provide authentication (e.g., 3D Secure) if required. Set to `merchant` for off-session payments where the customer is not actively involved or is unable to provide authentication at the time of payment. Note that if any authentication is required for an off-session payment, the payment will be declined."},"offSessionType":{"enum":["recurring","unscheduled"],"type":"string","example":"unscheduled","description":"The off-session type for merchant-initiated payments. Only applies when `initiator` is `merchant`; defaults to `unscheduled` if omitted. Null for customer-initiated payments."},"statementDescriptor":{"type":"string","maxLength":22,"example":"Some statement descriptor","description":"Statement descriptor for the payment. Max 22 characters."}}},"CreateCustomerDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"email":{"type":"string","format":"email","example":"user@gmail.com","description":"The customer's email. Stored lowercased."},"name":{"type":"string","example":"John Doe","description":"The customer's name"},"phoneNumber":{"type":"string","example":"+1234567890","description":"The customer's phone number"},"dateOfBirth":{"type":"string","format":"date-time","example":"2020-01-01","description":"The customer's date of birth"},"gender":{"enum":["male","female","other"],"type":"string","example":"male","description":"The customer's gender"},"billingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"},"shippingAddress":{"$ref":"#/components/schemas/CreateAddressDTO"}},"required":["email"]},"PaymentCreatePaymentMethodDTO":{"type":"object","properties":{"type":{"enum":["card","paypal","applePay"],"type":"string","example":"card","description":"Payment method type"},"card":{"description":"Card details. Required when creating a card payment method","allOf":[{"$ref":"#/components/schemas/CreatePaymentMethodCardDTO"}]},"applePay":{"description":"Apple Pay details. Required when creating an Apple Pay payment method","allOf":[{"$ref":"#/components/schemas/CreatePaymentMethodApplePayDTO"}]},"context":{"description":"Context of the successful payment used to create the payment method","allOf":[{"$ref":"#/components/schemas/CreatePaymentContextDTO"}]},"metadata":{"type":"object","additionalProperties":true}},"required":["type"]},"CreatePaymentMethodCardDTO":{"type":"object","properties":{"token":{"type":"string","description":"INTERNAL. Card token generated by the Odus Checkout SDK. Mutually exclusive with `encryptedCardNumber` and `vgsCardId`."},"encryptedCardNumber":{"type":"string","format":"base64","description":"INTERNAL. Card number encrypted by the Odus Checkout SDK. Mutually exclusive with `token` and `vgsCardId`."},"encryptedCvv":{"type":"string","format":"base64","description":"INTERNAL. Card CVV encrypted by the Odus Checkout SDK. May only be provided if `encryptedCardNumber` is provided."},"vgsCardId":{"type":"string","description":"INTERNAL. Card ID issued by VGS Collect. Mutually exclusive with `token` and `encryptedCardNumber`."},"expMonth":{"type":"string","example":"08","description":"Expiration month. Required when not using vgsCardId."},"expYear":{"type":"string","example":"2026","description":"Expiration year. Required when not using vgsCardId."},"cardholderName":{"type":"string","example":"John Doe","description":"Card holder name"}}},"CreatePaymentMethodApplePayDTO":{"type":"object","properties":{"paymentData":{"type":"string","description":"Base64-encoded Apple Pay payment data taken from `session.onpaymentauthorized` event from the Apple Pay JS API. Stringify and base64-encode the entire `event.payment.token.paymentData` object."},"displayName":{"type":"string","description":"The display name of the Apple Pay payment method","example":"MasterCard 1234"}},"required":["paymentData"]},"CreatePaymentContextDTO":{"type":"object","properties":{"returnUrl":{"type":"string","description":"The URL to return to after the payment process is completed","example":"https://example.com/return"},"shopperIp":{"type":"string","description":"The IP address of the shopper. If not provided, will be set to the request IP","example":"192.168.1.1"},"userAgent":{"type":"string","description":"The user agent string of the shopper. If not provided, will be set to the request user agent","example":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"},"acceptHeader":{"type":"string","description":"The accept header string of the shopper. If not provided, will be set to the request accept header","example":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"},"browserInfo":{"description":"Browser information of the shopper","allOf":[{"$ref":"#/components/schemas/CreateBrowserInfoDTO"}]},"attribution":{"description":"Attribution data for marketing tracking","allOf":[{"$ref":"#/components/schemas/CreateAttributionDTO"}]}},"required":["returnUrl"]},"CreateBrowserInfoDTO":{"type":"object","properties":{"language":{"type":"string","description":"The language setting of the browser","example":"en-US"},"colorDepth":{"type":"number","description":"Color depth of the browser","example":24},"screenHeight":{"type":"number","description":"Screen height of the browser window in pixels","example":1080},"screenWidth":{"type":"number","description":"Screen width of the browser window in pixels","example":1920},"timeZoneOffset":{"type":"string","description":"Time zone offset in minutes","example":"-120"},"javaEnabled":{"type":"boolean","description":"Whether Java is enabled in the browser","example":true}}},"CreateAttributionDTO":{"type":"object","properties":{"utm_source":{"type":"string","maxLength":255,"description":"Traffic source (platform/site)","example":"google"},"utm_medium":{"type":"string","maxLength":255,"description":"Marketing medium/channel","example":"cpc"},"utm_campaign":{"type":"string","maxLength":255,"description":"Campaign name/identifier","example":"summer_sale"},"utm_term":{"type":"string","maxLength":255,"description":"Paid search keywords","example":"running+shoes"},"utm_content":{"type":"string","maxLength":255,"description":"Differentiates ads/links","example":"banner_a"},"utm_id":{"type":"string","maxLength":255,"description":"Campaign identifier","example":"utm_123"},"utm_contentid":{"type":"string","maxLength":255,"description":"Content ID for tracking","example":"content_123"},"fbclid":{"type":"string","maxLength":255,"description":"Facebook click identifier","example":"fbclid_abc"},"ref_id":{"type":"string","maxLength":255,"description":"Reference ID for tracking","example":"ref_abc"},"cmpid":{"type":"string","maxLength":255,"description":"Campaign ID","example":"cmp_123"},"sub1":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 1"},"sub2":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 2"},"sub3":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 3"},"sub4":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 4"},"sub5":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 5"},"sub6":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 6"},"sub7":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 7"},"sub8":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 8"},"sub9":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 9"},"sub10":{"type":"string","maxLength":255,"description":"Sub-tracking parameter 10"}}},"CreateCartLineItemDTO":{"type":"object","properties":{"amount":{"type":"number"},"description":{"type":"string","minLength":1,"maxLength":127},"quantity":{"type":"number"},"price":{"type":"string"}},"required":["quantity","price"]},"CreatePaymentCartDTO":{"type":"object","properties":{"items":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateCartLineItemDTO"}}},"required":["items"]},"UpdatePaymentRequestDTO":{"type":"object","properties":{"customer":{"type":"string","example":"cus_2R0uWz4tu9wxTMBXxj9CJfSE9vV","description":"ID of the customer associated with the payment"},"customerData":{"description":"Customer data for the payment. Required if customer ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/CreateCustomerDTO"}]},"paymentMethod":{"type":"string","example":"pm_2RTUw7lL6IuBUwGQOD1EB0OAmx7","description":"ID of the payment method to use for the payment. Can only be provided at the creation time."},"paymentMethodData":{"description":"Payment method data for the payment. Required if payment method ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/PaymentCreatePaymentMethodDTO"}]},"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"paymentMethodOptions":{"description":"Payment method options for the payment.","allOf":[{"$ref":"#/components/schemas/CreatePaymentMethodOptionsDTO"}]}}},"AuthPaymentRequestDTO":{"type":"object","properties":{"customerData":{"description":"Customer data for the payment. Required if customer ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/CreateCustomerDTO"}]},"paymentMethodData":{"description":"Payment method data for the payment. Required if payment method ID wasn't provided at the creation time. Meant to only be used by the Checkout SDK.","allOf":[{"$ref":"#/components/schemas/PaymentCreatePaymentMethodDTO"}]},"context":{"description":"Payment context for authorization, optional for merchant-initiated payments","allOf":[{"$ref":"#/components/schemas/CreatePaymentContextDTO"}]}}},"CapturePaymentRequestDTO":{"type":"object","properties":{}},"ReversePaymentRequestDTO":{"type":"object","properties":{"amount":{"type":"number","example":1500,"description":"Amount to reverse in minor units (e.g., cents for USD). Only applies to refundable payments that have been captured. Payments that are still pending capture will be fully voided."},"isExternal":{"type":"boolean","example":false,"description":"If true, no requests will be made to the gateway. Use this when you have already completed the refund outside of Odus and want to update the payment record to reflect the actual state."}}},"RecordPaymentChargebackRequestDTO":{"type":"object","properties":{"blacklistCustomer":{"type":"boolean","description":"Whether to also blacklist the customer associated with the payment"},"customerRestrictions":{"description":"Customer restrictions to apply in case of a chargeback","allOf":[{"$ref":"#/components/schemas/ManageCustomerRestrictionsChargebackDTO"}]}}},"ManageCustomerRestrictionsChargebackDTO":{"type":"object","properties":{"restrictMit":{"type":"boolean","description":"Whether to restrict the customer from making merchant-initiated payments, e.g recurring subscription payments."},"restrictCit":{"type":"boolean","description":"Whether to restrict the customer from making customer-initiated payments, e.g payments made through the Checkout SDK."},"restrictReason":{"type":"string","example":"The customer is restricted due to compliance issues","description":"Reason for restricting the customer."}}},"CreateApplePaySessionRequestDTO":{"type":"object","properties":{"domainName":{"type":"string","description":"The domain name for which the Apple Pay session is being created.","example":"example.com"},"displayName":{"type":"string","description":"The merchant name to be displayed in the Apple Pay sheet.","example":"My Store"}},"required":["domainName","displayName"]},"CreatePriceRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"name":{"type":"string","example":"Some price","description":"Price name"},"type":{"enum":["one_time","recurring"],"type":"string","example":"one_time","description":"Price type"},"amount":{"type":"number","example":1500,"description":"Payment amount in minor units (e.g., cents). For recurring prices, this is the amount charged each billing cycle. `0` makes the price free: it can be bundled alongside a paid item, and a free recurring price renews every cycle without ever reaching a payment provider."},"quantity":{"default":1,"type":"number","example":4,"description":"Number of units this price represents. The `amount` covers all of them, so referencing this price creates a line item of this quantity with a per-unit amount of `amount / quantity`. Defaults to `1`."},"currency":{"enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"type":"string","example":"usd","description":"Payment currency"},"product":{"type":"string","example":"prod_2QGNGy637hJ9MnD5cK7thAjSvPV","description":"Product ID"},"recurringSchedule":{"description":"Recurring schedule, required for recurring prices","allOf":[{"$ref":"#/components/schemas/CreateRecurringScheduleDTO"}]},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for recurring prices.","allOf":[{"$ref":"#/components/schemas/CreateBillingSchedulePriceDTO"}]}},"required":["name","type","currency","product"]},"CreateRecurringScheduleDTO":{"type":"object","properties":{"intervalUnit":{"enum":["minute","hour","day","week","month","year"],"type":"string","description":"Recurring interval unit","example":"month"},"intervalCount":{"type":"number","description":"Recurring interval count","example":1},"trial":{"description":"Trial schedule details","allOf":[{"$ref":"#/components/schemas/CreateRecurringScheduleTrialDTO"}]}},"required":["intervalUnit","intervalCount"]},"CreateRecurringScheduleTrialDTO":{"type":"object","properties":{"intervalUnit":{"enum":["minute","hour","day","week","month","year"],"type":"string","description":"Trial interval unit","example":"day"},"intervalCount":{"type":"number","description":"Trial interval count","example":7},"amount":{"type":"number","description":"Initial setup/trial payment amount in minor units (e.g., cents). This is the amount charged during the first billing cycle before the regular recurring amount takes effect.","example":199}},"required":["intervalUnit","intervalCount","amount"]},"CreateBillingSchedulePriceDTO":{"type":"object","properties":{"statementDescriptor":{"type":"string","maxLength":22},"cycleDefinitions":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateBillingScheduleCycleDefinitionDTO"}}},"required":["cycleDefinitions"]},"CreateBillingScheduleCycleDefinitionDTO":{"type":"object","properties":{"position":{"type":"number"},"amount":{"type":"number"},"intervalUnit":{"enum":["minute","hour","day","week","month","year"],"type":"string"},"intervalValue":{"type":"number"}},"required":["position","amount","intervalUnit","intervalValue"]},"UpdatePriceRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"name":{"type":"string","example":"Some price","description":"Price name"},"type":{"enum":["one_time","recurring"],"type":"string","example":"one_time","description":"Price type"},"amount":{"type":"number","example":1500,"description":"Payment amount in minor units (e.g., cents). For recurring prices, this is the amount charged each billing cycle. `0` makes the price free: it can be bundled alongside a paid item, and a free recurring price renews every cycle without ever reaching a payment provider."},"quantity":{"default":1,"type":"number","example":4,"description":"Number of units this price represents. The `amount` covers all of them, so referencing this price creates a line item of this quantity with a per-unit amount of `amount / quantity`. Defaults to `1`."},"currency":{"enum":["usd","eur","gbp","cad","aud","pln","czk","sek","dkk"],"type":"string","example":"usd","description":"Payment currency"},"product":{"type":"string","example":"prod_2QGNGy637hJ9MnD5cK7thAjSvPV","description":"Product ID"},"active":{"type":"boolean","example":true,"description":"Whether the price is active"},"recurringSchedule":{"description":"Recurring schedule for recurring prices","allOf":[{"$ref":"#/components/schemas/CreateRecurringScheduleDTO"}]},"billingSchedule":{"deprecated":true,"description":"Deprecated: Use recurringSchedule instead. Billing schedule for recurring prices.","allOf":[{"$ref":"#/components/schemas/CreateBillingSchedulePriceDTO"}]}}},"CreateProductRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"name":{"type":"string","example":"My product","description":"Name of the product"},"description":{"type":"string","example":"...","description":"Description of the product. Not visible to end customers"},"statementDescriptor":{"type":"string","maxLength":22,"example":"Some statement descriptor","description":"Statement descriptor for the product. Max 22 characters."},"category":{"enum":["digital","physical"],"type":"string","example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment."},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Defaults to false. Settable whether or not the Order Management addon is enabled, so a catalogue can be prepared before switching it on."},"sku":{"type":"string","nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships. The same SKU covers every price of the product — 1-pack, 3-pack and per-currency variants all ship the same item. Send `null` to clear it."}},"required":["name"]},"UpdateProductRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"name":{"type":"string","example":"My product","description":"Name of the product"},"description":{"type":"string","example":"...","description":"Description of the product. Not visible to end customers"},"statementDescriptor":{"type":"string","maxLength":22,"example":"Some statement descriptor","description":"Statement descriptor for the product. Max 22 characters."},"category":{"enum":["digital","physical"],"type":"string","example":"digital","description":"Category of the product, sent to the payment provider so the VAT split between digital services and physical goods can be reconstructed from the provider reports. Plays no part in fulfillment."},"shippable":{"type":"boolean","example":false,"description":"Whether the product takes part in Order Management: a payment for one of its prices becomes an order item. Defaults to false. Settable whether or not the Order Management addon is enabled, so a catalogue can be prepared before switching it on."},"sku":{"type":"string","nullable":true,"example":"FY-YOGA-MAT-01","description":"Stock Keeping Unit the warehouse ships this product under, used on the 3PL manifest. For a shippable product it decides whether the resulting order item physically ships. The same SKU covers every price of the product — 1-pack, 3-pack and per-currency variants all ship the same item. Send `null` to clear it."},"active":{"type":"boolean","example":true,"description":"Whether the product is active"}}},"UpdatePublishableKeyRequestDTO":{"type":"object","properties":{"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"The list of allowed origins for the publishable key. Only requests from these origins will be allowed to use the publishable key."}}},"CreateRetryPolicyDTO":{"type":"object","properties":{"title":{"type":"string","example":"Simple Recovery configuration that uses multiple different rules","description":"Comment for the configuration"},"steps":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateRetryPolicyStepRetryPolicyDTO"},"example":[],"description":"Recovery rules associated with the configuration"}},"required":["title","steps"]},"CreateRetryPolicyStepRetryPolicyDTO":{"type":"object","properties":{"position":{"type":"number","description":"Position of the rule. Rules are executed from lowest to highest position number."},"useInitialGateway":{"type":"boolean","description":"Whether to use the last successful gateway or a specific gateway profile. If false, gatewayProfileId must be provided."},"gatewayProfile":{"type":"string","example":"gwp_2QUGPTQo8As1cNIvgKlSFDxjJDd","description":"ID of the gateway profile to use. Required if useInitialGateway is false."},"priceReductionPercentage":{"type":"number","description":"Percentage to reduce the price by when retrying the payment."},"retryDelay":{"type":"number","description":"Number of days to wait from the last failed payment before retrying."}},"required":["position","retryDelay"]},"UpdateRetryPolicyRequestDTO":{"type":"object","properties":{"title":{"type":"string","example":"Simple Recovery configuration that uses multiple different rules","description":"Comment for the configuration"},"steps":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/CreateRetryPolicyStepRetryPolicyDTO"},"example":[],"description":"Recovery rules associated with the configuration"}}},"CreateSecretKeyRequestDTO":{"type":"object","properties":{"note":{"type":"string","description":"A user-provided note to help identify this secret key","example":"Production backend key"},"permissions":{"type":"array","items":{"enum":["customer:read","customer:create","customer:update","customer:manage_restrictions","payment:read","payment:create","payment:authorize","payment:update","payment:capture","payment:reverse","payment:record_chargeback","payment:create_apple_pay_session","price:read","price:create","price:update","price:delete","job:read","product:read","product:create","product:update","secret_key:read","secret_key:create","secret_key:update","secret_key:delete","publishable_key:read","publishable_key:roll","publishable_key:update","invoice:read","invoice:void","gateway_profile:read","gateway_profile:create","gateway_profile:update","gateway_operation:read","customer_blacklist:read","customer_blacklist:create","customer_blacklist:delete","payment_method:read","request_log:read","cascade:read","cascade:create","cascade:update","webhook_subscriber:read","webhook_subscriber:create","webhook_subscriber:update","retry_policy:read","retry_policy:create","retry_policy:update","user:read","user:create","user:update","user:delete","subscription:read","subscription:cancel","subscription:resume","subscription:force_bill","subscription:preview","subscription:update","checkout_profile:read","checkout_profile:create","checkout_profile:update","merchant_config:read","merchant_config:update","search:read","report:read"],"type":"string"},"description":"Permissions granted to this secret key, controlling which API operations it can perform","example":["payment:read","payment:create"]}},"required":["permissions"]},"UpdateSecretKeyRequestDTO":{"type":"object","properties":{"note":{"type":"string","description":"A user-provided note to help identify this secret key","example":"Production backend key"},"permissions":{"type":"array","items":{"enum":["customer:read","customer:create","customer:update","customer:manage_restrictions","payment:read","payment:create","payment:authorize","payment:update","payment:capture","payment:reverse","payment:record_chargeback","payment:create_apple_pay_session","price:read","price:create","price:update","price:delete","job:read","product:read","product:create","product:update","secret_key:read","secret_key:create","secret_key:update","secret_key:delete","publishable_key:read","publishable_key:roll","publishable_key:update","invoice:read","invoice:void","gateway_profile:read","gateway_profile:create","gateway_profile:update","gateway_operation:read","customer_blacklist:read","customer_blacklist:create","customer_blacklist:delete","payment_method:read","request_log:read","cascade:read","cascade:create","cascade:update","webhook_subscriber:read","webhook_subscriber:create","webhook_subscriber:update","retry_policy:read","retry_policy:create","retry_policy:update","user:read","user:create","user:update","user:delete","subscription:read","subscription:cancel","subscription:resume","subscription:force_bill","subscription:preview","subscription:update","checkout_profile:read","checkout_profile:create","checkout_profile:update","merchant_config:read","merchant_config:update","search:read","report:read"],"type":"string"},"description":"Permissions granted to this secret key, controlling which API operations it can perform","example":["payment:read","payment:create"]},"active":{"type":"boolean","example":true,"description":"Whether the secret key is active"}}},"SubscriptionBulkUpdateDTO":{"type":"object","properties":{"fromPrice":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"The ID of the price to update subscriptions from"},"toPrice":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"The ID of the price to update subscriptions to"}},"required":["fromPrice","toPrice"]},"CancelSubscriptionRequestDTO":{"type":"object","properties":{"cancelImmediately":{"default":false,"type":"boolean","deprecated":true,"description":"Deprecated — use `cancelAt` instead. Whether to cancel the subscription immediately. If `false`, it will cancel at the end of the current period. Equivalent to `cancelAt: \"immediately\"` and `cancelAt: \"end_of_current_cycle\"` respectively."},"cancelAt":{"enum":["immediately","end_of_current_cycle","end_of_next_cycle"],"type":"string","description":"Which period boundary the cancellation lands on. `end_of_next_cycle` lets the upcoming renewal charge go through and cancels once that period ends. Takes precedence over the deprecated `cancelImmediately`; defaults to `end_of_current_cycle`."}}},"GenerateUpdatePreviewRequestDTO":{"type":"object","properties":{"price":{"type":"string","example":"price_2R4e2xDqbww8ewmkIYWE1A6Zcfp","description":"The ID of the price to apply to the subscription update"},"nextBillingDate":{"type":"string","format":"date-time","example":"2026-06-01T00:00:00.000Z","description":"The date of the next recurring payment. Must be in the future and after the current period start."}}},"UpdateSubscriptionPlanRequestDTO":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"orderId":"12345","notes":"Urgent delivery"},"description":"Metadata used by merchants to store additional information about the entity."},"previewId":{"type":"string","description":"The ID of the preview obtained from the generate preview endpoint. Used to apply the plan change preview."}}},"LoginUserRequestDTO":{"type":"object","properties":{"accountName":{"type":"string","description":"Name of the merchant account"},"usernameOrEmail":{"type":"string","description":"Username or email address of the user"},"password":{"type":"string","description":"User password"}},"required":["accountName","usernameOrEmail","password"]},"UpdateUserRequestDTO":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the user","example":"John"},"lastName":{"type":"string","description":"Last name of the user","example":"Doe"},"username":{"type":"string","maxLength":20,"description":"Unique alphanumeric username, max 20 characters","example":"johndoe"},"email":{"type":"string","format":"email","description":"Email address of the user","example":"john@example.com"},"password":{"type":"string","description":"Strong password for the user account","example":"P@ssw0rd!2024"},"role":{"enum":["admin","developer","supportAgent","viewer"],"type":"string","description":"Role assigned to the user","example":"developer"},"currentPassword":{"type":"string"}}},"CreateUserRequestDTO":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the user","example":"John"},"lastName":{"type":"string","description":"Last name of the user","example":"Doe"},"username":{"type":"string","maxLength":20,"description":"Unique alphanumeric username, max 20 characters","example":"johndoe"},"email":{"type":"string","format":"email","description":"Email address of the user","example":"john@example.com"},"password":{"type":"string","description":"Strong password for the user account","example":"P@ssw0rd!2024"},"role":{"enum":["admin","developer","supportAgent","viewer"],"type":"string","description":"Role assigned to the user","example":"developer"}},"required":["email","password","role"]},"CreateWebhookSubscriberRequestDTO":{"type":"object","properties":{"recipientUrl":{"type":"string","example":"https://my-be-url.com/webhooks","description":"The URL to send the webhook to. Must be a valid HTTPS URL"},"subscribedTo":{"type":"array","items":{"enum":["customer.created","customer.updated","blacklist.added","blacklist.removed","subscription.active","subscription.cancelled","subscription.updated","payment.created","payment.succeeded","payment.captured","payment.attempt_failed","payment.requires_action","payment.updated","payment.cancelled","payment.chargebacked","payment.reversed","transaction.reverse_failed","transaction.capture_failed","invoice.created","invoice.paid","invoice.voided","invoice.updated","product.created","product.updated","price.created","price.updated","price.deleted"],"type":"string"},"example":["customer.created"]}},"required":["recipientUrl","subscribedTo"]},"UpdateWebhookSubscriberRequestDTO":{"type":"object","properties":{"recipientUrl":{"type":"string","example":"https://my-be-url.com/webhooks","description":"The URL to send the webhook to. Must be a valid HTTPS URL"},"subscribedTo":{"type":"array","items":{"enum":["customer.created","customer.updated","blacklist.added","blacklist.removed","subscription.active","subscription.cancelled","subscription.updated","payment.created","payment.succeeded","payment.captured","payment.attempt_failed","payment.requires_action","payment.updated","payment.cancelled","payment.chargebacked","payment.reversed","transaction.reverse_failed","transaction.capture_failed","invoice.created","invoice.paid","invoice.voided","invoice.updated","product.created","product.updated","price.created","price.updated","price.deleted"],"type":"string"},"example":["customer.created"]},"active":{"type":"boolean","description":"Whether the webhook subscriber is active. Deactivating pauses webhook delivery to this subscriber rather than cancelling it: events queued while it is inactive are held, and reactivating the subscriber resumes their delivery. A held event is not held indefinitely — one that stays undelivered past the delivery deadline is abandoned."}}}}},"openapi":"3.0.0","paths":{"/accounts":{"get":{"operationId":"AccountController_findAllPaginated","summary":"List accessible accounts","description":"Retrieve a paginated list of accounts the authenticated principal can access. Identity-token callers receive every active account in their organization so they can pick one to supply via the X-Odus-Merchant header; access-key callers receive only their current account.","tags":["Accounts"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","name","createdAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/accounts/self":{"get":{"operationId":"AccountController_getSelf","summary":"Get currently logged in to account details","description":"Retrieve details of the account associated with the currently authenticated user","tags":["Accounts"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/blacklist":{"get":{"operationId":"BlacklistController_findAllPaginated","summary":"Find all Blacklist entries","description":"Retrieve a paginated list of Customer Blacklist entries","tags":["Customer Blacklist"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"email","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"reason","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","email"]},"description":"Field to sort by. Defaults to createdAt."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomerBlacklistDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"BlacklistController_create","summary":"Create a Blacklist entry","description":"Create a new Customer Blacklist entry with the provided details","tags":["Customer Blacklist"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerBlacklistDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBlacklistDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/blacklist/check":{"get":{"operationId":"BlacklistController_isBlacklisted","summary":"Check Blacklist","description":"Check if a given email is present in the Blacklist","tags":["Customer Blacklist"],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IsBlacklistedDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/blacklist/{id}":{"get":{"operationId":"BlacklistController_findOne","summary":"Find one Blacklist entry","description":"Retrieve a Customer Blacklist entry by its ID","tags":["Customer Blacklist"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBlacklistDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"delete":{"operationId":"BlacklistController_remove","summary":"Remove a Blacklist entry","description":"Remove an existing Customer Blacklist entry by its ID","tags":["Customer Blacklist"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRemovedDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/cascades":{"get":{"operationId":"CascadeController_findAllPaginated","summary":"Find all Cascades","description":"Retrieve a paginated list of Cascades","tags":["Cascades"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"active","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"algorithm","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","active","name"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/CascadePartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"CascadeController_create","summary":"Create a Cascade","description":"Create a new Cascade with the provided details","tags":["Cascades"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCascadeRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CascadeDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/cascades/{id}":{"get":{"operationId":"CascadeController_findOne","summary":"Find one Cascade","description":"Retrieve a Cascade by its ID","tags":["Cascades"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CascadeDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"CascadeController_update","summary":"Update a Cascade","description":"Update an existing Cascade by its ID","tags":["Cascades"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCascadeRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CascadeDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/checkout/init":{"post":{"operationId":"CheckoutController_init","summary":"Initialize the Checkout iFrame","description":"Generates the configuration needed for the checkout iframe","tags":["Checkout"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitCheckoutDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIframeConfigurationDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/customers":{"get":{"operationId":"CustomerController_findAllPaginated","summary":"Find all Customers","description":"Retrieve a paginated list of Customers","tags":["Customers"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"email","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"phoneNumber","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"dateOfBirth","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"restrictCit","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"restrictMit","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"restrictReason","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"metadata","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomerPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"CustomerController_create","summary":"Create a Customer","description":"Create a new Customer with the provided details","tags":["Customers"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/customers/{id}":{"get":{"operationId":"CustomerController_findOne","summary":"Find one Customer","description":"Retrieve a Customer by its ID","tags":["Customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"CustomerController_update","summary":"Update a Customer","description":"Update an existing Customer with the provided details","tags":["Customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomerRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/customers/{id}/restrictions":{"post":{"operationId":"CustomerController_manageRestrictions","summary":"Manage Customer Restrictions","description":"Manage payment restrictions for a Customer, such as blocking new or recurring subscription payments","tags":["Customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManageCustomerRestrictionsRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/gateway-operations":{"get":{"operationId":"GatewayOperationController_findAllPaginated","summary":"Find all Gateway Operations","description":"Retrieve a paginated list of raw payment service provider operations, optionally filtered by transaction","tags":["Gateway Operations"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"type","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"transaction","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","type","status"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/GatewayOperationDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/gateway-operations/{id}":{"get":{"operationId":"GatewayOperationController_findOne","summary":"Find one Gateway Operation","description":"Retrieve a Gateway Operation by its ID","tags":["Gateway Operations"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayOperationDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/gateway-profiles":{"get":{"operationId":"GatewayProfileController_findAllPaginated","summary":"Find all Gateway Profiles","description":"Retrieve a paginated list of Gateway Profiles","tags":["Gateway Profiles"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"title","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"integration","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"active","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"supportedPaymentMethods","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/GatewayProfilePartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"GatewayProfileController_create","summary":"Create a Gateway Profile","description":"Create a Gateway Profile with the provided details","tags":["Gateway Profiles"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGatewayProfileRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayProfileDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/gateway-profiles/{id}":{"get":{"operationId":"GatewayProfileController_findOne","summary":"Find one Gateway Profile","description":"Retrieve a Gateway Profile by its ID","tags":["Gateway Profiles"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayProfileDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"GatewayProfileController_update","summary":"Update a Gateway Profile","description":"Update an existing Gateway Profile with the provided details","tags":["Gateway Profiles"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGatewayProfileRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayProfileDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/invoices":{"get":{"operationId":"InvoiceController_findAllPaginated","summary":"Find all Invoices","description":"Retrieve a paginated list of Invoices","tags":["Invoices"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"voidedReason","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"periodStart","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"periodEnd","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"payment","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"number","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"subscription","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","status"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/InvoicePartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/invoices/{id}":{"get":{"operationId":"InvoiceController_findOne","summary":"Find one Invoice","description":"Retrieve an Invoice by its ID","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/invoices/{id}/void":{"post":{"operationId":"InvoiceController_void","summary":"Void an Invoice","description":"Void an Invoice by its ID with the provided reason","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoidInvoiceRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/jobs":{"get":{"operationId":"JobController_findAllPaginated","summary":"Find all Jobs","description":"Retrieve a paginated list of Jobs","tags":["Job"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"type","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"progress","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","status","type"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/JobDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/jobs/{id}":{"get":{"operationId":"JobController_findOne","summary":"Find one Job","description":"Retrieve a Job by its ID","tags":["Job"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/jobs/{id}/items":{"get":{"operationId":"JobController_findAllItemsPaginated","summary":"Find all Job Items for a Job","description":"Retrieve a paginated list of Job Items associated with a specific Job","tags":["Job"],"parameters":[{"name":"id","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","required":false,"schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","required":false,"schema":{"type":"string","enum":["id","createdAt","updatedAt","status"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","required":false,"schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","required":false,"schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","required":false,"schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/JobItemDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/newsletter/subscribe":{"post":{"operationId":"KlaviyoController_subscribe","summary":"Subscribe to Newsletter","description":"Create a new profile in Klaviyo for newsletter subscription","tags":["Klaviyo"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKlaviyoProfileRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"boolean"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/merchant-configs":{"get":{"operationId":"MerchantConfigController_findOne","summary":"Find the merchant Configuration","description":"Retrieve the merchant configuration for the current merchant.","tags":["Merchant Configuration"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantConfigDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/merchant-configs/{id}":{"post":{"operationId":"MerchantConfigController_update","summary":"Update a Merchant Configuration","description":"Update an existing Merchant Configuration by its ID","tags":["Merchant Configuration"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMerchantConfigRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantConfigDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/password-reset/request":{"post":{"operationId":"PasswordResetController_requestReset","summary":"Request Password Reset","description":"Sends a password reset email to the user. Always returns 200 regardless of whether the email exists.","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestPasswordResetDTO"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/password-reset/confirm":{"post":{"operationId":"PasswordResetController_confirmReset","summary":"Confirm Password Reset","description":"Validates the reset token and sets a new password for the user.","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPasswordResetDTO"}}}},"responses":{"204":{"description":"OK"},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/payments":{"get":{"operationId":"PaymentController_findAllPaginated","summary":"Find all Payments","description":"Retrieve a paginated list of Payments","tags":["Payments"],"parameters":[{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","amount","status","currency"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"displayStatus","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"amountCaptured","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"amountReversed","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"captureMethod","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"captureDelay","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"captureAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"statementDescriptor","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"isCaptured","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isReversed","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isFullyReversed","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isChargebacked","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isRedirectRequired","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"initiator","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"offSessionType","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction.processorId","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction.gatewayProfile.id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction.gatewayProfile.title","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.email","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.type","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.lastFour","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.bin","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.brand","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.expYear","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.expMonth","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.gatewayProfile","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.cascade","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.mode","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.paypal.gatewayProfile","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"product.name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"metadata","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestDeclineType","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/PaymentPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"PaymentController_create","summary":"Create a Payment","description":"Create a Payment with the provided details. This payment will be in `open` state and can be authorized later.","tags":["Payments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}":{"get":{"operationId":"PaymentController_findOne","summary":"Find one Payment","description":"Retrieve a Payment by its ID","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"PaymentController_update","summary":"Update a Payment","description":"Update a Payment with the provided details. Only payments in `open` or `requires_action` state can be updated, except for metadata which can be updated in any state.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/authorize":{"post":{"operationId":"PaymentController_authorize","summary":"Authorize a Payment","description":"Authorize a previously created Payment by its ID. This operation will attempt to charge the payment method associated with the Payment.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthPaymentRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/capture":{"post":{"operationId":"PaymentController_capture","summary":"Capture a Payment","description":"Capture a previously authorized Payment by its ID","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapturePaymentRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/reverse":{"post":{"operationId":"PaymentController_reverse","summary":"Reverse a Payment","description":"Reverse a previously captured Payment by its ID. For captured payments, this will refund the provided `amount` or full amount, and for authorized payments, it will void the authorization.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReversePaymentRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/record-chargeback":{"post":{"operationId":"PaymentController_recordChargeback","summary":"Record a Chargeback","description":"Record a chargeback for a Payment by its ID, and optionally restrict the Customer from making new or recurring payments. Recording a chargeback does not prevent any further operations on the payment, such as capture or reversal.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordPaymentChargebackRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/supported-payment-methods":{"get":{"operationId":"PaymentController_getSupportedPaymentMethods","summary":"Find payment's supported payment methods","description":"Retrieve a list of supported payment methods for a given Payment by its ID. Deprecated in favor of /checkout-details endpoint.","deprecated":true,"tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentSupportedPaymentMethodsDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/checkout-details":{"get":{"operationId":"PaymentController_startCheckoutSession","summary":"Start Checkout Session","description":"Start a checkout session for the Payment by its ID. This provides necessary details for initializing a checkout process on the client side.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutDetailsDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payments/{id}/create-apple-pay-session":{"post":{"operationId":"PaymentController_createApplePaySession","summary":"Create Apple Pay Session","description":"Create an Apple Pay session for the Payment by its ID. This session is required to initiate Apple Pay transactions on the client side.","tags":["Payments"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplePaySessionRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplePaySessionResponseDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payment-methods":{"get":{"operationId":"PaymentMethodController_findAllPaginated","summary":"Find all Payment Methods","description":"Retrieve a paginated list of Payment Methods","tags":["Payment Methods"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"isDefault","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"customer","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"card.lastFour","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"card.brand","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"card.expYear","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"card.expMonth","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","isDefault","customer"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethodPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/payment-methods/{id}":{"get":{"operationId":"PaymentMethodController_findOne","summary":"Find one Payment Method","description":"Retrieve a Payment Method by its ID","tags":["Payment Methods"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/prices":{"get":{"operationId":"PriceController_findAllPaginated","summary":"Find all Prices","description":"Retrieve a paginated list of Prices","tags":["Prices"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"type","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"product","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"product.name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"active","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"metadata","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","amount","type"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/PricePartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"PriceController_create","summary":"Create a Price","description":"Create a new Price with the provided details","tags":["Prices"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePriceRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/prices/{id}":{"get":{"operationId":"PriceController_findOne","summary":"Find one Price","description":"Retrieve a Price by its ID","tags":["Prices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"PriceController_update","summary":"Update a Price","description":"Update an existing Price by its ID","tags":["Prices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePriceRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/prices/{id}/delete":{"post":{"operationId":"PriceController_delete","summary":"Delete a Price","description":"Delete an existing Price by its ID","tags":["Prices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRemovedDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/products":{"get":{"operationId":"ProductController_findAllPaginated","summary":"Find all Products","description":"Retrieve a paginated list of Products","tags":["Products"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"active","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"shippable","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"category","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sku","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"metadata","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","name","active"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProductPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"ProductController_create","summary":"Create a Product","description":"Create a new Product with the provided details","tags":["Products"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProductRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/products/{id}":{"get":{"operationId":"ProductController_findOne","summary":"Find one Product","description":"Retrieve a Product by its ID","tags":["Products"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"ProductController_update","summary":"Update a Product","description":"Update an existing Product with the provided details","tags":["Products"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProductRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/publishable-keys/active":{"get":{"operationId":"PublishableKeyController_findActive","summary":"Find active Publishable Key","description":"Retrieve the active Publishable Key","tags":["Publishable Keys"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishableKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/publishable-keys/{id}":{"get":{"operationId":"PublishableKeyController_findOne","summary":"Find one Publishable Key","description":"Retrieve a Publishable Key by its ID","tags":["Publishable Keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishableKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"PublishableKeyController_update","summary":"Update Publishable Key","description":"Update an existing Publishable Key by its ID","tags":["Publishable Keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePublishableKeyRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishableKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/publishable-keys/roll":{"post":{"operationId":"PublishableKeyController_roll","summary":"Roll Publishable Key","description":"Generate a new Publishable Key and invalidate the old one","tags":["Publishable Keys"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishableKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/reports/payment-summary":{"get":{"operationId":"ReportingController_getPaymentSummaryReport","summary":"Payment summary report","description":"Generates a payment summary report with flexible grouping and metric calculations.","tags":["Reports"],"parameters":[{"name":"groupBy","in":"query","required":true,"schema":{"type":"string","example":"currency"},"description":"Field to group results by.\n\n**Available fields:** `currency`, `status`, `displayStatus`, `createdAt`, `authorizedAt`, `capturedAt`, `customer`, `gatewayProfile`, `product.name`, `customer.shippingAddress.country`, `attribution.utmSource`, `attribution.utmCampaign`"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `groupBy` when it is a date field. Defaults to `day`. `hour` additionally requires the query to be bounded to a `createdAt` range of at most two days. Accepts `hour`, `day`, `week`, `month`, `quarter`, `year`; anything else falls back to the default."},{"name":"secondaryGroupBy","in":"query","required":false,"schema":{"type":"string"},"description":"Optional second axis for pivoting (must differ from groupBy). Each row will then carry both the primary `groupBy` value and a `secondaryGroupBy` value.\n\n**Available fields:** `currency`, `status`, `displayStatus`, `createdAt`, `authorizedAt`, `capturedAt`, `customer`, `gatewayProfile`, `product.name`, `customer.shippingAddress.country`, `attribution.utmSource`, `attribution.utmCampaign`"},{"name":"secondaryGranularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `secondaryGroupBy` when it is a date field. Defaults to `day`."},{"name":"measures","in":"query","required":false,"schema":{"type":"string","example":"fcPaymentsCount,fcSuccessfulCount,fcSuccessfulItemCount,fcIncompleteCount,fcFailedCount,fcRefundAmount,fcChargebackAmount,fcRevenue,fcApprovalRate,recurringPaymentsCount,recurringSuccessfulCount,recurringSuccessfulItemCount,recurringDeclinedCount,recurringRefundAmount,recurringChargebackAmount,recurringRevenue,recurringApprovalRate,refundedPaymentsCount,refundAmount,refundPercentage,chargebacksCount,chargebackAmount,chargebackPercentage,totalGrossRevenue,totalNetRevenue"},"description":"Metrics to include in the results. Multiple measures can be specified as comma-separated values. If `measures` is not provided, all metrics specified in the config will be calculated.\n\n**Available metrics:** `fcPaymentsCount`, `fcSuccessfulCount`, `fcSuccessfulItemCount`, `fcIncompleteCount`, `fcFailedCount`, `fcRefundAmount`, `fcChargebackAmount`, `fcRevenue`, `fcApprovalRate`, `recurringPaymentsCount`, `recurringSuccessfulCount`, `recurringSuccessfulItemCount`, `recurringDeclinedCount`, `recurringRefundAmount`, `recurringChargebackAmount`, `recurringRevenue`, `recurringApprovalRate`, `refundedPaymentsCount`, `refundAmount`, `refundPercentage`, `chargebacksCount`, `chargebackAmount`, `chargebackPercentage`, `totalGrossRevenue`, `totalNetRevenue`"},{"name":"withTotal","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Whether to include a rollup row aggregating every group. Pass `false` to omit it."},{"name":"id","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"displayStatus","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"amountCaptured","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"amountReversed","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"product","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"price","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"offSessionType","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentType","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestDeclineType","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"retry.attempts","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"customer.email","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.billingAddress.country","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.shippingAddress.country","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.type","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"invoice.type","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"captureMethod","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"captureDelay","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"captureAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"statementDescriptor","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"isCaptured","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isReversed","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isFullyReversed","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isChargebacked","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"isRedirectRequired","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"latestTransaction","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction.processorId","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"latestTransaction.gatewayProfile","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.lastFour","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.bin","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.brand","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.expYear","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.card.expMonth","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.gatewayProfile","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.cascade","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.card.mode","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethodOptions.paypal.gatewayProfile","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmSource","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmMedium","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmCampaign","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmTerm","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmContent","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmId","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmContentid","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentSummaryReportResponseDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/reports/customer-value":{"get":{"operationId":"ReportingController_getCustomerValueReport","summary":"Customer value report","description":"Generates a customer value report with flexible grouping and metric calculations.","tags":["Reports"],"parameters":[{"name":"groupBy","in":"query","required":true,"schema":{"type":"string","example":"createdAt"},"description":"Field to group results by.\n\n**Available fields:** `createdAt`, `currency`, `product.name`, `price.name`, `attribution.utmSource`, `attribution.utmCampaign`"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `groupBy` when it is a date field. Defaults to `day`. `hour` additionally requires the query to be bounded to a `createdAt` range of at most two days. Accepts `hour`, `day`, `week`, `month`, `quarter`, `year`; anything else falls back to the default."},{"name":"secondaryGroupBy","in":"query","required":false,"schema":{"type":"string"},"description":"Optional second axis for pivoting (must differ from groupBy). Each row will then carry both the primary `groupBy` value and a `secondaryGroupBy` value.\n\n**Available fields:** `createdAt`, `currency`, `product.name`, `price.name`, `attribution.utmSource`, `attribution.utmCampaign`"},{"name":"secondaryGranularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `secondaryGroupBy` when it is a date field. Defaults to `day`."},{"name":"measures","in":"query","required":false,"schema":{"type":"string","example":"fcQuantity,fcAmount,fcAov,upsellsQuantity,upsellsItemsCount,upsellsAmount,upsellsAov,totalAov,rebillsQuantity,rebillsItemsCount,rebillsAmount,ltv"},"description":"Metrics to include in the results. Multiple measures can be specified as comma-separated values. If `measures` is not provided, all metrics specified in the config will be calculated.\n\n**Available metrics:** `fcQuantity`, `fcAmount`, `fcAov`, `upsellsQuantity`, `upsellsItemsCount`, `upsellsAmount`, `upsellsAov`, `totalAov`, `rebillsQuantity`, `rebillsItemsCount`, `rebillsAmount`, `ltv`"},{"name":"withTotal","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Whether to include a rollup row aggregating every group. Pass `false` to omit it."},{"name":"createdAt","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"displayStatus","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"gatewayProfile","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod.type","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"product","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"price","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.billingAddress.country","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.shippingAddress.country","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmSource","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmMedium","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmCampaign","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmTerm","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmContent","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmId","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attribution.utmContentid","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerValueReportResponseDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/reports/projected-billing":{"get":{"operationId":"ReportingController_getProjectedBillingReport","summary":"Projected billing report","description":"Projects upcoming rebill and recycle (retry) attempts for active subscriptions in the queried period, using user-supplied approval-rate inputs (`rebillProjections` and `recycleProjections`, each a comma-separated list of 4 percentages 0..100 corresponding to Rebill/Recycle #1, #2, #3 and #4+).","tags":["Reports"],"parameters":[{"name":"groupBy","in":"query","required":true,"schema":{"type":"string","example":"billingDate"},"description":"Field to group results by.\n\n**Available fields:** `billingDate`, `currency`, `gatewayProfile`, `product.name`"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `groupBy` when it is a date field. Defaults to `day`. `hour` additionally requires the query to be bounded to a `createdAt` range of at most two days. Accepts `hour`, `day`, `week`, `month`, `quarter`, `year`; anything else falls back to the default."},{"name":"secondaryGroupBy","in":"query","required":false,"schema":{"type":"string"},"description":"Optional second axis for pivoting (must differ from groupBy). Each row will then carry both the primary `groupBy` value and a `secondaryGroupBy` value.\n\n**Available fields:** `billingDate`, `currency`, `gatewayProfile`, `product.name`"},{"name":"secondaryGranularity","in":"query","required":false,"schema":{"type":"string"},"description":"Date granularity for `secondaryGroupBy` when it is a date field. Defaults to `day`."},{"name":"measures","in":"query","required":false,"schema":{"type":"string","example":"rebillsCount,projectedRevenue,rebillBucket1Count,rebillBucket1BaseAmount,rebillBucket2Count,rebillBucket2BaseAmount,rebillBucket3Count,rebillBucket3BaseAmount,rebillBucketAdditionalCount,rebillBucketAdditionalBaseAmount,recycleBucket1Count,recycleBucket1BaseAmount,recycleBucket2Count,recycleBucket2BaseAmount,recycleBucket3Count,recycleBucket3BaseAmount,recycleBucketAdditionalCount,recycleBucketAdditionalBaseAmount"},"description":"Metrics to include in the results. Multiple measures can be specified as comma-separated values. If `measures` is not provided, all metrics specified in the config will be calculated.\n\n**Available metrics:** `rebillsCount`, `projectedRevenue`, `rebillBucket1Count`, `rebillBucket1BaseAmount`, `rebillBucket2Count`, `rebillBucket2BaseAmount`, `rebillBucket3Count`, `rebillBucket3BaseAmount`, `rebillBucketAdditionalCount`, `rebillBucketAdditionalBaseAmount`, `recycleBucket1Count`, `recycleBucket1BaseAmount`, `recycleBucket2Count`, `recycleBucket2BaseAmount`, `recycleBucket3Count`, `recycleBucket3BaseAmount`, `recycleBucketAdditionalCount`, `recycleBucketAdditionalBaseAmount`"},{"name":"withTotal","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Whether to include a rollup row aggregating every group. Pass `false` to omit it."},{"name":"billingDate","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"gatewayProfile","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"dueAmount","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"attemptType","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"attemptBucket","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"price","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"product","in":"query","required":false,"schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"recycleProjections","in":"query","required":false,"schema":{"type":"string","example":"25,15,10,5"},"description":"Comma-separated list of exactly 4 approval-rate percentages (0..100) for upcoming Recycle #1, #2, #3 and #4+ attempts. Example: `25,15,10,5`. Defaults to `0,0,0,0`."},{"name":"rebillProjections","in":"query","required":false,"schema":{"type":"string","example":"45,30,20,10"},"description":"Comma-separated list of exactly 4 approval-rate percentages (0..100) for upcoming Rebill #1, #2, #3 and #4+ attempts. Example: `45,30,20,10`. Defaults to `0,0,0,0`."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectedBillingReportResponseDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/logs":{"get":{"operationId":"RequestLogController_findAllPaginated","summary":"Find all Request Logs","description":"Retrieve a paginated list of Request Logs","tags":["Logs"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"requestId","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"url","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"method","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"clientIp","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"statusCode","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"initiator","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/RequestLogDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/logs/{id}":{"get":{"operationId":"RequestLogController_findOne","summary":"Find one Request Log","description":"Retrieve a Request Log by its ID","tags":["Logs"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/retry-policies/default":{"get":{"operationId":"RetryPolicyController_findDefault","summary":"Find default Retry Policy","description":"Retrieve the default Retry Policy","tags":["Retry Policies"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryPolicyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/retry-policies/{id}":{"get":{"operationId":"RetryPolicyController_findOne","summary":"Find one Retry Policy","description":"Retrieve a Retry Policy by its ID","tags":["Retry Policies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryPolicyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"RetryPolicyController_update","summary":"Update a Retry Policy","description":"Update an existing Retry Policy by its ID","tags":["Retry Policies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRetryPolicyRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryPolicyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/retry-policies":{"post":{"operationId":"RetryPolicyController_create","summary":"Create a Retry Policy","description":"Create a new Retry Policy with the provided details","tags":["Retry Policies"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRetryPolicyDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryPolicyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/search":{"get":{"operationId":"SearchController_search","summary":"Global search","description":"Search across payments, customers, subscriptions, and gateways. Results are filtered by the caller's permissions.","tags":["Search"],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3,"example":"john@example.com"},"description":"Search query string to find matching payments, customers, subscriptions, invoices, and prices"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResultsDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/secret-keys":{"get":{"operationId":"SecretKeyController_findAllPaginated","summary":"Find all Secret Keys","description":"Retrieve a paginated list of Secret Keys","tags":["Secret Keys"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"active","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/SecretKeyPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"SecretKeyController_create","summary":"Create a Secret Key","description":"Create a new Secret Key","tags":["Secret Keys"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSecretKeyRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretKeyWithKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/secret-keys/{id}":{"get":{"operationId":"SecretKeyController_findOne","summary":"Find one Secret Key","description":"Retrieve a Secret Key by its ID","tags":["Secret Keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"SecretKeyController_update","summary":"Update a Secret Key","description":"Update an existing Secret Key by its ID","tags":["Secret Keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSecretKeyRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretKeyDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/secret-keys/{id}/delete":{"post":{"operationId":"SecretKeyController_delete","summary":"Delete a Secret Key","description":"Delete a Secret Key by its ID","tags":["Secret Keys"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRemovedDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/statistics/calendar":{"get":{"operationId":"StatisticsController_getCalendarData","summary":"Get data for upcoming calendar events","tags":["Statistics"],"parameters":[{"name":"startDate","in":"query","required":true,"schema":{"type":"string","example":"2026-01-01"},"description":"Start date in ISO 8601 format"},{"name":"endDate","in":"query","required":false,"schema":{"type":"string","example":"2026-01-31"},"description":"End date in ISO 8601 format. Defaults to the end of the current month if not provided."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarDataDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/token-exchange":{"post":{"operationId":"TokenExchangeController_createToken","summary":"Create exchange token","description":"Creates a short-lived (60 s) HMAC-SHA256-signed token. The Base64URL-encoded payload contains: userId, merchantId, accountSlug, iat (issued-at ms), exp (expiry ms), and nonce. Consuming applications that share the signing secret can verify the signature and trust the payload contents.","tags":["Token Exchange"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeTokenResponseDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions":{"get":{"operationId":"SubscriptionController_findAllPaginated","summary":"List all Subscriptions","description":"Returns a list of Subscriptions","tags":["Subscriptions"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"startDate","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"endDate","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"autoBillingEnabled","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"autoBillingDisabledAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"autoBillingDisabledReason","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"cancelAtPeriodEnd","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"cancelAtCycle","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"currentPeriodStart","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"currentPeriodEnd","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"currentCycle","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"metadata","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer.email","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"price","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"setupInvoice.payment","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"price.product.name","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"upcomingInvoice.periodStart","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"invoices.payment.retry.nextAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","status","currentPeriodStart","currentPeriodEnd","startDate","endDate"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/bulk-update/preview":{"post":{"operationId":"SubscriptionController_previewBulkUpdate","summary":"Preview Bulk Update","description":"Generates a preview of the subscriptions that would be affected by a bulk update","tags":["Subscriptions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionBulkUpdateDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionBulkUpdatePreviewDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/bulk-update":{"post":{"operationId":"SubscriptionController_bulkUpdate","summary":"Start Bulk Update","description":"Initiates a job to bulk update subscriptions based on the provided criteria","tags":["Subscriptions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionBulkUpdateDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionBulkUpdateResultDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/{id}":{"get":{"operationId":"SubscriptionController_findOne","summary":"Retrieve a Subscription","description":"Retrieves a Subscription by its ID","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"SubscriptionController_update","summary":"Update a Subscription","description":"Updates a Subscription based on previously generated preview","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubscriptionPlanRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/{id}/related":{"get":{"operationId":"SubscriptionController_findRelated","summary":"List related Subscriptions","description":"Returns the other Subscriptions of the same Customer that were bought together with this one: those sharing its setup payment, plus — when the merchant has configured a grouping window — those created within that many minutes of it. Read-only; nothing is cancelled or changed.","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedSubscriptionsDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/{id}/cancel":{"post":{"operationId":"SubscriptionController_cancel","summary":"Cancel a Subscription","description":"Schedules a Subscription cancellation for the end of the current billing cycle (the default), for the end of the next one, or applies it immediately","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/{id}/resume":{"post":{"operationId":"SubscriptionController_resume","summary":"Resume a Subscription","description":"Reverts a scheduled cancellation for a Subscription, whichever cycle it was booked against","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/subscriptions/{id}/preview":{"post":{"operationId":"SubscriptionController_generateUpdatePreview","summary":"Preview a Subscription update","description":"Generates a preview of the changes that would occur if the Subscription is updated","tags":["Subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateUpdatePreviewRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePreviewDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/transactions":{"get":{"operationId":"TransactionController_findAllPaginated","summary":"Find all Transactions","description":"Retrieve a paginated list of Transactions","tags":["Transactions"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"amount","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"currency","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"status","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"processorId","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"paymentMethod","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"payment","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"gatewayProfile","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"customer","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"execution","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","amount","status"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/TransactionPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/transactions/{id}":{"get":{"operationId":"TransactionController_findOne","summary":"Find one Transaction","description":"Retrieve a Transaction by its ID","tags":["Transactions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/login":{"post":{"operationId":"UserLoginController_login","summary":"Login User","description":"Authenticate a user and return a user token","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginUserRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoggedInDTO"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/logout":{"post":{"operationId":"UserLoginController_logout","summary":"Logout User","description":"Invalidate the user session and token","tags":["Users"],"responses":{"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"204":{"description":"OK"},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/users":{"get":{"operationId":"UserController_findAllPaginated","summary":"List all Users","description":"Returns a list of Users","tags":["Users"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"email","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"firstName","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"lastName","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"username","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt","email"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/UserPartialDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"UserController_create","summary":"Create a User","description":"Create a new User with the provided details","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/users/me":{"get":{"operationId":"UserController_findMe","summary":"Get Current User","description":"Retrieve the currently authenticated user","tags":["Users"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"UserController_updateMe","summary":"Update Current User","description":"Update the currently authenticated user","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/users/{id}":{"get":{"operationId":"UserController_findOne","summary":"Find one User","description":"Retrieve a User by its ID","tags":["Users"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"UserController_update","summary":"Update a User","description":"Update an existing User with the provided details","tags":["Users"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"delete":{"operationId":"UserController_delete","summary":"Remove a User","description":"Remove an existing User by its ID","tags":["Users"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRemovedDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/webhook-subscribers":{"get":{"operationId":"WebhookSubscriberController_findAllPaginated","summary":"Find all Webhook Subscribers","description":"Retrieve a paginated list of Webhook Subscribers","tags":["Webhook Subscribers"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"updatedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","updatedAt"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscriberDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"WebhookSubscriberController_create","summary":"Create a Webhook Subscriber","description":"Create a new Webhook Subscriber","tags":["Webhook Subscribers"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookSubscriberRequestDTO"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriberWithSecretDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/webhook-subscribers/{id}":{"get":{"operationId":"WebhookSubscriberController_findOne","summary":"Find one Webhook Subscriber","description":"Retrieve a Webhook Subscriber by its ID","tags":["Webhook Subscribers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriberDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]},"post":{"operationId":"WebhookSubscriberController_update","summary":"Update a Webhook Subscriber","description":"Update an existing Webhook Subscriber by its ID","tags":["Webhook Subscribers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookSubscriberRequestDTO"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriberDTO"}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No resource exists with the requested identifier. `type` is `not_found_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`type` is `conflict_error`. The supplied `X-Idempotency-Key` was already used with a different request body (`code` is `idempotency_conflict`, and retrying will not help), or the resource is being modified by another in-flight request (`code` is `resource_locked`, and retrying with backoff will).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}},"/webhooks":{"get":{"operationId":"WebhookController_findAllPaginated","summary":"Find all Webhook Deliveries","description":"Retrieve a paginated list of webhook delivery records","tags":["Webhooks"],"parameters":[{"name":"id","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"createdAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"firstDispatchedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"lastDispatchedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"abandonedAt","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string","format":"date-time"},"ne":{"type":"string","format":"date-time"},"gt":{"type":"string","format":"date-time"},"gte":{"type":"string","format":"date-time"},"lt":{"type":"string","format":"date-time"},"lte":{"type":"string","format":"date-time"},"in":{"type":"array","items":{"type":"string","format":"date-time"}},"nin":{"type":"array","items":{"type":"string","format":"date-time"}},"contains":{"type":"string","format":"date-time"}}},"style":"deepObject","explode":true},{"name":"success","in":"query","schema":{"type":"object","properties":{"eq":{"type":"boolean"},"ne":{"type":"boolean"},"contains":{"type":"boolean"}}},"style":"deepObject","explode":true},{"name":"attempts","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"latestResponseStatus","in":"query","schema":{"type":"object","properties":{"eq":{"type":"number"},"ne":{"type":"number"},"gt":{"type":"number"},"gte":{"type":"number"},"lt":{"type":"number"},"lte":{"type":"number"},"in":{"type":"array","items":{"type":"number"}},"nin":{"type":"array","items":{"type":"number"}},"contains":{"type":"number"}}},"style":"deepObject","explode":true},{"name":"event.type","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"event","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"subscriber","in":"query","schema":{"type":"object","properties":{"eq":{"type":"string"},"ne":{"type":"string"},"like":{"type":"string"},"in":{"type":"array","items":{"type":"string"}},"nin":{"type":"array","items":{"type":"string"}},"contains":{"type":"string"}}},"style":"deepObject","explode":true},{"name":"sortDirection","in":"query","schema":{"type":"string","enum":["ASC","DESC","asc","desc"]},"description":"Sort direction. Defaults to ASC."},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["id","createdAt","firstDispatchedAt","lastDispatchedAt","abandonedAt","attempts"]},"description":"Field to sort by. Defaults to createdAt."},{"name":"page","in":"query","schema":{"type":"number"},"description":"Page number for offset pagination. Defaults to 1."},{"name":"pageSize","in":"query","schema":{"type":"number"},"description":"Number of items per page for offset pagination. Defaults to 10."},{"name":"limit","in":"query","schema":{"type":"number"},"description":"Opts into cursor pagination and sets the page size. When provided, \"page\"/\"pageSize\" are ignored and the response returns a \"nextCursor\" instead of a total count."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous cursor-paginated response. Used together with \"limit\" to fetch the next page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"properties":{"pagination":{"oneOf":[{"$ref":"#/components/schemas/OffsetPageMetaDTO"},{"$ref":"#/components/schemas/CursorPageMetaDTO"}],"discriminator":{"propertyName":"mode","mapping":{"offset":"#/components/schemas/OffsetPageMetaDTO","cursor":"#/components/schemas/CursorPageMetaDTO"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookResponseDTO"}}}}}}},"202":{"description":"The merchant is entitled but its environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to a merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningInProgress"}}}},"400":{"description":"The request was rejected. `type` is `invalid_request_error` when the request itself is at fault — `errors` then lists every problem found, with field-attributable entries prefixed by the field’s path; `invalid_state_error` when the request was well-formed but the resource is not in a state that allows it; or `payment_error` when the payment was refused by the issuer or processor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"401":{"description":"No API key was supplied, or the key is not valid. `type` is `authentication_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The API key is valid but lacks the permission this operation requires. `type` is `permission_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many requests. The rate limit is applied per client across all operations. `type` is `rate_limit_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The request could not be completed because of an unexpected error. `type` is `api_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"A dependency needed to authorize the request is temporarily unavailable — the auth service that verifies credentials, or the entitlement lookup behind it. `type` is `api_error`. It is raised before the operation runs, so the request had no effect, and unlike a plain 500 the condition is transient: retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"The request exceeded the processing time limit and was abandoned. `type` is `api_error` and `code` is `timeout` — unlike a plain 500 the request may still have taken effect, so retry with the same idempotency key rather than blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"bearer":[]}]}}}}