Agent identity
An agent that calls the platform can say who it is, and a person who approves something can see who asked. This page covers the three identities on every call, how to prove them, the trust tiers, how to register your agent and how to watch it. How an agent finds the platform is on its own page: how agents find the platform.
Rolling out. Everything on this page is being rolled out: discovery documents come first on the sandbox, then agent registration and request signing. Each is off until it is switched on, and the changelog says when. The examples use synthetic values:
example.comdomains and[email protected].
Find the platform
An agent needs one address, the AI Catalog, and no credential:
https://aikonic.travel/.well-known/ai-catalog.jsonThe whole picture, from Server Cards and sign-in metadata to the MCP Registry and DNS, is in how agents find the platform.
Three identities on every call
| Identity | Who it is | Example |
|---|---|---|
| Operator | The accountable organisation | Skyhop Travel Ltd |
| Agent | The software and its version | [email protected], version 2.4.0 |
| Principal | The person the agent acts for | A traveller or a booker on your team |
Identity tells the platform who is calling. It never grants anything. Permissions come only from the key's scopes or from the grant the person approved, and a person still approves every booking or payment. A verified identity never adds a permission.
Prove who you are
An agent can prove its identity in two ways. Neither is required to call the API.
Sign your requests
Sign requests with HTTP Message Signatures (RFC 9421), following the Web Bot Auth profile.
Publish your public keys as a JWKS at
https://<your-domain>/.well-known/http-message-signatures-directory. Serve it with200and no redirects.Send
Signature-Agent: "https://<your-domain>"on each request.Send
Signature-Inputwithtag="web-bot-auth",keyidset to the JWK thumbprint andcreatedset to the signing time. A signature is accepted up to 300 seconds aftercreatedand up to 30 seconds before it (clock skew).Cover
@authority,@method,@pathandsignature-agent. On a request with a body, also covercontent-digest.Optionally send
Agent-Version. It counts only when it is covered by the signature.
A complete request, with a synthetic signature:
POST /v1/search HTTP/1.1
Host: YOUR-REST-HOST
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Content-Digest: sha-256=:4p6AAiozFiU7q+nTurYMLJfOGPB6HRYFkDMY5pLUxNw=:
Signature-Agent: "https://skyhop.example"
Agent-Version: 2.4.0
Signature-Input: sig1=("@authority" "@method" "@path" "signature-agent" "content-digest" "agent-version");created=1767225600;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U";alg="ed25519";tag="web-bot-auth"
Signature: sig1=:EXAMPLEc2lnbmF0dXJlLXZhbHVlLWZvci1kb2N1bWVudGF0aW9uLW9ubHk=:
{"context":{"domain":"FLT","currency":"USD"},"message":{"intent":{"slices":[{"origin":"GRU","destination":"MIA","date":"2026-11-10"}],"travelers":[{"type":"ADT"}],"cabin":"ECONOMY"}}}Identify an OAuth client
An OAuth client uses a Client ID Metadata Document: the client_id is the HTTPS URL of a document you host, for example https://skyhop.example/oauth/client.json. The platform fetches it and shows the person who is asking on the consent screen.
What a bad signature does
A wrong signature is refused with 401 UNAUTHENTICATED, details.reason AGENT_SIGNATURE_INVALID and nextAction: reauth. An unsigned request is never refused for that alone.
Trust tiers
| Tier | What it takes | Who sets it |
|---|---|---|
| T0 | An API key only | Automatic |
| T1 | A verified domain (a DNSSEC-signed TXT proof), or a client metadata document that resolves on a verified domain | Automatic |
| T2 | T1, plus a valid signature, plus an identity certificate for the running version | Automatic |
| T3 | T2, plus a signed agreement and a security review | The platform's operators |
A higher tier means less friction and a "Verified" badge on consent and approval screens. On production an unverified (T0) caller is limited to read tools and gets grants of one hour at most; holds and proposals need T1. A call that needs more is refused with 403 PERMISSION_DENIED, details.reason AGENT_TIER_INSUFFICIENT and nextAction: verify_agent. Sandbox and trial accounts have no tier limit. Tiers are not sold: they are earned by verification.
Register your agent
Owners and Admins register agents in the console under Developer, Agent registry.
Handle.
name@your-domain, or a hosted handlename@<account>.agents.aikonic.travel. A name usesa-z,0-9and hyphens, 2 to 32 characters. The namesadmin,support,booking,aikonicandsecurityare reserved:422 VALIDATIONwithHANDLE_RESERVED. A handle already taken, or a look-alike of another account's verified handle, is refused with409 CONFLICTandHANDLE_TAKEN.Domain proof. Publish a TXT record at
_aikonic-verify.<domain>with the valueav=<agentId>, for example_aikonic-verify.skyhop.example=av=agent_example. It is rechecked daily; if the record disappears, the agent drops to T0.Versions. Register each release with its semantic version, model id and prompt hash. A version can be drained (no new work) or revoked. A revoked version's next request is refused with
401 UNAUTHENTICATEDandAGENT_VERSION_REVOKED, and its grants end within 10 minutes. Proposals already waiting for a person stay.Keys. Bring your own public key or key directory URL, or let the console generate a key pair in your browser: the private key is shown once and never sent to the platform. Rotate a key with a 7-day overlap so both keys verify while you deploy.
Private agents. A private agent is never published or resolvable.
Look up an agent
GET /v1/agents:[email protected] is public and rate-limited. The MCP resource resolve_agent returns the same profile: handle, operator, tier, current version, protocols, key thumbprints, certificate validity and the public log. It never shows the person an agent acts for, account ids or traffic.
curl -s "https://YOUR-REST-HOST/v1/agents:[email protected]"The travel agent directory, GET /v1/agents:search and the MCP tool search_agent_directory, lists verified travel agents, ranked by capability and outcomes, never by payment. It is being rolled out.
Watch your agents
Agent traffic. The console shows calls by tier and proof, signature failures and a 24-hour trend.
Request trace. Each request shows the seven checks it passed or failed.
Webhooks.
agent.registered,agent.version_registered,agent.version_revoked,agent.key_rotated,agent.tier_changedandagent.suspended.
Third-party text is data
Names and card text that come from other parties are shown as plain text. The platform and the agents that use it never follow them as instructions.
Next steps
Agent workflow: from sign-up to a live account.
Quick-start: connect a client and make the first search.
Overview: toolsets, how agents sign in, limits and error codes.
Travel tools: everything an agent can call.