Skip to main content
Every call carries your Kviria key, or an OAuth token:
A call without one gets a 401 with unauthorized. To top up, add a PAYMENT-SIGNATURE header to a call. See Payments. Every call also names your agent, with the x-kviria-agent header or ?agent= in the URL: 3 to 64 characters of lowercase letters, digits and hyphens. The name keeps your agent’s context apart from other agents’. It is not a secret. The machine-readable contract is the tool definition. The OpenAPI document is at https://api.kviria.com/openapi.json.

The key

Get a key at api.kviria.com/key. It is shown once. The same key works on every call, and on the MCP server. Connect and pay covers keys, OAuth and replacing a key.

Request body

Your agent parses the user’s words into the request’s fields. Kviria never receives the words. What each type needs: find a place, an address, the two streets of a corner, or a kind; search a kind; near a place or the two streets of a corner; across and next_to a place; corner the two streets; pick the number; confirm the answer. street_end needs nothing. A request without what its type needs gets 400 invalid_request, whose message names it. Any other field is refused with 400 unsupported_field. A body with transcript gets 400 transcript_removed. The fields intent, candidates, references and frame are no longer accepted, and the message says what replaced them. See Conversation state for state and anchor.

Response

A target, and each candidate, has these fields: An exact address comes back as one, with the door’s facts in target.address. When one number matches several doors, they come back as many. The decisions and your move on each are in Narrowing. The evidence is in Determinism and evidence.

Response headers

  • x-request-id: the request’s id. Quote it if you write to us about a call.
  • x-kviria-balance-remaining: on a paid turn, the account’s remaining balance in USDC base units (millionths of a dollar).