{"openapi":"3.1.0","info":{"title":"OneLifeVibe Platform API","version":"1.0.0","summary":"Bi-directional integration with the nine OneLifeVibe worlds.","description":"Create a client, get approved, mint a key in the console."},"servers":[{"url":"https://onelifevibe.com/api/platform/v1"}],"security":[{"bearer":[]},{"apiKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"olvp_…","description":"API key created in the console."},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"},"details":{}},"required":["code","message"]}},"required":["error"]},"Event":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"world":{"type":"string"},"subject":{"type":["string","null"]},"origin":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}}}},"paths":{"/":{"get":{"summary":"Discovery","description":"Unauthenticated description of the API, scopes and endpoints.","tags":["meta"],"security":[],"responses":{"200":{"description":"OK"}}}},"/health":{"get":{"summary":"Health","description":"Liveness plus which dependencies are configured.","tags":["meta"],"security":[],"responses":{"200":{"description":"OK"},"503":{"description":"Database missing"}}}},"/worlds":{"get":{"summary":"List worlds","description":"The nine worlds, their keys, domains and capabilities.","tags":["catalogue"],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}}},"/tools":{"get":{"summary":"List tools","description":"Every invocable tool with its JSON Schema input.","tags":["catalogue"],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}}},"/tools/{name}":{"post":{"summary":"Invoke a tool","description":"Runs one tool as your client. `subject` is reserved and not available yet: it needs the member own access token to exchange, which no consent flow yet provides.","tags":["invoke"],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object"},"subject":{"type":"string","deprecated":true,"description":"Reserved. A world call with `subject` answers 501 subject_not_supported (403 consent_required when no grant exists)."}}}}}},"responses":{"200":{"description":"Tool result"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"404":{"description":"Unknown tool"},"429":{"description":"Rate or quota limit"}}}},"/events":{"get":{"summary":"Poll events","description":"Cursor pagination with `after` (the previous response’s `cursor`).","tags":["events"],"parameters":[{"name":"after","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100}},{"name":"world","in":"query","schema":{"type":"string"}},{"name":"type","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Events"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}}},"/events/{id}":{"get":{"summary":"Get an event","description":"One event by id.","tags":["events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"404":{"description":"Not found"},"429":{"description":"Rate or quota limit"}}}},"/subscriptions":{"get":{"summary":"List subscriptions","description":"Webhook endpoints with their health.","tags":["subscriptions"],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}},"post":{"summary":"Create a subscription","description":"Registers an https endpoint. The signing secret is returned once.","tags":["subscriptions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"topics":{"type":"array","items":{"type":"string"}},"worlds":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}}}}}},"responses":{"201":{"description":"Created"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}}},"/subscriptions/{id}":{"delete":{"summary":"Delete a subscription","description":"Stops deliveries and deletes the endpoint.","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"404":{"description":"Not found"},"429":{"description":"Rate or quota limit"}}}},"/subscriptions/{id}/deliveries":{"get":{"summary":"Delivery log","description":"Per-delivery status, attempts and response code.","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid request"},"401":{"description":"Missing or invalid key"},"403":{"description":"Scope, world or approval problem"},"429":{"description":"Rate or quota limit"}}}},"/ingest":{"post":{"summary":"Publish a world event","description":"Signed by a world key (not a client key). Body `world` is ignored.","tags":["ingest"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["topic","data"],"properties":{"topic":{"type":"string"},"subject":{"type":"string"},"data":{"type":"object"}}}}}},"responses":{"202":{"description":"Accepted"},"401":{"description":"Bad world key"}}}},"/openapi.json":{"get":{"summary":"OpenAPI document","description":"This document.","tags":["meta"],"security":[],"responses":{"200":{"description":"OK"}}}}},"x-tools":36,"x-plans":{"community":{"key":"community","name":"Community","price_cents":0,"interval":null,"rate_limit_per_min":60,"events_per_day":5000,"endpoints":2,"keys":3,"audience":"Approved clients building one integration. Free, forever."},"growth":{"key":"growth","name":"Growth","price_cents":4900,"interval":"month","rate_limit_per_min":300,"events_per_day":100000,"endpoints":10,"keys":10,"audience":"Production integrations with real traffic and several endpoints."},"scale":{"key":"scale","name":"Scale","price_cents":24900,"interval":"month","rate_limit_per_min":1200,"events_per_day":1000000,"endpoints":50,"keys":25,"audience":"Network-wide automation, backfills and high-volume event fan-out."}}}