briq API V1 API

Services and sandboxes for AI agents.

Operations 69

GET /v1/auth/providers Social sign-in providers this deployment offers
GET /v1/me Current user and teams
PATCH /v1/me Update the current user (name)
POST /v1/teams Create a team
PATCH /v1/teams/{id} Rename a team, change the region new briqs run in, or the display currency
DELETE /v1/teams/{id} Delete a team (owner; not personal; no live briqs)
GET /v1/teams/{id}/members Members and pending invitations
PATCH /v1/teams/{id}/members/{userId} Change a member role (owner)
DELETE /v1/teams/{id}/members/{userId} Remove a member, or leave (your own id). Returns the live keys they created, for the team to review: keys are the team’s and stay.
POST /v1/teams/{id}/invites Invite someone by email (owner or admin)
DELETE /v1/teams/{id}/invites/{inviteId} Revoke a pending invitation
GET /v1/invites/{token} Look up an invitation by its link token (no auth)
POST /v1/invites/{token}/accept Join the team an invitation is for (signed in as the invited address)
GET /v1/secrets List the team secrets: names, hosts and where they go. Never a value.
POST /v1/secrets Add a team secret. Briqs name it as { secret: NAME, scope: "team" } and get a placeholder; the credential gateway puts the value in, to these hosts only.
PATCH /v1/secrets/{id} Rotate a team secret, or change its hosts or locations. Session only.
DELETE /v1/secrets/{id} Delete a team secret. Briqs that named it keep a placeholder that opens nothing.
GET /v1/agents Keys and connected MCP clients of the team
PATCH /v1/agents/{id} Rename an agent or change its policy. Session only.
DELETE /v1/agents/{id} Revoke an agent: a key stops working, a connected client loses its tokens. Session only.
GET /v1/connect/client The MCP client asking to connect, as the consent page shows it
POST /v1/connect Approve an MCP client for a team with a policy. The page then accepts the OAuth consent, which binds the client to this grant.
GET /v1/connect/device The device code an agent showed you, and the client it was issued to
POST /v1/connect/device Approve a device code for a team with a policy. The agent polling for it then gets tokens bound to this grant.
POST /v1/connect/device/deny Refuse a device code: the agent polling for it gets access_denied
GET /v1/billing The team's plan, subscription and payment options
POST /v1/billing/checkout Subscribe to a plan (a Checkout), or change or cancel the subscription (the portal)
POST /v1/billing/topup A Checkout to buy credits (euro cents, before tax)
POST /v1/billing/card A Checkout to save a card: pay as you go, charged past the credits
GET /v1/billing/checkout/{id} A Checkout of the team, for the payment page: Stripe's form and what it pays for
POST /v1/billing/checkout/{id}/prepare Who is buying, just before paying: sets the invoice's VAT mention
POST /v1/billing/portal Stripe's billing portal: invoices, payment method, billing details
POST /v1/billing/sync Apply a finished Checkout now, without waiting for the webhook
POST /v1/support Write to the briq team
POST /v1/briqs Run a briq from an image spec or a recipe
GET /v1/briqs List briqs
GET /v1/briqs/{id} Briq status
DELETE /v1/briqs/{id} Destroy a briq
PATCH /v1/briqs/{id} Resize a briq: another size, a bigger volume
POST /v1/briqs/{id}/exec Run a command inside a briq
GET /v1/briqs/{id}/execs List a briq's async execs
GET /v1/briqs/{id}/execs/{execId} Check an async exec
DELETE /v1/briqs/{id}/execs/{execId} Stop an async exec
POST /v1/briqs/{id}/execs/{execId}/input Write to a running exec
GET /v1/briqs/{id}/logs Fetch logs
POST /v1/briqs/{id}/expose Publish a briq on its HTTPS URL
POST /v1/briqs/{id}/stop stop a briq
POST /v1/briqs/{id}/start start a briq
POST /v1/briqs/{id}/sleep Change when a briq goes to sleep
POST /v1/briqs/{id}/fork Fork a briq: a new briq that starts from a copy of its disk
POST /v1/briqs/{id}/files Write a file into a briq (base64, max 1 MB)
PUT /v1/briqs/{id}/files Write a file into a briq, the raw bytes as the body (max 1 MB)
GET /v1/briqs/{id}/files Read a file from a briq (base64)
GET /v1/stacks List stacks
POST /v1/stacks Create a stack
GET /v1/stacks/{id} Get a stack with its briqs
DELETE /v1/stacks/{id} Destroy every briq of a stack
POST /v1/stacks/up Bring a stack up from a stack file (briq.yaml)
POST /v1/stacks/{id}/fork Fork every briq of a stack into a new stack
GET /v1/pricing Prices per size (euro cents per hour) and display exchange rates
GET /v1/recipes List recipes
GET /v1/recipes/{name} Recipe detail
GET /v1/quota What this key may still do today
GET /v1/keys List keys of the team
POST /v1/keys Mint a key. Session only: an API key cannot mint keys.
PATCH /v1/keys/{id} Rename a key or change its policy. Session only.
DELETE /v1/keys/{id} Revoke a key. Session only: a key cannot revoke another.
GET /v1/audit Audit events of the team
GET /v1/usage Daily usage for the team

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/briq-cloud:briq-api-v1-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

briq-cloud-v1-openapi.json Raw ↑
{"openapi":"3.0.0","info":{"title":"briq API","version":"0.0.0","description":"Services and sandboxes for AI agents."},"servers":[{"url":"https://api.briq.cloud"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"bq_live_…"}},"schemas":{"KeyPolicy":{"type":"object","properties":{"maxConcurrentBriqs":{"type":"integer","minimum":0,"default":5},"dailySpendCapCents":{"type":"integer","minimum":0,"default":1000},"allowedSizes":{"type":"array","items":{"type":"string","enum":["nano","small","medium","large"]},"default":["nano","small","medium"]},"allowedRegistries":{"type":"array","items":{"type":"string"},"default":["docker.io","ghcr.io","quay.io"]},"maxSleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","default":"never","description":"The longest sleep this credential may give a briq, \"never\" included (\"never\": no bound of its own; the environment and the plan still apply)"},"expiresAt":{"type":"string","nullable":true,"format":"date-time","default":null}}},"Briq":{"type":"object","properties":{"id":{"type":"string"},"teamId":{"type":"string"},"stackId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"image":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[a-z0-9][a-z0-9._\\/-]*(?::[\\w.-]+)?(?:@sha256:[a-f0-9]{64})?$"},"size":{"type":"string","enum":["nano","small","medium","large"]},"state":{"type":"string","enum":["creating","running","stopping","stopped","sleeping","starting","resizing","destroying","destroyed","error"]},"internalHost":{"type":"string","description":"Its address on the team's private network"},"endpoints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"port":{"type":"integer"},"protocol":{"type":"string","enum":["http","postgres","mysql","redis","mongodb","amqp","bolt","grpc"],"default":"http","description":"http: a URL; a database protocol (postgres, mysql, redis, mongodb, amqp, bolt, grpc): a TCP endpoint, reachable from outside over TLS, url is its address without the password"},"mode":{"type":"string","enum":["public","private"],"description":"public: anyone can open the URL; private: only whoever has the URL, which carries a secret checked before a request reaches the briq"},"url":{"type":"string","format":"uri"}},"required":["id","port","mode","url"]},"description":"Its URL, once published (one at most), and its TCP endpoint, once published"},"ports":{"type":"array","items":{"type":"integer"},"default":[]},"databasePorts":{"type":"array","items":{"type":"object","properties":{"port":{"type":"integer"},"protocol":{"type":"string","enum":["http","postgres","mysql","redis","mongodb","amqp","bolt","grpc"]}},"required":["port","protocol"]},"default":[],"description":"Its recipe's database ports: briq_expose one with its protocol for a TCP endpoint"},"expose":{"type":"integer","nullable":true,"default":null},"env":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":32768},{"type":"object","properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_.-]*$"},"value":{"type":"string","maxLength":32768},"scope":{"type":"string","enum":["boot","team"]},"hosts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":253,"pattern":"^(\\*\\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"},"minItems":1,"maxItems":20},"locations":{"type":"array","items":{"type":"string","enum":["header","body"]},"minItems":1}},"required":["secret"],"additionalProperties":false}]},"default":{},"description":"As declared: plain values, and { secret: NAME } for secrets, whose values never appear"},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","nullable":true,"format":"date-time","description":"When its current run started (its last run, while it is not running)"},"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above)"},"sleepsAt":{"type":"string","nullable":true,"format":"date-time","description":"When it goes to sleep unless it is used before then: every use moves this later. Null when it is not running or never sleeps"},"lastUsedAt":{"type":"string","nullable":true,"format":"date-time"},"costCentsSoFar":{"type":"number","description":"Euro cents billed so far, fractions of a cent included"},"error":{"type":"string","nullable":true},"destroysAt":{"type":"string","nullable":true,"format":"date-time","default":null,"description":"When a briq in error is destroyed automatically; null in any other state"},"stoppedReason":{"type":"string","nullable":true,"enum":["idle","cap","credits","user","provider","exited"],"default":null,"description":"Why it is stopped or sleeping. idle and provider: asleep, the next call or visit wakes it. cap and credits: a limit, asleep again once it has cleared. user and exited: only briq_start runs it again"},"lastExit":{"type":"object","nullable":true,"properties":{"code":{"type":"integer"},"oomKilled":{"type":"boolean"},"at":{"type":"string","format":"date-time"}},"default":null,"required":["code","oomKilled","at"],"description":"The last time its process ended on its own: exit code (128 + n for signal n), whether it ran out of memory, and when"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"bytes":{"type":"integer"}},"required":["path","bytes"]},"default":[],"description":"Its boot files, by path and size; their content is not returned"},"forkedFrom":{"type":"string","nullable":true,"default":null},"volume":{"type":"object","nullable":true,"properties":{"mount":{"type":"string"},"gb":{"type":"integer"}},"default":null,"required":["mount","gb"],"description":"Its volume: where it is mounted and its size in GB; null without one"}},"required":["id","teamId","stackId","name","image","size","state","internalHost","endpoints","createdAt","startedAt","sleep","sleepsAt","lastUsedAt","costCentsSoFar","error"]},"RunResult":{"type":"object","properties":{"briqs":{"type":"array","items":{"$ref":"#/components/schemas/Briq"}},"outputs":{"type":"object","additionalProperties":{"type":"string"},"default":{},"description":"A recipe's connection strings, the secrets briq generated (never ones you passed in), and URL when published"},"recipe":{"type":"string","nullable":true},"costLine":{"type":"string"}},"required":["briqs","recipe","costLine"]},"BriqSpec":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"image":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[a-z0-9][a-z0-9._\\/-]*(?::[\\w.-]+)?(?:@sha256:[a-f0-9]{64})?$"},"cmd":{"anyOf":[{"type":"string","minLength":1,"maxLength":8192},{"type":"array","items":{"type":"string","maxLength":8192},"maxItems":64}],"description":"The command: a string, run with sh -c (\"npm start\"), or the argv. Default: the image's"},"entrypoint":{"type":"array","items":{"type":"string","maxLength":8192},"maxItems":64},"env":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":32768},{"type":"object","properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_.-]*$"},"value":{"type":"string","maxLength":32768},"scope":{"type":"string","enum":["boot","team"]},"hosts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":253,"pattern":"^(\\*\\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"},"minItems":1,"maxItems":20},"locations":{"type":"array","items":{"type":"string","enum":["header","body"]},"minItems":1}},"required":["secret"],"additionalProperties":false}]},"default":{},"description":"A string; { secret: NAME } for a value briq generates; { secret: NAME, value } for a credential you have, stored encrypted and never returned. Plain values are shown in status. {{briq:NAME}} in a plain value becomes the address of briq NAME in the stack; {{self:host}}, the hostname of its own URL when it is published as it is created (localhost without one)"},"ports":{"type":"array","items":{"type":"integer","minimum":1,"maximum":65535},"maxItems":32,"default":[],"description":"The ports the image listens on"},"size":{"type":"string","enum":["nano","small","medium","large"],"default":"small"},"volume":{"type":"object","properties":{"mount":{"type":"string","maxLength":255},"gb":{"type":"integer","minimum":1,"maximum":500,"default":2},"copy":{"type":"string","enum":["never"],"description":"\"never\": no fork of the briq and no backup of the volume, for one that holds sign-ins"}},"required":["mount"]},"files":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"base64":{"type":"string"}},"required":["base64"]}]},"description":"Boot files, absolute path → text or { base64 }: written before the process starts and again whenever it starts over. At most 64 files and 256 KB in all"},"healthcheck":{"type":"object","properties":{"cmd":{"type":"array","items":{"type":"string","maxLength":8192},"minItems":1,"maxItems":64},"intervalMs":{"type":"integer","minimum":500,"default":2000},"timeoutMs":{"type":"integer","minimum":1000,"maximum":300000,"default":60000}},"required":["cmd"]},"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above)"},"expose":{"type":"integer","minimum":1,"maximum":65535,"description":"The port a public URL delivers to, when the briq has several: its front door. Declaring it publishes nothing"}},"required":["name","image"]},"RunBody":{"anyOf":[{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/BriqSpec"},"stack":{"type":"string"},"expose":{"type":"string","enum":["public","private"],"description":"Publish it as it is created: \"private\" for only whoever has the URL (it carries a secret), \"public\" for anyone. Left out, nothing is published. The URL comes back as outputs.URL. The port is spec.expose, or the only one in spec.ports"},"wait":{"type":"boolean","default":true,"description":"Answer once the briqs are ready (healthcheck passed, or process started)"},"waitTimeoutMs":{"type":"integer","maximum":300000,"default":120000,"description":"How long to wait; a briq still creating then is on its way"}},"required":["spec"]},{"type":"object","properties":{"image":{"type":"string","minLength":3,"maxLength":255,"pattern":"^[a-z0-9][a-z0-9._\\/-]*(?::[\\w.-]+)?(?:@sha256:[a-f0-9]{64})?$","description":"Another tag (postgres:17) or a compatible image (pgvector/pgvector:pg16). Default: the recipe's"},"env":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":32768},{"type":"object","properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_.-]*$"},"value":{"type":"string","maxLength":32768},"scope":{"type":"string","enum":["boot","team"]},"hosts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":253,"pattern":"^(\\*\\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"},"minItems":1,"maxItems":20},"locations":{"type":"array","items":{"type":"string","enum":["header","body"]},"minItems":1}},"required":["secret"],"additionalProperties":false}]},"description":"Added to the recipe's env, or replacing one of its values: a string, or { secret: NAME, value } for a credential"},"cmd":{"anyOf":[{"type":"string","minLength":1,"maxLength":8192},{"type":"array","items":{"type":"string","maxLength":8192},"maxItems":64}],"description":"The command: a string run with sh -c (\"npm start\"), or the argv. A language recipe's start command"},"size":{"type":"string","enum":["nano","small","medium","large"]},"volume":{"type":"object","properties":{"gb":{"type":"integer","minimum":1,"maximum":500}},"required":["gb"],"description":"The volume: { gb }"},"files":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"object","properties":{"base64":{"type":"string"}},"required":["base64"]}]},"description":"Files, path → text or { base64 }: an app's code for a language recipe"},"ports":{"type":"array","items":{"type":"integer","minimum":1,"maximum":65535},"description":"A language recipe: the port the app listens on, [8080] by default"},"checkout":{"type":"object","properties":{"repo":{"type":"string"},"ref":{"type":"string"},"path":{"type":"string"},"token":{"type":"object","properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z_][A-Za-z0-9_.-]*$"},"value":{"type":"string"}},"required":["secret"]}},"required":["repo"],"description":"A language or static recipe: the code from a repo, as actions/checkout. { repo: \"github.com/owner/app\", ref?, path?, token? }"},"steps":{"type":"array","items":{"type":"object","properties":{"run":{"type":"string"}},"required":["run"]},"description":"A language recipe: shell commands run before the app starts, as GitHub Actions steps. [{ run: \"npm ci\" }, { run: \"npm run build\" }]"},"routes":{"type":"object","additionalProperties":{"type":"string"},"description":"The nginx recipe: path prefix → \"briq:port\", e.g. { \"/api/\": \"backend:8080\" }"},"recipe":{"type":"string","description":"A recipe (GET /v1/recipes). Beside it, the fields of the service it makes, as a GitHub Actions service: image, env, cmd, size, volume, files; a language recipe also takes checkout, steps and ports. GET /v1/recipes/{name} lists what each takes and its defaults"},"name":{"type":"string"},"stack":{"type":"string"},"expose":{"type":"string","enum":["public","private"],"description":"Publish the recipe's front door as it is created: \"private\" for only whoever has the URL (it carries a secret), \"public\" for anyone. Left out, nothing is published. The URL comes back as outputs.URL. A recipe with no front door (a database) refuses it"},"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above). One window for every briq the recipe makes; left out, the environment's default"},"wait":{"type":"boolean","default":true,"description":"Answer once the briqs are ready (healthcheck passed, or process started)"},"waitTimeoutMs":{"type":"integer","maximum":300000,"default":120000,"description":"How long to wait; a briq still creating then is on its way"}},"required":["recipe"]}]},"Exec":{"type":"object","properties":{"id":{"type":"string"},"briqId":{"type":"string"},"cmd":{"type":"array","items":{"type":"string"}},"state":{"type":"string","enum":["running","exited","timed_out","stopped","lost"],"description":"running until it ends: exited (by itself, see exitCode), timed_out (stopped at deadlineAt), stopped (on request), lost (the machine restarted without it)"},"exitCode":{"type":"number","nullable":true},"startedAt":{"type":"string"},"deadlineAt":{"type":"string"},"finishedAt":{"type":"string","nullable":true},"outputDir":{"type":"string","description":"Where the whole output is, in the briq: files out and err"},"briqRunning":{"type":"boolean","description":"False when the briq is not running: the state is the last one seen, and output is absent until it starts"},"output":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"},"stdoutBytes":{"type":"number"},"stderrBytes":{"type":"number"}},"required":["stdout","stderr","stdoutBytes","stderrBytes"],"description":"The last 64 KB of each stream and their whole sizes; absent when the briq is not running, and with offset (read instead)"},"read":{"type":"object","properties":{"stream":{"type":"string","enum":["stdout","stderr"]},"offset":{"type":"number","description":"Where data starts, in bytes"},"data":{"type":"string","description":"Up to 256 KB from offset, cut at a whole UTF-8 character"},"nextOffset":{"type":"number","description":"The offset to read from next"},"bytes":{"type":"number","description":"The stream's whole size so far, in bytes"},"eof":{"type":"boolean","description":"The command ended and data reaches the end of the stream: nothing more comes"}},"required":["stream","offset","data","nextOffset","bytes","eof"],"description":"With offset: one stream from that byte offset"},"input":{"type":"object","properties":{"open":{"type":"boolean","description":"False once an eof was written"},"seq":{"type":"number","description":"The last write taken; the next one is seq + 1"}},"required":["open","seq"],"description":"Its standard input, when started with stdinOpen"}},"required":["id","briqId","cmd","state","exitCode","startedAt","deadlineAt","finishedAt","outputDir","briqRunning"]},"ExecStarted":{"type":"object","properties":{"exec":{"$ref":"#/components/schemas/Exec"},"costLine":{"type":"string"}},"required":["exec","costLine"]},"ExecList":{"type":"object","properties":{"execs":{"type":"array","items":{"$ref":"#/components/schemas/Exec"}}},"required":["execs"]},"ExecCheck":{"type":"object","properties":{"exec":{"$ref":"#/components/schemas/Exec"},"costLine":{"type":"string"}},"required":["exec","costLine"]},"ExecInputResult":{"type":"object","properties":{"seq":{"type":"number","description":"The number this write has"},"duplicate":{"type":"boolean","description":"True when that seq was already taken: nothing was written this time"},"costLine":{"type":"string"}},"required":["seq","duplicate","costLine"]},"ExecInputBody":{"type":"object","properties":{"data":{"type":"string","description":"Text to write, at most 64 KB as UTF-8"},"base64":{"type":"string","pattern":"^[A-Za-z0-9+/]*={0,2}$","description":"Bytes to write, as base64; instead of data"},"eof":{"type":"boolean","description":"Close the input after this write: the command reads end of file"},"seq":{"type":"integer","minimum":1,"description":"This write's number: the last one's plus one (input.seq of the exec, +1). The briq takes each number once, so a write sent again is not written twice. Without it, the next number"}}},"SleepBody":{"type":"object","properties":{"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above)"},"stack":{"type":"boolean","default":false,"description":"true: give the same sleep to every briq of its stack, which sleeps and wakes together"}},"required":["sleep"]},"ForkResult":{"type":"object","properties":{"briqs":{"type":"array","items":{"$ref":"#/components/schemas/Briq"}},"copied":{"type":"object","additionalProperties":{"type":"string","enum":["memory","disk","config"]}},"outputs":{"type":"object","additionalProperties":{"type":"string"},"default":{}},"stack":{"type":"string"},"skipped":{"type":"array","items":{"type":"string"},"default":[]},"warning":{"type":"string"},"costLine":{"type":"string"}},"required":["briqs","copied","stack","costLine"]},"ForkBody":{"type":"object","properties":{"name":{"type":"string"},"stack":{"type":"string"},"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above). Left out, the source's. A window longer than this key allows is refused"},"wait":{"type":"boolean","default":true},"waitTimeoutMs":{"type":"integer","maximum":300000,"default":120000}}},"ResizeBody":{"type":"object","properties":{"size":{"type":"string","enum":["nano","small","medium","large"],"description":"The new size. A running briq restarts at it"},"volume":{"type":"object","properties":{"gb":{"type":"integer","minimum":1,"maximum":500}},"required":["gb"],"description":"The volume, grown to { gb }: it only grows, and keeps what it holds"}}},"StackUpResult":{"type":"object","properties":{"stack":{"type":"string"},"briqs":{"type":"array","items":{"$ref":"#/components/schemas/Briq"},"description":"Every briq of the file's services, in file order: made now, or there already"},"created":{"type":"array","items":{"type":"string"},"description":"The services this up made"},"existing":{"type":"array","items":{"type":"string"},"description":"The services the stack had: left as they are"},"warnings":{"type":"array","items":{"type":"string"},"description":"An endpoint the file asks for that could not be opened yet; with `expose`, a briq not running whose outputs stay internal"},"outputs":{"type":"object","additionalProperties":{"type":"string"},"description":"Each recipe's connection strings, the secrets briq generated, and `<briq>:URL` for each published service. A key two services both have is `<briq>:<KEY>`"},"costLine":{"type":"string"}},"required":["stack","briqs","created","existing","outputs","costLine"]},"StackUpBody":{"type":"object","properties":{"file":{"type":"string","minLength":1,"description":"The stack file's content, YAML or JSON (briq.yaml)"},"stack":{"type":"string","description":"The stack to bring up instead of the file's `stack`: a branch's, a fork's"},"secrets":{"type":"object","additionalProperties":{"type":"string","maxLength":32768},"description":"Values for the secrets the file names as { secret: NAME }: an API key briq cannot generate. Never in the file. A secret without a value here is generated"},"expose":{"type":"boolean","description":"Reach the stack from outside briq: database ports get TLS endpoints, and outputs use them and the URLs the file publishes. Waits for the briqs. The file's own `expose` still decides each URL's mode"},"wait":{"type":"boolean","default":true,"description":"Answer once the briqs are ready (healthcheck passed, or process started)"},"waitTimeoutMs":{"type":"integer","maximum":300000,"default":120000,"description":"How long to wait; a briq still creating then is on its way"}},"required":["file"]},"StackForkBody":{"type":"object","properties":{"into":{"type":"string"},"expose":{"type":"string","enum":["public","private"],"description":"Reach the fork from outside briq: database ports get TLS endpoints, front doors a URL in this mode (\"private\": only whoever has it). Outputs then use them. Waits for the forks"},"sleep":{"type":"string","pattern":"^(?:never|[1-9][0-9]{0,4}[mhd])$","description":"When the briq goes to sleep: after this long without use (agent calls, visits to its stack's URLs). A string: \"30m\", \"3h\", \"7d\" or \"never\", never a number. A sleeping briq keeps its disk, costs nothing for compute, and the next use wakes it. \"never\" keeps it always on (Pro plan and above). Left out, the source's. A window longer than this key allows is refused"},"wait":{"type":"boolean","default":true},"waitTimeoutMs":{"type":"integer","maximum":300000,"default":120000}}},"RecipeParam":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","nullable":true,"items":{"type":"string"},"description":"The allowed values, for an enum"},"defaultValue":{"type":"string","nullable":true,"description":"JSON of the default, when there is one"},"required":{"type":"boolean"},"description":{"type":"string","nullable":true},"format":{"type":"string","nullable":true,"description":"The shape of a record or object value, e.g. `{ url, ref?, dir?, token? }`"}},"required":["name","type","options","defaultValue","required","description"]}},"parameters":{}},"paths":{"/v1/auth/providers":{"get":{"tags":["account"],"summary":"Social sign-in providers this deployment offers","responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"string","enum":["google","github"]}}},"required":["providers"]}}}}}}},"/v1/me":{"get":{"tags":["account"],"summary":"Current user and teams","responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"emailVerified":{"type":"boolean"},"admin":{"type":"boolean"}},"required":["id","email","name","emailVerified","admin"]},"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"personal":{"type":"boolean"},"plan":{"type":"string","enum":["hobby","pro","team"]},"region":{"type":"string"},"currency":{"type":"string","enum":["eur","usd"]},"role":{"type":"string"},"creditBalanceCents":{"type":"number"},"paysAsItGoes":{"type":"boolean"}},"required":["id","slug","name","personal","plan","region","currency","role","creditBalanceCents","paysAsItGoes"]}},"currentTeamId":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["paris","virginia","singapore"]},"label":{"type":"string"},"country":{"type":"string"},"zone":{"type":"string"},"eu":{"type":"boolean"}},"required":["id","label","country","zone","eu"]}},"freeCreditsOnVerifyCents":{"type":"number"},"apiUrl":{"type":"string"},"payments":{"type":"boolean"},"maxSleep":{"type":"string"}},"required":["user","teams","currentTeamId","regions","freeCreditsOnVerifyCents","apiUrl","payments","maxSleep"]}}}},"401":{"description":"ok","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}},"patch":{"tags":["account"],"summary":"Update the current user (name)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80}},"required":["name"]}}}},"responses":{"200":{"description":"ok","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}},"400":{"description":"validation","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"invalid state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/teams":{"post":{"tags":["account"],"summary":"Create a team","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":60},"region":{"type":"string","enum":["paris","virginia","singapore"]},"currency":{"type":"string","enum":["eur","usd"]}},"required":["name"]}}}},"responses":{"201":{"description":"ok","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"personal":{"type":"boolean"},"plan":{"type":"string","enum":["hobby","pro","team"]},"region":{"type":"string"},"currency":{"type":"string","enum":["eur","usd"]},"role":{"type":"string"},"creditBalanceCents":{"type":"number"},"paysAsItGoes":{"type":"boolean"}},"required":["id","slug","name","personal","plan","region","currency","role","creditBalanceCents","paysAsItGoes"]}},"required":["team"]}}}},"400":{"description":"validation","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"forbidden","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whose machine is not running: { machineState, lastExit, providerSaid }, or { lastExit } once it is stopped"},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"invalid state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"nullable":true,"description":"More on the error. For invalid_state on a briq whos

# --- truncated at 32 KB (323 KB total) ---
# Full source: https://artifacts.apis.io/briq-cloud/openapi/_original/briq-cloud-v1-openapi.json