Skip to content
Updated 10h ago

For AI agents

Calls for speakers as data: 36 open of 40 on file, with 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": 36,
 "cfps": [
  {
   "id": "conf42-prompt-engineering-2026",
   "name": "Conf42 Prompt Engineering 2026",
   "closes": "2026-09-28",
   "event": {
    "start": "2026-10-29",
    "end": "2026-10-29"
   },
   "city": "",
   "country": "",
   "topics": [
    "AI"
   ],
   "cfpUrl": "https://www.papercall.io/conf42-prompt-engineering-2026",
   "url": "https://cfp.fru.dev/cfps/conf42-prompt-engineering-2026"
  },
  {
   "id": "vector-in-databases-2026",
   "name": "Vector in Databases 2026",
   "closes": "2026-09-28",
   "event": {
    "start": "2026-10-24",
    "end": "2026-10-24"
   },
   "city": "",
   "country": "",
   "topics": [
    "Databases"
   ],
   "cfpUrl": "https://buildevcon.com/SpeakersApply",
   "url": "https://cfp.fru.dev/cfps/vector-in-databases-2026"
  }
 ]
}

/api/cfps/{id}

curl -s "https://cfp.fru.dev/api/cfps/conf42-prompt-engineering-2026"
{
 "cfp": {
  "id": "conf42-prompt-engineering-2026",
  "name": "Conf42 Prompt Engineering 2026",
  "closes": "2026-09-28",
  "event": {
   "start": "2026-10-29",
   "end": "2026-10-29"
  },
  "city": "",
  "country": "",
  "topics": [
   "AI"
  ],
  "cfpUrl": "https://www.papercall.io/conf42-prompt-engineering-2026",
  "url": "https://cfp.fru.dev/cfps/conf42-prompt-engineering-2026"
 },
 "changes": [
  {
   "id": 5,
   "cfpId": "conf42-prompt-engineering-2026",
   "cfpName": "Conf42 Prompt Engineering 2026",
   "field": "created",
   "old": "",
   "new": "2026-09-28",
   "changedAt": "2026-09-24 10:24:00",
   "sourceUrl": "https://www.papercall.io/conf42-prompt-engineering-2026",
   "url": "https://cfp.fru.dev/cfps/conf42-prompt-engineering-2026"
  }
 ]
}

/api/changes

curl -s "https://cfp.fru.dev/api/changes?since=2026-09-01T00:00:00Z&limit=3"
{
 "count": 46,
 "changes": [
  {
   "id": 46,
   "cfpId": "build-it-summit-2026",
   "cfpName": "Build It Summit 2026",
   "field": "topics",
   "old": "[\"Data\",\"AI\",\"DevOps\",\"Open source\"]",
   "new": "[\"DevOps\",\"Data\",\"AI\",\"Open source\"]",
   "changedAt": "2026-09-24 14:31:08",
   "sourceUrl": "https://github.com/tech-conferences/conference-data/blob/main/conferences/2026/devops.json",
   "url": "https://cfp.fru.dev/cfps/build-it-summit-2026"
  },
  {
   "id": 45,
   "cfpId": "all-day-ai-2026",
   "cfpName": "All Day AI 2026",
   "field": "topics",
   "old": "[\"Data\",\"AI\",\"DevOps\",\"Security\"]",
   "new": "[\"DevOps\",\"AI\",\"Data\",\"Security\"]",
   "changedAt": "2026-09-24 14:31:08",
   "sourceUrl": "https://github.com/tech-conferences/conference-data/blob/main/conferences/2026/devops.json",
   "url": "https://cfp.fru.dev/cfps/all-day-ai-2026"
  }
 ]
}

/api/companies

curl -s "https://cfp.fru.dev/api/companies?limit=2"
{
 "companies": [
  {
   "slug": "conf42",
   "name": "Conf42",
   "domain": "conf42.com",
   "url": "https://cfp.fru.dev/organizers/conf42",
   "items": [
    {
     "id": "conf42-prompt-engineering-2026",
     "type": "cfp_deadline",
     "date": "2026-09-28"
    }
   ]
  }
 ]
}

/api/topics

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

/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.

Sources: each event's own call for speakers page, read weekly. Deadlines as the organizers state them; check the call before you submit.

Closing calls by email

Wednesdays: calls for speakers closing in the next two weeks, and the new ones.

Double opt-in. Unsubscribe any time.