Enter at least two characters to search. Searching documentation… No matching sections. Try an endpoint, field or event name.

API keys

View as Markdown

Keys can be managed through the API too, for setting up a new server or rotating keys from code. Both permissions are sensitive, so a key has them only when they are ticked on it.

On this page

The API key object

Field Description
id string The key's id, used in the paths below. It is not the key itself.
object "api_key" The kind of object.
name string What the key is for, up to 100 characters.
prefix string The start of the key, such as vp_live_a1b2, to tell keys apart.
key string The key itself, only in the answer that creates it. It is never kept, so it cannot be read again.
mode string live or test: the mode the key works in, the same as the key that made it.
permissions array|null What the key may do. Null for full access, which leaves out the sensitive permissions.
allowed_ips array|null The IPv4 and IPv6 addresses and ranges it may be used from. Null for anywhere.
created_by string|null The name of the member who made it, or in whose name it was made.
last_used_at string|null When it last made a request, as an ISO 8601 timestamp in UTC.
created_at string When it was made.

Endpoints

  • GET /v1/api-keys List the account's active keys in the mode of the key, newest first. Needs api_keys:read.
  • POST /v1/api-keys Create a key from name and, optionally, permissions and allowed_ips. Answers 201 with key, shown this once. Needs api_keys:write.
  • PATCH /v1/api-keys/{id} Change a key's name, permissions or allowed_ips, only those given; null permissions gives full access and null allowed_ips anywhere. Needs api_keys:write.
  • DELETE /v1/api-keys/{id} Revoke a key: it is refused from its next request. Answers 204. Needs api_keys:write.
POST /v1/api-keys

Copy failed. Select the code and copy it manually.

curl -X POST 'https://api.velirapay.com/v1/api-keys' \
  --fail-with-body --silent --show-error --max-time 30 \
  -H "Authorization: Bearer ${VELIRAPAY_API_KEY:?Set VELIRAPAY_API_KEY}" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Shop server",
    "permissions": [
      "charges:read",
      "charges:write"
    ],
    "allowed_ips": ["203.0.113.7"]
  }'
Response

Copy failed. Select the code and copy it manually.

{
  "data": {
    "id": "42",
    "object": "api_key",
    "name": "Shop server",
    "prefix": "vp_live_8Kq2",
    "key": "vp_live_8Kq2…",
    "mode": "live",
    "permissions": ["charges:read", "charges:write"],
    "allowed_ips": ["203.0.113.7"],
    "created_by": "Ada Lovelace",
    "last_used_at": null,
    "created_at": "2026-11-06T09:12:44.000000Z"
  }
}

No further than the key asking

A key cannot hand out more than it has. The keys it makes or changes can only have permissions it has itself, and full access only if it has every permission that full access gives. A key limited to some addresses can only make or change keys limited to addresses within those, never one usable from anywhere. Nor can it change or revoke a key that reaches further than it does, such as a full-access key, which leaves the keys an owner made in the dashboard out of its reach. A request that would answers 403, naming the permission or the addresses that are out of reach.

Keys are made in the mode of the key that asks, and in the name of the member who made it, so a sensitive permission on the new key only works while that member is still an owner or admin. An account can have up to 10 active keys in each mode. Every change is in the activity log, naming the key that made it.

The key is shown once, in the answer that creates it. Store it then: a request repeated with the same Idempotency-Key answers 409 rather than replaying it. Signed in to the MCP server with your account, an owner or admin reaches every key of the organizations they picked, as in the dashboard.