Overview
The Arcus API uses Bearer token authentication. Every request must include:Authorization: Bearer <api_key> — your API key
The key itself carries your entity, so you do not send an entity ID on most requests. Resource routes are flat, for example GET https://api.arcuserp.com/v1/accounts to list accounts and POST https://api.arcuserp.com/v1/accounts to create one. A small set of platform endpoints (migration, reconciliation and a few others) take the entity in the path as /v1/entities/{entity_id}/...; on those, the entity ID must be the one the key was issued for.
A request with a missing, malformed, unknown, or expired key returns 401 with code: invalid_api_key. A key that was revoked returns 401 with code: api_key_revoked. A key used on an /v1/entities/{entity_id}/... path for a different entity returns 403 with code: entity_isolation_violation.
API key types
Per-entity keys
Per-entity keys are the only key type available. They are issued to a specific entity and can only read or write data for that entity.- Created in Settings > Developers > API Keys
- Scoped to a single entity (your tenant)
- Format:
ark_live_ent_<code>_<random>(production) orark_test_ent_<code>_<random>(test mode) - Carry explicit scopes (e.g.
orders:read,products:write)
Scopes
Every API key carries one or more scopes that control what the key can do. Scopes follow the pattern<resource>:<permission>.
Requesting a resource you do not have scope for returns
403 Forbidden with code: insufficient_scope and a required field naming the missing scope.
Some operations need more than one scope. For example, charging a payment against an order needs both orders:write and payments:write, and fulfilling an order automatically needs both orders:write and fulfillment:write. Each operation in the API Reference names the scopes it requires.
Scopes for accounts
Making an authenticated request
Test mode vs live mode
Test mode keys (ark_test_ent_...) and live mode keys (ark_live_ent_...) hit the same API base URL but are validated separately. A test-mode key cannot access live data and vice versa.
Use test mode for development and integration testing. Use live mode only for production traffic.
IP allowlists
You can restrict an API key to a list of IP addresses or CIDR ranges with the IP allowlist field (one entry per line) when you create the key in Settings > Developers > API Keys. A key with no allowlist accepts requests from any address. Requests from unlisted addresses return403 Forbidden with code: ip_not_allowed and the hint “Source IP is not in the API key allowlist.”
Key rotation
- Open the key in Settings > Developers > API Keys and choose Rotate key. Arcus creates a new key with the same name, scopes, mode, rate limit, and IP allowlist, and shows the new key once.
- Update your integration to use the new key
- Verify production traffic is using the new key (check your server logs)
401 with code: api_key_revoked and your integration must switch to the new key straight away. Plan the switch before you rotate, because there is no overlap window. Revoke key retires a key without issuing a replacement: revoking is permanent and immediate, and any request made with the key afterward returns the same 401 with code: api_key_revoked.
Security best practices
- Store API keys in environment variables or a secrets manager, never in source code
- Use the minimum scope required for each integration
- Enable IP allowlists for production server-to-server integrations
- Rotate keys every 90 days or immediately after any suspected exposure
- Use separate keys for each integration so you can revoke one without impacting others

