Skip to main content
The following conventions apply across the 1Password Accounts API for Partners.

Authentication

The Accounts API authorizes requests with a bearer token. When your organization registers as a distributor, you’ll receive an opaque bearer token, prefixed with op_b_. Include this token in the Authorization header of every request, prefixed with Bearer:
For example:
Treat your bearer token like a password. Store it securely (for example, in a 1Password vault) and never expose it in client-side code, logs, or source control.
If you need a new bearer token, contact 1Password.

Endpoints

The basic structure of an endpoint URL for the Accounts API includes the base URL and the endpoint path. The endpoint path includes the API endpoint version, the resource(s) you want to access, and any relevant path parameters.

Base URL

All requests to the Accounts API use the 1Password.eu base URL, https://api.1password.eu, regardless of the region of your 1Password account or your customers’ accounts. The product_id you provision determines the region where a customer’s 1Password account is created. All communication with the API is over HTTPS.

Endpoint path

The endpoint path is appended to the base URL and includes the endpoint version, target resource path, and any path parameters. For example, the endpoint path to list usage for a specific customer would look like this:
The {distributor-customer} path parameter is your own identifier for the customer, as defined in your marketplace system — 1Password doesn’t validate it against a customer registry. Some list endpoints also accept - as a wildcard to query across all of your customers. See the API reference documentation for more information about each endpoint.

Requests

Request methods

Requests to the Accounts API use standard HTTP methods:

Request headers

  • Authorization: Required on every request. Use this header with your bearer token to authenticate your API requests.
  • Content-Type: application/json: Required for POST and PATCH requests. Use this header for requests that send a JSON body. GET and DELETE requests don’t include a body.

Request bodies

POST and PATCH requests send a JSON object in the request body. Check the API reference documentation for the fields each endpoint accepts. The API silently ignores unknown fields in request bodies, so make sure your field names are correct. A misspelled field name is ignored without an error and the value isn’t applied. GET and DELETE requests don’t include a request body.

Query parameters

You can use query parameters in your API request as optional modifiers after the endpoint path. Use a ? query separator at the end of the endpoint path, then add any query parameters you want to include, separated by a & query delimiter. For example, if you want to retrieve a list of product usage data for all customers, you could use query parameters to filter the results by billing cycle and set the maximum number of results to return per page:
Make sure your client URL-encodes query parameter values. Filter expressions contain spaces and special characters, so the request above is sent as:
Check the API reference documentation to discover which query parameters are available for each endpoint.

Filtering

The following list endpoints accept a filter query parameter that uses Common Expression Language (CEL) syntax:
  • List entitlements: Filters on entitlement fields. For example, status == 'active' returns only active entitlements. When omitted, entitlements of all statuses are returned. See the entitlement statuses section to learn about all the possible status values.
  • List customer usage: Filters by billing cycle using billing_cycle == 'YYYY-MM'. For example, billing_cycle == '2026-04'. When omitted, usage defaults to the current billing cycle in UTC. There’s no lookback limit on historical billing cycles.

Pagination

All list endpoints (entitlements, customer usage, and products) support pagination. Use these query parameters to page through results:
  • max_page_size: The maximum number of results to return per page. Defaults to 100; values above 100 are clamped to 100. Omitting the parameter or setting it to 0 uses the default.
  • page_token: The token that identifies the page of results to return.
Each list response includes an opaque next_page_token. To retrieve the next page, send the same request with page_token set to that value. When next_page_token is empty, there are no more results. The API uses cursor-based pagination. Each token marks where the previous page left off, so paging stays consistent even if results change between page requests. Items already returned aren’t repeated on later pages, and items aren’t skipped if others are created or cancelled while you page.

Responses

The API returns JSON for all responses, except rate-limit errors, which return plain text. A successful request returns 200 OK. Create, update, and cancel operations return the affected entitlement in the response body, so you can read back its server-assigned fields, such as id, create_time, and the current status. Link operations return the entitlement inside an entitlement object. For example, a successful create request returns:
List operations return a results array and a next_page_token. For example:
When a list request matches no results, the response returns an empty results array and an empty next_page_token.
Learn more about error responses and paginated list responses.

Dates and times

Timestamps are returned in RFC 3339 format , for example 2026-01-23T15:55:58Z.

Rate limits

Requests to the Accounts API are rate limited to 1,000 requests per minute, per distributor. There’s no separate hourly limit. If you exceed the allowed rate, the API returns a 429 Too Many Requests response with a Retry-After header that indicates how long to wait before retrying. Unlike other error responses, the 429 response body is plain text, not JSON.

Errors

The API uses standard HTTP status codes to indicate the result of a request. A 2xx code indicates success. A 4xx code indicates a problem with the request (for example, missing authentication or invalid input). A 5xx code indicates an unexpected server error. Most error responses include a JSON body with a machine-readable code and a human-readable message:
429 Too Many Requests responses don’t use this JSON format. See the rate limits section for more information about this error response.

Entitlement statuses

An entitlement’s status field reflects its position in the lifecycle: