Rokey for apps and agents
Rokey turns a sentence into an event page, invites and a QR code. This is the same thing without a browser — so your own app, or an AI assistant you already talk to, can make one for you.
An event on Rokey is a Rokey. Times are IST (Asia/Kolkata) unless you say otherwise. Keys are free on every plan.
Get a key
Profile → Settings → API keys → name it after whatever will hold it, and create.
The key is shown once. Only its digest is stored, so a lost key cannot be recovered — revoke it and make another.
Authorization: Bearer rk_live_a1b2c3d4_…MCP — talk to Rokey from an AI assistant
Rokey runs a remote Model Context Protocol server. Nothing to install and nothing to run — point a client at the URL and give it your key.
https://rokey.in/api/mcpIn Claude
Settings → Connectors → Add custom connector. Paste the URL above, and add the header:
Authorization: Bearer rk_live_…Then just ask: “make me a Rokey for a rooftop dinner next Saturday at 8pm in Delhi, and invite Ada and Grace.”
Tools
rokey_draft_from_sentenceTurn a sentence into a draft — title, date, venue, mode. Creates nothing.rokey_createCreate a Rokey. Returns the share link.rokey_listThe Rokeys you host.rokey_getOne Rokey in full — guests, RSVPs, the lot.rokey_inviteSend invites by email or SMS. Sends real messages.destructiveDraft first, then create — it gives a person the chance to check the date before anything is published. rokey_invite is annotated destructive on purpose: messages cannot be unsent, and SMS costs money.
REST
https://rokey.in/api/v1Create a Rokey
POST /api/v1/rokeys
Authorization: Bearer rk_live_…
Content-Type: application/json
{ "sentence": "rooftop dinner next Saturday at 8pm in Delhi" }Answers with the links you need to do anything else:
{
"slug": "rooftop-dinner-next-saturday-at-8pm-in-delhi",
"url": "https://rokey.in/e/rooftop-dinner-next-saturday-at-8pm-in-delhi",
"manageUrl": "https://rokey.in/manage/…",
"reclaimCode": "RH-XXXXXXXX"
}sentence is the intended path. Explicit fields override whatever the parser decided, and you can send them instead — title and startAt are the minimum without a sentence:
{
"title": "Sunday Supper Club",
"description": "Six courses, one long table.",
"startAt": "2027-03-14T19:30",
"mode": "IN_PERSON",
"privacy": "LOW_KEY",
"priceAmount": 150000,
"venue": { "name": "The Terrace", "address": "12 Model Town, Chandigarh" },
"status": "DRAFT"
}priceAmount is in paise — 150000 is ₹1,500, 0 is free. status is PUBLISHED (the default) or DRAFT. reclaimCode is shown once: it is how you recover the Rokey if you lose access to the account.
List and read
GET /api/v1/rokeys?limit=25
GET /api/v1/rokeys/{slug}Invite people
POST /api/v1/rokeys/{slug}/invites
{
"channel": "EMAIL",
"recipients": [{ "name": "Ada", "contact": "ada@example.com" }]
}Up to 50 per call, each recipient getting their own link. Email is free on every plan; SMS needs PRO and is billed per message.
Errors
Every failure is the same shape, so you can branch on code and still have something to show a person:
{ "error": { "code": "invalid_request", "message": "Send either `sentence`, or at least `title` and `startAt`." } }unauthorized401Missing, invalid or revoked key.not_found404No such Rokey that you host.invalid_request422The body, or your plan, refused it.rate_limited429Slow down.A Rokey you do not host answers 404, not 403. A 403 would confirm that a slug exists to anyone holding any key.
Those four are every code the API raises deliberately. An unhandled fault still answers 5xx, and that one may not carry the envelope — so treat a response you cannot parse as a server error and retry it, rather than reading error.code without checking the status first.
Limits
- 120 requests per minute per key.
- 10 Rokeys per 10 minutes.
- 50 invite recipients per call, 10 invite calls per Rokey per 10 minutes.
- 10 live keys per account.
Limits are per key rather than per IP — a key is what was issued and what you can revoke.