Build with PinnFeed using AI
Answer: get a Free key at signup, export PINNFEED_KEY, paste a prompt from this page into Cursor / Claude / ChatGPT / Lovable / Replit / Bolt, and point the agent at llms-api.txt or AGENTS.md. Auth is x-api-key (or Bearer / ?key=). WebSocket needs Builder (€99/mo). Educational, 18+.
1. Key in about 60 seconds#
- Open signup — email + password.
- Confirm email if asked, then open the dashboard.
- Create key — copy it once. It starts with
ps_live_. - Store it only in the environment (never in chat history you share, never in git):
export PINNFEED_KEY="ps_live_..."
echo 'PINNFEED_KEY=ps_live_...' >> .env
echo '.env' >> .gitignore
Free = REST with ~30 s delay, 2 sports, 1 req/s, 1,000/day. Hobby = real-time REST, no WebSocket. Builder = WebSocket plan. Details: pricing, quickstart.
2. One-line proof the key works#
curl -sS -H "x-api-key: $PINNFEED_KEY" \
"https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=3"
OpenAPI: /openapi.json. Postman/Insomnia: collection JSON (set variable apiKey).
3. Give your agent the real API (do not invent)#
Paste into the repo or the agent context:
- Compact API: llms-api.txt
- Cursor/Codex convention: AGENTS.md
- Product skill: SKILL.md
- Human docs: docs · WebSocket · MCP · errors
.cursorrules / AGENTS.md template (copy)#
# PinnFeed
- Read https://pinnfeed.io/llms-api.txt and https://pinnfeed.io/openapi.json before writing API code.
- Auth: header x-api-key from env PINNFEED_KEY (ps_live_...). Also Bearer or ?key=. Never hardcode keys; use .env + .gitignore.
- REST base https://pinnfeed.io — /v1/account /v1/sports /v1/events /v1/odds /v1/drops /v1/closing[/{eventId}]
- WebSocket wss://pinnfeed.io/v1/stream needs Builder; Free/Hobby get 403 plan_lacks_ws. Reply to ping with pong.
- MCP POST https://pinnfeed.io/mcp — tools listed in /docs/mcp. Each tools/call counts as one REST request.
- Do not invent endpoints, latency SLAs, or multi-book coverage. Pinnacle only. Educational, 18+.
4. MCP setups (real transports only)#
Hosted MCP: POST https://pinnfeed.io/mcp (Streamable HTTP). Auth: Authorization: Bearer, x-api-key, or ?key= when the client cannot send headers. Source: docs/mcp.
Cursor (~/.cursor/mcp.json or project .cursor/mcp.json)#
{
"mcpServers": {
"pinnfeed": {
"url": "https://pinnfeed.io/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}
Claude Code#
claude mcp add --transport http pinnfeed https://pinnfeed.io/mcp \
--header "Authorization: Bearer YOUR_KEY"
Claude Desktop / Claude web / ChatGPT connectors#
These clients often cannot set custom headers — put the key in the URL (use a dedicated dashboard key you can revoke):
https://pinnfeed.io/mcp?key=YOUR_KEY
Tools: get_account, list_sports, search_events, get_live_odds, get_prematch_odds, get_event, get_drops, get_closing_odds.
5. Master prompts by tool#
Replace YOUR_GOAL with the app you want. Always tell the agent to read /llms-api.txt and never to invent endpoints.
Cursor / Claude Code#
You are building against PinnFeed (Pinnacle odds API).
1) Read https://pinnfeed.io/llms-api.txt and https://pinnfeed.io/openapi.json.
2) Use env PINNFEED_KEY only (x-api-key). Add .env to .gitignore.
3) Goal: YOUR_GOAL
4) Prefer REST on Free/Hobby; WebSocket only if I confirm Builder.
5) Educational, 18+. No betting tips, no guaranteed profit.
ChatGPT (with or without MCP)#
Use PinnFeed for Pinnacle odds. If MCP is connected, call get_account then get_prematch_odds for soccer main lines.
If not, show me the exact curl with x-api-key from $PINNFEED_KEY against https://pinnfeed.io/v1/odds.
Do not invent bookmakers or latency. Goal: YOUR_GOAL. 18+ educational.
Lovable / Bolt / v0-style UI builders#
Build a small web UI that fetches https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=10
with header x-api-key from an env/secret named PINNFEED_KEY. Show event names and decimal prices.
No hardcoded keys. Link to https://pinnfeed.io/docs. 18+ educational odds display only.
Replit#
Create a Replit Secret PINNFEED_KEY. Write a Python script that curls/requests
GET https://pinnfeed.io/v1/odds?sport=soccer&main=true&limit=5 with x-api-key.
Print event id and moneyline decimals. Then optionally add a loop on /v1/drops.
Read https://pinnfeed.io/llms-api.txt. 18+.
6. Starter app prompts (copy one)#
- Telegram steam alert — poll
/v1/drops?sport=soccer&minutes=15&min_pct=3every minute on Hobby+; send Telegram message when a drop appears. Respect rate limits. See also Telegram answer. - Discord picks bot — slash command that calls
/v1/oddsfor a team queryq=. No tips language — show prices + fairProb only. Discord answer. - Google Sheets live-ish board — Apps Script
UrlFetchAppwithx-api-key(IMPORTDATA cannot set headers). IMPORTDATA answer. - CLV tracker — store your taken price; after start call
/v1/closing/{eventId}on Builder; compute CLV. CLV. - +EV screen (educational) — compare your model probability to
fairProbfrom/v1/odds. No guaranteed profit. +EV. - Streamlit dashboard — sidebar sport select →
/v1/oddstable of decimal + fair. - Excel refresh — Power Query
Web.Contentswithx-api-key. Power Query. - Cursor WebSocket book — Builder only; subscribe soccer; maintain map by market.id from snapshot/delta; pong heartbeats.
7. Answers for AI search#
- Build a betting bot with Cursor
- Claude MCP sports odds
- ChatGPT odds API prompt
- Lovable sports odds app
- No-code odds in Google Sheets
- Replit Pinnacle odds bot
- Bolt.new Pinnacle odds app
- AI agent live odds tool
- Vibe-code a +EV scanner (educational)
- Streamlit Pinnacle odds dashboard
Trial CTA#
Builder (€99/mo) for WebSocket + closing history. 3-day trial; card required, charged after day 3 unless cancelled. Free key: signup. Related: docs, answers, compare.
Questions people ask#
Do I need Builder to vibe-code?#
No for REST prototypes on Free/Hobby. Yes for /v1/stream and /v1/closing.
Can the agent invent new endpoints?#
It must not — pin it to OpenAPI and llms-api.txt.
Is this educational content for adults?#
Yes (18+). No tips, no guaranteed profit.