Getting started
ContextKit for developers
ContextKit is a privacy oracle for someone's location. Your app doesn't read where a person is — it asks a question and gets the smallest true answer.
Is the user inside this delivery zone? → inside
Which of their places are they at? → "Home"
Tell me when they arrive at the office → webhook, on arrival
The person's coordinates never appear in any of those responses. That's not a limitation to work around; it's the reason people connect their location to your app at all.
Why you want the question API
The obvious design would hand you a latitude and longitude and let you work it out. Almost every app that asks for location doesn't actually want one:
| What you're building | What you actually need |
|---|---|
| "Was this card used near the customer?" | inside / outside a zone |
| A travel journal | which place, and when |
| A smart home | "are they home?" |
| Courier dispatch | crossed into the delivery area |
Every one of those is a question. Asking it directly means you never store someone's coordinates, never have to secure them, and never have to explain a breach of them. It also means users say yes more often, because the consent dialog says "can ask whether you're home" rather than "can see your location."
The two tiers
Standard scopes answer questions. They never return a position, and users grant them with a single tick.
Sensitive scopes return exact coordinates. They still exist — some products genuinely need a live map — but they cost you: a warning at connect time, an expiry the user picks (30 days by default), and a developer application that must justify each one in at least 100 characters. Ask for them only when an answer genuinely won't do.
Most apps never need the sensitive tier. Before requesting one, check Derived history — a journalling or photo app usually wants place labels and time windows, not coordinates.
How access works
- You register an app and declare the scopes it may request.
- A user connects your app and approves scopes individually — they can grant fewer than you asked for.
- You receive a
cka_token, shown exactly once. - Every call you make, and every webhook we send you, is written to an access log the user reads.
That last point is worth sitting with. Users can see the questions you asked, in plain language, including the zones you asked about. Design your integration so those lines look reasonable — because they'll be read.
Access ends the moment a user disconnects you, or their grant expires. Both kill standing webhook rules too, not just new reads.
Where to go next
Authentication
Tokens, headers, and what a connection grants you.
Scopes
The full list of questions your app can be allowed to ask.
Answers
The question endpoints — none of which return a coordinate.
Places
User-named locations you can ask about by identity alone.
Derived history
Visits and lookups, as place labels and time windows.
Rules and webhooks
Register a standing question and get told instead of polling.
Errors and limits
Error shapes, budgets, and what a 429 actually means.