{"components":{"responses":{"RateLimited":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too many requests. Retry after the seconds indicated in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"}}}}},"schemas":{"BookSlot":{"properties":{"end":{"format":"date-time","type":"string"},"start":{"format":"date-time","type":"string"}},"type":"object"},"Error":{"properties":{"error":{"description":"Machine-readable error code.","type":"string"},"message":{"description":"Human-readable message.","type":"string"},"retry_after":{"description":"Seconds to wait (rate_limited only).","type":"integer"}},"required":["error","message"],"type":"object"},"NicheSummary":{"properties":{"accent":{"type":"string"},"api_url":{"format":"uri","type":"string"},"icon":{"type":"string"},"label":{"type":"string"},"shortLabel":{"type":"string"},"slug":{"type":"string"},"tagline":{"type":["string","null"]},"url":{"format":"uri","type":"string"}},"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"Static API key configured via SILICON_API_KEYS env. Required for /api/events and /api/webhooks/* when enabled.","scheme":"bearer","type":"http"}}},"info":{"contact":{"email":"silicon@unlikefraction.com"},"description":"Niche deck catalog + discovery-call booking flow for teamofsilicons.com. All endpoints return JSON. Errors use { error: <code>, message: <string> }. Rate limit: 120 req/min per IP on /api/book/* and /api/niches/*; 429 carries a Retry-After header.","title":"Team of Silicons \u2014 Public API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/book/cancel":{"post":{"operationId":"cancelBooking","requestBody":{"content":{"application/json":{"schema":{"properties":{"email":{"format":"email","type":"string"}},"required":["email"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Cancellation recorded; booking.cancelled webhook fires."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"No active booking found."},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Cancel the most recent confirmed booking for an email"}},"/api/book/confirm":{"post":{"operationId":"confirmSlot","parameters":[{"description":"Replay the cached response if this key was seen in the last 24h.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":128,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"additional_email":{"format":"email","type":"string"},"email":{"format":"email","type":"string"},"from_niche":{"enum":["finance","legal","marketing-sales","operations","product"],"type":"string"},"note":{"type":"string"},"slot_end_iso":{"format":"date-time","type":"string"},"slot_iso":{"format":"date-time","type":"string"},"timezone":{"type":"string"}},"required":["email","slot_iso","slot_end_iso"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Booking confirmed (Idempotent-Replay: true on cached hits)."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid input."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Slot taken \u2014 refresh + pick again."},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error."}},"summary":"Confirm a discovery-call slot"}},"/api/book/slots":{"post":{"operationId":"requestSlots","requestBody":{"content":{"application/json":{"schema":{"properties":{"email":{"format":"email","type":"string"},"timezone":{"default":"UTC","description":"IANA name.","type":"string"}},"required":["email"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Slots offered."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid email."},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error."}},"summary":"Request available discovery-call slots"}},"/api/events":{"get":{"operationId":"streamEvents","responses":{"200":{"content":{"text/event-stream":{}},"description":"text/event-stream; events: booking.confirmed, booking.cancelled."},"401":{"description":"Missing or invalid token."}},"security":[{"bearerAuth":[]}],"summary":"SSE event stream of booking events"}},"/api/niches":{"get":{"operationId":"listNiches","parameters":[{"description":"Substring filter.","in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NicheSummary"},"type":"array"},"limit":{"type":"integer"},"query":{"type":["string","null"]},"total":{"type":"integer"}},"type":"object"}}},"description":"List of niches."},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"List department decks"}},"/api/niches/{slug}":{"get":{"operationId":"getNiche","parameters":[{"in":"path","name":"slug","required":true,"schema":{"enum":["finance","legal","marketing-sales","operations","product"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"type":"object"}},"type":"object"}}},"description":"Niche payload."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unknown slug."},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"Fetch one deck's full payload"}},"/api/webhooks":{"get":{"operationId":"listWebhooks","responses":{"200":{"description":"Subscriber list (secrets redacted)."},"401":{"description":"Missing or invalid token."}},"security":[{"bearerAuth":[]}],"summary":"List webhook subscribers"},"post":{"operationId":"createWebhook","requestBody":{"content":{"application/json":{"schema":{"properties":{"events":{"default":["*"],"example":["booking.confirmed","booking.cancelled"],"items":{"type":"string"},"type":"array"},"secret":{"description":"Optional HMAC-SHA256 signing key. Auto-generated if absent and only returned at creation.","type":"string"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"201":{"description":"Subscriber created. The body is the only place the secret is returned."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid URL or events array."},"401":{"description":"Missing or invalid token."}},"security":[{"bearerAuth":[]}],"summary":"Register a webhook subscriber"}},"/api/webhooks/{id}":{"delete":{"operationId":"deleteWebhook","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted."},"401":{"description":"Missing or invalid token."},"404":{"description":"Unknown subscription."}},"security":[{"bearerAuth":[]}],"summary":"Delete a webhook subscriber"}},"/api/workflows/book":{"post":{"operationId":"workflowBook","requestBody":{"content":{"application/json":{"schema":{"properties":{"additional_email":{"format":"email","type":"string"},"email":{"format":"email","type":"string"},"from_niche":{"enum":["finance","legal","marketing-sales","operations","product"],"type":"string"},"note":{"type":"string"},"prefer_iso":{"description":"Pick the first slot whose start >= this.","format":"date-time","type":"string"},"timezone":{"default":"UTC","type":"string"}},"required":["email"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Booking created."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"No availability in the offered window."},"429":{"$ref":"#/components/responses/RateLimited"}},"summary":"End-to-end booking \u2014 slots, pick, confirm in one call"}},"/mcp":{"post":{"description":"Methods: initialize, tools/list, tools/call, ping. See /.well-known/mcp.json for discovery.","operationId":"mcpRpc","requestBody":{"content":{"application/json":{"schema":{"properties":{"id":{},"jsonrpc":{"const":"2.0","type":"string"},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"],"type":"object"}}},"required":true},"responses":{"200":{"description":"JSON-RPC 2.0 response."}},"summary":"MCP JSON-RPC 2.0 endpoint"}}},"servers":[{"url":"https://teamofsilicons.com"}]}
