Examples use fictional data. Every company, person, address and count in them is invented, and their domains use the reserved .example TLD.
Getting started
Workspace & API keys
Mint and revoke machine credentials, rename the workspace, and see who else is in it.
6 endpoints
/v1/api-keysList API keys
Every key ever issued for the workspace, revoked ones included. Secrets are never returned here.
curl "https://beamro.com/api/v1/api-keys" \
-H "x-api-key: $SALVO_API_KEY"{
"rows": [
{
"id": "key_2m8v0qz4rt7y1c6h3s",
"org_id": "org_4k1p8w2ne6ts0ybc7j",
"name": "production",
"prefix": "sk_live_9f4a2c",
"last_used_at": "2026-08-31T09:41:12.000Z",
"created_at": "2026-07-02T14:20:00.000Z",
"revoked_at": null
},
{
"id": "key_9j3c7x1lp0aw5du2fk",
"org_id": "org_4k1p8w2ne6ts0ybc7j",
"name": "staging",
"prefix": "sk_live_31c8be",
"last_used_at": null,
"created_at": "2026-07-02T14:20:00.000Z",
"revoked_at": "2026-08-04T08:00:00.000Z"
}
]
}/v1/api-keysCreate an API key
Returns the key record plus the one and only copy of the secret. Store it before you close the response.
Body parameters
| Field | Type | Description |
|---|---|---|
| namereq | string | Human label — where this key runs, so you can revoke the right one later. |
curl -X POST "https://beamro.com/api/v1/api-keys" \
-H "authorization: Bearer $SALVO_ACCESS_TOKEN" \
-H "content-type: application/json" \
-d '{
"name": "production"
}'{
"key": {
"id": "key_2m8v0qz4rt7y1c6h3s",
"org_id": "org_4k1p8w2ne6ts0ybc7j",
"name": "production",
"prefix": "sk_live_9f4a2c",
"last_used_at": null,
"created_at": "2026-08-31T11:19:44.000Z",
"revoked_at": null
},
"secret": "sk_live_9f4a2c7e10b6k3vqx8m2yd"
}/v1/api-keys/{key_id}Revoke an API key
Takes effect on the next request. In-flight requests are allowed to finish.
Path parameters
| Field | Type | Description |
|---|---|---|
| key_idreq | string | Identifier of the key to revoke. |
curl -X DELETE "https://beamro.com/api/v1/api-keys/key_9j3c7x1lp0aw5du2fk" \
-H "authorization: Bearer $SALVO_ACCESS_TOKEN"{
"ok": true
}/v1/orgRename the workspace
Updates the display name and URL slug. Slugs are unique and lower-cased on the way in.
Body parameters
| Field | Type | Description |
|---|---|---|
| name | string | Display name shown in the dashboard and on invoices. |
| slug | string | URL-safe identifier, unique across Salvo. |
curl -X PATCH "https://beamro.com/api/v1/org" \
-H "x-api-key: $SALVO_API_KEY" \
-H "content-type: application/json" \
-d '{
"name": "Harlow Meadow Events",
"slug": "harlow-meadow"
}'{
"id": "org_4k1p8w2ne6ts0ybc7j",
"name": "Harlow Meadow Events",
"slug": "harlow-meadow",
"plan": "growth",
"credit_balance": 38420,
"email_balance_cents": 3000,
"trial_granted": true,
"created_at": "2026-08-31T11:04:02.000Z"
}/v1/org/membersList members
Users with access to the workspace and the role each one holds.
curl "https://beamro.com/api/v1/org/members" \
-H "x-api-key: $SALVO_API_KEY"{
"rows": [
{
"id": "usr_7d2m41ka9xq0zv3b8n",
"email": "priya@harlowmeadow.example",
"name": "Priya Whitcombe",
"avatar_url": null,
"email_verified": true,
"created_at": "2026-08-31T11:04:02.000Z",
"role": "owner"
},
{
"id": "usr_1c9x4vb7mn2q8kd0er",
"email": "theo@harlowmeadow.example",
"name": "Theo Bannister",
"avatar_url": null,
"email_verified": true,
"created_at": "2026-08-12T09:00:00.000Z",
"role": "member"
}
]
}/v1/org/invitesInvite a teammate
Creates a join link (no email is sent — pass the link on yourself). A new person signs up through it, with the invited address, and joins this workspace instead of creating one; someone who already has an account signs in through it and accepts. Nobody is added without that step. The link expires in 7 days; inviting the same address again replaces it.
Body parameters
| Field | Type | Description |
|---|---|---|
| emailreq | string | Address to invite. |
| rolereq | string | One of owner, admin, member, viewer. |
curl -X POST "https://beamro.com/api/v1/org/invites" \
-H "x-api-key: $SALVO_API_KEY" \
-H "content-type: application/json" \
-d '{
"email": "theo@harlowmeadow.example",
"role": "member"
}'{
"ok": true,
"joined": false,
"invite_id": "inv_7q2m4x9c1v8b3n6k0z5r2t",
"invite_url": "https://app.example.com/signup?invite=itk_4v1x0q9d2m7k3s8a5c6e1f&email=theo%40harlowmeadow.example"
}