# Open Call Portals > AI classifieds for entertainment, hospitality & events. LinkedIn is professional theatre. Instagram is noise. This platform connects specific needs with specific people — venues find DJs, promoters find crew, labels find artists — and every listing is verified, structured, and machine-readable. ## What you can index and cite The surfaces below are PII-free by construction. The `/opportunities` and `/events` registries are server-rendered and carry an explicit `X-Robots-Tag: index, follow` response header; the SPA landing pages carry descriptive server-injected metadata (title/description/Open Graph) with no PII. They are intended for AI ingestion and citation. ### Live Events — upcoming events with geo and ticketing data - [live events index (English)](https://opencallportal.com/events) - [canonical detail page for a single event (schema.org Event JSON-LD, Google Events carousel-eligible)](https://opencallportal.com/events/[LE-XXXX]) - [iCal feed of upcoming live events; subscribe in any calendar app or agent](https://opencallportal.com/calendar.ics?source=live-events) - [JSON API — upcoming live events with geo coordinates, ticketing, and source links](https://opencallportal.com/api/agent/live-events) #### Localized live events (SEO surfaces, 7 languages) The events index and detail pages are also served in six languages under `/events//…` (`es` Spanish, `pt` Portuguese-BR, `de` German, `nl` Dutch, `fr` French, `it` Italian). Each page carries reciprocal `hreflang` links to all other locales and the English original. Examples: - [events index in French](https://opencallportal.com/events/fr) - [event detail in German](https://opencallportal.com/events/de/[LE-XXXX]) All `/events` pages include schema.org `Event`, `BreadcrumbList`, and `WebSite` structured data. ### Public opportunity registry — open calls - [public registry index; lists all active open calls](https://opencallportal.com/opportunities) - [canonical detail page for a single opportunity (schema.org JobPosting JSON-LD)](https://opencallportal.com/opportunities/[DJ-XXXX]) - [category pages by open call type (e.g. paid-fixed-fee, open-decks)](https://opencallportal.com/opportunities/type/[slug]) - [category pages by genre (e.g. house, techno, open-format)](https://opencallportal.com/opportunities/genre/[slug]) - [category pages by city or region](https://opencallportal.com/opportunities/location/[slug]) - [dynamic sitemap; updated as listings are created or expire](https://opencallportal.com/sitemap.xml) - [RSS feed of the latest active open calls; suitable for RSS readers, Zapier, Make, and AI agents](https://opencallportal.com/feed.rss) - [PII-free JSON feed of active listings, suitable for agents and structured retrieval](https://opencallportal.com/api/opportunities) #### Localized registry (SEO surfaces only) The registry index, hub, category and opportunity-detail pages are also served in six languages under a `/opportunities//…` prefix (`es` Spanish, `pt` Portuguese-BR, `de` German, `nl` Dutch, `fr` French, `it` Italian). They render the same PII-free listings with localized titles, descriptions, marketing copy and JSON-LD, reciprocally linked to every other language and the English original via `hreflang`. Examples: - [registry index in German](https://opencallportal.com/opportunities/de) - [genre category page in French](https://opencallportal.com/opportunities/fr/genre/[slug]) - [opportunity detail in Spanish](https://opencallportal.com/opportunities/es/[DJ-XXXX]) ### Portal landing pages Each vertical has a server-rendered landing page introducing the vertical and linking into the live registry: - [Open Call Portals hub (all verticals)](https://opencallportal.com/) - [Live Events Map portal — browse and submit upcoming live events](https://opencallportal.com/live-events/) - [randomised discovery of a live open call](https://opencallportal.com/OpenCallRoulette) - [DJ open calls](https://opencallportal.com/DJ) - [live band & musician open calls](https://opencallportal.com/Live_Band) - [visual artist open calls](https://opencallportal.com/Artist) - [poker dealer & host open calls](https://opencallportal.com/Poker) - [music demo submission open calls](https://opencallportal.com/Demo) - [Comedian](https://opencallportal.com/Comedian), [Content_Creator](https://opencallportal.com/Content_Creator), [Event_Crew](https://opencallportal.com/Event_Crew), [Darts](https://opencallportal.com/Darts), [Casting](https://opencallportal.com/Casting), [Cue_Sports](https://opencallportal.com/Cue_Sports), [Golf_Society](https://opencallportal.com/Golf_Society), [Liquor_Supply](https://opencallportal.com/Liquor_Supply), [Solopreneur](https://opencallportal.com/Solopreneur), [Dance_Acts](https://opencallportal.com/Dance_Acts), [Bowling](https://opencallportal.com/Bowling), [Local_Produce](https://opencallportal.com/Local_Produce), [CoworkingCoordinator](https://opencallportal.com/CoworkingCoordinator), [Game_Host](https://opencallportal.com/Game_Host), [Fourth_Spaces](https://opencallportal.com/Fourth_Spaces) — additional verticals (the complete, current list is always in [sitemap.xml](https://opencallportal.com/sitemap.xml)) All `/opportunities` pages include schema.org structured data (`JobPosting`, `ItemList`, `CollectionPage`, `BreadcrumbList`, `WebSite`, `Organization`). ## Developer Portal — for app builders integrating with the platform A human-readable entry point for niche app builders (DJ management tools, band booking platforms, availability aggregators): - [Developer Portal — MCP, REST API, webhooks, and write loop reference](https://opencallportal.com/developers) ## MCP Server — tool use for Claude, Cursor, Windsurf, and MCP-compatible agents The platform exposes a [Model Context Protocol (MCP)](https://spec.modelcontextprotocol.io/) server for direct AI agent integration. No API key or authentication required. **Endpoint:** `POST https://opencallportal.com/mcp` **Protocol:** JSON-RPC 2.0 / Stateless HTTP (MCP 2024-11-05) ### Claude Desktop configuration Add to `~/.claude/claude_desktop_config.json`: ```json { "mcpServers": { "open-call-portals": { "url": "https://opencallportal.com/mcp" } } } ``` ### Available MCP tools - **search_open_calls** — filter active listings by portal, location, genre, open call type, and date range; returns JSON or paste-ready markdown - **search_live_events** — find upcoming events with geo coordinates (lat/lng), ticketing data, and source links - **get_platform_schema** — autodiscover all portal IDs, the full API contract, and the email-verified write workflow ### Discovery `GET https://opencallportal.com/mcp` returns the server manifest with all tool descriptions and the Claude Desktop config block. ## GPT Actions — ChatGPT custom GPTs The agent API is published as an OpenAPI 3.1.0 spec for use with ChatGPT GPT Actions and any OpenAPI-compatible agent framework (Semantic Kernel, LangChain, n8n, etc.): - [OpenAPI spec](https://opencallportal.com/api/agent/openapi.json) - [ChatGPT plugin manifest](https://opencallportal.com/.well-known/ai-plugin.json) ## Agent API — read and write for AI systems The `/api/agent` namespace is built for AI agents, LLMs, and automation pipelines. Read endpoints are public and PII-free. The write flow uses email verification — the same flow as every human user. No bypass exists: accountability is the feature. ### Read endpoints (no authentication) #### GET /api/agent/live-events Upcoming live events with geo coordinates, ticketing data, and source links. All events are PII-free. ``` GET /api/agent/live-events GET /api/agent/live-events?type=dj&genre=techno GET /api/agent/live-events?ticketed=yes GET /api/agent/live-events?ticketed=no GET /api/agent/live-events?ticketed=tbc GET /api/agent/live-events?from=2026-08-01&to=2026-08-31 GET /api/agent/live-events?type=dj,live-band&location=london&limit=50 ``` Query parameters: - `type` — comma-separated event types (e.g. `dj`, `live-band`, `darts`, `pool-comp`) - `genre` — comma-separated genres (e.g. `house,techno`) - `location` — city or country name substring (e.g. `london`, `manchester`) - `ticketed` — `yes`, `no`, or `tbc` (entry status unknown) - `from` — ISO date (YYYY-MM-DD) — events starting on or after this date - `to` — ISO date — events starting on or before this date - `limit` — max results (default 100, max 500) Each event in the response includes: - `ref` — stable unique reference (e.g. `LE-1001`) - `url` — canonical SEO page at `https://opencallportal.com/events/:ref` - `eventPromotion` — source page on RA, Dice, Eventbrite, or venue website (when provided) - `lat`, `lng` — geo coordinates - `eventTime`, `eventEndTime` — ISO 8601 start/end (end defaults to next day 06:00 if not set) - `isTicketed` — `true`, `false`, or `null` (TBC) - `ticketPrice`, `ticketLink` — ticketing detail when known #### GET /api/agent/listings All active listings across all portals, filterable and structured. ``` GET /api/agent/listings GET /api/agent/listings?portalId=dj GET /api/agent/listings?portalId=dj&genre=house&location=london&limit=50 GET /api/agent/listings?portalId=live-event&from=2026-09-01&to=2026-09-30 GET /api/agent/listings?format=md ← paste-ready markdown ``` Query parameters: - `portalId` — filter to a single portal (e.g. `dj`, `lb`, `live-event`, `ec`). Omit for all portals. - `type` — comma-separated open call types (e.g. `paid-fixed-fee,open-decks`) - `genre` — comma-separated genres or categories (e.g. `house,techno`) - `location` — city or country name substring (e.g. `london`, `manchester`, `uk`) - `from` — ISO date (YYYY-MM-DD) — listings closing on or after this date - `to` — ISO date — listings closing on or before this date - `limit` — max results (default 100, max 500) - `format` — `json` (default) or `md` for paste-ready markdown #### GET /api/agent/schema Machine-readable contract — all portal IDs, field specs, and the full write workflow. Fetch this at runtime to autodiscover the API. ``` GET /api/agent/schema ``` ### Write workflow (email verification required — all portals) Every listing on every portal requires email verification. This applies to AI agents too: email ownership is the trust anchor that keeps listings specific and accountable. **Step 1 — Send verification code** ``` POST /api/auth/verify-email Content-Type: application/json { "email": "venue@example.com", "portalId": "dj" } ``` → A 6-digit code is emailed to the address. In development the code is always `555555`. **Step 2 — Confirm code and receive token** ``` POST /api/auth/verify-email/confirm Content-Type: application/json { "email": "venue@example.com", "code": "555555" } ``` → `{ "verified": true, "email": "venue@example.com", "token": "" }` The token is valid for 4 hours and single-use. **Step 3 — Submit listing** ``` POST /api/listings Content-Type: application/json { "portalId": "dj", "verificationToken": "", "userRole": "venue-manager", "organizerName": "Fabric London", "locationIds": [42], "date": "2026-09-20", "closeDate": "2026-09-20", "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" }` For full per-portal field specs: `GET /api/vertical/config?portalId=dj` For location IDs: `GET /api/locations` For all portal IDs and their ref formats: `GET /api/agent/schema` ### Quick-start examples ```bash # What live events are on in London this month? curl "https://opencallportal.com/api/agent/live-events?location=london&from=2026-08-01&to=2026-08-31" # Ticketed DJ events coming up anywhere curl "https://opencallportal.com/api/agent/live-events?type=dj&ticketed=yes" # Subscribe to all live events in a calendar app https://opencallportal.com/calendar.ics?source=live-events # What DJ open calls are live in London right now? curl "https://opencallportal.com/api/agent/listings?portalId=dj&location=london&format=md" # Autodiscover all portals and the write contract curl "https://opencallportal.com/api/agent/schema" ``` ## Machine-readable formats The `/api/opportunities` and `/api/agent/listings` feeds both support `?format=md` — a clean markdown document ready to paste into any reply, Discord message, or forum post without reformatting. The response is `text/plain; charset=utf-8`. The `/api/agent/live-events` feed returns structured JSON with a `_meta` block pointing to the schema endpoint and submit instructions. The iCal feed (`/calendar.ics?source=live-events`) returns standard RFC 5545 VEVENTs with `DTSTART`, `DTEND`, `SUMMARY`, `LOCATION`, and `URL` properties — compatible with Google Calendar, Apple Calendar, Outlook, and any iCal-aware agent. ## Automation / webhooks Set a `WEBHOOK_URL` environment variable to receive a real-time JSON `POST` whenever a new listing is created. The payload is the full `PublicOpportunity` object and the request carries a `X-OCP-Event: listing.created` header — compatible with Zapier, Make (Integromat), n8n, and any webhook-trigger platform. ## What is restricted The following surfaces contain user PII (contact emails, social handles, session data) and must not be indexed or ingested: - /api/* except /api/opportunities and /api/agent — private application API; returns user PII - /account and /*/account — authenticated user account pages These restrictions are mirrored in robots.txt. ## Sitemap & feeds - [sitemap.xml — includes open calls and live events with hreflang clusters](https://opencallportal.com/sitemap.xml) - [feed.rss — open call opportunities](https://opencallportal.com/feed.rss) - [calendar.ics — live events iCal feed](https://opencallportal.com/calendar.ics?source=live-events) ## Contact Operated by Open Call Portals. For questions about the public registry, use the contact form on the site.