Skip to main content
The Laces Partner API is for developers working on behalf of a Laces organizer. With it you can:
  • List your organization’s races and show them on your own website, with ticket types, prices and the exact fees a participant pays.
  • Take registrations and payment for those races: MTN Mobile Money and Airtel Money today, card coming soon. Laces handles the money, the tickets and the receipts.
  • Hear about payment outcomes through signed webhooks.
Everything else (the dashboard, payouts, participant management, refunds, the team) stays in the Laces app. The API is deliberately small.
One organization has its own API clients, and a credential only ever sees its own organization’s events and orders. There are no multi-organization partner accounts.

Three ways to integrate

Hosted checkout

Add a Register button. The buyer pays on a Laces page and comes back to your site. Works on a static site.

Embedded checkout

Add one <script> tag. Laces checkout opens in a modal on top of your page. New.

Custom UI

Build your own event pages and checkout form. Your server calls the API with an OAuth token.
Which should I pick?
  • Start with hosted checkout if you want the least work. It is the most battle-tested path, handles every payment method, and your site never touches payment details.
  • Pick embedded checkout if you want the same Laces checkout without the buyer leaving your page.
  • Pick custom UI if you need full control of the look and flow, and you have a server to hold the client secret.
You can combine them, for example a custom event listing with hosted checkout for payment.

How the pieces fit

Two kinds of credential

See Getting your API keys and Authentication.

Base URL

Every path in these docs is relative to the base URL, so POST /oauth/token means POST https://connect.laces.run/v1/oauth/token. Code samples use $BASE (or LACES_BASE) for it. There is one environment: you build and test against production with your live keys. See Testing your integration.

Conventions

  • JSON in, JSON out, snake_case field names.
  • Money is an integer in minor units, never a float. Always read the event’s currency. (UGX has no minor unit, so 50000 UGX is fifty thousand shillings.)
  • Timestamps are ISO 8601 UTC strings, for example 2026-11-15T04:00:00.000Z.
  • Every response carries Cache-Control: private, no-store and an X-Request-Id header. Quote the request id when you contact support.
  • Every route except the token endpoint uses the Laces response envelope (code, message, data, and on failure error plus a stable error_code). See Errors.

Next steps

Quickstart

Keys, your first event list and a working checkout in about ten minutes.

API reference

Every endpoint, with a live “Try it” playground.