KanalKanal API
API reference

Checkouts

Push abandoned checkouts and update their status.

Create or update a checkout

POST /api/v1/stores/{store_id}/checkouts

Upserts an abandoned checkout on (store_id, external_id). Drives checkout-recovery automations.

Body

FieldTypeRequiredNotes
external_idstring(255)requiredYour checkout token.
abandoned_atISO 8601requiredWhen the checkout was abandoned.
total_pricenumber ≥ 0requiredCheckout total.
currencystring(3)optionalISO 4217.
recovery_urlurl(1024)optionalLink the customer uses to resume.
customerobjectrequiredSame shape as on orders.
customer.phonestringrequiredMatched to a WhatsApp contact.
customer.external_idstring(255)optional
customer.first_namestring(255)optional
customer.last_namestring(255)optional
customer.emailemail(255)optional
customer.localestring(10)optional
customer.tagsstring[]optional
line_itemsobject[]optional
tagsstring[]optional
metadataobjectoptional

Request

curl -X POST https://api.getkanal.com/api/v1/stores/123/checkouts \
  -H "Authorization: Bearer 8fK2pX9mWq4Ld7Vb3Nc6Ts1Z" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "CHECKOUT-7700",
    "abandoned_at": "2026-05-18T09:40:00Z",
    "recovery_url": "https://shop.example.com/checkout/recover/7700",
    "total_price": 49.90,
    "currency": "EUR",
    "customer": { "phone": "+33612345678", "first_name": "Marie" }
  }'

Response 201 Created / 200 OK

{
  "external_id": "CHECKOUT-7700",
  "store_id": 123,
  "status": "abandoned",
  "total_price": "49.90",
  "currency": "EUR",
  "recovery_url": "https://shop.example.com/checkout/recover/7700",
  "tags": [],
  "created_at": "2026-05-18T09:40:00+00:00"
}

Update a checkout

PATCH /api/v1/stores/{store_id}/checkouts/{external_id}
FieldTypeNotes
statusenumOne of active, abandoned, recovered, completed, expired.
recovery_urlurl(1024)
tagsstring[]Replaces tags.
metadataobjectFree-form.
curl -X PATCH https://api.getkanal.com/api/v1/stores/123/checkouts/CHECKOUT-7700 \
  -H "Authorization: Bearer 8fK2pX9mWq4Ld7Vb3Nc6Ts1Z" \
  -H "Content-Type: application/json" \
  -d '{ "status": "recovered" }'

Response 200 OK — same shape as the create response.

On this page