Skip to content

One API call at the till. Everything else follows.

Send the basket, get back the price. Discounts, member recognition, gift cards, points as payment and wallet updates come in the same response. Anything that can make an HTTPS request can integrate.

# Price a basket for a member, with a code
POST /v1/carts/evaluate
Authorization: Bearer cust_live_…

{
  "currency": "SEK", "country": "SE",
  "channel": "pos", "storeId": "store-04",
  "member": { "keyType": "phone", "value": "070-123 45 67" },
  "codes": ["valkommen10"],
  "lines": [{
    "id": "1", "sku": "COFFEE-500", "quantity": 2,
    "unitPriceMinor": 8900, "taxRateBp": 1200,
    "categories": ["coffee"]
  }]
}

# → 200: memberId, allocations per line, VAT split,
#   rejected codes, and a quoteHash to reserve the sale

135+

documented operations

< 5 ms

p95 basket pricing, measured

OpenAPI 3.1

generated from the code

~1,100

automated tests

The details that make an integration boring, in the best way.

A contract that can’t drift

The OpenAPI spec is generated from the same schemas the API validates against, with interactive reference docs.

Reserve, commit, reverse

Quote at the till, commit when paid, reverse on a return, partial returns included. A stale quote is refused with a fresh one attached.

Idempotent writes

Retry after a network blip without charging a gift card or awarding points twice.

Signed webhooks

Hear about new members, sales and tier changes in your own systems. Payloads carry IDs, not personal data.

Errors you can act on

RFC 9457 problem responses with a stable code to branch on, and a trace ID to quote to support.

Explain mode

Add ?explain=true and the engine tells you which promotions applied, which didn’t, and why.

Scoped keys

Give a till key only what a till needs. Keys can’t grant themselves more, and rotation is built in.

Separate test environment

cust_test_ keys hit a fully separate environment with the same behaviour.

Money done properly

Integer minor units, VAT split per line, and goods sold by weight. No rounding surprises on the receipt.

Your integration inherits the platform’s privacy guarantees.

You never have to build tenant isolation, encryption or consent checks yourself. They’re enforced underneath every endpoint.

  • Personal data is never echoed by accident: gift card codes come back as their last four characters, and database errors never reach a client
  • Identifiers are looked up, not listed: send any written form of a phone or ID number and Custas finds the member
  • Consent is enforced server-side, so a bug in your code can’t message someone who opted out
  • Rate limits per key, from 60 to 6,000 requests a minute depending on plan

Give your customers a reason to come back.

See Custas with your own till, your own offers and your own data rules. A 30-minute call is enough to know whether it fits.