Endpoints
Who this key is
The organisation a key acts for, and what its plan allows. Free.
Which organisation this key acts for, and what its plan allows.
curl https://api.formalogic.io/v1/me \
-H "Authorization: Bearer $FORMA_API_KEY"import os
import httpx
response = httpx.get(
"https://api.formalogic.io/v1/me",
headers={"Authorization": f"Bearer {os.environ['FORMA_API_KEY']}"},
)
print(response.json())const response = await fetch('https://api.formalogic.io/v1/me', {
headers: {
Authorization: `Bearer ${process.env.FORMA_API_KEY}`,
},
})
console.log(await response.json())Response 200
The organisation this key belongs to.
| org_id | The organisation this key acts for. Stable forever — use it as a scope key, not the slug, which can be renamed |
|---|---|
| plan | The tier the organisation is on |
| requests_per_minute | What the plan is sold on. null if this build does not recognise the plan |
| features | Features turned on for this organisation beyond its plan. Usually empty |
Errors
| 401KEY_MISSINGKEY_UNKNOWNKEY_REVOKEDKEY_EXPIRED | The key is missing, unknown, revoked or expired — see Authentication |
|---|---|
| 403ORG_DISABLED | The key is fine and its organisation is not active — see Authentication |
| 404NOT_FOUND | No organisation for this key |
Every code, and what to do about it, is on Errors.
The request is generated from the API's OpenAPI document; the response and errors are held to real responses and to the Errors page.
Use it to confirm a key works and to learn which organisation it belongs to. A service that accepts Forma keys from its own users — an MCP server, a CI step, an internal tool — calls this to check a key and scope by organisation, rather than making a call that costs credits and reading the outcome.
Response
{
"org_id": "org_01JBQ2X9V3K4M5N6P7R8S9T0UV",
"plan": "pro",
"requests_per_minute": 120,
"features": []
}Free
Listing who you are costs no credits, for the same reason listing the
catalogue does not: you should not have to spend a credit to discover that you
have none left. A key with an empty balance still gets a 200 here.
requests_per_minute is advisory
It is the number your plan is sold on, published so a client can pace itself
against the same figure rather than keeping its own copy that drifts when a
tier changes. Pace your calls to it; it may be enforced without notice. What
limits a call today is credits; running out returns 402.
features
Features turned on for your organisation beyond what your plan includes, by name. For most organisations it is empty. A tool can read it to decide what to offer, rather than trying a call and reading the refusal.
Refusals
The usual key refusals apply, and this endpoint is the cheapest way to tell
them apart — KEY_REVOKED and KEY_EXPIRED are things a person can fix
themselves, if the tool asking on their behalf says which one happened. The
codes are in the Errors table above.