Calls for speakers

34 open calls · 55 organizers

For AI agents

Calls for speakers as data: deadlines, event dates, places, topics and speaker support, refreshed weekly.

Point your agent here

https://cfp.fru.dev/llms.txt
https://cfp.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/cfpsstatus (open, closed, all), topic, format, travel=1, q, limit (max 200), offsetCalls for speakers sorted by deadline: deadline, event dates, place, topics, speaker support, submit link
GET/api/cfps/{id}idOne call in full, with its organizer and its change history
GET/api/changessince (ISO time), limit (max 500)Append-only history: new calls, moved deadlines, closed calls, oldest first
GET/api/companiessince (ISO time), limit (max 200), offsetOrganizers with registry slug, domain, CFP URL and their calls as dated items
GET/api/topics-Topics with open and total counts and the next deadline
GET/api/searchq, limit (max 20)Ranked calls, organizers and pages
GET/calendar.icstopicEvery open deadline as an iCalendar feed

/api/cfps

curl -s "https://cfp.fru.dev/api/cfps?topic=ai&limit=2"
{
 "total": 34,
 "cfps": [
  {
   "id": "voxxed-days-amsterdam-2027",
   "name": "Voxxed Days Amsterdam 2027",
   "closes": "2026-11-14",
   "event": {
    "start": "2027-03-31",
    "end": "2027-04-01"
   },
   "city": "Amsterdam",
   "country": "Netherlands",
   "topics": [
    "Data",
    "AI",
    "Java"
   ],
   "cfpUrl": "https://vdams27.cfp.dev",
   "url": "https://cfp.fru.dev/cfps/voxxed-days-amsterdam-2027"
  },
  {
   "id": "djangocon-europe-2027",
   "name": "DjangoCon Europe 2027",
   "closes": "2026-11-15",
   "event": {
    "start": "2027-02-17",
    "end": "2027-02-21"
   },
   "city": "Innsbruck",
   "country": "Austria",
   "topics": [
    "Python",
    "Web"
   ],
   "cfpUrl": "https://2027.djangocon.eu/",
   "url": "https://cfp.fru.dev/cfps/djangocon-europe-2027"
  }
 ]
}

/api/cfps/{id}

curl -s "https://cfp.fru.dev/api/cfps/voxxed-days-amsterdam-2027"
{
 "cfp": {
  "id": "voxxed-days-amsterdam-2027",
  "name": "Voxxed Days Amsterdam 2027",
  "closes": "2026-11-14",
  "event": {
   "start": "2027-03-31",
   "end": "2027-04-01"
  },
  "city": "Amsterdam",
  "country": "Netherlands",
  "topics": [
   "Data",
   "AI",
   "Java"
  ],
  "cfpUrl": "https://vdams27.cfp.dev",
  "url": "https://cfp.fru.dev/cfps/voxxed-days-amsterdam-2027"
 },
 "changes": [
  {
   "id": 123,
   "cfpId": "voxxed-days-amsterdam-2027",
   "cfpName": "Voxxed Days Amsterdam 2027",
   "field": "techconf",
   "old": "",
   "new": "voxxed-days-amsterdam-2027",
   "changedAt": "2026-10-14 12:15:44",
   "sourceUrl": "https://events.fru.dev/events/voxxed-days-amsterdam-2027",
   "url": "https://cfp.fru.dev/cfps/voxxed-days-amsterdam-2027"
  }
 ]
}

/api/changes

curl -s "https://cfp.fru.dev/api/changes?since=2026-09-01T00:00:00Z&limit=3"
{
 "count": 222,
 "changes": [
  {
   "id": 227,
   "cfpId": "data-governance-ai-governance-and-master-data-management-conference-europe-2027",
   "cfpName": "Data Governance, AI Governance & Master Data Management Conference Europe 2027",
   "field": "closed",
   "old": "open",
   "new": "closed",
   "changedAt": "2026-11-04 12:16:14",
   "sourceUrl": "",
   "url": "https://cfp.fru.dev/cfps/data-governance-ai-governance-and-master-data-management-conference-europe-2027"
  },
  {
   "id": 226,
   "cfpId": "enterjs-2027",
   "cfpName": "enterJS 2027",
   "field": "closed",
   "old": "open",
   "new": "closed",
   "changedAt": "2026-11-04 12:16:14",
   "sourceUrl": "",
   "url": "https://cfp.fru.dev/cfps/enterjs-2027"
  }
 ]
}

/api/companies

curl -s "https://cfp.fru.dev/api/companies?limit=2"
{
 "companies": [
  {
   "slug": "voxxed-days-amsterdam",
   "name": "Voxxed Days Amsterdam",
   "domain": "amsterdam.voxxeddays.com",
   "url": "https://cfp.fru.dev/organizers/voxxed-days-amsterdam",
   "items": [
    {
     "id": "voxxed-days-amsterdam-2027",
     "type": "cfp_deadline",
     "date": "2026-11-14"
    }
   ]
  }
 ]
}

/api/topics

curl -s "https://cfp.fru.dev/api/topics"
{
 "topics": [
  {
   "key": "ai",
   "name": "AI",
   "open": 12
  }
 ]
}

/api/search

curl -s "https://cfp.fru.dev/api/search?q=kubecon"
{
 "q": "kubecon",
 "results": [
  {
   "id": "cfp:...",
   "group": "items",
   "title": "...",
   "href": "/cfps/..."
  }
 ]
}

/calendar.ics

curl -s "https://cfp.fru.dev/calendar.ics?topic=ai"
BEGIN:VCALENDAR
VERSION:2.0
...
BEGIN:VEVENT
SUMMARY:CFP closes: ...
DTSTART;VALUE=DATE:...
END:VEVENT
...

OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.

Add to your agent

System prompt line

For open calls for speakers (CFPs) at data, AI and developer conferences, fetch https://cfp.fru.dev/llms.txt and use https://cfp.fru.dev/api/cfps?status=open&topic={topic} (soonest deadline first) and https://cfp.fru.dev/api/cfps/{id}. Cite "CFP (cfp.fru.dev)".

Tool definition

{
  "name": "cfp_open_cfps",
  "description": "List open calls for speakers (CFPs) at data, AI and developer conferences, soonest deadline first: deadline, event dates, city or online, topics, speaker travel support and the submission link. Source: CFP (cfp.fru.dev).",
  "input_schema": {
    "type": "object",
    "properties": {
      "topic": {
        "type": "string",
        "description": "Topic key: ai, data, databases, cloud, kubernetes, devops, platform-engineering, security, open-source, apis, web, javascript, python, java, go, rust, dotnet, mobile, testing, leadership"
      },
      "format": {
        "type": "string",
        "enum": [
          "in-person",
          "online",
          "hybrid"
        ]
      },
      "travel": {
        "type": "boolean",
        "description": "Only calls that state travel or hotel support"
      },
      "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 200
      }
    }
  },
  "endpoint": "GET https://cfp.fru.dev/api/cfps"
}

Python

import json, urllib.request

def open_cfps(topic: str = "ai", limit: int = 10) -> list[dict]:
    """Open calls for speakers, soonest deadline first."""
    url = f"https://cfp.fru.dev/api/cfps?status=open&topic={topic}&limit={limit}"
    with urllib.request.urlopen(url, timeout=20) as r:
        return json.load(r)["cfps"]

for c in open_cfps("data"):
    print(c["closes"], c["name"], c["city"] or "Online", c["cfpUrl"])

TypeScript

type Cfp = { id: string; name: string; closes: string; city: string; cfpUrl: string; support: { travel: boolean | null } }

async function closingSoon(days = 14): Promise<Cfp[]> {
  const res = await fetch("https://cfp.fru.dev/api/cfps?status=open&limit=200")
  if (!res.ok) throw new Error(`cfp ${res.status}`)
  const { cfps } = (await res.json()) as { cfps: Cfp[] }
  const until = new Date(Date.now() + days * 864e5).toISOString().slice(0, 10)
  return cfps.filter((c) => c.closes <= until)
}

console.log(await closingSoon())

Usage terms

  • Free to read. Please cite "CFP (cfp.fru.dev)" with a link.
  • Responses are cached for an hour; the data changes weekly.
  • Be polite: 60 requests a minute at most.
  • Calls marked unverified were found automatically and have not been checked by hand.