{"openapi":"3.1.0","info":{"title":"MoonPay","version":"1.0.0"},"tags":[{"name":"Assets"},{"name":"Quote"},{"name":"Customer"},{"name":"Identity"},{"name":"Transactions"}],"paths":{"/platform/v1/assets":{"get":{"operationId":"AssetController.listAssets","summary":"List assets","description":"Returns a paginated list of crypto assets (CeFi and DeFi) available for purchase through MoonPay. Filter by `source` and `code`. Authenticate with a scoped access token (`Authorization: Bearer <jwt>`) or server-side with the partner's secret API key (`X-Api-Key`).","parameters":[{"$ref":"#/components/parameters/AssetPaginationQueryParams.source"},{"$ref":"#/components/parameters/AssetPaginationQueryParams.code"},{"$ref":"#/components/parameters/MoonPay.Core.PaginationQueryParams.cursor"},{"$ref":"#/components/parameters/MoonPay.Core.PaginationQueryParams.limit"}],"responses":{"200":{"description":"The request has succeeded.","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","pageInfo"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PlatformAsset"}},"pageInfo":{"$ref":"#/components/schemas/MoonPay.Core.PaginationInfo"}},"unevaluatedProperties":{"not":{}}}}}}},"tags":["Assets"],"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/export":{"post":{"operationId":"CustomerExportController.export","summary":"Export a customer's verified MoonPay identity","description":"Returns the MoonPay-verified identity for the customer that issued the consent token. Requires the partner's secret API key (`X-Api-Key`) and the single-use consent token presented as `Authorization: Bearer <jwt>`. Returns 403 if the consent token is not bound to a customer. The consent token is consumed on success, and each returned `downloadUrl` is short-lived (see field); if a URL expires before the partner has fetched the file, mint a fresh consent token via `POST /platform/v1/partner/grants` and call this endpoint again.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CustomerExportIdentity"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"security":[{"AccessTokenAuth":[],"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/ext/{externalCustomerId}":{"get":{"operationId":"CustomersController.getByExternalId","summary":"Get customers by external customer ID","description":"Returns the customers connected to the caller's account under the given partner-supplied `externalCustomerId`, including KYC standing and outstanding requirements for each. With a secret key, returns every customer connected to the partner under this externalCustomerId (the schema does not guarantee a 1:1 mapping). With an access token, the token must be bound to a customer connected under this externalCustomerId — the result is a single-element array when it matches, and this returns 404 when it doesn't. Returns 404 if no customer is found.","parameters":[{"name":"externalCustomerId","in":"path","required":true,"description":"The partner-supplied external customer identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Customer"}}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}}},"tags":["Customer"],"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/{id}":{"get":{"operationId":"CustomersController.get","summary":"Get a customer","description":"Returns the customer identified by `id`, including their KYC standing and outstanding requirements. With a secret key, the customer must have connected to the partner. With an access token, the token must be bound to this customer.","parameters":[{"name":"id","in":"path","required":true,"description":"The customer's unique MoonPay identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Customer"}},"required":["data"],"unevaluatedProperties":{"not":{}}},"examples":{"Customer mid-KYC":{"summary":"Customer mid-KYC","description":"A customer whose KYC is in progress, with outstanding requirements and a hosted challenge the partner can surface.","value":{"data":{"id":"c1d2e3f4-5678-90ab-cdef-1234567890ab","externalCustomerId":"customer-1234","kyc":{"status":"collecting","requirements":{"basicDetails":{"status":"incomplete","requiredFields":["firstName","lastName","dateOfBirth","nationality"]},"residentialAddress":{"status":"incomplete","requiredFields":["street","locality","postalCode","administrativeArea"]},"identityDocuments":{"status":"incomplete"},"selfie":{"status":"incomplete"}},"challenge":{"url":"https://platform.moonpay.com/platform/v1/challenge?challengeToken=eyJhbGciOiJFUzI1NiJ9...","expiresAt":"2026-01-29T15:30:50.000Z"}}}}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}}},"tags":["Customer"],"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/{id}/files":{"post":{"operationId":"CustomersController.submitFiles","summary":"Confirm uploaded customer files","description":"Confirms one or more previously-uploaded identity-related files and attaches them to the customer's active KYC session. Returns the updated customer.","parameters":[{"name":"id","in":"path","required":true,"description":"The customer's unique MoonPay identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Customer"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitCustomerFilesInvalidRequestError"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SubmitCustomerFilesUploadExpiredError"},{"$ref":"#/components/schemas/SubmitCustomerFilesNotFoundError"}]}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}},"503":{"description":"Service unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitCustomerFilesServiceUnavailableError"}}}}},"tags":["Customer"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitIdentityFilesRequestBody"}}}},"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/{id}/files/upload-url":{"post":{"operationId":"CustomersController.getUploadUrl","summary":"Issue a presigned URL to upload a customer's identity-related file","description":"Issues a single-use presigned URL for uploading an identity-related file directly to MoonPay storage. `PUT` the file to the URL within 15 minutes, using every header in `headers`. Files over 10 MB are rejected by the storage service before the object is written.","parameters":[{"name":"id","in":"path","required":true,"description":"The customer's unique MoonPay identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/IdentityFileUploadUrl"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetCustomerUploadUrlInvalidRequestError"},{"$ref":"#/components/schemas/GetCustomerUploadUrlUnsupportedCountryError"}]}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCustomerUploadUrlNotFoundError"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetCustomerUploadUrlConflictError"}}}}},"tags":["Customer"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityFileUploadUrlRequestBody"}}}},"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/customers/{id}/kyc":{"patch":{"operationId":"CustomersController.submitKyc","summary":"Submit KYC data for a customer","description":"Submits one or more outstanding KYC requirements for the customer and returns the updated customer. A phone number sent at session creation usually clears `phoneNumber` at authorize, so check that it is outstanding before you submit it. Returns 400 with code `requirement_not_pending` when a submitted requirement is not outstanding. Returns 409 with code `verification_pending` when a verification is already in flight, or `no_outstanding_requirements` when the customer has nothing left to submit.","parameters":[{"name":"id","in":"path","required":true,"description":"The customer's unique MoonPay identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Customer"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/VerificationPendingError"},{"$ref":"#/components/schemas/NoOutstandingRequirementsError"},{"$ref":"#/components/schemas/ConflictError"}]}}}}},"tags":["Customer"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIdentityRequestBody"}}}},"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/identities":{"post":{"operationId":"IdentityController.create","summary":"Create an identity","description":"Creates an identity for the customer bound to the credential and starts collecting any outstanding requirements for the requested capabilities. Returns 204 when the customer has no outstanding requirements (already onboarded).","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Identity"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"204":{"description":"There is no content to send for this request, but the headers may be useful. ","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"tags":["Identity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIdentityRequestBody"}}}},"security":[{"AccessTokenAuth":[]}],"deprecated":true}},"/platform/v1/identities/{id}":{"get":{"operationId":"IdentityController.get","summary":"Get an identity","description":"Returns the identity bound to the credential's customer. Returns 404 if the identity does not exist or belongs to a different customer.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Identity"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}}},"tags":["Identity"],"security":[{"AccessTokenAuth":[]}],"deprecated":true},"patch":{"operationId":"IdentityController.update","summary":"Submit requirements for an identity","description":"Submits one or more outstanding requirements on the identity and returns the updated identity.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Identity"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"tags":["Identity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIdentityRequestBody"}}}},"security":[{"AccessTokenAuth":[]}],"deprecated":true}},"/platform/v1/identities/{id}/files":{"post":{"operationId":"IdentityController.submitFiles","summary":"Confirm uploaded identity-related files","description":"Confirms one or more previously-uploaded identity-related files and attaches them to the identity's active KYC session. Returns the updated identity.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Identity"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}},"503":{"description":"Service unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}},"tags":["Identity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitIdentityFilesRequestBody"}}}},"security":[{"AccessTokenAuth":[]}],"deprecated":true}},"/platform/v1/identities/{id}/files/upload-url":{"post":{"operationId":"IdentityController.getUploadUrl","summary":"Issue a presigned URL to upload an identity-related file","description":"Issues a single-use presigned URL for uploading an identity-related file directly to MoonPay storage. The URL is valid for 15 minutes.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/IdentityFileUploadUrl"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"tags":["Identity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityFileUploadUrlRequestBody"}}}},"security":[{"AccessTokenAuth":[]}],"deprecated":true}},"/platform/v1/identities/{id}/verifications":{"post":{"operationId":"IdentityController.verify","summary":"Verify an identity","description":"Submits the identity for verification. Returns the current outcome (approved, processing, or challengeRequired). Idempotent while a verification is in flight: re-calling returns the current state without kicking off a new vendor check. Returns challengeRequired with a hosted challenge URL when the only outstanding requirements cannot be satisfied via the Identity API. Returns 400 with code requirements_incomplete when at least one outstanding requirement is API-submittable, and 409 with code verification_rejected when a prior verification has already terminally failed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/IdentityVerificationResponse"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"tags":["Identity"],"security":[{"AccessTokenAuth":[]}],"deprecated":true}},"/platform/v1/payment-methods":{"get":{"operationId":"PlatformPaymentMethods_listPaymentMethods","summary":"List payment methods","description":"Get list of available payment method configs","parameters":[{"name":"configs","in":"query","required":false,"description":"When false, omits paymentMethodConfigs from the response.","schema":{"type":"boolean","default":true},"explode":false},{"name":"details","in":"query","required":false,"description":"When false, omits paymentMethods from the response. Only applicable when a customer is authenticated; anonymous requests never return stored payment methods.","schema":{"type":"boolean","default":true},"explode":false},{"name":"currency","in":"query","required":false,"description":"When provided, filters payment method configs to the selected fiat currency. When omitted, the regional catalog is returned unfiltered and identity limits use the customer's preferred currency.","schema":{"type":"string"},"explode":false}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MoonPay.Payments.ListPaymentMethodsResponse"}},"required":["data"],"unevaluatedProperties":{"not":{}}},"examples":{"Full Response":{"summary":"Full Response","description":"200 response when query params are omitted (both default to true).","value":{"data":{"paymentMethodConfigs":[{"type":"apple_pay","capabilities":{"supportedCurrencies":["USD"],"supportedTransactionTypes":["buy"],"allowsDeletion":false,"requiresWidget":false},"availability":{"active":true}},{"type":"card","capabilities":{"supportedCurrencies":["USD","EUR","GBP"],"supportedTransactionTypes":["buy"],"allowsDeletion":true,"requiresWidget":false},"availability":{"active":true}}],"paymentMethods":[{"id":"apple_pay_fakeid","type":"apple_pay"},{"id":"b1c2d3e4-5678-90ab-cdef-1234567890ab","type":"card","cardType":"credit","brand":"visa","last4":"4242","expirationMonth":"03","expirationYear":"2028","availability":{"active":true},"networkToken":{"status":"active"}},{"id":"a9b8c7d6-5432-10fe-dcba-0987654321fe","type":"card","cardType":"debit","brand":"mastercard","last4":"8910","expirationMonth":"01","expirationYear":"2024","availability":{"active":false,"reasons":["card_expired"]},"networkToken":{"status":"unavailable"}}]}}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"422":{"description":"Client error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPaymentMethodsUnprocessableEntityError"}}}}},"security":[{"AccessTokenAuth":[]}]}},"/platform/v1/payment-methods/{paymentMethodId}":{"delete":{"operationId":"PlatformPaymentMethods_deletePaymentMethod","summary":"Delete a payment method","description":"Delete a stored payment method for the authenticated customer.","parameters":[{"name":"paymentMethodId","in":"path","required":true,"description":"ID of the payment method to delete.","schema":{"type":"string"}}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. ","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonPay.Payments.DeletePaymentMethodConflictError"}}}}},"security":[{"AccessTokenAuth":[]}]}},"/platform/v1/quotes/buy":{"post":{"operationId":"QuoteController.getQuote","summary":"Build a buy quote","description":"Builds a quote for a fiat-to-crypto buy. Returns locked rate, fees, and signature for payment execution.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GetQuoteResponse"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}}},"tags":["Quote"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetQuoteBody"}}}},"security":[{"AccessTokenAuth":[]}]}},"/platform/v1/session":{"post":{"operationId":"DevPlatform_createSessionToken","parameters":[],"responses":{"200":{"description":"The request has succeeded.","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionTokenResponse"}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"503":{"description":"Service unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionTokenRequestBody"}}}},"security":[{"SecretApiKeyInHeaderAuth":[]}],"deprecated":true}},"/platform/v1/sessions":{"post":{"operationId":"DevPlatform_createSessions","parameters":[],"responses":{"200":{"description":"The request has succeeded.","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionTokenResponse"}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"503":{"description":"Service unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionTokenRequestBody"}}}},"security":[{"SecretApiKeyInHeaderAuth":[]}]},"delete":{"operationId":"DevPlatform_revokeCustomerSessions","parameters":[{"name":"externalCustomerId","in":"query","required":true,"description":"The external customer identifier from your system.","schema":{"type":"string"},"explode":false}],"responses":{"204":{"description":"There is no content to send for this request, but the headers may be useful. ","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}}},"security":[{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/transactions":{"get":{"operationId":"TransactionController.findAll","summary":"List transactions","description":"Returns a paginated list of transactions. An access token returns transactions for that customer only. A secret API key with no `externalCustomerId` returns all transactions for the account in the key mode (live or test). A secret API key with `externalCustomerId` returns transactions for that customer only. Use `startDate` and `endDate` to select transactions by creation time.","parameters":[{"$ref":"#/components/parameters/TransactionPaginationQueryParams.startDate"},{"$ref":"#/components/parameters/TransactionPaginationQueryParams.endDate"},{"$ref":"#/components/parameters/TransactionPaginationQueryParams.externalCustomerId"},{"$ref":"#/components/parameters/MoonPay.Core.PaginationQueryParams.cursor"},{"$ref":"#/components/parameters/MoonPay.Core.PaginationQueryParams.limit"}],"responses":{"200":{"description":"The request has succeeded.","headers":{"X-Request-Id":{"required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","pageInfo"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}},"pageInfo":{"$ref":"#/components/schemas/MoonPay.Core.PaginationInfo"}},"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}}},"tags":["Transactions"],"security":[{"AccessTokenAuth":[]},{"SecretApiKeyInHeaderAuth":[]}]}},"/platform/v1/transactions/{id}":{"get":{"operationId":"TransactionController.findOne","summary":"Get a transaction","description":"Returns a single transaction by ID with lifecycle stages showing progress from payment to delivery.","parameters":[{"name":"id","in":"path","required":true,"description":"The MoonPay ID of the transaction.","schema":{"type":"string"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TransactionWithStages"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}}},"tags":["Transactions"],"security":[{"AccessTokenAuth":[]}]}},"/platform/v1/transactions/{id}/simulate-bank-transfer":{"post":{"operationId":"TransactionController.simulateBankTransfer","summary":"Simulate bank-transfer settlement (sandbox only)","description":"Sandbox only. Drives a waiting-payment bank-transfer transaction to a terminal outcome without real funds. Only the transaction's own customer may call this, and only for test-mode transactions. Settlement is asynchronous, so the response reflects the transaction's current state; poll `GET /transactions/{id}` for the terminal state.","parameters":[{"name":"id","in":"path","required":true,"description":"The MoonPay ID of the transaction.","schema":{"type":"string"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TransactionWithStages"}},"required":["data"],"unevaluatedProperties":{"not":{}}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"403":{"description":"Access is forbidden.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevPlatformApiErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"}}}}},"tags":["Transactions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateBankTransferRequest"}}}},"security":[{"AccessTokenAuth":[]}]}}},"components":{"parameters":{"AssetPaginationQueryParams.code":{"name":"code","in":"query","required":false,"description":"Filter by exact (case-insensitive) asset code.","schema":{"type":"string"},"explode":false},"AssetPaginationQueryParams.source":{"name":"source","in":"query","required":false,"description":"Filter by asset source.\n- `cefi`: only centralised assets listed by MoonPay.\n- `defi`: only DeFi tokens.\n- omitted: both are returned.","schema":{"type":"string","enum":["cefi","defi"]},"explode":false},"MoonPay.Core.PaginationQueryParams.cursor":{"name":"cursor","in":"query","required":false,"description":"Cursor for pagination. Use the `nextCursor` value from the previous response.","schema":{"type":"string"},"explode":false},"MoonPay.Core.PaginationQueryParams.limit":{"name":"limit","in":"query","required":false,"description":"Number of items to return per page.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":50,"default":50},"explode":false},"TransactionPaginationQueryParams.endDate":{"name":"endDate","in":"query","required":false,"description":"Filter transactions created on or before this date. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.","schema":{"type":"string","format":"date-time"},"explode":false},"TransactionPaginationQueryParams.externalCustomerId":{"name":"externalCustomerId","in":"query","required":false,"description":"The customer ID that the partner assigned. Send this parameter with a secret API key to return transactions for one customer. If you do not send it, the API returns all transactions for the account in the key mode (live or test). The list is paginated. An access token does not use this parameter. The token already selects one customer.","schema":{"type":"string","minLength":1},"explode":false},"TransactionPaginationQueryParams.startDate":{"name":"startDate","in":"query","required":false,"description":"Filter transactions created on or after this date. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.","schema":{"type":"string","format":"date-time"},"explode":false}},"schemas":{"Asset":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"A fiat or crypto currency code.\n\n**Fiat**\nFiat codes are represented as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) codes.\n\n**Crypto**\nFor crypto currency codes, see [supported currencies](https://dev.moonpay.com/docs/list-of-supported-cryptocurrencies).\n\nExamples: `BTC` `SOL` `ETH` `USDC_BASE` `USDC_SOL`"},"name":{"type":"string","description":"The human-readable name"},"precision":{"type":"integer","format":"int32","description":"The number of supported decimal places"}},"unevaluatedProperties":{"not":{}},"description":"A fiat currency or crypto token"},"AssetBase":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"A fiat or crypto currency code.\n\n**Fiat**\nFiat codes are represented as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) codes.\n\n**Crypto**\nFor crypto currency codes, see [supported currencies](https://dev.moonpay.com/docs/list-of-supported-cryptocurrencies).\n\nExamples: `BTC` `SOL` `ETH` `USDC_BASE` `USDC_SOL`"}},"unevaluatedProperties":{"not":{}}},"AssetStatus":{"type":"object","required":["suspended","disabled"],"properties":{"suspended":{"type":"boolean","description":"Temporarily unavailable for trading."},"disabled":{"type":"boolean","description":"Disabled for trading."}},"unevaluatedProperties":{"not":{}},"description":"Current status flags for an asset.","examples":[{"suspended":false,"disabled":false}]},"BankTransferDepositInfo":{"type":"object","required":["reference","recipientName","recipientAddress"],"properties":{"reference":{"type":"string","description":"The payment reference the customer must include with the bank transfer so MoonPay can match the payment to the transaction. The customer must always include it - transfers sent without the reference are rejected."},"recipientName":{"type":"string","description":"The name of the recipient account holder the customer should send the transfer to."},"recipientAddress":{"type":"string","description":"The address of the recipient account holder the customer should send the transfer to."},"accountNumber":{"type":"string","description":"The account number of the recipient account. Provided for domestic transfers such as Faster Payments (FPS); UK account numbers are 8 digits."},"bankAddress":{"type":"string","description":"The address of the recipient's bank."},"bankName":{"type":"string","description":"The name of the recipient's bank."},"bic":{"type":"string","description":"The BIC (SWIFT code) of the recipient account, 8 or 11 characters. Provided for SEPA transfers."},"iban":{"type":"string","description":"The IBAN of the recipient account (up to 34 alphanumeric characters). Provided for SEPA transfers."},"sortCode":{"type":"string","description":"The sort code of the recipient bank, 6 digits. Provided for domestic transfers such as Faster Payments (FPS)."}},"unevaluatedProperties":{"not":{}},"description":"Bank account details and payment reference the customer uses to complete a bank transfer. Present only for bank-transfer payment methods such as SEPA and Faster Payments (FPS).","examples":[{"reference":"MP-8F3K2A","recipientName":"MoonPay Ltd","recipientAddress":"1 Market Street, London, EC1A 1AA, United Kingdom","iban":"GB29NWBK60161331926819","bic":"NWBKGB2L","bankName":"MoonPay Bank","bankAddress":"1 Market Street, London, EC1A 1AA, United Kingdom"}]},"BuyQuoteDestinationAsset":{"type":"object","properties":{"code":{"type":"string","description":"CeFi currency code, e.g. `BTC` or `ETH`. Use for centralised assets.","examples":["ETH"]},"caip19":{"type":"string","description":"CAIP-19 asset identifier from the assets listing. Required for DeFi tokens.","examples":["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv"]}},"unevaluatedProperties":{"not":{}},"description":"Destination crypto asset. Identify it by `code` for CeFi assets, or by `caip19` (the CAIP-19 identifier from the assets listing) for DeFi tokens, whose `code` is not unique. Provide exactly one; `caip19` takes precedence if both are sent."},"CapabilityProduct":{"type":"string","enum":["ramps"],"description":"A platform capability a partner wants the customer to unlock."},"CddAccountPurpose":{"type":"string","enum":["investing","payments","paymentsToFamilyAndFriends","paymentsToThirdParties","purchasingDigitalAssets","purchasingGoodsOrServices","trading"],"description":"The customer's primary purpose for the account."},"CddEmploymentStatus":{"type":"string","enum":["employedOrSelfEmployed","retired","student","unemployed"],"description":"The customer's employment status."},"CddSourceOfWealth":{"type":"string","enum":["salary","savings","investments","cryptoTrading","other"],"description":"The customer's primary source of wealth."},"Challenge":{"type":"object","required":["kind","url"],"properties":{"kind":{"$ref":"#/components/schemas/ChallengeKind","description":"The type of challenge resolution required."},"url":{"type":"string","description":"Fully-formed challenge frame URL. Render directly without parsing."}},"unevaluatedProperties":{"not":{}},"description":"A challenge that must be resolved by rendering a MoonPay-hosted frame."},"ChallengeKind":{"type":"string","enum":["frame"]},"ConflictError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["conflict"]},"message":{"type":"string","examples":["Conflict"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DevPlatformErrorDetail"}}},"unevaluatedProperties":{"not":{}},"description":"The request conflicts with the current customer state."},"CreateIdentityRequestBody":{"type":"object","required":["residentialAddress","capabilities"],"properties":{"residentialAddress":{"$ref":"#/components/schemas/CreateIdentityResidentialAddress","description":"The customer's residential address. At creation only `country` is accepted; remaining fields are submitted via PATCH /platform/v1/identities/{id}."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityCapability"},"minItems":1,"description":"Capabilities the partner wants the customer to unlock. Must contain at least one value."}},"unevaluatedProperties":{"not":{}},"description":"Request body for creating an identity."},"CreateIdentityResidentialAddress":{"type":"object","required":["country"],"properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-3 country code declared by the partner."}},"unevaluatedProperties":{"not":{}},"description":"Residential-address fields accepted at identity creation. Only the partner-declared country is required at this stage; remaining address fields are submitted via PATCH /platform/v1/identities/{id}."},"CreateSessionTokenRequestBody":{"type":"object","required":["deviceIp"],"properties":{"externalCustomerId":{"type":"string","minLength":1,"maxLength":255,"description":"A unique identifier for the customer from your system.","examples":["user_01AN4Z07BY"]},"deviceIp":{"anyOf":[{"$ref":"#/components/schemas/IPv4Address"},{"$ref":"#/components/schemas/IPv6Address"}],"description":"The IP address of the user's device to ensure the integrity of the session. Both IPv4 and IPv6 values are supported.","examples":["0.0.0.0"]},"email":{"type":"string","minLength":5,"maxLength":255,"format":"email","description":"The customer's email address. Must be a valid email. If provided, enables email OTP authentication.","examples":["user@example.com"]},"phoneNumber":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"The customer's phone number in E.164 format. If both email and phone are provided, enables phone OTP authentication for returning customers. Send only a number you have verified belongs to the customer: when a signed-in customer with no verified phone number authorizes, MoonPay saves it as their verified phone number and the `phoneNumber` KYC requirement is cleared. If it can't be saved (for example, it is already verified for another customer), authorization still succeeds and `phoneNumber` stays outstanding.","examples":["+14155551234"]},"termsAcceptedAt":{"type":"string","format":"utc-date-time","description":"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp of when the customer accepted MoonPay's Terms of Use. Send this when you capture Terms of Use acceptance in your own UI. The value can be at most 60 seconds ahead of server time, with no past limit. MoonPay records the terms version live at this timestamp and binds the acceptance to the customer when the session is authorized. Only send this field if you use the Customer API or Guest Checkout; otherwise the request fails with a 503 `service_unavailable` error.","examples":["2026-05-28T14:21:00.000Z"]},"dateOfBirth":{"type":"string","format":"utc-date-time","description":"Customer's date of birth as an ISO 8601 timestamp. Optional. Send this for Guest Checkout when the customer is in the EEA so it can be stored on the customer record after authorize. Must represent an age between 18 and 100 years. Omitting it does not block session creation.","examples":["1990-05-15T00:00:00.000Z"],"x-age-between":{"minYears":18,"maxYears":100}}},"unevaluatedProperties":{"not":{}}},"CreateSessionTokenResponse":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string","minLength":1,"maxLength":8192,"description":"An opaque session token used to set up a connection on your frontend. This token is single-use and must be generated each time the customer visits your app.\n\nToken expires 24 hours after issuance.","examples":["c2Vzc2lvbi50b2tlbg"]}},"unevaluatedProperties":{"not":{}}},"Customer":{"type":"object","required":["id","externalCustomerId","kyc"],"properties":{"id":{"type":"string","format":"uuid","description":"The customer's unique MoonPay identifier.","examples":["c1d2e3f4-5678-90ab-cdef-1234567890ab"]},"externalCustomerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The partner-provided identifier for this customer, if one was supplied. Null when the customer connected without an external identifier.","examples":["customer-1234"]},"kyc":{"$ref":"#/components/schemas/CustomerKyc","description":"KYC details for the customer."}},"unevaluatedProperties":{"not":{}},"description":"A MoonPay customer as seen by a partner."},"CustomerDueDiligenceAnswers":{"type":"object","required":["employmentStatus","accountPurpose","grossAnnualIncome","sourceOfWealth","transactionFrequencyPerMonth","expectedTransactionAmountPerMonth"],"properties":{"employmentStatus":{"$ref":"#/components/schemas/CddEmploymentStatus","description":"The customer's employment status."},"accountPurpose":{"$ref":"#/components/schemas/CddAccountPurpose","description":"The customer's primary purpose for the account."},"grossAnnualIncome":{"$ref":"#/components/schemas/MonetaryAmount","description":"The customer's gross annual income. Denominate the amount in the reporting currency for the customer's `residentialAddress.country`. See `MonetaryAmount` for the country-to-currency mapping. If the customer's local currency differs, convert the amount to the reporting currency before submitting, using a current exchange rate."},"sourceOfWealth":{"$ref":"#/components/schemas/CddSourceOfWealth","description":"The customer's primary source of wealth."},"transactionFrequencyPerMonth":{"type":"integer","format":"int32","description":"Expected number of transactions per month, a strictly positive integer.","exclusiveMinimum":0,"examples":[7]},"expectedTransactionAmountPerMonth":{"$ref":"#/components/schemas/MonetaryAmount","description":"Expected total transaction amount per month. Denominate the amount in the reporting currency for the customer's `residentialAddress.country`. See `MonetaryAmount` for the country-to-currency mapping."}},"unevaluatedProperties":{"not":{}},"description":"Answers for the Customer Due Diligence questionnaire."},"CustomerExportBasicDetails":{"type":"object","required":["firstName","lastName","dateOfBirth","nationality"],"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Customer's first/given name. `null` for mononymous customers recorded with only a last name.","examples":["Jane"]},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Customer's last/family name. `null` for mononymous customers recorded with only a first name.","examples":["Doe"]},"dateOfBirth":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Customer's date of birth in `YYYY-MM-DD` format. `null` when MoonPay does not hold this value.","examples":["1990-01-15"]},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Customer's nationality as an [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) country code. `null` when MoonPay does not hold this value.","examples":["USA"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's basic personal details from their verified MoonPay identity."},"CustomerExportFile":{"type":"object","required":["id","type","uploadedAt","downloadUrl"],"properties":{"id":{"type":"string","format":"uuid","description":"MoonPay's identifier for the file."},"type":{"$ref":"#/components/schemas/CustomerExportFileType","description":"Type of file."},"side":{"$ref":"#/components/schemas/CustomerExportFileSide","description":"Side of the document. Present for two-sided file types; omitted for single-sided."},"uploadedAt":{"type":"string","format":"date-time","description":"Timestamp at which MoonPay received the file."},"downloadUrl":{"type":"string","format":"uri","description":"A pre-signed URL for downloading the file. The URL expires 60 minutes after the response is returned. Do not attach your API key when fetching it; the signature is the only credential required."}},"unevaluatedProperties":{"not":{}},"description":"An identity-related file on the customer's verified MoonPay identity, including a pre-signed download URL."},"CustomerExportFileSide":{"type":"string","enum":["front","back"],"description":"Side of a two-sided identity document. Present for `driving_licence`, `national_identity_card`, and `residence_permit`; omitted for single-sided file types."},"CustomerExportFileType":{"type":"string","enum":["driving_licence","national_identity_card","passport","residence_permit","selfie","proof_of_address"],"description":"Type of identity-related file referenced in the verified identity payload."},"CustomerExportIdentity":{"type":"object","required":["basicDetails","residentialAddress","phoneNumber","taxIdentifiers","files"],"properties":{"basicDetails":{"$ref":"#/components/schemas/CustomerExportBasicDetails","description":"The customer's basic personal details."},"residentialAddress":{"$ref":"#/components/schemas/CustomerExportResidentialAddress","description":"The customer's residential address."},"phoneNumber":{"$ref":"#/components/schemas/CustomerExportPhoneNumber","description":"The customer's phone number."},"taxIdentifiers":{"type":"array","items":{"$ref":"#/components/schemas/CustomerExportTaxIdentifier"},"description":"Tax identifiers recorded on the customer's identity. Empty when the customer has no recorded tax identifiers."},"files":{"type":"array","items":{"$ref":"#/components/schemas/CustomerExportFile"},"description":"Identity-related files the customer has submitted, each with a pre-signed download URL."}},"unevaluatedProperties":{"not":{}},"description":"The customer's MoonPay-verified identity. All fields are populated from the customer's latest approved identity verification."},"CustomerExportPhoneNumber":{"type":"object","required":["number"],"properties":{"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The customer's phone number in [E.164](https://en.wikipedia.org/wiki/E.164) format. `null` when MoonPay does not hold this value.","examples":["+14155551234"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's phone number from their verified MoonPay identity."},"CustomerExportResidentialAddress":{"type":"object","required":["country","locality","street","postalCode"],"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country of the residential address as an [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) country code. `null` when MoonPay does not hold this value.","examples":["USA"]},"administrativeArea":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State, province, or territory. Present when the country has subdivisions recognised by MoonPay (currently USA and CAN); `null` when MoonPay does not hold this value for those countries. Omitted for all other countries.","examples":["NY"]},"locality":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City, town, or locality. `null` when MoonPay does not hold this value.","examples":["New York"]},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First line of the residential address (street). `null` when MoonPay does not hold this value.","examples":["350 Fifth Avenue"]},"subStreet":{"type":"string","description":"Optional second line of the residential address (apartment, unit, building). Omitted when MoonPay does not hold this value.","examples":["Apt 1A"]},"postalCode":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Postal or ZIP code. `null` when MoonPay does not hold this value.","examples":["10118"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's residential address from their verified MoonPay identity."},"CustomerExportTaxIdentifier":{"type":"object","required":["type","value"],"properties":{"type":{"$ref":"#/components/schemas/CustomerExportTaxIdentifierType","description":"Type of tax identifier."},"country":{"type":"string","description":"Country issuing the identifier as an ISO 3166-1 alpha-3 code. Present for `tin` entries; omitted for country-specific schemes (`ssn`, `cpf`).","examples":["GBR"]},"value":{"type":"string","description":"Identifier value as recorded by MoonPay."}},"unevaluatedProperties":{"not":{}},"description":"A tax identifier on the customer's verified MoonPay identity."},"CustomerExportTaxIdentifierType":{"type":"string","enum":["tin","ssn","cpf"],"description":"Type of tax identifier returned in the verified identity payload."},"CustomerIdentityStatusUpdatedWebhookPayload":{"type":"object","required":["id","type","timestamp","data"],"properties":{"id":{"type":"string","description":"Unique identifier for this webhook delivery."},"type":{"type":"string","enum":["customer.identity_status_updated"],"description":"The `x-webhook-event` type this payload was published for."},"timestamp":{"type":"string","format":"date-time","description":"Timestamp at which the event occurred."},"data":{"type":"object","properties":{"customerId":{"type":"string","format":"uuid","description":"The customer's unique MoonPay identifier."},"status":{"$ref":"#/components/schemas/CustomerKycStatus","description":"The customer's KYC standing after this transition."}},"required":["customerId","status"],"unevaluatedProperties":{"not":{}},"description":"Event-specific data."}},"unevaluatedProperties":{"not":{}},"description":"Payload for the `customer.identity_status_updated` webhook event, published whenever a customer's KYC status transitions.","x-webhook-event":"customer.identity_status_updated"},"CustomerKyc":{"type":"object","required":["status","requirements"],"properties":{"status":{"$ref":"#/components/schemas/CustomerKycStatus","description":"The customer's KYC standing."},"requirements":{"$ref":"#/components/schemas/Requirements","description":"Outstanding and completed KYC requirements for the customer."},"challenge":{"$ref":"#/components/schemas/IdentityVerificationChallenge","description":"Hosted challenge the partner must surface to the customer."}},"unevaluatedProperties":{"not":{}},"description":"KYC details for a customer."},"CustomerKycStatus":{"type":"string","enum":["collecting","verifying","active","unavailable","not_created"],"description":"The customer's KYC standing with you. `not_created` means no KYC session exists yet for this customer."},"DevPlatformApiErrorCodes":{"type":"string","enum":["unknown_error","unauthorized","forbidden","not_found","invalid_request","not_implemented","too_many_requests","not_allowed","conflict","unprocessable_entity","sse_timeout","sse_error","service_unavailable","requirements_incomplete","requirement_not_pending","verification_rejected","country_mismatch","upload_expired","unsupported_country","verification_pending","kyc_not_approved","no_outstanding_requirements","no_new_documents","terms_accepted_at_out_of_range","unsupported_combination","asset_not_available_in_region","address_confirmation_required","card_not_supported"]},"DevPlatformApiErrorResponse":{"type":"object","required":["code","message"],"properties":{"code":{"$ref":"#/components/schemas/DevPlatformApiErrorCodes","description":"Code identifying the error type.","examples":["forbidden","unauthorized","invalid_request"]},"message":{"type":"string","description":"Human-readable error message.","examples":["Forbidden","Not authorized","One or more request parameters are invalid."]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DevPlatformErrorDetail"},"description":"Optional list of field-level error details.","examples":[[{"field":"source.amount","message":"Source amount must be a numeric string. Example \"100\" or \"10.25\"."}]]}},"unevaluatedProperties":{"not":{}},"description":"Response body returned when a request fails."},"DevPlatformErrorDetail":{"type":"object","required":["message"],"properties":{"field":{"type":"string","description":"Field that caused the error."},"message":{"type":"string","description":"Human-readable error message for this field."},"details":{"type":"object","unevaluatedProperties":{},"description":"Extra data that describes the error in more detail, useful when debugging or logging. Keys vary by error and are not part of the API contract. For example, an amount-limit error includes the limit value as \"maxBuyAmount\" or \"minBuyAmount\"."}},"unevaluatedProperties":{"not":{}}},"EddProfession":{"type":"string","enum":["agriculture","artsAndEntertainment","businessOwner","education","financialServices","healthcare","industrialTradesAndTransport","informationAndTechnology","legalAndProfessionalServices","publicSector","realEstate","retail","seniorManagement"],"description":"The customer's profession."},"EnhancedDueDiligenceAnswers":{"type":"object","required":["profession","netWorth"],"properties":{"profession":{"$ref":"#/components/schemas/EddProfession","description":"The customer's profession."},"netWorth":{"$ref":"#/components/schemas/MonetaryAmount","description":"The customer's net worth. Denominate the amount in the reporting currency for the customer's `residentialAddress.country`. See `MonetaryAmount` for the country-to-currency mapping."}},"unevaluatedProperties":{"not":{}},"description":"Answers for the Enhanced Due Diligence questionnaire."},"ExchangeRateType":{"type":"string","enum":["fixed","floating"],"description":"Whether the quote's exchange rate is locked at quote time or an estimate confirmed at settlement."},"FeeBehavior":{"type":"string","enum":["inclusive","exclusive"],"description":"Controls how MoonPay fees relate to `source.amount`. `inclusive`: fees are taken out of `source.amount` (the customer pays exactly `source.amount`). `exclusive`: `source.amount` is the amount to convert and fees are added on top (the customer pays `source.amount` plus fees). Only affects quotes priced by `source.amount`; ignored when quoting by `destination.amount`."},"Fees":{"type":"object","properties":{"network":{"$ref":"#/components/schemas/MonetaryFeeAmount","description":"Network fees (in fiat) for the transaction."},"moonpay":{"$ref":"#/components/schemas/MonetaryFeeAmount","description":"MoonPay fees (in fiat) for the transaction."},"ecosystem":{"$ref":"#/components/schemas/MonetaryFeeAmount","description":"Ecosystem fees (in fiat) for the transaction, if applicable."},"defi":{"$ref":"#/components/schemas/MonetaryFeeAmount","description":"DeFi swap fee (in fiat) for the transaction, converted to the quote's base currency like the other fees. Present only for DeFi swaps that carry an itemized swap fee; when the fee is taken on-chain it is reflected in `destination.amount` instead."},"partner":{"$ref":"#/components/schemas/MonetaryFeeAmount","description":"Partner fees (in fiat) for the transaction, if applicable. Deprecated: use `fees.ecosystem` instead. This field will be removed in a future release.","deprecated":true}},"unevaluatedProperties":{"not":{}},"examples":[{"network":{"amount":"2.39","asset":{"code":"USD"}},"moonpay":{"amount":"4.99","asset":{"code":"USD"}},"ecosystem":{"amount":"1.00","asset":{"code":"USD"}}}]},"FileSubtype":{"type":"string","enum":["payslip","bankStatement","accountScreenshot","companyRegisterScreenshot","dividendDistributionCertificate","investmentPortfolioStatement","invoice","pensionStatement","rentalAgreement","saleContract","signedLetterFromSolicitorOrTrustee"],"description":"Subtype of a proof-of-income document. Must be permitted for the declared `sourceOfWealth`."},"ForbiddenError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["forbidden"]},"message":{"type":"string","examples":["Forbidden"]}},"unevaluatedProperties":{"not":{}},"description":"Insufficient permissions."},"GetCustomerUploadUrlConflictError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["conflict"]},"message":{"type":"string","examples":["Conflict"]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the customer is no longer open for file submissions, or when no outstanding requirement matches the requested `fileType`."},"GetCustomerUploadUrlInvalidRequestError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_request"]},"message":{"type":"string","examples":["Invalid request"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DevPlatformErrorDetail"}}},"unevaluatedProperties":{"not":{}},"description":"Returned when `fileType` or `mimeType` is unsupported, or when `side` is missing for a two-sided document or provided for a single-sided document."},"GetCustomerUploadUrlNotFoundError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["not_found"]},"message":{"type":"string","examples":["Not found"]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the customer does not exist or belongs to a different credential."},"GetCustomerUploadUrlUnsupportedCountryError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_country"]},"message":{"type":"string","examples":["Unsupported country"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DevPlatformErrorDetail"}}},"unevaluatedProperties":{"not":{}},"description":"Returned when the customer's country is not supported for identity verification."},"GetQuoteBody":{"type":"object","required":["source","destination"],"properties":{"source":{"type":"object","required":["asset"],"properties":{"asset":{"$ref":"#/components/schemas/AssetBase","description":"The currency or token being spent","examples":[{"code":"USD"}]},"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["100.02","10.22","1.00","10","1"]}},"unevaluatedProperties":{"not":{}},"description":"Source asset in fiat. Amount can be set in `source` or `destination`.","examples":[{"amount":"100.02","asset":{"code":"USD"}}]},"destination":{"type":"object","required":["asset"],"properties":{"asset":{"$ref":"#/components/schemas/BuyQuoteDestinationAsset"},"amount":{"type":"string","description":"The amount being received, if known"}},"unevaluatedProperties":{"not":{}},"description":"Destination asset in crypto. Amount can be set in `destination` or `source`. For DeFi tokens, identify the asset by `caip19` and set the amount on `source` only (quoting by destination token amount is not supported)."},"wallet":{"$ref":"#/components/schemas/Wallet","description":"Wallet address and optional tag where the crypto will be sent. Required for the quote to be executable."},"paymentMethod":{"$ref":"#/components/schemas/QuotePaymentMethod","description":"Payment method for the transaction. Required for the quote to be executable."},"feeBehavior":{"$ref":"#/components/schemas/FeeBehavior","description":"Whether MoonPay fees are included in `source.amount` (`inclusive`) or added on top of it (`exclusive`). Defaults to `inclusive`. Only applies when quoting by `source.amount`; ignored when `destination.amount` is provided.","default":"inclusive"}},"unevaluatedProperties":{"not":{}},"examples":[{"source":{"amount":"100","asset":{"code":"USD"}},"destination":{"asset":{"caip19":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv"}},"wallet":{"address":"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"}},{"source":{"asset":{"code":"USD"}},"destination":{"amount":"100","asset":{"code":"USDC"}},"wallet":{"address":"0x1234567890123456789012345678901234567890"},"paymentMethod":{"type":"card","id":"00000000-0000-0000-0000-000000000000"}},{"source":{"amount":"100","asset":{"code":"USD"}},"destination":{"asset":{"code":"XLM"}},"wallet":{"address":"GBKZP2H5572E3P4B6GTCU4Z6V6P77JL7IF7A6E3UWYJ2LXFMR43W","tag":"1234567890"},"paymentMethod":{"type":"paypal"}},{"source":{"amount":"100","asset":{"code":"USD"}},"destination":{"asset":{"code":"USDC"}},"wallet":{"address":"0x1234567890123456789012345678901234567890"},"paymentMethod":{"type":"apple_pay"}}]},"GetQuoteResponse":{"type":"object","required":["source","destination","fees","wallet","paymentMethod","feeBehavior","limits","expiresAt","executable","exchangeRate","exchangeRateType","paymentDisclosures","signature"],"properties":{"source":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["100.02","10.22","1.00","10","1"]},"asset":{"$ref":"#/components/schemas/Asset","description":"The currency or token being spent","examples":[{"code":"USD"}]}},"unevaluatedProperties":{"not":{}},"description":"Source side of the quote: amount and asset (fiat currency) you send."},"destination":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["100.02","10.22","1.00","10","1"]},"asset":{"$ref":"#/components/schemas/QuoteDestinationAsset"}},"unevaluatedProperties":{"not":{}},"description":"Destination side of the quote: amount and asset (cryptocurrency) the customer receives.","examples":[{"amount":"100.02","asset":{"code":"USDC"}}]},"fees":{"$ref":"#/components/schemas/Fees","description":"Breakdown of network, MoonPay, and ecosystem fees."},"wallet":{"anyOf":[{"$ref":"#/components/schemas/Wallet"},{"type":"null"}],"description":"Wallet address and optional tag where the crypto will be sent. Null when not provided."},"paymentMethod":{"anyOf":[{"$ref":"#/components/schemas/QuotePaymentMethod"},{"type":"null"}],"description":"The payment method used for the quote."},"feeBehavior":{"$ref":"#/components/schemas/FeeBehavior","description":"How MoonPay fees relate to `source.amount` in this quote. Echoes the requested `feeBehavior`; always `inclusive` when the quote was priced by `destination.amount`."},"limits":{"anyOf":[{"$ref":"#/components/schemas/QuoteLimits"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time","description":"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp of when the quote expires."},"executable":{"type":"boolean","description":"Whether the quote can be executed. Only `executable` quotes can be used to initiate payment frames."},"exchangeRate":{"type":"string","description":"The rate used to convert fiat <-> crypto, expressed as the fiat value of one unit of crypto (e.g. `1 SOL = {exchangeRate} USD`).","examples":["1.001","87523.17"]},"exchangeRateType":{"$ref":"#/components/schemas/ExchangeRateType","description":"Whether the quote's exchange rate is `fixed` (locked at quote time, e.g. cards, Apple Pay, Google Pay) or `floating` (an estimate confirmed when the payment settles, e.g. bank transfers).","examples":["floating"]},"slippageBps":{"type":"integer","format":"int32","description":"Slippage tolerance applied to the DeFi swap, in basis points (e.g. `50` = 0.5%). Only present when the destination is a DeFi token.","examples":[50]},"paymentDisclosures":{"type":"array","items":{"$ref":"#/components/schemas/PaymentDisclosure"},"description":"Disclosures the partner must render verbatim before the customer can complete the transaction. Empty when no disclosure is required for the customer's geography, payment method, and asset combination."},"signature":{"type":"string","description":"An opaque token representing the quote to initiate payment frames.","examples":["cXVvdGUuc2lnbmF0dXJl..."]},"challenge":{"$ref":"#/components/schemas/Challenge","description":"A challenge the partner must surface and the customer must complete before the quote can proceed — for example, verifying identity to raise guest-checkout limits. Present only when the quote requires one; omitted otherwise."}},"description":"Quote for a fiat-to-crypto buy. Contains locked rate, fees, expiry, and signature for payment execution.","examples":[{"source":{"amount":"100.00","asset":{"code":"USD"}},"destination":{"amount":"31250.0","asset":{"caip19":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv","code":"PENGU","name":"Pudgy Penguins","precision":6}},"fees":{"network":{"amount":"2.39","asset":{"code":"USD"}},"moonpay":{"amount":"4.99","asset":{"code":"USD"}},"ecosystem":{"amount":"1.00","asset":{"code":"USD"}},"defi":{"amount":"1.00","asset":{"code":"USD"}}},"wallet":{"address":"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"},"paymentMethod":{"type":"apple_pay"},"feeBehavior":"inclusive","limits":null,"expiresAt":"2026-03-27T12:30:00.000Z","executable":true,"exchangeRate":"0.0032","exchangeRateType":"fixed","slippageBps":50,"paymentDisclosures":[{"id":"gateway-token","version":"1"}],"signature":"cXVvdGUuc2lnbmF0dXJl..."},{"source":{"amount":"100.00","asset":{"code":"USD"}},"destination":{"amount":"0.00114","asset":{"code":"BTC"}},"fees":{"network":{"amount":"2.39","asset":{"code":"USD"}},"moonpay":{"amount":"4.99","asset":{"code":"USD"}},"ecosystem":{"amount":"1.00","asset":{"code":"USD"}}},"wallet":{"address":"0x1234567890123456789012345678901234567890"},"paymentMethod":{"type":"apple_pay"},"feeBehavior":"inclusive","limits":null,"expiresAt":"2026-03-27T12:30:00.000Z","executable":true,"exchangeRate":"87523.17","exchangeRateType":"fixed","paymentDisclosures":[{"id":"eea-crypto-asset-risk","version":"1"}],"signature":"cXVvdGUuc2lnbmF0dXJl..."}]},"GetQuoteResponseSignaturePayload":{"type":"object","required":["type"],"properties":{"bridgeAsset":{"type":"object","properties":{"code":{"type":"string"},"networkCode":{"type":"string"}},"required":["code","networkCode"],"unevaluatedProperties":{"not":{}}},"type":{"type":"string","enum":["quote"]},"iss":{"type":"string","enum":["dev-platform"],"description":"Token issuer (RFC 7519 `iss`). Always `dev-platform` on signed tokens."},"aud":{"type":"string","description":"Intended audience (RFC 7519 `aud`). Partner account id; always set on newly signed tokens."},"exp":{"type":"integer","format":"int32","description":"Expiration time as a Unix timestamp in seconds (RFC 7519 `exp`). Set by the signer."},"issuer":{"type":"string","enum":["dev-platform"],"description":"Legacy custom issuer claim. Only present on tokens minted before the cutover to `iss`; new tokens carry `iss`/`aud`/`exp` only.","deprecated":true}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/GetQuoteResponse"}]},"IPv4Address":{"type":"string","format":"ipv4"},"IPv6Address":{"type":"string","format":"ipv6"},"Identity":{"type":"object","required":["id","status","capabilities","requirements","createdAt","updatedAt"],"properties":{"id":{"type":"string","description":"Unique identifier for the identity."},"status":{"$ref":"#/components/schemas/IdentityStatus","description":"Current state of the identity across the KYC lifecycle."},"capabilities":{"type":"array","items":{"$ref":"#/components/schemas/IdentityCapability"},"description":"Capabilities scoped to the identity."},"requirements":{"$ref":"#/components/schemas/Requirements","description":"Outstanding and completed requirements for the identity."},"challenge":{"$ref":"#/components/schemas/IdentityVerificationChallenge","description":"Hosted challenge the partner must surface to the customer. Present only when `status` is `challengeRequired`. The `url` and `expiresAt` match the values returned by `POST /platform/v1/identities/{id}/verifications` for the same identity."},"createdAt":{"type":"string","format":"date-time","description":"Timestamp at which the identity was created."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp at which the identity was last updated."}},"unevaluatedProperties":{"not":{}},"description":"A KYC identity."},"IdentityBasicDetailsSubmission":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^0-9<>&\"/]+$","description":"Customer's first/given name.","examples":["Jane"]},"lastName":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[^0-9<>&\"/]+$","description":"Customer's last/family name.","examples":["Doe"]},"nationality":{"type":"string","pattern":"^[A-Z]{3}$","description":"Customer's nationality (ISO 3166-1 alpha-3 country code).","examples":["CAN"]},"dateOfBirth":{"type":"string","format":"date","description":"Customer's date of birth (YYYY-MM-DD).","examples":["1990-05-15"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's basic personal details (name, nationality, date of birth)."},"IdentityCapability":{"type":"object","required":["product"],"properties":{"product":{"$ref":"#/components/schemas/CapabilityProduct","description":"The product the capability unlocks."}},"unevaluatedProperties":{"not":{}},"description":"A requested capability scoped to an identity."},"IdentityCustomerDueDiligenceSubmission":{"type":"object","required":["type","answers"],"properties":{"type":{"type":"string","enum":["customerDueDiligence"],"description":"Identifies which questionnaire these answers are for."},"answers":{"$ref":"#/components/schemas/CustomerDueDiligenceAnswers","description":"The questionnaire answers."}},"unevaluatedProperties":{"not":{}},"description":"A Customer Due Diligence questionnaire submission."},"IdentityEnhancedDueDiligenceSubmission":{"type":"object","required":["type","answers"],"properties":{"type":{"type":"string","enum":["enhancedDueDiligence"],"description":"Identifies which questionnaire these answers are for."},"answers":{"$ref":"#/components/schemas/EnhancedDueDiligenceAnswers","description":"The questionnaire answers."}},"unevaluatedProperties":{"not":{}},"description":"An Enhanced Due Diligence questionnaire submission."},"IdentityFileMimeType":{"type":"string","enum":["image/jpeg","image/png","application/pdf"],"description":"MIME type of the file being uploaded."},"IdentityFileSide":{"type":"string","enum":["front","back"],"description":"Side of a two-sided identity document being uploaded."},"IdentityFileSubmission":{"type":"object","required":["uploadId","fileType"],"properties":{"uploadId":{"type":"string","description":"`uploadId` returned by `POST /files/upload-url`."},"fileType":{"$ref":"#/components/schemas/IdentityFileType","description":"Type of file being submitted. Must match the `fileType` declared when the upload URL was issued."},"side":{"$ref":"#/components/schemas/IdentityFileSide","description":"Side of the document. Required for two-sided file types; omit for single-sided. Must match the `side` declared when the upload URL was issued."},"sourceOfWealth":{"$ref":"#/components/schemas/SourceOfWealth","description":"Source of wealth the file evidences. Required for `proofOfIncome`; must match the value declared when the upload URL was issued."},"subtype":{"$ref":"#/components/schemas/FileSubtype","description":"Document subtype. Required for `proofOfIncome`; must match the value declared when the upload URL was issued."},"capturedAt":{"type":"string","format":"date-time","description":"Date and time at which the submitted selfie was captured. Used to evaluate MoonPay's selfie freshness policy. Must not be in the future."}},"unevaluatedProperties":{"not":{}},"description":"A single uploaded file the partner is confirming for submission."},"IdentityFileType":{"type":"string","enum":["drivingLicence","nationalIdentityCard","passport","residencePermit","selfie","proofOfAddress","proofOfIncome"],"description":"Type of identity-related file the customer is uploading."},"IdentityFileUploadUrl":{"type":"object","required":["uploadId","url","expiresAt","headers"],"properties":{"uploadId":{"type":"string","description":"Identifier of the upload. Use this value to refer to the file in subsequent submission calls."},"url":{"type":"string","description":"Fully-formed presigned URL. PUT the file body to this URL using the headers in `headers` within the validity window expressed by `expiresAt`."},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp at which the presigned URL expires. Partners must complete the upload before this time."},"headers":{"$ref":"#/components/schemas/IdentityFileUploadUrlHeaders","description":"Headers the partner must set on the upload request."}},"unevaluatedProperties":{"not":{}},"description":"Presigned URL the partner uses to upload an identity-related file directly to MoonPay storage."},"IdentityFileUploadUrlHeaders":{"type":"object","required":["Content-Type","x-goog-content-length-range"],"properties":{"Content-Type":{"type":"string","description":"Content-Type header value. Must match the `mimeType` requested.","examples":["image/jpeg"]},"x-goog-content-length-range":{"type":"string","description":"Inclusive byte-range constraint signed into the URL. Partners must send this header with the same value. The maximum is 10 MB (10,000,000 bytes). The storage service returns 400 directly to the partner when the request body is outside this range, and the object is not written.","examples":["0,10000000"]}},"unevaluatedProperties":{"not":{}},"description":"Headers the partner must send when uploading the file to the presigned URL. All headers are mandatory; omitting any of them causes the storage service to reject the upload."},"IdentityFileUploadUrlRequestBody":{"type":"object","required":["fileType","mimeType"],"properties":{"fileType":{"$ref":"#/components/schemas/IdentityFileType","description":"Type of file the customer is uploading."},"side":{"$ref":"#/components/schemas/IdentityFileSide","description":"Side of the document being uploaded. Required for two-sided file types (`drivingLicence`, `nationalIdentityCard`, `residencePermit`); must be omitted for single-sided file types."},"mimeType":{"$ref":"#/components/schemas/IdentityFileMimeType","description":"MIME type of the file being uploaded. Must match the `Content-Type` header used on the subsequent upload request."},"sourceOfWealth":{"$ref":"#/components/schemas/SourceOfWealth","description":"Source of wealth the file evidences. Required for `proofOfIncome`; must be omitted for all other file types."},"subtype":{"$ref":"#/components/schemas/FileSubtype","description":"Document subtype. Required for `proofOfIncome` and must be permitted for the declared `sourceOfWealth`; must be omitted for all other file types."}},"unevaluatedProperties":{"not":{}},"description":"Request body for issuing a presigned upload URL for an identity-related file."},"IdentityPhoneNumberSubmission":{"type":"object","required":["number"],"properties":{"number":{"type":"string","description":"The customer's phone number in E.164 format.","examples":["+14155551234"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's phone number submission. Submit only when the `phoneNumber` requirement is outstanding, for example when no phone number was sent at session creation or MoonPay couldn't save it at authorize."},"IdentityQuestionnaireSubmission":{"anyOf":[{"$ref":"#/components/schemas/IdentityCustomerDueDiligenceSubmission"},{"$ref":"#/components/schemas/IdentityEnhancedDueDiligenceSubmission"}],"description":"A due-diligence questionnaire the customer is submitting."},"IdentityResidentialAddressSubmission":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 3166-1 alpha-3 country code.","examples":["USA"]},"administrativeArea":{"type":"string","maxLength":255,"description":"State, province, or territory. Required for country values that have subdivisions recognised by the platform (currently USA and CAN).","examples":["CA"]},"locality":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[^0-9<>&\"/]+$","description":"City, town, or locality of the residential address.","examples":["San Francisco"]},"street":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[^<>&\"]+$","description":"First line of the residential address (street).","examples":["1 Market Street"]},"subStreet":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[^<>&\"]+$","description":"Optional second line of the residential address (apartment, unit, building).","examples":["Apt 4B"]},"postalCode":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[^<>&\"]+$","description":"Postal or ZIP code of the residential address.","examples":["94105"]}},"unevaluatedProperties":{"not":{}},"description":"The customer's residential address. Submit only the fields listed as outstanding under the residentialAddress requirement on the identity."},"IdentityStatus":{"type":"string","enum":["created","collecting","verifying","challengeRequired","approved","rejected","manualReview","blocked"],"description":"The state of an identity across the KYC lifecycle."},"IdentityTaxIdentifierGenericSubmission":{"type":"object","required":["type","country","value"],"properties":{"type":{"type":"string","enum":["tin"],"description":"Identifies this entry as a TIN submission."},"country":{"type":"string","description":"Country issuing the TIN, as an ISO 3166-1 alpha-3 country code.","examples":["PRT"]},"value":{"type":"string","description":"The TIN value as issued by the country's tax authority.","examples":["987654321"]}},"unevaluatedProperties":{"not":{}},"description":"Submission for a Tax Identification Number. Partners supply the issuing country in the `country` field."},"IdentityTaxIdentifierSchemeSubmission":{"type":"object","required":["type","value"],"properties":{"type":{"anyOf":[{"type":"string","enum":["ssn"]},{"type":"string","enum":["cpf"]}],"description":"Identifies which country-specific scheme this submission targets."},"value":{"type":"string","description":"The identifier value, formatted as expected by the issuing scheme.","examples":["123456789"]}},"unevaluatedProperties":{"not":{}},"description":"Submission for a country-specific tax identifier (SSN or CPF). The country is fixed by `type`; no `country` value is required."},"IdentityTaxIdentifierSubmission":{"anyOf":[{"$ref":"#/components/schemas/IdentityTaxIdentifierGenericSubmission"},{"$ref":"#/components/schemas/IdentityTaxIdentifierSchemeSubmission"}],"description":"A tax identifier the customer is submitting."},"IdentityVerificationApproved":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["approved"]}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/IdentityVerificationResponse"}],"description":"Verification response when the identity has already been approved."},"IdentityVerificationChallenge":{"type":"object","required":["url","expiresAt"],"properties":{"url":{"type":"string","description":"Fully-formed challenge URL. Render directly without parsing; the URL embeds the challenge token."},"expiresAt":{"type":"string","format":"date-time","description":"Timestamp at which the challenge URL expires. Partners must surface the challenge to the customer before this time."}},"unevaluatedProperties":{"not":{}},"description":"A MoonPay-hosted challenge a partner must surface to the customer to complete identity verification."},"IdentityVerificationChallengeRequired":{"type":"object","required":["status","challenge"],"properties":{"status":{"type":"string","enum":["challengeRequired"]},"challenge":{"$ref":"#/components/schemas/IdentityVerificationChallenge","description":"The hosted challenge the partner must surface to the customer."}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/IdentityVerificationResponse"}],"description":"Verification response when remaining requirements cannot be satisfied via the Identity API and must be completed through a MoonPay-hosted challenge."},"IdentityVerificationProcessing":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["processing"]}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/IdentityVerificationResponse"}],"description":"Verification response when verification is running asynchronously."},"IdentityVerificationResponse":{"type":"object","required":["status"],"properties":{"status":{"$ref":"#/components/schemas/IdentityVerificationStatus","description":"Current outcome of the verification request."}},"discriminator":{"propertyName":"status","mapping":{"approved":"#/components/schemas/IdentityVerificationApproved","processing":"#/components/schemas/IdentityVerificationProcessing","challengeRequired":"#/components/schemas/IdentityVerificationChallengeRequired"}},"description":"Outcome of POST /platform/v1/identities/{id}/verifications. Discriminated on status."},"IdentityVerificationStatus":{"type":"string","enum":["approved","processing","challengeRequired"],"description":"The state of an identity verification request."},"LimitWithAsset":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["1","10.22","100.02"]},"asset":{"$ref":"#/components/schemas/AssetBase","examples":[{"code":"USD"}]}},"unevaluatedProperties":{"not":{}}},"ListPaymentMethodsUnprocessableEntityError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unprocessable_entity"]},"message":{"type":"string","examples":["Could not determine region from IP address"]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the request region cannot be determined."},"MonetaryAmount":{"type":"object","required":["currency","amount"],"properties":{"currency":{"$ref":"#/components/schemas/SupportedCurrency","description":"The fiat currency code, as an [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) code. Must be the reporting currency for the customer's `residentialAddress.country`. See the country-to-currency table above."},"amount":{"$ref":"#/components/schemas/MonetaryDecimal","description":"The amount as a decimal string, strictly greater than zero. Must not have more than 2 decimal places.","examples":["1234.56","55000"]}},"unevaluatedProperties":{"not":{}},"description":"A monetary amount. The `currency` must be the reporting currency for the customer's `residentialAddress.country`:\n\n| Residential address country | Reporting currency |\n| --------------------------- | ------------------ |\n| GBR | GBP |\n| AUS | AUD |\n| NZL | NZD |\n| EEA (European Economic Area) countries | EUR |\n| All other countries, including USA and CAN | USD |\n\nThe expected value is fixed by the residential address country, but `currency` is still required: it acts as an explicit confirmation so amounts are never silently misinterpreted. MoonPay may, exceptionally, accept an amount in a different supported currency and convert it to the reporting currency. Do not rely on this: submit amounts in the reporting currency.\n\nIf the customer's local currency differs from the reporting currency, for example CZK or PLN in an EEA country, convert the amount to the reporting currency before submitting, using a current exchange rate."},"MonetaryDecimal":{"type":"string","pattern":"^[0-9]+(\\.[0-9]{1,2})?$","description":"A monetary amount expressed as a decimal string, e.g. \"55000\" or \"1234.56\"."},"MonetaryFeeAmount":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"The amount of fees in fiat.","examples":["1","1.00","10.22","100.02"]},"asset":{"$ref":"#/components/schemas/AssetBase","description":"The fiat currency used to pay the fees.","examples":[{"code":"USD"}]}},"unevaluatedProperties":{"not":{}}},"MoonPay.Core.PaginationInfo":{"type":"object","required":["nextCursor"],"properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The cursor to use as the starting point for the next page of results.","default":null}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.CardAvailability":{"type":"object","required":["active"],"properties":{"active":{"type":"boolean","description":"Whether the card is available","examples":[true]},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/MoonPay.Payments.CardAvailabilityReason"},"description":"If the card is not available, reasons explaining why.","examples":[["card_expired"]]}},"unevaluatedProperties":{"not":{}},"description":"Availability information for a stored card payment method."},"MoonPay.Payments.CardAvailabilityReason":{"type":"string","enum":["card_expired","card_declined","card_blocked"],"description":"Reasons why a stored card is not available."},"MoonPay.Payments.CardBrand":{"type":"string","enum":["visa","mastercard","maestro","american_express","other"],"description":"The card network brand."},"MoonPay.Payments.CardNetworkToken":{"type":"object","required":["status"],"properties":{"status":{"$ref":"#/components/schemas/MoonPay.Payments.NetworkTokenStatus","description":"Whether a network token is provisioned for the card. An `active` token does not mean a purchase will use it.","examples":["active"]}},"unevaluatedProperties":{"not":{}},"description":"The network token MoonPay holds for a stored card."},"MoonPay.Payments.CardType":{"type":"string","enum":["credit","debit","unknown"],"description":"The type of card: credit, debit, or unknown."},"MoonPay.Payments.DeletePaymentMethodConflictError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["conflict"]},"message":{"type":"string","description":"Human-readable error message.","examples":["Payment method cannot be deleted while it has pending transactions."]}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.ListPaymentMethodsResponse":{"type":"object","properties":{"paymentMethodConfigs":{"type":"array","items":{"$ref":"#/components/schemas/MoonPay.Payments.PaymentMethod"},"description":"List of available payment method configurations"},"paymentMethods":{"type":"array","items":{"$ref":"#/components/schemas/MoonPay.Payments.StoredPaymentMethod"},"description":"List of stored payment methods available for the customer"}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.ListedCardPaymentMethod":{"type":"object","required":["cardType","brand","last4","expirationMonth","expirationYear","availability","id","type","networkToken"],"properties":{"cardType":{"$ref":"#/components/schemas/MoonPay.Payments.CardType","examples":["credit"]},"brand":{"$ref":"#/components/schemas/MoonPay.Payments.CardBrand","description":"The card network brand","examples":["visa"]},"last4":{"type":"string","description":"Last 4 digits of the card number","examples":["1234"]},"expirationMonth":{"type":"string","description":"Expiration month as 2-digit string","examples":["03"]},"expirationYear":{"type":"string","description":"Expiration year as 4-digit string","examples":["2028"]},"availability":{"$ref":"#/components/schemas/MoonPay.Payments.CardAvailability","description":"Current availability of this stored card","examples":[{"active":true}]},"id":{"type":"string","description":"Unique identifier for the stored payment method","examples":["apple_pay_fakeid"]},"type":{"$ref":"#/components/schemas/PaymentMethodType"},"networkToken":{"$ref":"#/components/schemas/MoonPay.Payments.CardNetworkToken","description":"The card's network token.","examples":[{"status":"active"}]}},"unevaluatedProperties":{"not":{}},"description":"A stored card in the list of the customer's payment methods.","title":"Card payment method"},"MoonPay.Payments.ListedCashAppPaymentMethod":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"Unique identifier for the stored payment method","examples":["apple_pay_fakeid"]},"type":{"$ref":"#/components/schemas/PaymentMethodType"},"cashtag":{"type":"string","description":"The customer's $cashtag. Absent when Cash App has not returned one.","examples":["$moonpay"]}},"unevaluatedProperties":{"not":{}},"description":"A linked Cash App account in the list of the customer's payment methods.","title":"Cash App payment method"},"MoonPay.Payments.NetworkTokenStatus":{"type":"string","enum":["active","pending","unavailable"],"description":"Status of the network token MoonPay holds for a stored card."},"MoonPay.Payments.PaymentMethod":{"type":"object","required":["type","capabilities","availability"],"properties":{"type":{"$ref":"#/components/schemas/PaymentMethodType"},"capabilities":{"$ref":"#/components/schemas/MoonPay.Payments.PaymentMethodCapabilities","description":"Details of how the payment method can be used."},"availability":{"$ref":"#/components/schemas/MoonPay.Payments.PaymentMethodAvailability","examples":[{"active":true}]}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.PaymentMethodAvailability":{"type":"object","required":["active"],"properties":{"active":{"type":"boolean","description":"Whether the payment method is available","examples":[true]},"reasons":{"type":"array","items":{"type":"string"},"description":"If the payment method is not available, reasons explaining why.","examples":[["Payment method is in maintenance"]]}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.PaymentMethodCapabilities":{"type":"object","required":["supportedCurrencies","supportedTransactionTypes","allowsDeletion","requiresWidget"],"properties":{"supportedCurrencies":{"type":"array","items":{"type":"string"},"description":"[ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) codes of fiat currencies supported by this payment method.","examples":[["USD","EUR"]]},"supportedTransactionTypes":{"type":"array","items":{"type":"string"},"description":"Transaction types supported by this payment method.","examples":[["buy"]]},"allowsDeletion":{"type":"boolean","description":"Whether this payment method can be deleted.","examples":[true]},"requiresWidget":{"type":"boolean","description":"Whether this payment method requires the MoonPay widget to complete the payment flow.","examples":[false]}},"unevaluatedProperties":{"not":{}}},"MoonPay.Payments.StoredCardPaymentMethod":{"type":"object","required":["cardType","brand","last4","expirationMonth","expirationYear","availability"],"properties":{"cardType":{"$ref":"#/components/schemas/MoonPay.Payments.CardType","examples":["credit"]},"brand":{"$ref":"#/components/schemas/MoonPay.Payments.CardBrand","description":"The card network brand","examples":["visa"]},"last4":{"type":"string","description":"Last 4 digits of the card number","examples":["1234"]},"expirationMonth":{"type":"string","description":"Expiration month as 2-digit string","examples":["03"]},"expirationYear":{"type":"string","description":"Expiration year as 4-digit string","examples":["2028"]},"availability":{"$ref":"#/components/schemas/MoonPay.Payments.CardAvailability","description":"Current availability of this stored card","examples":[{"active":true}]}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/MoonPay.Payments.StoredPaymentMethodBase"}],"title":"Card payment method"},"MoonPay.Payments.StoredPaymentMethod":{"anyOf":[{"$ref":"#/components/schemas/MoonPay.Payments.StoredPaymentMethodBase"},{"$ref":"#/components/schemas/MoonPay.Payments.ListedCardPaymentMethod"},{"$ref":"#/components/schemas/MoonPay.Payments.ListedCashAppPaymentMethod"}],"description":"A stored payment method."},"MoonPay.Payments.StoredPaymentMethodBase":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"Unique identifier for the stored payment method","examples":["apple_pay_fakeid"]},"type":{"$ref":"#/components/schemas/PaymentMethodType"}},"title":"Alternative payment methods"},"NoOutstandingRequirementsError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["no_outstanding_requirements"]},"message":{"type":"string","enum":["This customer has no outstanding requirements."]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the customer has no outstanding KYC requirements."},"PaymentDisclosure":{"type":"object","required":["id","version"],"properties":{"id":{"$ref":"#/components/schemas/PaymentDisclosureId","description":"Stable identifier of the disclosure. Each id maps to one specific piece of text."},"version":{"type":"string","description":"Version of the disclosure text. Bumped whenever the canonical wording for this `id` changes. Partners that receive an unknown `(id, version)` pair should fall back to a conservative disclosure and alert their integration team."}},"unevaluatedProperties":{"not":{}},"description":"A payment disclosure that the partner must render verbatim before the customer can complete the transaction.","examples":[{"id":"eea-crypto-asset-risk","version":"1"}]},"PaymentDisclosureId":{"type":"string","enum":["us-transaction-finality","eea-crypto-asset-risk","eea-unregulated-stablecoin-risk","gateway-token"],"description":"Known identifiers for payment disclosures. Each id maps to one specific piece of canonical disclosure text.\n- `us-transaction-finality`: US state-level transaction finality notice, returned when the customer's residential state requires it (e.g. NY, WA).\n- `eea-crypto-asset-risk`: EEA crypto-asset risk warning, returned for customers in the EEA buying a MiCA-compliant asset.\n- `eea-unregulated-stablecoin-risk`: EEA unregulated stablecoin risk warning, returned for customers in the EEA buying a stablecoin that is not MiCA-compliant.\n- `gateway-token`: Gateway DeFi-token notice, returned when buying a DeFi token via Gateway (US customers, excluding NY and WA)."},"PaymentMethodType":{"type":"string","enum":["apple_pay","card","ach","fps","fps_open_banking","google_pay","sepa","sepa_open_banking","pix","paypal","venmo","cash_app","revolut_pay","moonpay_balance","interac"]},"PlatformAsset":{"type":"object","required":["caip19","code","name","network","source","contractAddress","decimals","precision","status"],"properties":{"caip19":{"type":"string","description":"The CAIP-19 asset identifier (encodes chain and contract). Use this value when creating quotes for DeFi tokens.","examples":["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"]},"code":{"type":"string","description":"The asset code. Use this value when creating quotes for CeFi assets.","examples":["USDC","BTC"]},"name":{"type":"string","description":"The human-readable name of the asset.","examples":["Bitcoin"]},"network":{"type":"string","description":"The blockchain network code this asset belongs to.","examples":["solana","ethereum"]},"source":{"type":"string","enum":["cefi","defi"],"description":"Whether this is a centralised asset listed by MoonPay (`cefi`) or a DeFi token (`defi`). Quote CeFi assets by `code` and DeFi tokens by `caip19`.","examples":["cefi"]},"contractAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The on-chain contract address. Null for native gas tokens.","examples":["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"]},"decimals":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"description":"The number of decimal places used on-chain, or null if unknown.","examples":[6]},"precision":{"anyOf":[{"type":"integer","format":"int32"},{"type":"null"}],"description":"The maximum decimal places MoonPay supports when trading this asset. `null` when MoonPay doesn't list a trading precision for it (typically DeFi tokens).","examples":[2]},"status":{"$ref":"#/components/schemas/AssetStatus"}},"unevaluatedProperties":{"not":{}},"description":"A crypto asset available for purchase through MoonPay.","examples":[{"caip19":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","code":"USDC","name":"USD Coin (Solana)","network":"solana","source":"cefi","contractAddress":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","decimals":6,"precision":2,"status":{"suspended":false,"disabled":false}}]},"QuoteDestinationAsset":{"type":"object","required":["code"],"properties":{"code":{"type":"string","description":"A fiat or crypto currency code.\n\n**Fiat**\nFiat codes are represented as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) codes.\n\n**Crypto**\nFor crypto currency codes, see [supported currencies](https://dev.moonpay.com/docs/list-of-supported-cryptocurrencies).\n\nExamples: `BTC` `SOL` `ETH` `USDC_BASE` `USDC_SOL`"},"name":{"type":"string","description":"The human-readable name"},"precision":{"type":"integer","format":"int32","description":"The number of supported decimal places"},"caip19":{"type":"string","description":"The CAIP-19 asset identifier (encodes chain and contract). Present for DeFi tokens."}},"unevaluatedProperties":{"not":{}},"description":"Destination crypto asset returned on the quote. Adds the resolved network and, for DeFi tokens, the CAIP-19 identifier on top of the base asset fields."},"QuoteLimitEntry":{"type":"object","required":["limit","remaining"],"properties":{"limit":{"$ref":"#/components/schemas/LimitWithAsset","description":"The maximum amount."},"remaining":{"$ref":"#/components/schemas/LimitWithAsset","description":"The remaining amount."}},"unevaluatedProperties":{"not":{}}},"QuoteLimits":{"type":"object","properties":{"daily":{"$ref":"#/components/schemas/QuoteLimitEntry","description":"The daily limit."},"monthly":{"$ref":"#/components/schemas/QuoteLimitEntry","description":"The monthly limit."},"yearly":{"$ref":"#/components/schemas/QuoteLimitEntry","description":"The yearly limit."}},"unevaluatedProperties":{"not":{}},"description":"Limits applicable to the quote."},"QuotePaymentMethod":{"type":"object","required":["type"],"properties":{"type":{"$ref":"#/components/schemas/PaymentMethodType"},"id":{"type":"string","description":"Unique identifier of the payment method. Used to identify the specific card when type is card."}},"unevaluatedProperties":{"not":{}}},"RequirementEntry":{"type":"object","required":["status"],"properties":{"status":{"$ref":"#/components/schemas/RequirementItemStatus","description":"Whether the requirement has been completed."},"requiredFields":{"type":"array","items":{"$ref":"#/components/schemas/RequirementFieldName"},"description":"When status is incomplete, the outstanding fields the customer must provide for this requirement. Populated for `basicDetails`, `residentialAddress`, `taxIdentifiers`, and `questionnaires`; omitted when status is complete or for other requirement types, which do not surface field-level detail."}},"unevaluatedProperties":{"not":{}},"description":"Status of a single requirement group on an identity."},"RequirementFieldName":{"type":"string","enum":["firstName","lastName","dateOfBirth","nationality","street","locality","postalCode","country","administrativeArea","ssn","cpf","tin","customerDueDiligence","enhancedDueDiligence"],"description":"A field a customer must provide to fulfil a requirement. Members match the field names used in the requirement-fulfilment endpoints (e.g. PATCH /platform/v1/identities/{id})."},"RequirementItemStatus":{"type":"string","enum":["incomplete","complete"],"description":"The completion state of a requirement item."},"Requirements":{"type":"object","properties":{"basicDetails":{"$ref":"#/components/schemas/RequirementEntry","description":"The customer's basic personal details (first name, last name, date of birth, nationality).","examples":[{"status":"incomplete","requiredFields":["firstName","lastName","dateOfBirth","nationality"]}]},"residentialAddress":{"$ref":"#/components/schemas/RequirementEntry","description":"The customer's residential address.","examples":[{"status":"incomplete","requiredFields":["street","locality","postalCode","administrativeArea"]}]},"identityDocuments":{"$ref":"#/components/schemas/RequirementEntry","description":"Identity document submission (passport, driver's license, residence permit, etc.).","examples":[{"status":"incomplete"}]},"selfie":{"$ref":"#/components/schemas/RequirementEntry","description":"Selfie photo submission.","examples":[{"status":"incomplete"}]},"taxIdentifiers":{"$ref":"#/components/schemas/RequirementEntry","description":"Tax identifier submission (SSN, CPF, TIN, etc.).","examples":[{"status":"incomplete","requiredFields":["ssn"]}]},"proofOfAddress":{"$ref":"#/components/schemas/RequirementEntry","description":"Proof-of-address document submission.","examples":[{"status":"incomplete"}]},"phoneNumber":{"$ref":"#/components/schemas/RequirementEntry","description":"Customer's phone number in E.164 format.","examples":[{"status":"incomplete"}]},"questionnaires":{"$ref":"#/components/schemas/RequirementEntry","description":"Due-diligence questionnaires the customer must complete (Customer Due Diligence and Enhanced Due Diligence). When incomplete, `requiredFields` lists the outstanding questionnaire types.","examples":[{"status":"incomplete","requiredFields":["customerDueDiligence","enhancedDueDiligence"]}]},"proofOfIncome":{"$ref":"#/components/schemas/RequirementEntry","description":"Proof-of-income document submission for Enhanced Due Diligence.","examples":[{"status":"incomplete"}]}},"unevaluatedProperties":{"not":{}},"description":"Outstanding and completed requirements for the identity, keyed by requirement category. Only requirements that apply to the customer are present."},"ServiceUnavailableError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["service_unavailable"]},"message":{"type":"string"}},"unevaluatedProperties":{"not":{}},"description":"The endpoint is temporarily disabled by MoonPay. Retry with exponential backoff or contact support if the issue persists."},"SimulateBankTransferOutcome":{"type":"string","enum":["settled","timeout"],"description":"The bank-transfer settlement outcome to simulate. Sandbox only."},"SimulateBankTransferRequest":{"type":"object","required":["outcome"],"properties":{"outcome":{"$ref":"#/components/schemas/SimulateBankTransferOutcome","description":"Which settlement outcome to simulate."},"senderBankAccount":{"$ref":"#/components/schemas/SimulateSenderBankAccount","description":"Optional sender bank account used to create the customer's bank account when settling. Defaults are synthesized per currency when omitted."}},"unevaluatedProperties":{"not":{}},"description":"Request body for simulating bank-transfer settlement."},"SimulateSenderBankAccount":{"type":"object","required":["accountHolderName"],"properties":{"accountHolderName":{"type":"string","description":"The name on the sender's bank account."},"iban":{"type":"string","description":"The sender's IBAN. Used for SEPA (EUR) transfers."},"accountNumber":{"type":"string","description":"The sender's account number. Used for Faster Payments (GBP) transfers."},"sortCode":{"type":"string","description":"The sender's sort code. Used for Faster Payments (GBP) transfers."}},"unevaluatedProperties":{"not":{}},"description":"The sender's bank account, used to model the incoming deposit. When omitted, a default matching the transaction's currency is used."},"SourceOfWealth":{"type":"string","enum":["salary","savings","investments","cryptoTrading","companyProfits","companySale","propertySale","soleProprietorIncome","rentalIncome","inheritance","pension"],"description":"Source of wealth a proof-of-income file evidences."},"Stage":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/StageKind"},"name":{"type":"string","description":"The human-readable name of the stage."},"status":{"$ref":"#/components/schemas/StageStatus"},"failureReason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A developer-friendly message if the status is `failed`"}},"unevaluatedProperties":{"not":{}},"description":"A stage in the transaction lifecycle","examples":[{"kind":"delivery","status":"success"}]},"StageKind":{"type":"string","enum":["ordering","waiting_payment","waiting_authentication","verification","processing","delivery","crypto_hold"],"description":"The stages in a transaction lifecycle."},"StageStatus":{"type":"string","enum":["not_started","in_progress","success","failed"],"description":"The status of a transaction stage."},"SubmitCustomerFilesInvalidRequestError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_request"]},"message":{"type":"string","examples":["Invalid request"]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the request is invalid: an empty `files` array, a metadata mismatch with the issued upload URL, a two-sided document submitted without both sides, or a stored object that exceeds 10 MB, has no reported size or, except for proof of income, is smaller than 10 KB."},"SubmitCustomerFilesNotFoundError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["not_found"]},"message":{"type":"string","examples":["Not found"]}},"unevaluatedProperties":{"not":{}},"description":"Returned when the customer does not exist, belongs to a different credential, or an uploaded object is missing from storage."},"SubmitCustomerFilesServiceUnavailableError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["service_unavailable"]},"message":{"type":"string","examples":["Unable to verify the uploaded file at this time. Please retry the request."]}},"unevaluatedProperties":{"not":{}},"description":"Returned when storage cannot confirm the uploaded object exists. Retry the request."},"SubmitCustomerFilesUploadExpiredError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["upload_expired"]},"message":{"type":"string","examples":["The upload has expired or was not found."]}},"unevaluatedProperties":{"not":{}},"description":"Returned when an `uploadId` has expired, is unknown, has already been submitted, or belongs to a different customer."},"SubmitIdentityFilesRequestBody":{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/IdentityFileSubmission"},"description":"Files being confirmed. Two-sided documents (driving licence, national identity card, residence permit) must include both `front` and `back` entries with the same `fileType` in a single call."}},"unevaluatedProperties":{"not":{}},"description":"Request body for confirming one or more uploaded identity-related files."},"SupportedCurrency":{"type":"string","enum":["AUD","NZD","USD","EUR","GBP"],"description":"The fiat currency codes supported for monetary amounts, as [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) codes."},"Transaction":{"type":"object","required":["id","transactionHash","createdAt","updatedAt","status","source","destination","fees","wallet","customer"],"properties":{"id":{"type":"string","description":"The MoonPay ID of the transaction.","examples":["fd43b900-593b-4125-9616-7d721ecbe875"]},"transactionHash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The on-chain transaction hash for the cryptocurrency transfer. Populated only when `status` is `completed` and a hash is available.","examples":["0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"]},"createdAt":{"type":"string","format":"date-time","description":"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp of when the transaction was created.","examples":["2026-01-29T14:30:50.000Z"]},"updatedAt":{"type":"string","format":"date-time","description":"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp of when the transaction was last updated.","examples":["2026-01-29T15:30:50.000Z"]},"status":{"$ref":"#/components/schemas/TransactionStatus"},"source":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["100.02","10.22","1.00","10","1"]},"asset":{"$ref":"#/components/schemas/AssetBase","description":"The currency or token being spent","examples":[{"code":"USD"}]}},"unevaluatedProperties":{"not":{}},"description":"Total source amount and asset (fiat currency) the customer pays, including all fees. Matches the quote's `source.amount`. For bank-transfer payment methods this is the exact amount the customer must transfer.","examples":[{"amount":"100.02","asset":{"code":"USD"}}]},"destination":{"type":"object","required":["amount","asset"],"properties":{"amount":{"type":"string","description":"A stringified amount, which can include decimals.","examples":["100.02","10.22","1.00","10","1"]},"asset":{"$ref":"#/components/schemas/AssetBase"}},"unevaluatedProperties":{"not":{}},"description":"Destination amount and asset (cryptocurrency) the customer receives. For bank-transfer (floating) payment methods this is an estimate while the transaction is pending, consistent with the quote's `destination.amount`; the exact amount is set at settlement.","examples":[{"amount":"100.02","asset":{"code":"USDC"}}]},"fees":{"$ref":"#/components/schemas/Fees","description":"Details of fees for the transaction."},"wallet":{"$ref":"#/components/schemas/Wallet","description":"The wallet used for the transaction."},"customer":{"$ref":"#/components/schemas/TransactionCustomer"},"paymentMethod":{"$ref":"#/components/schemas/TransactionPaymentMethod"},"bankTransferDepositInfo":{"$ref":"#/components/schemas/BankTransferDepositInfo","description":"Bank account details and payment reference for completing a bank transfer. Present only for bank-transfer payment methods such as SEPA and Faster Payments (FPS)."}}},"TransactionCustomer":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The MoonPay ID of the customer associated with the transaction.","examples":["e0dee0ac-4e62-4866-b044-f66c0e4046e9"]}},"unevaluatedProperties":{"not":{}}},"TransactionPaymentMethod":{"type":"object","required":["type"],"properties":{"type":{"$ref":"#/components/schemas/PaymentMethodType"}},"unevaluatedProperties":{"not":{}}},"TransactionStatus":{"type":"string","enum":["completed","failed","pending"],"description":"The status of a transaction.\n\n- `completed`: The transaction is finalized and assets were delivered.\n- `failed`: The transaction failed. No payment was executed and funds were not transferred.\n- `pending`: The transaction was created and payment is accepted. The transfer is in progress."},"TransactionWithStages":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/Stage"},"description":"Details of the stages in the transaction lifecycle."}},"unevaluatedProperties":{"not":{}},"allOf":[{"$ref":"#/components/schemas/Transaction"}],"description":"Transaction with lifecycle stages showing step-by-step progress."},"UnauthorizedError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized"]},"message":{"type":"string","enum":["Not authorized"]}},"unevaluatedProperties":{"not":{}},"description":"Missing or invalid credentials."},"UpdateIdentityRequestBody":{"type":"object","properties":{"residentialAddress":{"$ref":"#/components/schemas/IdentityResidentialAddressSubmission","description":"The customer's residential address."},"basicDetails":{"$ref":"#/components/schemas/IdentityBasicDetailsSubmission","description":"The customer's basic personal details."},"phoneNumber":{"$ref":"#/components/schemas/IdentityPhoneNumberSubmission","description":"The customer's phone number in E.164 format."},"taxIdentifiers":{"type":"array","items":{"$ref":"#/components/schemas/IdentityTaxIdentifierSubmission"},"minItems":1,"description":"Tax identifiers the customer is providing. At most one `ssn` and one `cpf` may be submitted; multiple `tin` entries are allowed only if their `country` values differ."},"questionnaires":{"type":"array","items":{"$ref":"#/components/schemas/IdentityQuestionnaireSubmission"},"minItems":1,"description":"Due-diligence questionnaires the customer is submitting. Submit one entry per questionnaire listed under the `questionnaires` requirement on the identity; each questionnaire type may appear at most once."}},"unevaluatedProperties":{"not":{}},"description":"Request body for updating an identity by submitting one or more requirements. Submit only the fields whose requirements are still outstanding; at least one outstanding requirement must be provided."},"VerificationPendingError":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["verification_pending"]},"message":{"type":"string","enum":["Verification pending"]},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DevPlatformErrorDetail"}}},"unevaluatedProperties":{"not":{}},"description":"Returned when a verification is already in flight for the customer."},"Wallet":{"type":"object","required":["address"],"properties":{"address":{"type":"string","description":"The wallet address used for the transaction.","examples":["0x1234567890123456789012345678901234567890"]},"tag":{"type":"string","description":"An optional memo or destination tag (used by some blockchains such as XRP or XLM)."}},"unevaluatedProperties":{"not":{}},"examples":[{"address":"0x1234567890123456789012345678901234567890"}]}},"securitySchemes":{"AccessTokenAuth":{"type":"http","scheme":"bearer","description":"Bearer authentication header using an access token.\n\nExample: `Authorization: Bearer <accessToken>`"},"SecretApiKeyInHeaderAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Secret key authentication via the `X-Api-Key` header.\n\nExample: `X-Api-Key: <secretKey>`"}}},"servers":[{"url":"https://api.moonpay.com","description":"Production Environment","variables":{}},{"url":"https://api.moonpay.dev","description":"Sandbox Environment","variables":{}}],"webhooks":{"customer.identity_status_updated":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerIdentityStatusUpdatedWebhookPayload"}}}},"responses":{"2XX":{"description":"Return any 2xx status to acknowledge receipt of the event."}}}}}}