Cancel an entitlement
curl --request DELETE \
--url https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement} \
--header 'Authorization: Bearer <token>'const url = 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}';
const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
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}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.delete("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
.header("Authorization", "Bearer <token>")
.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 => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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>")
$response = Invoke-WebRequest -Uri 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}' -Method DELETE -Headers $headersrequire '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::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
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": "cancelling",
"contact_info": {
"email": "admin@acme-corp.com",
"company_name": "Acme Corporation"
},
"create_time": "2026-09-15T10:30:00Z"
}{
"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."
}Entitlements
Cancel an entitlement
Initiate cancellation of a 1Password product entitlement for a distributor customer.
DELETE
/
v1
/
distributor-customers
/
{distributor-customer}
/
entitlements
/
{entitlement}
Cancel an entitlement
curl --request DELETE \
--url https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement} \
--header 'Authorization: Bearer <token>'const url = 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}';
const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
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}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.delete("https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}")
.header("Authorization", "Bearer <token>")
.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 => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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>")
$response = Invoke-WebRequest -Uri 'https://api.1password.eu/v1/distributor-customers/{distributor-customer}/entitlements/{entitlement}' -Method DELETE -Headers $headersrequire '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::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
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": "cancelling",
"contact_info": {
"email": "admin@acme-corp.com",
"company_name": "Acme Corporation"
},
"create_time": "2026-09-15T10:30:00Z"
}{
"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."
}When you initiate cancellation of an entitlement, its status immediately transitions to
cancelling. Background processing then completes the cancellation and transitions the status to cancelled. Poll list entitlements to check for completion.
Cancellation requests are idempotent. Repeating the request for an entitlement that’s already cancelling or cancelled returns a 200 response with the entitlement’s current state, so it’s safe to retry a request that timed out or failed.
See API conventions for more information about authentication, resource paths, pagination, filtering, and error handling.Authorizations
Path Parameters
Response
The entitlement whose cancellation was initiated, with status cancelling.
A provisioned 1Password product entitlement for a distributor customer.
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?