{"openapi":"3.0.3","info":{"title":"CigalPay – Core API","version":"1.0.0","description":"\n## Overview\nCigalPay is a high-performance crypto payment gateway that enables merchants to accept on-chain cryptocurrency payments with no third-party custodians.\n\nSupported chains include Bitcoin, Ethereum, Litecoin, Dogecoin, Bitcoin Cash, Dash, Polygon, Solana, Tron, and USDT-TRX.\n\n### Authentication\n**Payment routes** require a `cigalpay-api-key` header set to your **merchant API key** — the unique key issued to your account when it was created.  \nThe account must have KYC status `VERIFIED` and status `active` or requests will be rejected with `403`.\n\n**Invoice routes** are public and safe to call from payee devices.\n\n### Payment flow\n1. `POST /createPayment` → receive a payment address + invoice URL\n2. Payee sends funds on-chain to the generated address\n3. CigalPay detects the transaction and updates the payment status automatically\n4. Poll `GET /getPaymentStatus` or receive real-time updates via `ipnCallbackUrl` webhook\n"},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","name":"cigalpay-api-key","in":"header","description":"Your merchant API key. Issued when your account is created via the Admin API. Must belong to a KYC-verified, active account."}},"schemas":{"def-0":{"description":"Successful response","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"createdAt":{"description":"An ISO 8601 timestamp detailing when a payment was created.","type":"string"},"updatedAt":{"description":"An ISO 8601 timestamp detailing when a payment last received a status update.","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"id":{"description":"The internal id of a payment, also serves as Mongo's _id for the given record.","type":"string"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"payoutTransactionHash":{"description":"The transaction id of the successful payment from the generated wallet to your admin wallet of the same currency. This can be used in the corresponding block explorer of this payment's currency.","type":"string"},"invoiceUrl":{"description":"The path of a Cigalpay invoice that can be optionally used by your payee's. This is easier to use than the API-driven workflow, but\n        is not required. Note that this is only a path and must be appended to your public domain that Cigalpay is running on.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"walletIndex":{"description":"Can be ignored and is typically only used for debugging purposes.","type":"number"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","createdAt","updatedAt","status","id","invoiceUrl","currency"],"title":"TypeForRequest"}}},"paths":{"/supportedCoins":{"get":{"summary":"List supported currencies","tags":["General"],"description":"Returns all cryptocurrency currencies currently supported by this CigalPay instance.","responses":{"200":{"description":"List of all supported currencies","content":{"application/json":{"schema":{"description":"List of all supported currencies","type":"array","items":{"type":"object","properties":{"ticker":{"description":"Currency ticker symbol, e.g. `BTC`","type":"string"},"name":{"description":"Full name of the currency","type":"string"},"network":{"description":"Network name","type":"string"},"explorer":{"description":"Block explorer base URL","type":"string"}},"required":["ticker","name","explorer"]}}}}}}}},"/getInvoiceStatus":{"get":{"summary":"Retrieve the status and associated data of an invoice","tags":["Invoice"],"description":"Retrieve the status and associated data of an invoice. This is essentially the same as `/paymentStatus` except it doesn't \n        return any sensitive payment information and can be safely invoked from clients' machines to build custom payment interfaces","parameters":[{"schema":{"type":"string"},"in":"query","name":"invoiceId","required":true,"description":"The encrypted identifier given as the second part of the *invoiceUrl* path. This *invoiceUrl* is found in most of the administrative Cigalpay routes."}],"responses":{"200":{"description":"Successful response of invoice status.","content":{"application/json":{"schema":{"description":"Successful response of invoice status.","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","status","currency"]}}}},"300":{"description":"Error response with message.","content":{"application/json":{"schema":{"description":"Error response with message.","type":"object","properties":{"error":{"description":"Error message string","type":"string"}}}}}}}}},"/createPayment":{"post":{"summary":"Create a new payment","tags":["Payment"],"description":"Create a new payment.","requestBody":{"content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"}},"required":["amount","currency"]}}},"required":true,"description":"Successful response"},"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"createdAt":{"description":"An ISO 8601 timestamp detailing when a payment was created.","type":"string"},"updatedAt":{"description":"An ISO 8601 timestamp detailing when a payment last received a status update.","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"id":{"description":"The internal id of a payment, also serves as Mongo's _id for the given record.","type":"string"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"payoutTransactionHash":{"description":"The transaction id of the successful payment from the generated wallet to your admin wallet of the same currency. This can be used in the corresponding block explorer of this payment's currency.","type":"string"},"invoiceUrl":{"description":"The path of a Cigalpay invoice that can be optionally used by your payee's. This is easier to use than the API-driven workflow, but\n        is not required. Note that this is only a path and must be appended to your public domain that Cigalpay is running on.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"walletIndex":{"description":"Can be ignored and is typically only used for debugging purposes.","type":"number"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","createdAt","updatedAt","status","id","invoiceUrl","currency"]}}}},"300":{"description":"Error response with message.","content":{"application/json":{"schema":{"description":"Error response with message.","type":"object","properties":{"error":{"description":"Error message string","type":"string"}}}}}}}}},"/activePayments":{"get":{"summary":"Fetch an array of all active payments","tags":["Payment"],"description":"Fetch an array of all active payments. Payments that have been completed or expired will not appear here.","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Successful response of array of all active payments","content":{"application/json":{"schema":{"description":"Successful response of array of all active payments","type":"array","items":{"description":"Successful response","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"createdAt":{"description":"An ISO 8601 timestamp detailing when a payment was created.","type":"string"},"updatedAt":{"description":"An ISO 8601 timestamp detailing when a payment last received a status update.","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"id":{"description":"The internal id of a payment, also serves as Mongo's _id for the given record.","type":"string"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"payoutTransactionHash":{"description":"The transaction id of the successful payment from the generated wallet to your admin wallet of the same currency. This can be used in the corresponding block explorer of this payment's currency.","type":"string"},"invoiceUrl":{"description":"The path of a Cigalpay invoice that can be optionally used by your payee's. This is easier to use than the API-driven workflow, but\n        is not required. Note that this is only a path and must be appended to your public domain that Cigalpay is running on.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"walletIndex":{"description":"Can be ignored and is typically only used for debugging purposes.","type":"number"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","createdAt","updatedAt","status","id","invoiceUrl","currency"]}}}}}}}},"/getPaymentStatus":{"get":{"summary":"Retrieve the status and associated data of a payment","tags":["Payment"],"description":"Retrieve the status and associated data of a payment.","parameters":[{"schema":{"type":"string"},"in":"query","name":"id","required":true,"description":"The database id or invoice id of an existing payment"}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"description":"Successful response","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"createdAt":{"description":"An ISO 8601 timestamp detailing when a payment was created.","type":"string"},"updatedAt":{"description":"An ISO 8601 timestamp detailing when a payment last received a status update.","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"id":{"description":"The internal id of a payment, also serves as Mongo's _id for the given record.","type":"string"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"payoutTransactionHash":{"description":"The transaction id of the successful payment from the generated wallet to your admin wallet of the same currency. This can be used in the corresponding block explorer of this payment's currency.","type":"string"},"invoiceUrl":{"description":"The path of a Cigalpay invoice that can be optionally used by your payee's. This is easier to use than the API-driven workflow, but\n        is not required. Note that this is only a path and must be appended to your public domain that Cigalpay is running on.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"walletIndex":{"description":"Can be ignored and is typically only used for debugging purposes.","type":"number"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","createdAt","updatedAt","status","id","invoiceUrl","currency"]}}}},"300":{"description":"Error response with message.","content":{"application/json":{"schema":{"description":"Error response with message.","type":"object","properties":{"error":{"description":"Error message string","type":"string"}}}}}}}}},"/getPaymentsByExtraId":{"get":{"summary":"Fetch an array of all payments by extraId","tags":["Payment"],"description":"Fetch an array of all payments by *extraId*. All payments by this query will appear here.","parameters":[{"schema":{"type":"string"},"in":"query","name":"extraId","required":true,"description":"The extraId of an existing payment"}],"security":[{"ApiKey":[]}],"responses":{"200":{"description":"Successful response of payments","content":{"application/json":{"schema":{"description":"Successful response of payments","type":"array","items":{"description":"Successful response","type":"object","properties":{"publicKey":{"description":"The destination address of the payment wallet for the client to send their assets to. \n        This wallet is controlled programmatically and will automatically deposit to your admin wallet as defined by `{TICKER}_ADMIN_PUBLIC_KEY` in `.env`.\n        For most currencies, this address is generated uniquely upon newly created payments, except for some currencies like XRP \n        where a custom memo must be sent by the payee to be identified.","type":"string"},"amount":{"description":"The total value of the payment as defined in `createPayment`. Note that this is not necessarily the exact amount required\n        before a payment is marked as complete. This depends on the value of *TRANSACTION_SLIPPAGE_TOLERANCE* in `.env` which dictates the\n        percentage of a payment that is discounted from the total payment to create a smoother transaction process with network fees.\n        ","type":"number"},"amountPaid":{"description":"The total value that has been confirmed as being paid by the payee.","type":"number"},"expiresAt":{"description":"An ISO 8601 timestamp detailing when a payment expires at. This value is calculated as [current date + *TRANSACTION_TIMEOUT* (a millisecond value set via `TRANSACTION_TIMEOUT` in `.env`)].","type":"string"},"createdAt":{"description":"An ISO 8601 timestamp detailing when a payment was created.","type":"string"},"updatedAt":{"description":"An ISO 8601 timestamp detailing when a payment last received a status update.","type":"string"},"status":{"description":"The current status of a payment. Can be one of: [\"WAITING\",\"CONFIRMING\",\"CONFIRMED\",\"SENDING\",\"FINISHED\",\"PARTIALLY_PAID\",\"FAILED\",\"EXPIRED\"].","type":"string"},"id":{"description":"The internal id of a payment, also serves as Mongo's _id for the given record.","type":"string"},"extraId":{"description":"An optional extraId as defined in `createPayment`. This is useful for you manually managing the identity of payment.\n        Example: An e-commerce store assigns some identification parameter upon a user's checkout for internal use. They create a new payment (via `/createPayment`) with \n        this value in the *extraId* parameter. The e-commerce store now doesn't have to manage Cigalpay's assigned *id*, since this *extraId* will be passed in the ipnCallback\n        and can be used to find payments via `/getPaymentsByExtraId`.","type":"string"},"ipnCallbackUrl":{"format":"uri","description":"An optional callback URL that will be invoked from Cigalpay when the status of a payment is updated. The request made by Cigalpay will\n        be a POST request with the body being a JSON object of this same schema.","type":"string"},"invoiceCallbackUrl":{"format":"uri","description":"An optional URL that payees will be re-directed to when their payment finalizes within the invoice interface. A query string parameter will\n        be appended called *status* with the status of the payment. This re-direction will occur automatically.","type":"string"},"payoutTransactionHash":{"description":"The transaction id of the successful payment from the generated wallet to your admin wallet of the same currency. This can be used in the corresponding block explorer of this payment's currency.","type":"string"},"invoiceUrl":{"description":"The path of a Cigalpay invoice that can be optionally used by your payee's. This is easier to use than the API-driven workflow, but\n        is not required. Note that this is only a path and must be appended to your public domain that Cigalpay is running on.","type":"string"},"currency":{"description":"The shorthand name of the selected payment's corresponding currency.","type":"string"},"walletIndex":{"description":"Can be ignored and is typically only used for debugging purposes.","type":"number"},"memo":{"description":"If this payment currency doesn't support randomly generated wallets for each payment (such as XRP). The payee must pass this value\n        as the memo or description of their transaction.","type":"string"}},"required":["publicKey","amount","amountPaid","expiresAt","createdAt","updatedAt","status","id","invoiceUrl","currency"]}}}}}}}}},"servers":[{"url":"https://core-api.cigalpay.com","description":"Core API server"}],"security":[],"tags":[{"name":"General","description":"Public informational routes. No authentication required."},{"name":"Payment","description":"Payment lifecycle routes. Require a valid merchant `cigalpay-api-key` header. **Never expose these to client devices — call from your server only.**"},{"name":"Invoice","description":"Publicly available routes, safe to call from payee devices. Used by the built-in invoice UI."}],"externalDocs":{"url":"https://docs.cigalpay.com","description":"Official documentation"}}