Developer Portal
Open Call Portals is open infrastructure for the live entertainment economy. Build a booking assistant, an availability aggregator, a venue sourcing tool — and post to the platform directly from your app.
What you can build
Post a venue's open call for a DJ, live band, comedian, artist, or 18 other performer types. Respondents apply through the portal — you get notified by webhook or email.
Post a performer's availability window — dj-availability, lb-availability, etc. — so bookers can discover them in the supply-side registry.
Post an upcoming event to the Live Events Map with geo coordinates, ticketing links, and event times. Use portal ID live-event and include eventTime.
MCP — for Claude Desktop, Cursor, Windsurf & MCP agents
The platform exposes a stateless Model Context Protocol server. No API key required. Drop this into your Claude Desktop config and start querying and posting immediately:
{
"mcpServers": {
"open-call-portals": {
"url": "https://opencallportal.com/mcp"
}
}
}
Or in any MCP client: endpoint POST https://opencallportal.com/mcp, protocol JSON-RPC 2.0 / MCP 2024-11-05.
Inspect the server manifest: GET https://opencallportal.com/mcp
Available tools
REST API — the same verified write loop
Every portal uses the same 3-step write flow. Email verification is the trust anchor — it applies to AI agents and human users equally. In development the code is always 555555 and no real email is sent.
- Send verification code
POST /api/auth/verify-emailwith{"email":"…","portalId":"dj"} - Confirm code → receive token
POST /api/auth/verify-email/confirmwith{"email":"…","code":"555555"}→{"token":"<verificationToken>"}. Valid 4 hours, single-use. - Submit listing
POST /api/listingswith your fields +verificationToken. Full field specs per portal atGET /api/vertical/config?portalId=dj.
Full write loop with curl (dev mode, code 555555):
# ── Step 1: send verification code ──────────────────────────────────
curl -s -X POST https://opencallportal.com/api/auth/verify-email \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","portalId":"dj"}'
# → {"message":"Verification code sent to your email."}
# (in dev the code is always 555555 — no real email is sent)
# ── Step 2: confirm code and receive token ────────────────────────────
curl -s -X POST https://opencallportal.com/api/auth/verify-email/confirm \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","code":"555555"}'
# → {"verified":true,"token":"<verificationToken>"}
# ── Step 3: post the listing ──────────────────────────────────────────
curl -s -X POST https://opencallportal.com/api/listings \
-H "Content-Type: application/json" \
-d '{
"portalId": "dj",
"verificationToken": "<token from step 2>",
"userRole": "venue-manager",
"organizerName": "Fabric London",
"locationIds": [42],
"date": "2026-10-15",
"closeDate": "2026-10-10",
"openCallTypes": ["paid-fixed-fee"],
"genres": ["techno","house"],
"accommodation": "N/A",
"feeExpectation": [],
"drawPower": [],
"crewNumbers": [],
"insurance": "N/A",
"djSetups": [],
"audioSetup": "N/A",
"travelBudget": "N/A"
}'
# → {"id":1234,"uiReference":"DJ-3456","portalId":"dj"}
Full field spec (GET /api/agent/schema) Location IDs (GET /api/locations)
Webhooks — real-time push
Register an HTTPS endpoint and the platform will POST a JSON payload every time a listing is created or a response is submitted. The request is signed with HMAC-SHA256 in the X-OCP-Signature header — verify it to confirm authenticity. The secret is returned once at registration; store it securely.
# Register a webhook — receive a POST whenever a listing is created
curl -s -X POST https://opencallportal.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{
"name":"register_webhook",
"arguments":{
"url":"https://your-app.example.com/hooks/ocp",
"sourceApp":"MyDJApp",
"events":["listing.created"],
"portalIds":["dj","lb"]
}
}
}'
# → {"id":7,"secret":"<store-this-securely>"}
#
# Your endpoint will receive:
# POST https://your-app.example.com/hooks/ocp
# X-OCP-Event: listing.created
# X-OCP-Signature: sha256=<hmac-sha256 of body using your secret>
# { "portalId":"dj", "uiReference":"DJ-3456", "url":"...", ... }
Filter by portalIds to receive only the verticals you care about. Omit it to receive all portals. Subscribe via the register_webhook MCP tool or via POST /mcp directly.
Portal IDs
Use these in portalId when posting open calls. For availability, append -availability (e.g. dj-availability). For live events use live-event.
dj · lb · cc · comedian · artist · casting · ec · solopreneur · gh · demo · poker · bowling · darts · cue-sports · golf-society · liquor-supply · local-produce · coworking · dance-acts · fs · run-club
GET /api/agent/schema lists every portal with its reference format and field requirements.
GPT Actions & OpenAPI
The agent API is published as an OpenAPI 3.1.0 spec for ChatGPT custom GPTs, Semantic Kernel, LangChain, n8n, and any OpenAPI-compatible agent framework:
OpenAPI spec (GET /api/agent/openapi.json) · ChatGPT plugin manifest