Payables & Invoicing
Learn how to upload invoices, create and review payables, process batch payments, and use the Invoice Me flow on the Skyline Digital platform
Payables allow you to upload invoices, review and approve them, and pay multiple approved invoices in a single batch transaction. Instead of creating individual transactions for each invoice, you can manage invoices as payables and settle them together when ready. The Invoice Me feature lets you send a payment link to a recipient who provides their own payment details without needing an account on your platform.
Prerequisites
Before starting this tutorial, ensure you have set up the payment infrastructure for the types of payables you plan to create:
- For fiat payables, complete the Bank Account Setup tutorial so you have bank accounts linked to your receivers.
- For crypto payables, complete the Wallet Management tutorial so you have wallets linked to your receivers.
You should also have at least one receiver created, as covered in the Beneficiary Management tutorial.
Payable types
Every payable has a type that determines how it will be paid. The two types correspond to the two payment methods available on the platform.
| Type | Description | Required fields |
|---|---|---|
| FIAT | Paid to a bank account. Used when the receiver should receive a fiat currency payment. | bankAccount (the receiver's bank account ID) and currencyIsoCode (the target fiat currency) |
| CRYPTO | Paid to a wallet. Used when the receiver should receive a cryptocurrency payment. | wallet (the receiver's wallet ID) and tokenIsoCode (the target token) |
Payable statuses
A payable moves through a simple lifecycle as it is reviewed and processed.
| Status | Description |
|---|---|
| DRAFT | The initial state when a payable is created. It can still be edited or rejected. |
| APPROVED | The payable has been reviewed and is ready to be included in a batch payment. |
| REJECTED | The payable has been declined with a reason. It will not be processed for payment. |
| PAID | The payable has been included in a completed batch payment transaction. |
Uploading an invoice document
Before creating a payable, you can upload the associated invoice document. Send the invoice file to POST /payables/upload as either multipart form data or a base64-encoded payload. The API processes the file and returns a documentS3Key value that you will reference when creating the payable. This links the uploaded document to the payable record so it can be retrieved later for reference.
If your invoice is a Swiss QR bill, you can use POST /payables/extract-qr-bill-info to automatically extract payment data from the uploaded document. This endpoint reads QR bill information following the Swiss QR payment standard and returns structured payment details such as the amount, currency, and recipient account information. You can then use this extracted data to pre-fill fields when creating the payable.
Creating a payable
To create a new payable, send a request to POST /payables with the details of the invoice you want to track. The payable is created in DRAFT status by default.
The following fields are available when creating a payable:
| Field | Required | Description |
|---|---|---|
| name | Yes | A descriptive name for the payable (for example, the invoice number or a short description). |
| amount | Yes | The payment amount. |
| reason | Yes | The reason for the payment. |
| receiver | Yes | The ID of the receiver who will be paid. |
| type | Yes | Either FIAT or CRYPTO, determining how the payment will be made. |
| status | Yes | Set to DRAFT when creating. |
| documentS3Key | No | The key returned from the upload step, linking the invoice document to this payable. |
| instructions | No | Any special payment instructions. |
| expectedPaymentDate | No | The date by which you intend to process the payment. |
For FIAT payables, you must also provide:
| Field | Description |
|---|---|
| bankAccount | The ID of the receiver's bank account where the fiat payment will be sent. |
| currencyIsoCode | The ISO currency code for the payment (for example, EUR, USD, or GBP). |
For CRYPTO payables, you must also provide:
| Field | Description |
|---|---|
| wallet | The ID of the receiver's wallet where the crypto payment will be sent. |
| tokenIsoCode | The token identifier for the payment (for example, USDT or USDC). |
Reviewing payables
Once payables have been created, you can review them before approving for payment.
Listing your payables. Send a request to GET /payables/me to retrieve a paginated list of all payables associated with your organisation. You can filter and sort the results using query parameters.
Getting status counts. Send a request to GET /payables/counts to retrieve the number of payables grouped by status. This is useful for building dashboard displays that show how many payables are in DRAFT, APPROVED, REJECTED, or PAID states.
Viewing a specific payable. Send a request to GET /payables/:id to retrieve the full details of a single payable, including the linked invoice document and payment information.
Updating a payable. While a payable is still in DRAFT status, you can modify its details by sending a request to PATCH /payables/:id with the fields you want to change. You can update the amount, receiver, payment details, or any other field. Once a payable has been approved or paid, it can no longer be modified.
Rejecting a payable. To decline a payable, send a request to POST /payables/:id/reject with a reason for the rejection. The payable moves to REJECTED status and will not be included in any batch payment.
Batch payment
The core value of payables is the ability to settle multiple invoices in a single transaction. Instead of creating individual transactions for each approved invoice, you can select several approved payables and pay them all at once.
To create a batch payment, send a request to POST /transactions/payables with the following fields:
| Field | Description |
|---|---|
| payableIds | An array of IDs for the APPROVED payables you want to pay. |
| token | The crypto token to use for the payment (for example, USDT or USDC). |
This creates a transaction that processes all the selected payables together. The resulting transaction follows the same lifecycle as a standard crypto-to-fiat or crypto-to-crypto transaction -- see the Transactions section for details on how transactions progress from creation through to completion. Once the transaction completes, the included payables move to PAID status.
Invoice Me
The Invoice Me feature allows you to generate a secure link and send it to someone who owes you, so they can provide their payment details without needing an account on your platform. This is useful when you need to collect bank account or wallet information from a recipient before creating a payable.
Step 1: Generate the invoice link
Send a request to POST /payables/generate-invoice-link with the following fields:
| Field | Description |
|---|---|
| isExistingReceiver | A boolean indicating whether the recipient is an already-registered receiver. |
| The email address of the recipient. The link will be associated with this email. | |
| receiverId | Optional. If the recipient is an existing receiver, provide their ID. |
The API returns a secure token-based link that you can share with the recipient via email or any other channel.
Step 2: Recipient views the invoice details
When the recipient opens the link, they access GET /payables/get-invoice-token-info with the token from the URL as a query parameter. This public endpoint requires no authentication and returns the invoice details so the recipient can review what is being requested.
The recipient can also verify the token is still valid using POST /payables/validate-invoice-token.
Step 3: Recipient provides payment details
The recipient uses public endpoints to submit their information. No authentication is required for any of these endpoints, making it easy for external parties who do not have an account on your platform.
- POST /payables/create-invoice-receiver -- the recipient provides their identity details (name, email, address).
- POST /payables/create-invoice-bank-account -- for fiat payments, the recipient provides their bank account details.
- POST /payables/create-invoice-wallet -- for crypto payments, the recipient provides their wallet address.
Step 4: Payable is created
Once the recipient has submitted their details, the system creates a payable from the submitted data. You can then review this payable alongside your other payables and include it in a batch payment when ready.
Endpoint reference
The following table lists all payable-related endpoints available on the platform.
| Endpoint | Method | Auth | Description |
|---|---|---|---|
| /payables/upload | POST | JWT | Upload an invoice document file. |
| /payables | POST | JWT | Create a new payable. |
| /payables/me | GET | JWT | List your payables with pagination. |
| /payables/counts | GET | JWT | Get payable counts grouped by status. |
| /payables/:id | GET | JWT | Get a specific payable by ID. |
| /payables/:id | PATCH | JWT | Update a payable in DRAFT status. |
| /payables/:id/reject | POST | JWT | Reject a payable with a reason. |
| /payables/generate-invoice-link | POST | JWT | Generate an Invoice Me link for a recipient. |
| /payables/get-invoice-token-info | GET | Public | View invoice details from a token (no auth required). |
| /payables/validate-invoice-token | POST | Public | Validate an invoice token is still active (no auth required). |
| /payables/create-invoice-receiver | POST | Public | Create a receiver via an invoice link (no auth required). |
| /payables/create-invoice-wallet | POST | Public | Create a wallet via an invoice link (no auth required). |
| /payables/create-invoice-bank-account | POST | Public | Create a bank account via an invoice link (no auth required). |
| /payables/create-invoice-payable | POST | JWT | Create a payable from submitted invoice data. |
| /payables/extract-qr-bill-info | POST | JWT | Extract payment data from a QR bill document. |
| /transactions/payables | POST | JWT | Create a batch payment transaction from approved payable IDs. |
What's next
You have now covered all the tutorials for integrating with the Skyline Digital API -- from initial setup and authentication through onboarding, beneficiary management, payment infrastructure, transaction processing, and invoice management. For a summary of all transaction types and their flows, return to the Transactions Overview.