Base URL https://api.exorails.net. JSON in, JSON out. Errors: { "error": { "code", "message", "field?" } }. Pagination is keyset: pass the nextCursor you received.
Authorization: Bearer exo_pat_… | Personal API token, created in Settings. Scoped to one organization. Never returns secret values. |
X-Org-Id | Optional. Acts on another organization you belong to. |
GET /v1/environments | List with tool and secret counts, 30-day calls, masked URL. |
POST /v1/environments | { name, slug? } → environment, url (shown once), token. |
GET /v1/environments/:slug | Overview: tools, secrets (names), 30-day counters. |
PATCH /v1/environments/:slug | { name?, toolPrefixMode?, callTimeoutMs?, logArguments? } |
DELETE /v1/environments/:slug | Destroys the environment and its vault key. |
POST /v1/environments/:slug/keys/rotate | New URL for the caller; the old one stops at once. |
GET /v1/environments/:slug/calls | Keyset-paginated call log: ?tool=&status=&cursor=&limit= |
GET /v1/environments/:slug/stats | Daily series, last-24h counters, top tools. |
GET /v1/catalog | Known servers. |
POST /v1/environments/:slug/tools | { catalogId? | name, url, transport?, auth?, headerName?, secretId? | secretName + secretValue, headers?, timeoutMs? } |
PATCH /v1/environments/:slug/tools/:id | Rename, change URL/auth/filter/timeout. |
POST /v1/environments/:slug/tools/:id/probe | Re-probe now. |
POST /v1/environments/:slug/tools/:id/oauth/start | → { authorizeUrl } to open in a browser. |
DELETE /v1/environments/:slug/tools/:id | Remove the server; its secret stays. |
GET /v1/environments/:slug/secrets | Names, dates, which tools use them. |
POST /v1/environments/:slug/secrets | { name, value } — the value is never returned. |
PUT /v1/environments/:slug/secrets/:id | { value } — rotate. |
DELETE /v1/environments/:slug/secrets/:id | 409 while a tool uses it. |
GET /v1/org | Plan, role, effective limits. |
GET /v1/usage | This month's calls, projected bill, cap. |
GET /v1/team | Members and pending invites. |
GET /v1/team/access-review | Every URL held in the organization. |
GET /v1/audit | Audit entries (admins). |
curl -s https://api.exorails.net/v1/environments \
-H "Authorization: Bearer exo_pat_…" | jq '.environments[] | {name, slug, toolsCount}'