Platform API
The console is a client of this API and uses nothing private. Everything it does, you can do from a script.
Authentication
Sign in and you get a session token, sent as a bearer credential or an HttpOnly cookie. For automation, create an application secret on the app’s Keys screen and send it as X-App-Secret.
curl https://api.signet.dev/v1/me \ -H "Authorization: Bearer $SIGNET_SESSION"
What this API cannot do
Endpoints
Public
| Method | Path | Description |
|---|---|---|
| GET | /v1/marketplace/nodes | The operator directory, with liveness. |
| GET | /v1/marketplace/nodes/{address} | One operator. |
| GET | /v1/status | Network status: chain reachability, node and group counts. |
| GET | /v1/config | The protocol wiring this deployment is pointed at. |
| GET | /v1/webhooks/events | Every event a webhook can subscribe to. |
Session
| Method | Path | Description |
|---|---|---|
| POST | /v1/auth/challenge | Issue a single-use sign-in nonce. |
| POST | /v1/auth/verify | Verify the signed challenge and open a session. |
| POST | /v1/auth/logout | Clear the session cookie. |
| GET | /v1/me | The signed-in developer, their orgs, and the network config. |
| GET | /v1/me/apps | Every app across every org you belong to. |
Organizations
| Method | Path | Description |
|---|---|---|
| GET | /v1/orgs | Your organizations. |
| POST | /v1/orgs | Create one. |
| GET | /v1/orgs/{orgID}/members | Members and roles. |
| POST | /v1/orgs/{orgID}/invites | Create an invitation; the token is returned once. |
| GET | /v1/orgs/{orgID}/billing | Balance, rate, and the projected cost of current usage. |
| GET | /v1/orgs/{orgID}/audit | Organization activity. |
Apps
| Method | Path | Description |
|---|---|---|
| GET | /v1/apps/{appID} | One app. |
| PATCH | /v1/apps/{appID} | Rename, re-describe, change environment. |
| GET | /v1/apps/{appID}/settings | Every configuration section. |
| PUT | /v1/apps/{appID}/settings/{section} | Replace one section. |
| GET | /v1/apps/{appID}/group | Cached membership plus a live read of the contract. |
| POST | /v1/apps/{appID}/group/attach | Bind a deployed group, after verifying you manage it. |
| POST | /v1/apps/{appID}/group/sync | Re-read the contract now. |
| GET | /v1/apps/{appID}/keys | Cached key inventory and summary counts. |
| POST | /v1/apps/{appID}/keys/sync | Cache an inventory you fetched from your nodes. |
| GET | /v1/apps/{appID}/users | End users, by identity hash. |
| GET | /v1/apps/{appID}/usage | Daily metered activity for a date range. |
| GET | /v1/apps/{appID}/audit | App activity. |
Metering
| Method | Path | Description |
|---|---|---|
| POST | /v1/ingest/usage | Node-fleet ingest, authenticated by X-Ingest-Key. |
Errors
Every failure is a JSON object with an error field carrying a message meant for a person. A request for something you cannot see returns 404 rather than 403 — telling a stranger that an ID exists is itself a disclosure.
{ "error": "that signing group is already attached to another app" }Reaching your nodes
POST /v1/node/proxy forwards a request to a node in the operator directory, because signetd sets no CORS headers and a browser cannot call it directly. The body is opaque to the platform: the signature inside it came from your key and is verified by the node, not here. Set x-node-url and x-node-path; only an explicit allowlist of node paths is forwarded.