SPUR Innovation SPUR Innovation
For AI agents - updated 2026-10-08

SPUR for AI agents.

Everything an agent needs to answer questions about SPUR, quote NVIDIA B300 compute or data centre capacity in USD, and file a reservation request, without scraping and without an API key. Same numbers as the human pages, served as JSON, Markdown and MCP tools.

OpenAPI offers.json llms-full.txt
Quick start

Three ways in.

1. MCP (Claude, Cursor, ChatGPT, any client)

https://spuric.com/mcp

Streamable HTTP, no auth. Paste this into your client's MCP config:

{
  "mcpServers": {
    "spur": {
      "type": "http",
      "url": "https://spuric.com/mcp"
    }
  }
}
2. REST (any HTTP client)

JSON in, JSON out

curl -X POST https://spuric.com/api/agent/quote \
  -H 'Content-Type: application/json' \
  -d '{"gpus": 16, "term_months": 12}'

curl -X POST https://spuric.com/api/ask \
  -H 'Content-Type: application/json' \
  -d '{"question": "Does SPUR have 100 MW available?"}'
3. Files (crawlers, RAG, spreadsheets)

Read, do not scrape

offers.json (schema.org OfferCatalog), llms.txt (facts + index), llms-full.txt (key pages as Markdown), and every key page has a .md twin, e.g. /en/capacity.md.

MCP tools

Ten tools, one server.

ToolArgumentsReturns
ask_spurquestionGrounded answer about SPUR (refreshed daily from spuric.com)
get_spur_pricingservice: capacity | colocation | gpu_compute | ai_solutions | allRate card text + structured pricing (USD)
get_capacity_availabilitynone100 MW program: MW available, US$200/kW-month, sites, inclusions, how to reserve
quote_b300_blocknodes or gpus, term_months, optional webhook_url + webhook_secretIndicative quote: US$12/GPU-hour x 8-GPU nodes x 730 h; monthly + term totals, quote_id (stored 30 days)
quote_capacitykw, term_months, optional nodes/gpus, webhook_url + webhook_secretIndicative quote: US$200/kW-month, plus B300 line if requested
accept_quotequote_id, company, name, email (required); phone, po_number, message, webhook_url, webhook_secret, sandboxAccepts a stored quote: files the reservation (contract within one business day) and fires signed quote.accepted webhooks; idempotent
register_webhookquote_id, url (https), secretAttach a webhook to a quote; webhook.test delivered at once; returns id + token
get_quote_statusquote_idStored quote: open | accepted, expiry, acceptance summary, webhook delivery log
list_spur_eventslimitUpcoming SPUR events with RSVP links
request_contractcompany, name, email (required); kw, gpu_count, quote_id, use_case, timeline, message, agent, sandboxFiles a real reservation request; reference id; human reply within one business day. sandbox: true validates and echoes the request without filing it
REST endpoints

Same tools over HTTP.

EndpointBody / queryNotes
POST /api/ask (or GET ?q=){"question": "..."}30 requests/min per IP
GET /api/agent/capacitynoneCached 1 h
GET /api/agent/pricingnoneRate card, USD
POST /api/agent/quote{"gpus"|"nodes", "kw", "term_months", "webhook_url", "webhook_secret"}Returns quote_id, monthly_usd, term_total_usd, line_items, valid_until, text; stored 30 days
GET /api/agent/quote/{quote_id}noneStatus, expiry, acceptance summary, webhook deliveries
POST /api/agent/quote/{quote_id}/accept{"company","name","email", "po_number", "webhook_url", "sandbox"}10/min per IP; files the reservation + fires quote.accepted webhooks; 404 unknown quote
POST /api/agent/webhooks{"quote_id","url","secret"}Register a webhook (https only); test event delivered; returns id + token
DELETE /api/agent/webhooks/{id}?token=noneDeactivate a webhook
POST /api/agent/request{"company","name","email", ..., "sandbox": false}10/min per IP; creates a lead; 429 when rate limited. Dry run: "sandbox": true or header X-Spur-Sandbox: true (60/min, nothing filed)
POST /mcpJSON-RPC 2.0 (initialize, tools/list, tools/call)60/min per IP

Discovery: /.well-known/agent.json (A2A agent card), /.well-known/ai-plugin.json, /.well-known/openapi.json, /robots.txt (AI crawlers allowed), /sitemap.xml.

Webhooks

Know the moment a quote is accepted.

Quotes are stored for 30 days. An agent accepts one with accept_quote (MCP) or POST /api/agent/quote/{quote_id}/accept giving company, name and email. Acceptance files the reservation with SPUR's engineers (contract follows within one business day) and fires a signed quote.accepted event to every webhook attached to that quote. Accepting the same quote twice returns already_accepted and fires nothing.

POST https://your-host.example/hooks/spur
X-Spur-Event: quote.accepted
X-Spur-Delivery: dlv_3509a35ae1644010
X-Spur-Timestamp: 1791000000
X-Spur-Signature: sha256=...

{"event":"quote.accepted","delivery_id":"dlv_3509a35ae1644010","timestamp":"1791000000","sandbox":false,
 "quote":{"quote_id":"SPUR-Q-20261009-37542031","currency":"USD","term_months":12,"monthly_usd":70080.0,"term_total_usd":840960.0,"line_items":[...],"valid_until":"2026-11-08"},
 "acceptance":{"acceptance_reference":"SPUR-A-20261009-8EED19CE","request_reference":"SPUR-R-20261009-60FB7E32","status":"accepted","company":"...","name":"...","email":"...","po_number":null,"accepted_at":"2026-10-09T06:35:24Z"},
 "follow_up":"A SPUR engineer replies within one business day ...",
 "links":{"quote":"https://spuric.com/api/agent/quote/SPUR-Q-20261009-37542031","docs":"https://spuric.com/en/agents.html#webhooks"}}

# verify (Python)
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), (ts + "." + raw_body).encode(), hashlib.sha256).hexdigest()
assert hmac.compare_digest(expected, request.headers["X-Spur-Signature"])

# later, on each pipeline change
X-Spur-Event: quote.status.changed
{"event":"quote.status.changed","delivery_id":"dlv_...","timestamp":"1791003600","sandbox":false,
 "quote_id":"SPUR-Q-20261009-37542031","status":"contract_sent","previous_status":"qualified","terminal":false,
 "message":"The contract and rate lock have been sent for signature.",
 "deal":{"stage":"proposal","previous_stage":"qualified","probability_pct":60,"updated_at":"2026-10-12T14:03:00","closed_at":null},
 "quote":{"quote_id":"SPUR-Q-20261009-37542031","currency":"USD","term_months":12,"monthly_usd":70080.0,"term_total_usd":840960.0,"valid_until":"2026-11-08"},
 "acceptance":{"acceptance_reference":"SPUR-A-20261009-8EED19CE","request_reference":"SPUR-R-20261009-60FB7E32","company":"...","accepted_at":"2026-10-09T06:35:24Z"},
 "links":{"quote":"https://spuric.com/api/agent/quote/SPUR-Q-20261009-37542031","docs":"https://spuric.com/en/agents.html#webhooks"}}
What to expect

Ground rules.

Changelog

Building an agent that buys compute?

Tell us what your agent needs: more tools, more events, or test data. We answer same-day.

Talk to SPUR -> Capacity & pricing