Create Bill
POST/api/purchase-orders/:purchase_order/bills
Create a landed cost bill linked to this purchase order.
purchase-orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Line descriptions must be unique within a bill. Two lines on the same bill cannot share a description, and the comparison ignores letter case — "Freight" and "freight" collide. A duplicate is rejected with 422 before anything is saved.
Allowed proration_strategy values: cost_based, quantity_based, weight_based, volume_based, specific_line, revenue_based, manual, duty_estimate_based. duty_estimate_based ("By estimated duty") splits the bill across purchase order lines in proportion to each line's estimated customs duty — the duty frozen at receipt, or the shipment-stage estimate for units not yet received. If every covered line's estimated duty is zero it falls back to cost_based and the bill response carries an allocation_warnings entry with code duty_estimates_zero_fallback. A weight_based, volume_based or cost_based bill whose basis is zero on every line it covers (no weights, no dimensions, no cost) is split by cost (or by quantity when cost is zero too); each allocation's proration_strategy records the basis actually used, and the bill carries an allocation_warnings entry with code proration_basis_fallback.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.