Access
A service is private to its account until an owner makes it public, and only tools marked #[public] can be called from outside it.
Access has two parts: whether the service is private, and which of its tools are public.
Private and public services
- A service is private from its first deploy. Only its own account and that account's members can see or call it, and everyone else gets
404. - An owner makes it public with
PUT /services/{owner}/{name}/visibilityand the body{"private": false}.GETon the same path reads it. - Any signed-in account can call a public service's public tools.
| Caller | Private service | Public service |
|---|---|---|
| A session of an owner or member of the account | Public tools | Public tools |
| An API key made on the account | Public tools | Public tools |
| Any other session or API key | 404 |
Public tools |
| An app | See From your app | See From your app |
Public tools
- Only a tool marked
#[public]can be called from outside the service, by anyone, its owners included. The other tools run only as the service's crons, wakes and Stripe events. - A deploy that makes a tool public is refused until
publicinberm.tomllists it. #[callers(services)]limits a public tool to calls from other services, and#[callers(accounts)]to calls from outside. The other kind of caller gets403.
Anonymous tools
- A tool marked
#[anonymous]is the only kind a call with no signed-in caller reaches. It must also be#[public]. - A call with no caller comes through an app that admits anonymous calls. See From your app.
- A request with no token and no app answers
401,#[anonymous]tools included.