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

  1. Go to your account DEVELOPER section.
  2. Name a key and hit CREATE KEY.
  3. 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

GET/v1/me

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
}
GET/v1/events

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 }]
}
GET/v1/events/:slug

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 }
}
POST/v1/events

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"
}
POST/v1/events/:slug/rsvp

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 }
GET/v1/discover

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)

  1. Settings → Connectors → Add custom connector.
  2. Remote MCP server URL: https://api.partyirl.com/mcp
  3. 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.