{"openapi":"3.0.0","info":{"title":"CredVault API","version":"1.0.0","description":"Complete REST API documentation for CredVault platform. Test endpoints interactively using the \"Try it out\" feature.","contact":{"name":"CredVault Support","url":"https://credvault.net/support","email":"support@credvault.net"}},"servers":[{"url":"https://credvault.net","description":"CredVault"},{"url":"http://localhost:5000","description":"Local development"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API Key for server-to-server authentication"},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT Bearer token for authenticated users"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string","description":"Error message"},"code":{"type":"string","description":"Error code"}}},"User":{"type":"object","properties":{"_id":{"type":"string","description":"User ID"},"email":{"type":"string","description":"User email"},"name":{"type":"string","description":"User full name"},"createdAt":{"type":"string","format":"date-time"}}},"Cluster":{"type":"object","properties":{"_id":{"type":"string","description":"Cluster ID"},"name":{"type":"string","description":"Cluster name"},"region":{"type":"string","description":"Geographic region"},"tier":{"type":"string","enum":["free","starter","team","enterprise"],"description":"Cluster tier"},"status":{"type":"string","enum":["creating","running","paused","deleting"],"description":"Cluster status"}}},"BillingAccount":{"type":"object","properties":{"_id":{"type":"string"},"plan":{"type":"string","enum":["free","starter","team","payg"],"description":"Current plan"},"credits":{"type":"number","description":"Available credits in cents"},"trialActive":{"type":"boolean","description":"Whether trial is active"},"trialExpiresAt":{"type":"string","format":"date-time"},"status":{"type":"string","description":"Account status"}}}}},"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"paths":{"/api/v1/data/{collection}":{"get":{"tags":["Data"],"summary":"Query documents in a collection","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"},"description":"Collection name"},{"in":"query","name":"limit","schema":{"type":"integer","default":50}},{"in":"query","name":"skip","schema":{"type":"integer","default":0}},{"in":"query","name":"sort","schema":{"type":"string"},"description":"Sort field (prefix with - for descending)"}],"responses":{"200":{"description":"Documents matching the query"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Insufficient permission (needs data:read)"}}},"post":{"tags":["Data"],"summary":"Insert a document","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{"name":"Ada Lovelace","email":"ada@example.com"}}}}},"responses":{"201":{"description":"Document created"},"403":{"description":"Insufficient permission (needs data:write)"}}}},"/api/v1/data/{collection}/{id}":{"get":{"tags":["Data"],"summary":"Get a single document by id","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document found"},"404":{"description":"Document not found"}}},"put":{"tags":["Data"],"summary":"Update a document by id","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Document updated"},"404":{"description":"Document not found"}}},"delete":{"tags":["Data"],"summary":"Delete a document by id","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document deleted"},"404":{"description":"Document not found"}}}},"/api/v1/data/sql":{"post":{"tags":["SQL"],"summary":"Run a LakeVault SQL query against a collection","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sql"],"properties":{"sql":{"type":"string","example":"SELECT * FROM users WHERE status = 'active' LIMIT 10"}}}}}},"responses":{"200":{"description":"Query results"},"400":{"description":"Invalid SQL or translation error"}}}},"/api/v1/data/batch":{"post":{"tags":["Batch"],"summary":"Execute multiple data operations in one request","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operations"],"properties":{"operations":{"type":"array","items":{"type":"object"}},"transaction":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"Batch completed"},"400":{"description":"Invalid batch payload"}}}},"/api/v1/data/webhooks":{"post":{"tags":["Webhooks"],"summary":"Create a webhook subscription","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"},"example":["document.created","document.updated"]},"collection":{"type":"string"},"secret":{"type":"string"}}}}}},"responses":{"201":{"description":"Webhook created"},"403":{"description":"Needs webhooks:manage"}}},"get":{"tags":["Webhooks"],"summary":"List webhooks for the tenant","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Webhook list"}}}},"/api/v1/data/webhooks/{webhookId}":{"delete":{"tags":["Webhooks"],"summary":"Delete a webhook subscription","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"parameters":[{"in":"path","name":"webhookId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook deleted"},"404":{"description":"Webhook not found"}}}}},"tags":[{"name":"Data","description":"Public collection CRUD and query API (API key required)"},{"name":"SQL","description":"LakeVault SQL-to-Mongo query helper"},{"name":"Batch","description":"Multi-operation requests"},{"name":"Webhooks","description":"Outbound webhook subscriptions for document events"}]}