Developers

Integrate in an afternoon

Tell Interlink Wallet when your data changes. It works out which passes are affected, what they should now say, and how to deliver the update to every device, safely and exactly once.

Events API

POST /v1/events

Send the current values for one holder. You do not need to know which passes exist or which platforms they are on; we handle that.

  • holder_ref: your own identifier for the person, up to 128 characters.
  • template: the pass template to update, by its short name.
  • type: a label for your own records, such as commission.cleared.
  • data: the values your field map reads, as a JSON object.
RequestHTTP
POST /v1/events HTTP/1.1
Host: wallet.interlink.digital
Authorization: Bearer iw_live_...
Idempotency-Key: booking-88213-v3
Content-Type: application/json

{
  "holder_ref": "client-5521",
  "template": "appointment",
  "type": "booking.rescheduled",
  "data": {
    "pet": "Biscuit",
    "starts_at": "2026-10-02T09:30:00Z"
  }
}
Responses

Predictable, retry-friendly results

Errors follow RFC 9457 problem details, and every response carries a request ID you can quote to us.

StatusMeaningWhat to do
202 AcceptedEvent stored and queued; passes update within secondsNothing
200 OKSame Idempotency-Key seen before; the original event is returnedNothing, this is safe
400 / 415Missing Idempotency-Key, invalid JSON or wrong content typeFix the request
401Missing, revoked or wrong-environment key, or missing scopeCheck the key and its scopes
413Event larger than 256 KBSend only the fields your passes use
422The event failed validation; the detail explains whyFix the data
429Rate limit reached; Retry-After says when to try againBack off and retry
Field maps

Configuration, never code

A field map says where each value comes from and how to format it. It is plain JSON with a closed set of formats, so it can be validated, versioned and previewed, and it can never run arbitrary code.

FormatExample output
currency£1,234.50 · 1.234,50 € · $0.99
integer / decimal12,480 · 4.50
date / datetime1 Aug 2026 · 1 Aug 2026, 14:30
relative_dateToday · Tomorrow, 10:30
text / enumM365-NC21 · Gold tier
Field mapJSON
{
  "header": {
    "label": "Earned",
    "path": "$.earned_pence",
    "format": "currency", "currency": "GBP",
    "notify": { "on": "increase",
                "message": "Commission cleared: {delta}" }
  },
  "fields": [
    { "id": "pending", "label": "Pending",
      "path": "$.pending_pence",
      "format": "currency", "currency": "GBP" }
  ]
}
Keys and limits

Secure defaults

Scoped API keys

Separate test and live keys, each limited to the scopes it needs. Keys are shown once, stored only as hashes and can be revoked instantly.

Idempotency

Every event needs an Idempotency-Key of 8 to 128 characters. Reusing a key returns the original result instead of creating a duplicate.

Rate limits

Generous per-organisation limits with standard Retry-After headers. Contact us before a large backfill and we will plan it with you.

Coming next

On the developer roadmap

Full REST API

Passes, holders, templates and brands.

Signed webhooks

Installed, removed, scanned and redeemed.

SDKs

PHP and TypeScript first, Python next.

Developer portal

Interactive docs, quickstarts and sandbox keys.

Build with us

Request a sandbox tenant and a test key, and we will help you ship your first live pass.