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.

TypeDescriptionRequired fields
FIATPaid 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)
CRYPTOPaid 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.

StatusDescription
DRAFTThe initial state when a payable is created. It can still be edited or rejected.
APPROVEDThe payable has been reviewed and is ready to be included in a batch payment.
REJECTEDThe payable has been declined with a reason. It will not be processed for payment.
PAIDThe 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:

FieldRequiredDescription
nameYesA descriptive name for the payable (for example, the invoice number or a short description).
amountYesThe payment amount.
reasonYesThe reason for the payment.
receiverYesThe ID of the receiver who will be paid.
typeYesEither FIAT or CRYPTO, determining how the payment will be made.
statusYesSet to DRAFT when creating.
documentS3KeyNoThe key returned from the upload step, linking the invoice document to this payable.
instructionsNoAny special payment instructions.
expectedPaymentDateNoThe date by which you intend to process the payment.

For FIAT payables, you must also provide:

FieldDescription
bankAccountThe ID of the receiver's bank account where the fiat payment will be sent.
currencyIsoCodeThe ISO currency code for the payment (for example, EUR, USD, or GBP).

For CRYPTO payables, you must also provide:

FieldDescription
walletThe ID of the receiver's wallet where the crypto payment will be sent.
tokenIsoCodeThe 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:

FieldDescription
payableIdsAn array of IDs for the APPROVED payables you want to pay.
tokenThe 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.

Send a request to POST /payables/generate-invoice-link with the following fields:

FieldDescription
isExistingReceiverA boolean indicating whether the recipient is an already-registered receiver.
emailThe email address of the recipient. The link will be associated with this email.
receiverIdOptional. 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.

EndpointMethodAuthDescription
/payables/uploadPOSTJWTUpload an invoice document file.
/payablesPOSTJWTCreate a new payable.
/payables/meGETJWTList your payables with pagination.
/payables/countsGETJWTGet payable counts grouped by status.
/payables/:idGETJWTGet a specific payable by ID.
/payables/:idPATCHJWTUpdate a payable in DRAFT status.
/payables/:id/rejectPOSTJWTReject a payable with a reason.
/payables/generate-invoice-linkPOSTJWTGenerate an Invoice Me link for a recipient.
/payables/get-invoice-token-infoGETPublicView invoice details from a token (no auth required).
/payables/validate-invoice-tokenPOSTPublicValidate an invoice token is still active (no auth required).
/payables/create-invoice-receiverPOSTPublicCreate a receiver via an invoice link (no auth required).
/payables/create-invoice-walletPOSTPublicCreate a wallet via an invoice link (no auth required).
/payables/create-invoice-bank-accountPOSTPublicCreate a bank account via an invoice link (no auth required).
/payables/create-invoice-payablePOSTJWTCreate a payable from submitted invoice data.
/payables/extract-qr-bill-infoPOSTJWTExtract payment data from a QR bill document.
/transactions/payablesPOSTJWTCreate 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.

On this page