Authentication and API keys
Personal keys (pxu_), organization keys (pxk_), agent tokens (pxa1.) and SCIM tokens: scopes, expiry, IP allowlists and one-hour test keys.
Credentials
Every API takes a bearer credential in the Authorization header. The prefix tells you which kind it is.
| API | Send | Where it comes from |
|---|---|---|
| Customer API | Authorization: Bearer pxu_… | Personal API key, made in Passkey-X → Developers → API keys. Choose its scopes, when it expires (1–365 days) and, ideally, the IP addresses it may be used from. Shown once; Passkey-X keeps only a hash. Calls run as you under the same access rules as your session. One-click test keys are read-only and expire after one hour. |
| Customer API (in the app) | Authorization: Bearer <USER_ACCESS_TOKEN> | The short-lived access token of a Passkey-X session, used by the apps and by the console in Developers. If the account uses two-step verification, the session must have completed it, or you get 403 mfa_required. Prefer a personal API key for scripts. |
| Organization API | Authorization: Bearer pxk_… | Owners and admins create scoped keys in Admin console → Integrations → API keys. Shown once, expire after 1–365 days, revocable any time, optionally limited to IP addresses, and one-hour read-only test keys for consoles and Postman. Every call is attributed to the key in the organization’s Logs. |
| Agent API | Authorization: Bearer pxa1.<agent id>.<secret> | The one-time agent token from the admin console. Its private key part never leaves the machine; only the agent ID and secret are sent. |
| SCIM 2.0 | Authorization: Bearer pxscim_… | Admin console → Identity & SSO: the SCIM token for your identity provider (shown once). |
Never put Supabase secret or service-role keys, Paddle API keys or Sent keys in browser or integration client code. Store API keys in your tool’s secret store, and keep pxu_ and pxk_ keys on your server.
Personal API keys (Customer API)
Create a personal API key in Passkey-X → Developers → API keys (scoped, expiring, optional IP allowlist). In the app's console you can also use your own session. Rate limit: 120 requests per minute per key (or per account for a session).
- Open your account menu (top right) › Developers & API › API keys and choose Create key.
- Name it after the script that will use it, choose what it may do (for example Vault items: Read, Change feed: Read) and how long it lasts.
- Add the IP addresses it will be used from (Add my address fills in this computer). A leaked key then doesn't work anywhere else.
- Copy the key (pxu_…) into your secret manager: it's shown once. Then try GET /v1/me in Developers › Console, or download the Postman collection.
- Watch each key's Activity, and revoke a key the moment you don't need it.
export PASSKEY_X_PERSONAL_KEY='pxu_…'
curl -s https://passkey-x.com/api/v1/me -H "Authorization: Bearer $PASSKEY_X_PERSONAL_KEY"
# → { "credential": "personal_api_key", "your_ip": "203.0.113.24", "key": { "scopes": ["vault:read", "sync:read"], … } }Personal key scopes
A personal key can hold any of these; /v1/me, /v1/item-types and /v1/api-keys need none. Up to 10 active keys (and 5 test keys) per person.
| Scope | Allows |
|---|---|
vault:read | Read encrypted vault items (list and get) |
vault:write | Create, update and delete encrypted vault items |
workspaces:read | Your vaults and their members |
sync:read | The change feed |
access:read | Missions, access requests and grants |
access:write | Request access and decide requests |
A key without the scope an endpoint needs is answered 403 insufficient_scope, with the missing scope in WWW-Authenticate.
Organization API keys
Admin console → Integrations → API keys. Use a short-lived, read-only key for testing. Rate limit: 300 requests per minute per key.
- Open Admin console › Company & billing › Integrations & API keys and create a key with only the scopes the tool needs (for example members:write or audit:read).
- Copy the key once and store it in your tool's secret store. It starts with pxk_.
- Call the API with Authorization: Bearer <key>. The full reference, with examples, is at passkey-x.com/api-docs. Its “All endpoints at a glance” table lists every endpoint with the scope it needs.
- Revoke a key at any time; every call is recorded in Logs (type: API calls) with the key, the address and the result.
export PASSKEY_X_API_KEY='pxk_…'
curl -s 'https://passkey-x.com/api/org/v1/me' -H "Authorization: Bearer $PASSKEY_X_API_KEY"Organization key scopes
Give each integration only what it needs. A key can hold up to 40 scopes, and an organization can have 20 active keys. A missing scope is answered 403 forbidden.
| Scope | Allows |
|---|---|
audit:read | Audit events and item timelines |
alerts:read | Security alerts |
alerts:write | Acknowledge and resolve alerts |
members:read | Members and invitations |
members:write | Invite, suspend, reactivate and offboard |
reports:read | Security summary, weekly reports, member security |
workspaces:read | Shared vaults (no names) |
groups:read | Directory groups |
access:read | Vault access requests |
access:write | Approve and deny vault access requests |
onboarding:read | Onboarding progress |
onboarding:write | Remind, extend, resume and cancel onboarding |
sharing:read | External sharing requests |
sharing:write | Approve and decline external links |
handover:read | Handovers and previews |
handover:write | Hand over a leaver's access |
policies:read | Security policies |
storage:read | Storage pool, usage and Runway |
insights:read | Trust Index and insights |
documents:read | Document register, signature requests, proofs and verification |
security:read | Sign-in risk, incidents and device trust |
logs:read | Logs: audit, sign-ins, API calls, emails and alerts |
company:read | Company profile, address, access rules and devices |
devices:write | Issue and cancel device codes, remove devices |
policies:write | Set, enforce and stop policies |
signatures:write | Cancel signature requests |
webhooks:read | Webhooks, delivery log and the event catalog |
webhooks:write | Create, change, test, replay and delete webhooks |
controller:read | Controller computers, groups and actions |
controller:write | Run unsigned Controller actions |
remote:read | Remote seats, devices, sessions and invite links |
remote:write | End sessions, create and revoke invite links |
Test keys and IP allowlists
- Test keysOne click in Developers (personal) or the Admin console (organization): read-only and expire after one hour. Use them in consoles, Postman and while you build.
- IP allowlistsLimit a personal or organization key to your servers’ addresses. Calls from anywhere else are answered
403 ip_not_allowed.GET /v1/mereturnsyour_ip, the address the API sees. - New-address emailThe owner is emailed the first time a key is used from a new IP address. If that wasn’t you, revoke the key.
- Expiry and revocationKeys expire after 1–365 days and can be revoked at any time. Passkey-X keeps only a hash: a key is shown once.
Agents and SCIM
Agent tokens (pxa1.) authenticate the Agent API: The one-time agent token from Admin console → Agents. SCIM tokens (pxscim_) authenticate your identity provider’s SCIM 2.0 connection.
Need help building on Passkey-X?
Questions about the API, a bug or a missing endpoint? Our team replies by email, usually within one business day.