Skip to content

API reference

All endpoints are relative to https://api.transactful.com/v1. IDs are prefixed (co_, le_, app_); timestamps are ISO 8601 UTC; amounts are decimal strings with an explicit currency.

Terminal window
GET /companies # list, paginated (cursor)
GET /companies/{id} # one company's credit state
{
"id": "co_8fk2m1",
"name": "Aldgate Homeware Co",
"shopify_company_gid": "gid://shopify/Company/7391820",
"status": "approved",
"payment_terms": "NET_30",
"credit_limit": { "amount": "10000.00", "currency": "GBP" },
"outstanding": { "amount": "8050.00", "currency": "GBP" },
"available_credit": { "amount": "1450.00", "currency": "GBP" },
"hold": null,
"updated_at": "2026-07-24T16:41:09Z"
}

available_credit is what checkout enforces: limit − outstanding − safety buffer. Filter with ?status=approved|on_hold and ?updated_since=.

Terminal window
GET /companies/{id}/ledger # entries, newest first, paginated
{
"id": "le_92hd7a",
"kind": "order_placed", // order_placed | payment | refund | cancellation | adjustment | opening_balance
"amount": { "amount": "2340.00", "currency": "GBP" },
"shopify_order_gid": "gid://shopify/Order/5510238",
"note": null,
"occurred_at": "2026-07-24T09:12:44Z"
}

The ledger is append-only: entries are never edited or deleted, so consumers can sync incrementally with ?after={entry_id} and never re-reconcile.

Requires write_credit. All three actions appear on the company timeline attributed to the API key’s label, exactly like a staff action.

Terminal window
POST /companies/{id}/adjustments
{ "amount": "-500.00", "note": "Bank transfer 22 Jul ref 8841" } # note required
PUT /companies/{id}/credit-limit
{ "amount": "12000.00", "reason": "Season uplift" }
POST /companies/{id}/hold # place a manual hold
{ "note": "Dispute on invoice #1032" }
DELETE /companies/{id}/hold # lift it

Automatic overdue holds can’t be lifted via API while the triggering invoice remains unpaid – the same rule the admin UI enforces.

Requires read_applications (personal contact fields live here and nowhere else).

Terminal window
GET /applications?status=submitted|in_review|needs_info|approved|rejected
GET /applications/{id}
{
"id": "app_31xk8p",
"status": "submitted",
"business_name": "Fenwick & Daughters Ltd",
"vat": { "number": "GB987654321", "status": "valid", "registry": "HMRC", "checked_at": "2026-07-24T14:02:11Z" },
"contact": { "name": "Sarah Fenwick", "email": "[email protected]" },
"submitted_at": "2026-07-24T13:58:02Z"
}

Decisions (approve/reject) are not available via API – approvals create Shopify resources and carry credit judgement, so they stay in the admin where the audit trail shows a person. Tell us if your workflow genuinely needs this; it would ship with explicit safeguards.