{"openapi":"3.1.0","info":{"title":"PlatphormNews Kanban API","version":"1.0.0","description":"API for the PlatphormNews Kanban board, including board state management, automation, calendar sync, and MCP integration.","contact":{"name":"PlatphormNews Support","url":"https://platphormnews.com/support","email":"hello@platphormnews.com"},"license":{"name":"CC-BY-4.0","url":"https://creativecommons.org/licenses/by/4.0/"}},"servers":[{"url":"https://kanban.platphormnews.com","description":"Production (kanban.platphormnews.com)"}],"tags":[{"name":"board","description":"Kanban board state management"},{"name":"tasks","description":"Task operations"},{"name":"projects","description":"Multi-project support — each project has its own board state"},{"name":"activities","description":"Activity log"},{"name":"calendar","description":"Calendar sync with calendar.platphormnews.com"},{"name":"onboard","description":"Onboarding flow integration with onboard.platphormnews.com"},{"name":"events","description":"Style events from jules.platphormnews.com"},{"name":"health","description":"Service health"},{"name":"mcp","description":"AI Model Context Protocol integration"},{"name":"webhooks","description":"Inbound event webhooks"}],"components":{"securitySchemes":{"WebhookSignature":{"type":"apiKey","in":"header","name":"X-Webhook-Signature","description":"HMAC-SHA256 signature of the request body."},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"PLATPHORM_API_KEY","description":"Bearer token authentication using PLATPHORM_API_KEY."},"PlatphormApiKey":{"type":"apiKey","in":"header","name":"X-PlatPhorm-API-Key","description":"Shared PlatPhormNews API key for protected Kanban mutations."}},"schemas":{"WebhookPayload":{"type":"object","required":["id","type","source","ts","data"],"properties":{"id":{"type":"string","example":"evt_001"},"type":{"type":"string","enum":["mcp.ping","mcp.register","mcp.deregister","calendar.event.created","calendar.event.updated","calendar.event.deleted","kanban.task.created","kanban.task.updated","kanban.task.deleted","kanban.task.moved","job.applied","fortune.told","fashion.trend","network.alert"]},"source":{"type":"string","format":"uri","example":"https://mcp.platphormnews.com"},"ts":{"type":"string","format":"date-time"},"data":{"type":"object","additionalProperties":true}}},"Column":{"type":"object","required":["id","title","tasks"],"properties":{"id":{"type":"string","example":"col-1"},"title":{"type":"string","example":"In Progress"},"tasks":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"color":{"type":"string","example":"bg-blue-50"}}},"Task":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"dueDate":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"},"customFields":{"type":"array","items":{"type":"object"}}}},"Activity":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"message":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"source":{"type":"string"},"meta":{"type":"object"}}},"CalendarEvent":{"type":"object","required":["id","title","start"],"properties":{"id":{"type":"string","example":"evt-cal-1"},"title":{"type":"string","example":"Sprint Review"},"start":{"type":"string","format":"date-time","example":"2026-03-01T14:00:00Z"},"end":{"type":"string","format":"date-time","example":"2026-03-01T15:00:00Z","nullable":true},"calendarId":{"type":"string","example":"default"},"description":{"type":"string","nullable":true},"taskId":{"type":"string","description":"Linked Kanban task ID","nullable":true},"url":{"type":"string","format":"uri","nullable":true}}},"StyleEvent":{"type":"object","required":["id","title","start"],"properties":{"id":{"type":"string","example":"style-evt-1"},"title":{"type":"string","example":"Spring Fashion Week"},"start":{"type":"string","format":"date-time","example":"2026-03-15T09:00:00Z"},"end":{"type":"string","format":"date-time","example":"2026-03-22T18:00:00Z","nullable":true},"category":{"type":"string","example":"fashion","nullable":true},"description":{"type":"string","nullable":true},"imageUrl":{"type":"string","format":"uri","nullable":true},"source":{"type":"string","format":"uri","example":"https://jules.platphormnews.com"},"taskId":{"type":"string","description":"Linked Kanban task ID","nullable":true}}}},"parameters":{"projectId":{"name":"projectId","in":"query","required":false,"description":"Project identifier. Defaults to 'default'. Supported values: default, engineering, marketing, design.","schema":{"type":"string","default":"default","enum":["default","engineering","marketing","design"],"example":"engineering"}}}},"paths":{"/api/v1/board":{"get":{"tags":["board"],"summary":"Get shared board state","description":"Returns the current board state (columns + rules + etag) for the given project. Response includes ETag and optional X-Board-Signature.","operationId":"getBoard","parameters":[{"$ref":"#/components/parameters/projectId"}],"responses":{"200":{"description":"Current board state","content":{"application/json":{"schema":{"type":"object","required":["version","columns","rules","updatedAt","etag"],"properties":{"version":{"type":"integer","example":1},"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"rules":{"type":"array","items":{"type":"object"}},"activities":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}},"updatedAt":{"type":"string","format":"date-time"},"etag":{"type":"string"}}}}}},"204":{"description":"No board state saved yet for this project"}}},"put":{"tags":["board"],"summary":"Save board state","description":"Replaces the shared board state for the given project.","operationId":"putBoard","parameters":[{"$ref":"#/components/parameters/projectId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["columns","rules"],"properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"rules":{"type":"array","items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Board state saved"}}}},"/api/v1/activities":{"get":{"tags":["activities"],"summary":"Get activity log","description":"Returns the recent activity log for the board.","operationId":"getActivities","responses":{"200":{"description":"Activity log","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}}}}}}},"/api/v1/tasks":{"post":{"tags":["tasks"],"summary":"Create a task","description":"Creates a new task in the first available column (or specified column) of the given project.","operationId":"createTask","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"columnId":{"type":"string"},"dueDate":{"type":"string","format":"date-time"},"customFields":{"type":"array","items":{"type":"object"}},"projectId":{"type":"string","default":"default","enum":["default","engineering","marketing","design"],"description":"Project identifier. Defaults to 'default'. Supported values: default, engineering, marketing, design."}}}}}},"responses":{"201":{"description":"Task created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"401":{"description":"Unauthorized"},"503":{"description":"Board not initialized"}}}},"/api/v1/tasks/{id}":{"delete":{"tags":["tasks"],"summary":"Delete a task","description":"Permanently removes a task from the board.","operationId":"deleteTask","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/projectId"}],"responses":{"200":{"description":"Task deleted"},"401":{"description":"Unauthorized"},"404":{"description":"Task not found"}}},"patch":{"tags":["tasks"],"summary":"Update a task","description":"Updates task properties or moves it to a different column.","operationId":"updateTask","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/projectId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"targetColumnId":{"type":"string"},"dueDate":{"type":"string","format":"date-time"}}}}}},"responses":{"200":{"description":"Task updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"401":{"description":"Unauthorized"},"404":{"description":"Task not found"}}}},"/api/v1/health":{"get":{"tags":["health"],"summary":"Service health check","operationId":"getHealth","responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"service":{"type":"string","example":"PlatphormNews Kanban"}}}}}}}}},"/api/mcp":{"get":{"tags":["mcp"],"summary":"MCP capability manifest","operationId":"getMcpManifest","responses":{"200":{"description":"MCP manifest"}}},"post":{"tags":["mcp"],"summary":"Handle inbound MCP events","operationId":"postMcpEvent","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action"],"properties":{"action":{"type":"string"}}}}}},"responses":{"200":{"description":"Action performed"}}}},"/api/v1/calendar":{"get":{"tags":["calendar"],"summary":"Fetch calendar events","description":"Proxies calendar event queries to calendar.platphormnews.com. Supports date-range filtering and calendar scoping.","operationId":"getCalendarEvents","parameters":[{"name":"from","in":"query","required":false,"description":"Start date for the event range (ISO 8601 date). Defaults to today.","schema":{"type":"string","format":"date","example":"2026-03-01"}},{"name":"to","in":"query","required":false,"description":"End date for the event range (ISO 8601 date). Defaults to 30 days from today.","schema":{"type":"string","format":"date","example":"2026-03-31"}},{"name":"calendarId","in":"query","required":false,"description":"Calendar identifier. Defaults to 'default'.","schema":{"type":"string","default":"default","example":"my-cal"}}],"responses":{"200":{"description":"Calendar events merged with persistent public fallback","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CalendarEvent"}},"meta":{"type":"object","properties":{"source":{"type":"array","items":{"type":"string"}},"from":{"type":"string"},"to":{"type":"string"},"status":{"type":"integer","nullable":true},"publicFallback":{"type":"boolean"}}},"_info":{"type":"string"}}}}}}}},"post":{"tags":["calendar"],"summary":"Create a calendar event","description":"Creates a new event on calendar.platphormnews.com, optionally linked to a Kanban task.","operationId":"createCalendarEvent","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarEvent"}}}},"responses":{"201":{"description":"Event persisted to local public calendar, with optional upstream sync result","content":{"application/json":{"schema":{"type":"object","required":["data","upstream"],"properties":{"data":{"$ref":"#/components/schemas/CalendarEvent"},"upstream":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":"integer"}}}}}}}},"400":{"description":"Invalid request body"}}}},"/api/v1/calendar/projects":{"get":{"tags":["calendar"],"summary":"Fetch calendar projects","description":"Returns calendar projects from upstream merged with persistent public fallback projects.","operationId":"getCalendarProjects","parameters":[{"name":"includePrivate","in":"query","required":false,"schema":{"type":"string","example":"true"}}],"responses":{"200":{"description":"Calendar projects with fallback","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}},"meta":{"type":"object","additionalProperties":true}}}}}}}}},"/api/v1/calendar/mcp":{"get":{"tags":["calendar","mcp"],"summary":"Fetch calendar MCP manifest","operationId":"getCalendarMcpManifest","responses":{"200":{"description":"Calendar MCP manifest or fallback"}}},"post":{"tags":["calendar","mcp"],"summary":"Forward calendar MCP tool/action request","operationId":"postCalendarMcpAction","responses":{"200":{"description":"Calendar MCP response"}}}},"/api/v1/onboard":{"get":{"tags":["onboard"],"summary":"Fetch onboarding flows/projects","description":"Proxies onboard.platphormnews.com with resilient local fallback data.","operationId":"getOnboardFlows","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"active","enum":["active","draft","archived"]}}],"responses":{"200":{"description":"Onboard flow list","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}},"meta":{"type":"object","additionalProperties":true},"_info":{"type":"string"}}}}}}}},"post":{"tags":["onboard"],"summary":"Create/sync onboarding flow","operationId":"postOnboardFlow","responses":{"201":{"description":"Accepted and synced (or queued)"},"400":{"description":"Invalid request body"}}}},"/api/v1/events":{"get":{"tags":["events"],"summary":"Fetch style events","description":"Proxies style and fashion event queries to jules.platphormnews.com. Supports date-range and category filtering.","operationId":"getStyleEvents","parameters":[{"name":"from","in":"query","required":false,"description":"Start date for the event range (ISO 8601 date). Defaults to today.","schema":{"type":"string","format":"date","example":"2026-03-01"}},{"name":"to","in":"query","required":false,"description":"End date for the event range (ISO 8601 date). Defaults to 30 days from today.","schema":{"type":"string","format":"date","example":"2026-03-31"}},{"name":"category","in":"query","required":false,"description":"Filter by event category (e.g. 'fashion', 'beauty', 'lifestyle').","schema":{"type":"string","example":"fashion"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of events to return. Defaults to 50.","schema":{"type":"integer","default":50,"example":20}}],"responses":{"200":{"description":"Style events (or empty fallback if upstream is unreachable)","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Upstream response forwarded as-is","additionalProperties":true},{"type":"object","description":"Fallback envelope when upstream is unavailable","required":["data","meta","_info"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StyleEvent"}},"meta":{"type":"object","properties":{"source":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"status":{"type":"integer","nullable":true}}},"_info":{"type":"string"}}}]}}}}}},"post":{"tags":["events"],"summary":"Create a style event","description":"Creates a new style event on jules.platphormnews.com, optionally linked to a Kanban task.","operationId":"createStyleEvent","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleEvent"}}}},"responses":{"201":{"description":"Event created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StyleEvent"}}}},"400":{"description":"Invalid request body"},"503":{"description":"jules.platphormnews.com is unreachable"}}}},"/api/webhooks/platphormnews":{"get":{"tags":["webhooks"],"summary":"Webhook endpoint discovery","operationId":"getWebhookInfo","responses":{"200":{"description":"Webhook info"}}},"post":{"tags":["webhooks"],"summary":"Receive signed webhook event","operationId":"receiveWebhook","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPayload"}}}},"responses":{"200":{"description":"Event handled"}}}},"/api/v1/status":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/storage/status":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/boards":{"get":{"tags":["boards"],"summary":"List canonical boards","responses":{"200":{"description":"Boards with URLs and confirmation endpoints"}}},"post":{"tags":["boards"],"summary":"Create board","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"responses":{"201":{"description":"Board created"}}}},"/api/v1/boards/{id}":{"get":{"tags":["boards"],"summary":"Get canonical board object","responses":{"200":{"description":"Board object with URLs, cards, and confirmation metadata"}}},"put":{"tags":["boards"],"summary":"Rename or replace board state","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"responses":{"200":{"description":"Board updated"},"401":{"description":"Protected mutation requires PLATPHORM_API_KEY"}}},"delete":{"tags":["boards"],"summary":"Delete a custom board","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"responses":{"200":{"description":"Custom board deleted"},"422":{"description":"Built-in boards cannot be deleted"}}}},"/api/v1/boards/{id}/confirm":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/boards/{id}/cards":{"get":{"tags":["cards"],"summary":"List cards for a board","responses":{"200":{"description":"Board cards"}}},"post":{"tags":["cards"],"summary":"Create card for a board","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"responses":{"201":{"description":"Card created"},"401":{"description":"Protected mutation requires PLATPHORM_API_KEY"}}}},"/api/v1/cards":{"get":{"tags":["cards"],"summary":"List cards alias","responses":{"200":{"description":"Cards"}}},"post":{"tags":["cards"],"summary":"Create card alias","security":[{"BearerAuth":[]},{"PlatphormApiKey":[]}],"responses":{"201":{"description":"Card created"}}}},"/api/v1/cards/{id}":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/cards/{id}/confirm":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/cards/{id}/move":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/cards/{id}/calendar":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/cards/{id}/docs":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/cards/{id}/evals":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/cards/{id}/browserops":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/cards/{id}/claws":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/automations":{"get":{"tags":["automations"],"summary":"List automations","responses":{"200":{"description":"Automations and templates"}}},"post":{"tags":["automations"],"summary":"Create public-safe automation","responses":{"201":{"description":"Automation created"}}}},"/api/v1/automations/{id}":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/automations/{id}/confirm":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/automations/{id}/preview":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/automations/{id}/run":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/automations/{id}/runs":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/automations/{id}/runs/{runId}":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/handoffs/{id}/confirm":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/integrations/status":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/v1/import/preview":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/import/json":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/import/url":{"post":{"tags":["kanban"],"summary":"Public-safe Kanban action or preview","responses":{"200":{"description":"Action completed or returned current object state"},"202":{"description":"Preview, pending, or degraded action state"},"401":{"description":"PLATPHORM_API_KEY required for protected mutation"}}}},"/api/v1/export/json":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/web/status":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/web/manifest":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/web/scorecard":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/web/fingerprints":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/provenance/lookup":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}},"/api/provenance/verify":{"get":{"tags":["kanban"],"summary":"Public-safe Kanban object route","responses":{"200":{"description":"Object metadata or status envelope"}}}}},"x-network":{"parent":"https://platphormnews.com","mcp_hub":"https://mcp.platphormnews.com/api/register","calendar":"https://calendar.platphormnews.com","calendar_api":"https://calendar.platphormnews.com/api","calendar_events":"https://calendar.platphormnews.com/api/events","onboard":"https://onboard.platphormnews.com/api","events":"https://jules.platphormnews.com/api","jobs":"https://jobs.platphormnews.com/api/docs","claws":"https://claws.platphormnews.com","claws_mcp":"https://claws.platphormnews.com/api/mcp","keys":"https://keys.platphormnews.com/api/docs"}}