Build on PartyIRL.
A REST API and an MCP server for real-life events: create with one prompt, RSVP, search your city. Free, keyed to your account, same rules as the app.
Step 1 · Get your key
- Go to your account → DEVELOPER section.
- Name a key and hit CREATE KEY.
- Copy the pk_live_… value immediately — it's shown exactly once. We keep a hash, not the key.
A key acts as YOU: it can publish events and RSVP under your name. Treat it like a password; revoke it from the same screen the moment it leaks.
Step 2 · Authenticate
Every request carries the key as a Bearer token. Base URL: https://api.partyirl.com
Authorization: Bearer pk_live_YOUR_KEY
Unknown or revoked keys get 401. Errors are always JSON: { "error": { "code", "message" } }.
REST reference
Who this key acts as.
curl https://api.partyirl.com/v1/me \ -H "Authorization: Bearer pk_live_YOUR_KEY"
Response
{
"id": "cm…", "handle": "joel", "displayName": "Joel",
"avatarUrl": null, "avatarColor": "lime",
"createdAt": "2026-08-09T23:00:16.874Z",
"hostedEvents": 12, "followers": 3
}Your calendar: events you host plus events you RSVP'd to.
curl https://api.partyirl.com/v1/events \ -H "Authorization: Bearer pk_live_YOUR_KEY"
Response
{
"hosted": [{ "slug": "…", "title": "…", "startsAt": "…",
"timezone": "…", "categories": ["…"],
"visibility": "…", "city": "…", "archived": false }],
"attending": [{ …same fields, plus "rsvpStatus": "IN",
"guestCount": 0 }]
}One event, full detail. Gated addresses only appear once you've RSVP'd (or host it) — same rule as the site.
- slug
- — the last path segment of a partyirl.com/e/<slug> URL
curl https://api.partyirl.com/v1/events/taco-night-x7k2p9 \ -H "Authorization: Bearer pk_live_YOUR_KEY"
Response
{
"slug": "taco-night-x7k2p9", "title": "TACO NIGHT",
"description": "…", "startsAt": "…", "timezone": "…",
"categories": ["FOOD_DRINK", "PARTY"],
"locationName": "…", "address": null, "city": "…",
"capacity": 15, "goingCount": 9, "waitlistCount": 0,
"host": { "handle": "…", "displayName": "…" },
"url": "https://partyirl.com/e/taco-night-x7k2p9",
"myRsvp": { "status": "IN", "guestCount": 0 }
}Create + publish an event. Send a prompt and the AI drafts everything (title, copy, time, poster), or send a full draft object to skip the AI.
- prompt
- — the event in your own words (3–500 chars)
- vibe
- — optional: chill · hype · fancy — locks the tone
- timezone
- — optional IANA zone for relative dates (default America/Chicago)
- visibility
- — optional: PUBLIC (default, in Discover) · UNLISTED · PRIVATE
- draft
- — optional: a full event draft object instead of prompt — carries 1–3 categories (a legacy single category string is accepted and mapped)
curl -X POST https://api.partyirl.com/v1/events \
-H "Authorization: Bearer pk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "rooftop movie night saturday 8pm, byo blanket, 20 ppl",
"vibe": "chill",
"timezone": "America/Los_Angeles",
"visibility": "UNLISTED"
}'Response
201 Created
{
"slug": "rooftop-movie-night-a1b2c3",
"url": "https://partyirl.com/e/rooftop-movie-night-a1b2c3",
"title": "ROOFTOP MOVIE NIGHT",
"startsAt": "2026-08-15T03:00:00.000Z",
"timezone": "America/Los_Angeles",
"visibility": "UNLISTED"
}RSVP as yourself. Repeat calls replace the previous answer; OUT cancels. A full event with a waitlist turns IN into WAITLIST — check the returned status.
- status
- — IN · MAYBE · OUT
- guestCount
- — optional plus-ones, 0–10 (default 0)
curl -X POST https://api.partyirl.com/v1/events/taco-night-x7k2p9/rsvp \
-H "Authorization: Bearer pk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "IN", "guestCount": 1 }'Response
{ "slug": "taco-night-x7k2p9", "status": "IN", "guestCount": 1 }Search upcoming PUBLIC events. All filters optional.
- query
- — free text — matches title, description, venue, category names
- category
- — PARTY · FOOD_DRINK · MUSIC_SHOWS · SPORTS_FITNESS · GAMES · ART_CULTURE · TECH_NETWORKING · OUTDOORS · MARKET_POPUP · OTHER — matches events whose 1–3 tags contain it
- city
- — exact city name, case-insensitive
curl "https://api.partyirl.com/v1/discover?query=tacos&city=Austin" \ -H "Authorization: Bearer pk_live_YOUR_KEY"
Response
{
"events": [{ "slug": "…", "title": "…", "startsAt": "…",
"timezone": "…", "categories": ["…"],
"locationName": "…", "city": "Austin", "state": "TX",
"goingCount": 12 }]
}MCP server for your AI
Point Claude (or any MCP client) at https://api.partyirl.com/mcp — Streamable HTTP, same Bearer key — and it can throw parties for you.
Tools
- create_event
- — one prompt → published event (vibe + visibility optional)
- list_my_events
- — everything you host or RSVP'd to
- get_event
- — full details for one slug
- rsvp
- — IN / MAYBE / OUT, with plus-ones
- search_events
- — Discover search: query, category, city
Claude Code
claude mcp add --transport http partyirl https://api.partyirl.com/mcp \ --header "Authorization: Bearer pk_live_YOUR_KEY"
Claude Desktop
Settings → Developer → Edit Config, then add PartyIRL to claude_desktop_config.json (the mcp-remote bridge handles the Streamable HTTP connection):
{
"mcpServers": {
"partyirl": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://api.partyirl.com/mcp",
"--header", "Authorization: Bearer pk_live_YOUR_KEY"
]
}
}
}claude.ai (custom connector)
- Settings → Connectors → Add custom connector.
- Remote MCP server URL: https://api.partyirl.com/mcp
- Where the connector asks for authentication, supply the header Authorization: Bearer pk_live_YOUR_KEY.
Rate limits
60 requests/minute per key (429 + Retry-After when you cross it). The app's own guardrails ride along: AI drafts are capped hourly and event creation daily — a key never gets more room than its owner.
Usage policy
Keys act as you, for things you'd do yourself: your events, your RSVPs, tools for your crew. Don't spam feeds, scrape people's data, or automate RSVPs you don't mean — moderation applies to API-created events exactly as in the app, and abusive keys (and accounts) get revoked.
Questions? It's early — things may move. Pin nothing to undocumented behavior.