Create a payment link for a sales order
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /reference/payment-links/v2-sales-order-payment-link-create.md. Index of every page and the rules for every call: /llms.txt. Guides and concepts in one file: /llms-full.txt. OpenAPI: /openapi.json.
POST/
A payment link (Allocations in the web app) records which invoices a payment pays: it splits payments received on the order across the order's invoices. It is not a link the customer pays through.
Allocates amounts of the order's payments to its invoices. Each entry in unallocated_transactions names a payment (transaction_id), an invoice of this order (invoice_id) and an amount (total.value, in thousandths: 12500 is 12.50; dp is ignored).
The answer is the payment link. {hash_id} is the order's id (for example V4keXwwxMQyXw7); the ord_ unique key is not accepted here.
Business rules
- Only published orders: otherwise 422 with the code "Action Not Allow".
- At least one entry, each with
action: "create",transaction_idandinvoice_id. - Entries whose payment or invoice is not on this order are skipped. So is an entry whose invoice has nothing left to pay, or whose amount is more than the payment's unallocated amount; an amount above the invoice's balance is cut to that balance. The link is created even if every entry is skipped.
total.valuemust be a whole number of thousandths (a fraction gives HTTP 500); withouttotalthe entry allocates 0.
Side effects
- Changes which invoices count as paid; refreshes the order for people who have it open in the web app.
- Updates the order's customer's balance totals in the background, and Customer Portal pages the customer has open refresh.
Path parameters
Your team slug, shown as Team ID next to your API key in Profile.
- Example
your-team
- Example
The sales order's or quote's
id(a hash id). Theord_unique key and the order number do not work here.- Example
V4keXwwxMQyXw7
- Example
Request body
application/json, required.
- At least 1 item
Fields of each item (4)
- Always
"create"
- Always
An invoice of this order.
A payment of this order, from the template.
totaldecimal pair{ "value": 1250, "dp": 2 }is 12.50:valueholds the digits,dpthe decimal places. See Money and quantities.
notestring
Response
200Successful response.
The payment link, as Get a payment link returns it.
Child fields (7)
Total allocated. A decimal pair: the amount is
value÷ 10^dp({ "value": 125000, "dp": 4 }is 12.50). Kept with 4 decimal places; an amount never set can come as{ "value": 0, "dp": 0 }. Readdpevery time: it can differ between fields and records.- See Money and quantities.
allocated_transactionsarray of objectsOne entry per payment and invoice.
Fields of each item (6)
idstringinvoice_idstringstatestringAlways
existing.totaldecimal pairAllocated to this invoice. A decimal pair: the amount is
value÷ 10^dp({ "value": 50000, "dp": 3 }is 50.00). Fixed at 3 decimal places (dp3). Readdpevery time: it can differ between fields and records.- See Money and quantities.
transaction_idstringThe payment's
id.unallocated_amountdecimal pairWhat the payment still has to allocate. A decimal pair: the amount is
value÷ 10^dp({ "value": 50000, "dp": 3 }is 50.00). Fixed at 3 decimal places (dp3). Readdpevery time: it can differ between fields and records.- See Money and quantities.
created_atstring (date-time) | nullCreated. ISO 8601 with offset, or null.
notestring | nullupdated_atstring (date-time) | nullLast changed. ISO 8601 with offset, or null.
Errors
401The API key is missing or wrong (
unauthenticated).403You are not allowed to do this.
api_access_not_in_plan: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only{"message": "Insufficient Permission"}. Other refusals use the error envelope, withunauthorizedoruser_is_not_authorized.404Not found.
page_not_found: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's.code: null, with a message that starts "No query results for": there is no record with that id.422Validation failed or the payment mutation was rejected by business rules.
- When
- A draft order, or an entry without its ids.
- Fix
- Build the body from Get what a new payment link can allocate.
Related
- GETGet what a new payment link can allocate
/v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ payment_link/ get_create_template - PUTUpdate a payment link
/v2/ api/ store/ {team_slug}/ v2/ payment_link/ {hash_id} - GETShow one payment link with allocations
/v2/ api/ store/ {team_slug}/ v2/ payment_link/ {hash_id}
