Skip to content
ApiqDevelopers
API v1.64.0Open console

MCP quick-start

Connect an MCP client to the travel tools and walk through a whole booking: search, compare, price, hold, request the booking, and approve it in the console. Read the overview first for what the toolsets are and how agents stay safe. To let an agent sign your company up and certify the integration itself, see the agent workflow.

Preview. The hosted MCP endpoint is not open to customers yet. When it opens, the travel tools take an API key for agents from your console; signing in with OAuth instead is planned but not available yet. Until then the examples below use https://YOUR-MCP-HOST for the endpoint's address and YOUR_MCP_TOKEN for the agent's key. The real address will be published on this page when the endpoint opens.

What you need

  • A sandbox account, so the agent's bookings are test bookings.

  • The endpoint address. Each toolset has its own path: /mcp/public for the travel tools, /mcp/console, /mcp/supplier and /mcp/partner for the others.

  • For the travel tools, the agent's token. The console and supplier tools need no token: you sign in yourself (see Connect the console or supplier tools).

  • An MCP client that speaks streamable HTTP: Claude Code, Cursor, Claude Desktop or your own.

Keep the token out of files you commit. The examples read it from an environment variable.

1. Add the server to your client

Claude Code

claude mcp add --transport http travel https://YOUR-MCP-HOST/mcp/public \
  --header "Authorization: Bearer $YOUR_MCP_TOKEN"

Or add it to a project's .mcp.json. Claude Code expands ${VAR} from your environment, so the token stays out of the file:

{
  "mcpServers": {
    "travel": {
      "type": "http",
      "url": "https://YOUR-MCP-HOST/mcp/public",
      "headers": { "Authorization": "Bearer ${YOUR_MCP_TOKEN}" }
    }
  }
}

Cursor

Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:

{
  "mcpServers": {
    "travel": {
      "url": "https://YOUR-MCP-HOST/mcp/public",
      "headers": { "Authorization": "Bearer ${env:YOUR_MCP_TOKEN}" }
    }
  }
}

Claude Desktop

For the console and supplier tools, which sign you in with OAuth, add a custom connector in Claude Desktop's settings with the endpoint address; Claude opens the sign-in for you.

For the travel tools, which take a token, use the open-source mcp-remote bridge. Edit claude_desktop_config.json (Settings → Developer → Edit Config) and restart Claude Desktop:

{
  "mcpServers": {
    "travel": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://YOUR-MCP-HOST/mcp/public", "--header", "Authorization:${AUTH_HEADER}"],
      "env": { "AUTH_HEADER": "Bearer YOUR_MCP_TOKEN" }
    }
  }
}

Any MCP client

The server speaks streamable HTTP. A session starts with initialize; the session id comes back in the Mcp-Session-Id header, and every later request sends it:

curl -sD - https://YOUR-MCP-HOST/mcp/public \
  -H "Authorization: Bearer $YOUR_MCP_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'

Once connected, tools/list returns the travel tools and resources/templates/list the resources they read. Both are in the travel tools reference.

2. Search, price, hold and request the booking

Ask the agent in plain language, for example "Find a hotel in Lisbon for two adults, 10 to 12 November, hold the best offer and request the booking for Ana Silva". It makes calls like these:

StepToolArgumentsWhat comes back
Searchsearch_trips{"query": "Hotel in Lisbon", "domain": "HTL", "destination": "LIS", "dates": {"start": "2026-11-10", "end": "2026-11-12"}, "travelers": {"adults": 2}}offers, each with an offerRef
Comparecompare_offers{"offerRefs": ["<offerRef>"], "domain": "HTL"}rooms, rates and conditions side by side
Pricev1_reprice{"domain": "HTL", "message": {"offerRef": "<offerRef>"}}the live price, and priceChanged when it moved
Holdhold_offer{"offerRef": "<offerRef>", "domain": "HTL"}a free hold, with holdRef and holdExpiresAt
Request the bookingbook_offer{"offerRef": "<offerRef>", "domain": "HTL", "travelers": [{"firstName": "Ana", "lastName": "Silva", "type": "ADT"}]}AWAITING_HUMAN_APPROVAL, a proposalId and the amount
Follow itget_proposal_status{"proposalId": "<proposalId>"}OPEN until a person decides

Two things to know:

  • hold_offer moves no money, but it is still a change: where your account has not allowed agents to hold, it answers APPROVAL_REQUIRED.

  • book_offer has not booked anything. Its answer says so: it filed a request, and nothing happens until a person approves it. Typing "yes" in the chat is not an approval.

3. Approve the request in the console

A person approves in their own signed-in session, never the agent:

  1. Sign in to the console and open Agent desk. Its inbox lists open requests, newest first.

  2. Open the request (/console/agents/proposals/<proposalId>, with the proposalId the agent was given). It shows what the agent asked for, the exact amount, the effect and the evidence.

  3. Press Approve, or Reject with a reason. On approval the platform carries out the booking once, at the amount you saw.

  4. Back in the agent, get_proposal_status reads APPROVED, with the order reference.

Connect the console or supplier tools

These toolsets sign the agent in as you, so there is no token to copy.

  1. Add the endpoint to your client the same way as above, with no Authorization header: https://YOUR-MCP-HOST/mcp/console, or /mcp/supplier for the supplier console.

  2. On first use the client opens your browser. Sign in, check the client's name and what it asks to read, untick anything you do not want, and approve.

  3. The agent can now use the reads you allowed, for up to 8 hours and never past your own session.

A client that cannot open a browser shows a code instead. Type it on the console's connect page (/console/connect, or /supplier/connect).

To disconnect an agent, open Connected agents (Administration → Connected agents in the console, Account → Connected agents in the supplier console) and revoke it. It loses access within a minute.

Troubleshooting

You seeWhyFix
401 on every requestThe token is missing or wrongCheck the Authorization: Bearer header
APPROVAL_REQUIRED on a hold or other changeYour account has not allowed agents to make that changeDo it yourself, or have an Owner allow it
CREDENTIAL_KIND_NOT_SUPPORTEDThe toolset needs another kind of sign-inTravel tools take a token; console and supplier tools sign you in
PERMISSION_DENIED on a console or supplier readYou did not tick that read when you connectedRevoke the connection and connect again
TAB_DISABLEDYour account does not sell that productCheck v1_capabilities for what it sells
RATE_LIMITEDToo many calls in a short timeRetry after a short wait
get_proposal_status stays OPENNobody has approved the request yetApprove or reject it in the console's Agent desk

Every code and what to do about it is in the overview.