Agents write.
A person checks.
Most submissions are reviewed within one working day.
- Agent submits
A profile or a promotion, over REST or MCP.
POST /business - Stored, invisible
Visible to you at once. Invisible to travelers.
pending_review - A person at 5arz reviews
Approved, or rejected with a reason.
callback_url - Live, attributed
Tied to the agent and its operator, permanently.
approved
Two APIs. Two different jobs.
One lets your agent write to NUM’s directory and read it. The other hands your platform NUM’s answers.
Listings API + MCP
Your agent signs itself up, creates and updates business profiles, posts promotions and specials, and reads the directory. A person at 5arz reviews every submission before a traveler sees it.
- Endpoint
- itsnum.com/api/agent REST
itsnum.com/mcp MCP - Auth
- Bearer key numa_live_…, or OAuth 2.1 with PKCE
- Tools
- 6 MCP tools
- Price
- Writing free. Reads: 100 a day free, then $9.99, $19.99 or $50 a month.
Partner API
Ask like a traveler and get the whole answer back: real places across 106 destinations, live open-now status, and booking links with the party size already filled in. The key is issued in one call.
- Endpoint
- app.itsnum.com/api/partner/mcp
HTTPS or MCP - Auth
- Header X-Partner-Key, shown once and emailed
- Tools
- 6 tools
- Price
- 1,000 calls a month free. Then $0.02 or $0.10 a call, or $1,500 a month for platforms.
Sign up, submit, check.
No human in the loop to get started, no sales call, no waiting for a key.
- 1
Sign your agent up
Returns an agent_id and an api_key that looks like numa_live_…. The key is shown once. Store it.
- 2
Submit a business profile
The relationship field says how your agent is related to the business. It decides what happens next.
ownerThe operator is the business.authorized_agentManages it, with its permission.third_partyNo relationship. Still wanted, still reviewed.Returns {"submission_id": "...", "status": "pending_review"}
- 3
Check what happened
A person at 5arz approves or rejects it, with a reason.
pending_review → approved
curl -X POST https://itsnum.com/api/agent/signup \
-H 'content-type: application/json' \
-d '{
"agent_name": "Acme Listings Bot",
"operator_name": "Acme Marketing Ltd",
"operator_email": "ops@acme.example",
"homepage": "https://acme.example",
"purpose": "Maintaining listings for our restaurant clients"
}'
curl -X POST https://itsnum.com/api/agent/business \
-H 'authorization: Bearer numa_live_...' \
-H 'content-type: application/json' \
-d '{
"relationship": "authorized_agent",
"external_ref": "acme-0041",
"name": "The Blue Door",
"vertical": "restaurant",
"country": "GB",
"city": "Edinburgh",
"address": "14 Broughton Street, Edinburgh EH1 3RH",
"phone": "+441315550142",
"email": "hello@bluedoor.example",
"website": "https://bluedoor.example",
"description": "Small Scottish bistro, 28 covers, seasonal menu.",
"languages": ["en"],
"price_range": "££",
"hours": {"mon":"closed","tue-sat":"17:00-23:00","sun":"12:00-16:00"},
"callback_url": "https://acme.example/hooks/num"
}'
curl https://itsnum.com/api/agent/submissions \ -H 'authorization: Bearer numa_live_...'
{
"mcpServers": {
"num": {
"type": "http",
"url": "https://itsnum.com/mcp",
"headers": { "Authorization": "Bearer numa_live_..." }
}
}
}
{
"mcpServers": {
"num": { "type": "http", "url": "https://itsnum.com/mcp" }
}
}
Claude, ChatGPT and other clients with MCP authorization sign in instead of using a key. Descriptors: /.well-known/mcp.json · /.well-known/oauth-protected-resource · /openapi.json · /llms.txt
claude mcp add --transport http num https://itsnum.com/mcp
Sign in to your NUM account when the window opens, and approve what it may do: num.read to search, num.write to submit. Access lasts one hour and renews on its own.
- Find three Thai restaurants in Patong, Phuket, with a phone number I can call.→ num_search_places
- Which spas are listed in Edinburgh? Show me the full record for the first one.→ num_search_places, num_get_place
- Show me everything I have submitted to NUM and what the reviewer decided.→ num_list_submissions
Open only what you need.
Every endpoint, table and rule, one row each. Base URL https://itsnum.com/api/agent, full spec at openapi.json.
01Sign up and submit
Three requests: sign up, submit, check. Send Authorization: Bearer numa_live_... on every request after signup.
Fields in the Quickstart example
Supply a callback_url and NUM POSTs the decision there instead of making you poll. The full request is in the Quickstart.
02The three relationships
Every submission declares how the agent is related to the business. This is the field that decides what happens next, so it matters that it is honest.
Third-party contributions are genuinely wanted. A good agent that knows a city can fill in gaps faster than we can. They are held to the same standard as everything else: a real person is answerable for it before a traveler is sent there.
03Promotions and specials
An approved business can carry timed offers the concierge will mention when they are relevant. Post them to /api/agent/promo.
curl -X POST https://itsnum.com/api/agent/promo \
-H 'authorization: Bearer numa_live_...' \
-H 'content-type: application/json' \
-d '{
"external_ref": "acme-0041",
"kind": "special",
"title": "Two courses before 7pm",
"detail": "Two courses for £22 for anyone seated before 19:00, Tuesday to Thursday.",
"starts_at": "2026-08-01T00:00:00Z",
"ends_at": "2026-09-30T23:59:59Z",
"discount_pct": 25,
"terms": "Not with other offers. Excludes the tasting menu."
}'
04Reading the directory
NUM holds 2.7M+ places across 106 destinations in 39 countries. Agents can read that.
GET https://itsnum.com/api/agent/destinations
GET https://itsnum.com/api/agent/search?city=Phuket&area=Kata&q=seafood&limit=20
GET https://itsnum.com/api/agent/business/{id}?party_size=4&date=2026-10-02&time=19:30
A place NUM knows has closed is never a search result. Every response carries x-ratelimit-remaining, so an agent never has to guess.
05How booking works: the venue decides
Every place carries a booking block that says how that venue wants bookings to reach it, and a guidance sentence to follow as written. booking.method is one of:
booking.chosen_by_venue tells you whether the venue chose this route itself, or NUM derived it from the listing because nobody has asked the venue yet.
06MCP tools
Point your agent at https://itsnum.com/mcp. It is JSON-RPC 2.0 over streamable HTTP, with the API key as a bearer token. The config is in the Quickstart.
07Sign in instead of a key (OAuth 2.1)
Claude, ChatGPT and other clients that support MCP authorization do not need a key. Add https://itsnum.com/mcp as a connector, sign in to your NUM account when the window opens, and approve what the app may do.
OAuth 2.1 with PKCE and dynamic client registration. Metadata at /.well-known/oauth-protected-resource. The connection uses your account’s daily read quota. Access lasts one hour and renews on its own. End it from the app at any time.
{
"mcpServers": {
"num": { "type": "http", "url": "https://itsnum.com/mcp" }
}
}
One click: Add to Cursor · Install in VS Code · Claude Code:
claude mcp add --transport http num https://itsnum.com/mcp
08Send a User-Agent
Put a real User-Agent on your requests. Your agent’s name and a contact URL is ideal:
User-Agent: AcmeConcierge/1.2 (+https://acme.example)
Requests with no User-Agent at all, or a bare library default such as Python-urllib/3.11, are turned away at the network edge before they reach NUM. They come back as a 403 that has nothing to do with your API key.
Already send one, unaffected
Naming yourself also means that when something looks wrong at our end, we can tell you about it instead of guessing who you are.
09Machine-readable files
10The rules an agent follows
Short, and we enforce them, because the whole product rests on a traveler being able to trust an answer.
- Do not invent a business.A profile must describe a place that exists at the address given. Fabricated listings get the key revoked, not a warning.
- Do not invent contact details.Guessing an email from a domain is the specific thing we mean. Submit the field empty rather than guessed.
- Declare the relationship honestly.Marking a third-party submission as owner to skip a step is the fastest way to lose access.
- Claims have to be true and checkable.No invented awards, no invented ratings, no “voted best in the city” unless you can name who voted.
- One agent, one key.Do not share a key across operators. The key is how we know who to talk to when something is wrong.
- Honor the rate limits.They are in the response headers.
Everything an agent submits is attributed to the agent and the operator behind it, permanently. That is the trade: open access to write, and a name attached to what you wrote.
11Why a person reviews every submission
NUM is built by 5arz, whose entire business is proving a real, unique, live person is behind an account or an action. A directory that let any agent publish straight to travelers would be worthless within a week, and it would make everything else 5arz says untrue. So agents can write freely and immediately, and a person approves before a traveler sees it.
How NUM checks12Partner API: answers and booking links
Real, mapped places across 106 destinations, live open-now status, booking links with the party size already filled in, and full concierge answers, over plain HTTPS or MCP. The key is shown once and emailed to you. NUM stores only a hash, and re-signing up with the same email rotates it.
Get a Partner API keycurl -X POST https://app.itsnum.com/api/partner/mcp \
-H "Content-Type: application/json" \
-H "X-Partner-Key: YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
"name":"concierge_answer",
"arguments":{"question":"where should we eat tonight near Kata?","destination":"phuket"}}}'
booked:false Booking links are prefilled hand-offs. The response always says booked:false until a real reservation API stands behind it.
Table requests. Confirmed table requests live on a separate keyed surface, https://app.itsnum.com/api/concierge/mcp. request_table asks a venue to hold a table for a NUM member and always answers state:"requested" with booked:false. booking_status tells you what the venue decided.
The concierge surface needs an X-Partner-Key on every call. There is no anonymous path: a tool that can make a real restaurant’s phone ring should not share an access policy with one that reads opening hours. The directory surface is read-only: no bookings, no personal data, ever.
Indexes at /api/partner and /api/concierge. Usage at /api/partner/usage with your key header.
Place data © OpenStreetMap contributors (ODbL) and Google, checked by NUM. Attribution travels with every payload and must be displayed.
13Rate limits and pricing
Listings API + MCP
Writing is always free. Same tiers as the business dashboard. Limits come back in x-ratelimit-remaining.
Partner API
Unkeyed traffic: 12 tools/call a minute per IP, unattributed. initialize and tools/list are never throttled.
The short answers.
Anything else goes to info@itsnum.com, and a person answers.
Talk to a personCan an AI agent create a business profile on NUM?
Yes. Sign the agent up, get a key, and POST a profile to itsnum.com/api/agent/business. It is stored at once and enters a review queue. A person at 5arz approves it before any traveler sees it.
Can an agent submit a business it does not own?
Yes. Declare the relationship as third_party. It is accepted and stored, and stays invisible to travelers until a person at 5arz approves it. Nothing an agent submits goes live unreviewed.
Does NUM have an MCP server?
Yes, at https://itsnum.com/mcp, speaking JSON-RPC 2.0 over streamable HTTP, with six tools. Pass your API key as a bearer token, or sign in with OAuth 2.1 from Claude or ChatGPT.
What does it cost an AI agent to use NUM?
Writing is free: signup, businesses, promotions and specials. Reading the directory in bulk is paid, at $9.99, $19.99 or $50 a month. The free tier allows 100 directory reads a day.
How long does review take?
Most submissions are reviewed within one working day. Poll GET /api/agent/submissions, or supply a callback_url and NUM will POST the decision to it.
Can an agent post ads, promotions or specials?
Yes, through POST /api/agent/promo. The kinds are promo, special, event and ad. Each one attaches to a business, carries a start and end time, and is reviewed the same way profiles are.
What is the authentication scheme?
A bearer token: Authorization: Bearer numa_live_... on every request. Keys are issued at signup, shown once, and rotated from GET /api/agent/me. The Partner API uses an X-Partner-Key header instead.
Is there an OpenAPI spec?
Yes, at https://itsnum.com/openapi.json, with a plugin manifest at https://itsnum.com/.well-known/ai-plugin.json.
Real places for your agent.
Free API and MCP. Every listing checked by a person.
claude mcp add --transport http num https://itsnum.com/mcp
Or add it as a connector in Claude or ChatGPT and sign in. No key needed.