{"agent_guide":"https://agent.vibemd.ru/agent.md","auth":{"account_token":"Authorization: Bearer vmd_u_\u003c...\u003e, the user's own credential: creates and lists their projects","platform_token":"Authorization: Bearer \u003cPLATFORM_TOKEN\u003e, held by the operator of the service; issues accounts and nothing else","project_api_key":"Authorization: Bearer \u003ctoken\u003e  (or X-API-Key: \u003ctoken\u003e)","site_user":"X-User-Token: \u003ctoken from /v1/auth/login\u003e, sent alongside the project key; an owner then sees everything, anyone else is bounded by each entity's auth_access"},"deploy":{"build_root":"index.html must be at the archive root; a single wrapping directory is stripped automatically","formats":["tar.gz","zip"],"injected":"served HTML gets \u003cscript\u003ewindow.VIBEMD={apiUrl,publicKey,projectId,slug}\u003c/script\u003e, so the build never hardcodes them","upload":"POST the archive as the raw request body: tar czf - -C ./dist . | curl --data-binary @- ..."},"endpoints":[{"auth":"platform token","description":"issue an account and its token: {\"email\", \"name\", \"max_projects\"}","method":"POST","path":"/v1/accounts"},{"auth":"platform token","description":"list accounts, revoked ones included","method":"GET","path":"/v1/accounts"},{"auth":"platform token","description":"revoke an account's token; ?purge=true deletes it, and fails while it still owns projects","method":"DELETE","path":"/v1/accounts/{id}"},{"auth":"account token","description":"create a project; returns an admin and a public API key","method":"POST","path":"/v1/projects"},{"auth":"account token","description":"list the projects this account owns","method":"GET","path":"/v1/projects"},{"auth":"account token","description":"issue a key for a project you own: {\"tier\": \"admin|public\"} — how a lost admin key is replaced","method":"POST","path":"/v1/projects/{id}/keys"},{"auth":"admin key","description":"current project and its limits","method":"GET","path":"/v1/project"},{"auth":"admin key","description":"update the project: {\"name\"} to rename, {\"auth_registration\": \"open|closed\"} to control sign-up","method":"PATCH","path":"/v1/project"},{"auth":"admin key","description":"list API keys","method":"GET","path":"/v1/project/keys"},{"auth":"admin key","description":"issue an API key: {\"tier\": \"admin|public\"}","method":"POST","path":"/v1/project/keys"},{"auth":"admin key","description":"replace a key and revoke the old one","method":"POST","path":"/v1/project/keys/{id}/rotate"},{"auth":"admin key","description":"revoke an API key","method":"DELETE","path":"/v1/project/keys/{id}"},{"auth":"admin key","description":"list declared entities","method":"GET","path":"/v1/entities"},{"auth":"admin key","description":"declare an entity: {\"name\", \"fields\": [{\"name\", \"type\", \"required\", \"default\"}], \"public_access\"}","method":"POST","path":"/v1/entities"},{"auth":"admin key","description":"read one entity schema","method":"GET","path":"/v1/entities/{entity}"},{"auth":"admin key","description":"replace the entity's field list; returns a diff of what changed","method":"PUT","path":"/v1/entities/{entity}"},{"auth":"admin key","description":"delete an entity; ?force=true to drop its records too","method":"DELETE","path":"/v1/entities/{entity}"},{"auth":"any key","description":"sign a visitor up: {\"email\", \"password\"}; needs auth_registration=open unless called with an admin key","method":"POST","path":"/v1/auth/register"},{"auth":"any key","description":"sign in: {\"email\", \"password\"} -\u003e session token for the X-User-Token header","method":"POST","path":"/v1/auth/login"},{"auth":"any key + X-User-Token","description":"the signed-in user behind the token","method":"GET","path":"/v1/auth/me"},{"auth":"admin key","description":"list the site's end users","method":"GET","path":"/v1/users"},{"auth":"admin key","description":"create one: {\"email\", \"password\", \"owner\"}; an owner reads and writes everything through the site","method":"POST","path":"/v1/users"},{"auth":"admin key","description":"set a user's password","method":"PUT","path":"/v1/users/{id}/password"},{"auth":"admin key","description":"delete a user; the last owner cannot be removed","method":"DELETE","path":"/v1/users/{id}"},{"auth":"any key","description":"list records: ?filter.\u003cfield\u003e[.\u003cop\u003e]=\u003cvalue\u003e\u0026sort=-created_at\u0026limit=25\u0026offset=0","method":"GET","path":"/v1/entities/{entity}/records"},{"auth":"any key","description":"create a record from a flat JSON object","method":"POST","path":"/v1/entities/{entity}/records"},{"auth":"any key","description":"read one record","method":"GET","path":"/v1/entities/{entity}/records/{id}"},{"auth":"any key","description":"replace a record; required fields must be present","method":"PUT","path":"/v1/entities/{entity}/records/{id}"},{"auth":"any key","description":"update the supplied fields only","method":"PATCH","path":"/v1/entities/{entity}/records/{id}"},{"auth":"any key","description":"delete a record","method":"DELETE","path":"/v1/entities/{entity}/records/{id}"},{"auth":"admin key","description":"upload a build as a raw tar.gz or zip body; goes live unless ?activate=false","method":"POST","path":"/v1/deployments"},{"auth":"admin key","description":"list versions, newest first","method":"GET","path":"/v1/deployments"},{"auth":"admin key","description":"one version and the files it contains","method":"GET","path":"/v1/deployments/{version}"},{"auth":"admin key","description":"switch the live version; instant rollback","method":"POST","path":"/v1/deployments/{version}/activate"},{"auth":"admin key","description":"delete a version and its files","method":"DELETE","path":"/v1/deployments/{version}"}],"errors":"every failure returns {\"error\": {\"code\", \"message\", \"details\": [{\"field\", \"code\", \"message\", \"expected\", \"got\"}], \"hint\"}}","field_types":["string","number","boolean","date","json"],"filter_operators":["eq","ne","gt","gte","lt","lte","contains","in"],"public_access":"per entity: none | read | append | write — what a browser-embedded public key may do with its records. Use \"append\" for forms: it allows creating records without letting a visitor read what others submitted","service":"vibemd"}