curl --request PATCH \
--url https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
}
}
'const url = 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}';
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_info: {email: 'new-admin@acme-corp.com', company_name: 'Acme Corporation Ltd'}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
payload = { "contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
payload := strings.NewReader("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}using RestSharp;
var options = new RestClientOptions("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.patch("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'contact_info' => [
'email' => 'new-admin@acme-corp.com',
'company_name' => 'Acme Corporation Ltd'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}' -Method PATCH -Headers $headers -ContentType 'application/json' -Body '{
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
}
}'require 'uri'
require 'net/http'
url = URI("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}"
response = http.request(request)
puts response.read_body{
"path": "distributor-customers/cust_789xyz/entitlements/ent_abc123def456",
"id": "ent_abc123def456",
"customer_id": "cust_789xyz",
"product_id": "1p-msp-us",
"status": "pending",
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
},
"create_time": "2026-09-15T10:30:00Z"
}{
"code": "invalid_argument",
"message": "The 'email' field must be a valid email address."
}{
"code": "unauthenticated",
"message": "Authentication required. Please provide a valid bearer token."
}{
"code": "not_found",
"message": "The requested resource was not found."
}"Too Many Requests"{
"code": "internal",
"message": "An internal error occurred. Please try again later."
}Update an entitlement
Update a pending 1Password product entitlement for a distributor customer.
curl --request PATCH \
--url https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
}
}
'const url = 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}';
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_info: {email: 'new-admin@acme-corp.com', company_name: 'Acme Corporation Ltd'}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
payload = { "contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
payload := strings.NewReader("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}using RestSharp;
var options = new RestClientOptions("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.patch("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'contact_info' => [
'email' => 'new-admin@acme-corp.com',
'company_name' => 'Acme Corporation Ltd'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}' -Method PATCH -Headers $headers -ContentType 'application/json' -Body '{
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
}
}'require 'uri'
require 'net/http'
url = URI("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_info\": {\n \"email\": \"new-admin@acme-corp.com\",\n \"company_name\": \"Acme Corporation Ltd\"\n }\n}"
response = http.request(request)
puts response.read_body{
"path": "distributor-customers/cust_789xyz/entitlements/ent_abc123def456",
"id": "ent_abc123def456",
"customer_id": "cust_789xyz",
"product_id": "1p-msp-us",
"status": "pending",
"contact_info": {
"email": "new-admin@acme-corp.com",
"company_name": "Acme Corporation Ltd"
},
"create_time": "2026-09-15T10:30:00Z"
}{
"code": "invalid_argument",
"message": "The 'email' field must be a valid email address."
}{
"code": "unauthenticated",
"message": "Authentication required. Please provide a valid bearer token."
}{
"code": "not_found",
"message": "The requested resource was not found."
}"Too Many Requests"{
"code": "internal",
"message": "An internal error occurred. Please try again later."
}pending can be updated. Attempting to update an entitlement in any other state returns an error.
Use the optional update_mask query parameter to specify exactly which fields to update. See the update_mask parameter reference for the supported values.Authorizations
Bearer token authentication. When a distributor is registered, they receive an opaque bearer token (prefixed op_b_). Include it in the Authorization header of every request as Bearer <token>.
Path Parameters
The customer ID, as defined in the distributor's own system.
The entitlement ID.
Query Parameters
An optional comma-separated list of fields to update. If omitted, any supported fields provided in the request body are updated. Supported values: contact_info.email, contact_info.company_name, contact_info, and *.
Body
The entitlement resource containing the updated field values.
Response
The updated entitlement.
A provisioned 1Password product entitlement for a distributor customer.
The canonical resource path of the entitlement (for example, "distributor-customers/{customer_id}/entitlements/{id}"). Use the IDs in this path to update or cancel the entitlement.
The unique identifier for this entitlement.
The ID of the marketplace customer who owns this entitlement. This is the distributor-defined ID from the request path that created the entitlement.
The ID of the 1Password product. Required on create; immutable thereafter.
The entitlement lifecycle state.
pending, active, cancelling, cancelled, expired, suspended The customer's contact details for account setup.
Show child attributes
Show child attributes
The date and time the entitlement was created.
The date and time the entitlement expires. Set only for change-of-channel entitlements created by linking an entitlement, and omitted for standard entitlements. Customers have 5 days to claim the emailed entitlement code against their existing 1Password account. Claiming the code completes the link; otherwise, the entitlement transitions to expired at this time.
Was this page helpful?