RestoAPI · for developers & AI agents

The API for venues about to open

RestoAPI is the self-serve, technical surface for RestoSignals: a hosted MCP server, a REST endpoint, and an installable skill — one scored /v1/openings call, 1 credit = 1 returned lead, empty results free. Start free, pay as you go. No subscription needed.

Get a free key (100 leads) API docs

Developer pricing · pay as you go

Free key

$0
100 leads, one-time
no card

Top-up

$4
1,000 leads
$0.004 / lead

Top-up

$18
5,000 leads
best rate · never expire

Metered per returned lead — filters that return nothing cost nothing. Packs never expire. Need the dashboard, contacts and territory tiers instead? See RestoSignals plans (Pro bundles full API access).

1

Connect the MCP server

The server speaks Model Context Protocol (JSON-RPC 2.0) at https://api.restosignals.com/mcp. Drop this block into any MCP client and swap in your key:

{
  "mcpServers": {
    "restosignals": {
      "url": "https://api.restosignals.com/mcp",
      "headers": { "Authorization": "Bearer pk_YOUR_KEY" }
    }
  }
}

Claude Desktop / Code

Add to your MCP config (claude_desktop_config.json, or via the Claude Code MCP settings):

Cursor

Settings → MCP → Add server, same JSON block.

n8n / LangChain / custom

Point any MCP-over-HTTP client at the URL with the Bearer header, or call the JSON-RPC endpoint directly at https://api.restosignals.com/mcp.

2

The tools

Four tools, same wallet as REST. Always call coverage first so you query a state that actually has data.

coverage Free

Live states + how many scored venues (and hot leads, score ≥ 80) each holds. Call this FIRST so you never query a state with no data.

Arguments
{ /* no arguments */ }
Example result
{
  "states": [
    { "state": "NY", "venues": 812, "hot_leads": 41 },
    { "state": "IL", "venues": 190, "hot_leads": 6 },
    { "state": "TX", "venues": 5300, "hot_leads": 0 }
  ]
}
new_openings 1 / lead requires: state

Scored, fused venue leads for a state, ranked by opening_score. signal_types are liquor / food_permit / business.

Arguments
{
  "state": "NY",          // required, 2-letter
  "min_score": 40,        // default 30
  "limit": 25             // default 25, max 100
}
Example result
{
  "count": 1,
  "openings": [
    { "id": 4412, "business_name": "DINER 24 BROADWAY NYC LLC.",
      "city": "New York", "state": "NY", "opening_score": 100,
      "status": "opening", "signal_types": ["business","food_permit","liquor"] }
  ]
}
venue_signals 1 requires: venue_id

The raw underlying signals (liquor / permit / filing rows) that were fused into one venue — show your work.

Arguments
{ "venue_id": 4412 }
Example result
{
  "venue": { "id": 4412, "business_name": "DINER 24 …", "opening_score": 100, "…": "…" },
  "signals": [
    { "source": "ny_sla", "signal_type": "liquor", "status": "pending", "…": "…" },
    { "source": "nyc_permits", "signal_type": "food_permit", "…": "…" }
  ]
}
watch_area Free requires: url, criteria

Register a webhook that fires when a new matching venue surfaces in an area.

Arguments
{
  "url": "https://you.example.com/hook",
  "criteria": { "state": "NY", "city": "Brooklyn",
                "signal_type": "liquor", "min_opening_score": 60 }
}
Example result
{ "webhook_id": 7, "url": "…", "criteria": {…},
  "note": "New matching venues will be POSTed here on the daily run." }
3

Or install the skill

A packaged Agent Skill that teaches Claude exactly when and how to use RestoSignals — the coverage-first rule, the real signal_types, and honest coverage so the agent never promises a state we don't have.

↓ Download SKILL.md
4

Recipes

“Find restaurants opening soon in New York, best first”
coverage → new_openings(state=NY, min_score=40) → present name, city, score, signal_types.
“Only the strongest, multi-signal leads”
new_openings(min_score=80). A fused venue always outranks any single-signal one.
“Give me Chicago bars specifically”
new_openings(state=IL) then filter to signal_types including 'liquor' and city Chicago.
“Alert me when a new bar files in Brooklyn”
watch_area(url=<your endpoint>, criteria={state:NY, city:Brooklyn, signal_type:liquor}). Free.
“Why is this venue scored 100?”
venue_signals(venue_id) → show the underlying liquor / permit / filing rows.
“Export a whole state for the CRM”
Use REST GET /v1/export?state=NY&format=csv for a signed CSV URL (1 credit/row).

Prefer straight REST?

# 1) mint a trial key
curl -s -X POST https://api.restosignals.com/v1/register   # -> pk_...

# 2) pull scored leads (see /docs for all params)
curl -s "https://api.restosignals.com/v1/openings?state=NY&min_opening_score=40" \
  -H "X-API-Key: pk_..."

Full endpoint reference, params and response fields are in the API docs. Machine-readable summary for crawlers: /llms.txt.

Honest by design. Live states are only what coverage returns (NY, TX, IL, OR, CO, WA, CA today). We give you the venue and its signals — not owner contact details yet. Build agents that say so.