SignetSignet

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.

shell
curl https://api.signet.dev/v1/me \
  -H "Authorization: Bearer $SIGNET_SESSION"

What this API cannot do

It cannot sign, and it cannot write to a chain. Group membership, thresholds, issuers, and authorization keys are changed by transactions from your own account — the platform reads them and caches them, and every response that reflects chain state carries the time it was last read.

Endpoints

Public

MethodPathDescription
GET/v1/marketplace/nodesThe operator directory, with liveness.
GET/v1/marketplace/nodes/{address}One operator.
GET/v1/statusNetwork status: chain reachability, node and group counts.
GET/v1/configThe protocol wiring this deployment is pointed at.
GET/v1/webhooks/eventsEvery event a webhook can subscribe to.

Session

MethodPathDescription
POST/v1/auth/challengeIssue a single-use sign-in nonce.
POST/v1/auth/verifyVerify the signed challenge and open a session.
POST/v1/auth/logoutClear the session cookie.
GET/v1/meThe signed-in developer, their orgs, and the network config.
GET/v1/me/appsEvery app across every org you belong to.

Organizations

MethodPathDescription
GET/v1/orgsYour organizations.
POST/v1/orgsCreate one.
GET/v1/orgs/{orgID}/membersMembers and roles.
POST/v1/orgs/{orgID}/invitesCreate an invitation; the token is returned once.
GET/v1/orgs/{orgID}/billingBalance, rate, and the projected cost of current usage.
GET/v1/orgs/{orgID}/auditOrganization activity.

Apps

MethodPathDescription
GET/v1/apps/{appID}One app.
PATCH/v1/apps/{appID}Rename, re-describe, change environment.
GET/v1/apps/{appID}/settingsEvery configuration section.
PUT/v1/apps/{appID}/settings/{section}Replace one section.
GET/v1/apps/{appID}/groupCached membership plus a live read of the contract.
POST/v1/apps/{appID}/group/attachBind a deployed group, after verifying you manage it.
POST/v1/apps/{appID}/group/syncRe-read the contract now.
GET/v1/apps/{appID}/keysCached key inventory and summary counts.
POST/v1/apps/{appID}/keys/syncCache an inventory you fetched from your nodes.
GET/v1/apps/{appID}/usersEnd users, by identity hash.
GET/v1/apps/{appID}/usageDaily metered activity for a date range.
GET/v1/apps/{appID}/auditApp activity.

Metering

MethodPathDescription
POST/v1/ingest/usageNode-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.

response
{ "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.