{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://oneagentaday.com/api/schema.json","title":"One Agent a Day catalog","description":"Public contract for the daily agent catalog. GET /api/agents.json returns a Catalog. GET /api/agents/{slug}.json returns an AgentDocument. Adding an agent is a new Markdown file; this schema describes the published JSON, not the file frontmatter.","$defs":{"AgentSummary":{"type":"object","additionalProperties":false,"required":["title","slug","date","issue","category","tags","difficulty","runtimes","excerpt","problem","url","apiUrl","promptUrl","license"],"properties":{"title":{"type":"string"},"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"type":"string","format":"date"},"issue":{"type":"integer","minimum":1},"category":{"type":"string","enum":["coding","gaming","streaming","productivity","research","marketing","finance","learning","fun","devtools","automation","social"]},"categoryLabel":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"difficulty":{"type":"string","enum":["easy","medium","advanced"]},"runtimes":{"type":"array","items":{"type":"string"}},"excerpt":{"type":"string"},"problem":{"type":"string"},"videoUrl":{"type":["string","null"],"format":"uri"},"url":{"type":"string","format":"uri"},"apiUrl":{"type":"string","format":"uri"},"promptUrl":{"type":"string","format":"uri"},"configUrl":{"type":["string","null"],"format":"uri"},"configFilename":{"type":["string","null"]},"license":{"type":"string"}}},"AgentDocument":{"type":"object","additionalProperties":false,"required":["title","slug","date","issue","category","tags","difficulty","runtimes","excerpt","problem","url","apiUrl","promptUrl","license","howItWorks","steps","demo","prompt","categoryLabel"],"properties":{"title":{"type":"string"},"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"type":"string","format":"date"},"issue":{"type":"integer","minimum":1},"category":{"type":"string","enum":["coding","gaming","streaming","productivity","research","marketing","finance","learning","fun","devtools","automation","social"]},"categoryLabel":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"difficulty":{"type":"string","enum":["easy","medium","advanced"]},"runtimes":{"type":"array","items":{"type":"string"}},"excerpt":{"type":"string"},"problem":{"type":"string"},"videoUrl":{"type":["string","null"],"format":"uri"},"url":{"type":"string","format":"uri"},"apiUrl":{"type":"string","format":"uri"},"promptUrl":{"type":"string","format":"uri"},"configUrl":{"type":["string","null"],"format":"uri"},"configFilename":{"type":["string","null"]},"license":{"type":"string"},"howItWorks":{"type":"string","description":"Markdown explanation of how to use the agent."},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","text"],"properties":{"name":{"type":"string"},"text":{"type":"string"}}}},"demo":{"type":"array","description":"Beats for the 30-second sample run, in seconds from 0.","items":{"type":"object","additionalProperties":false,"required":["second","label","detail"],"properties":{"second":{"type":"integer","minimum":0,"maximum":29},"label":{"type":"string"},"detail":{"type":"string"}}}},"sampleInput":{"type":["string","null"]},"prompt":{"type":"string","description":"The full agent prompt. Free to use under the catalog license."},"config":{"type":["string","null"],"description":"Pretty-printed JSON config, when the agent has one."}}},"Catalog":{"type":"object","additionalProperties":false,"required":["name","version","url","updated","count","categories","tags","months","schema","agents"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"version":{"type":"string"},"url":{"type":"string","format":"uri"},"updated":{"type":["string","null"],"format":"date"},"count":{"type":"integer","minimum":0},"license":{"type":"string"},"licenseUrl":{"type":"string","format":"uri"},"categories":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label","description","url","count"],"properties":{"id":{"type":"string","enum":["coding","gaming","streaming","productivity","research","marketing","finance","learning","fun","devtools","automation","social"]},"label":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"count":{"type":"integer","minimum":0}}}},"tags":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["tag","count","url"],"properties":{"tag":{"type":"string"},"count":{"type":"integer","minimum":1},"url":{"type":"string","format":"uri"}}}},"months":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["month","count","url"],"properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"count":{"type":"integer","minimum":1},"url":{"type":"string","format":"uri"}}}},"schema":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"mcp":{"type":"string","format":"uri"},"llmsTxt":{"type":"string","format":"uri"},"feed":{"type":"string","format":"uri"},"agents":{"type":"array","items":{"$ref":"#/$defs/AgentSummary"}}}},"AgentEnvelope":{"type":"object","additionalProperties":false,"required":["version","schema","agent"],"properties":{"version":{"type":"string"},"schema":{"type":"string","format":"uri"},"agent":{"$ref":"#/$defs/AgentDocument"}}},"SubscribeRequest":{"type":"object","additionalProperties":false,"required":["email","list"],"properties":{"email":{"type":"string","format":"email"},"list":{"type":"string","enum":["daily","pro","custom"]},"note":{"type":"string","maxLength":2000},"company":{"type":"string","description":"Honeypot. Leave empty."}}},"FeedbackRequest":{"type":"object","additionalProperties":false,"required":["slug","vote"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"vote":{"type":"string","enum":["yes","no"]},"note":{"type":"string","maxLength":500},"company":{"type":"string","description":"Honeypot. Leave empty."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}