customer_portal
Rotate License Key
Rotate a license key.
Generates a new key string for the same license key record. The previous key string immediately stops validating. Status, usage, limits, expiry, and activations are preserved.
Scopes: customer_portal:write
POST
/
v1
/
customer-portal
/
license-keys
/
{id}
/
rotate
Python
from ourpay.v2026_10 import OurPay
ourpay = OurPay("ourpay_oat_xxx")
response = ourpay.customer_portal.license_keys.rotate(
'00000000-0000-4000-8000-000000000000',
)
print(response)import { createOurPay } from "@ourpay-dev/sdk/2026-10";
const ourpay = createOurPay({
accessToken: "ourpay_oat_xxx",
});
const response = await ourpay.customerPortal.licenseKeys.rotate(
"00000000-0000-4000-8000-000000000000",
);
console.log(response);
curl --request POST \
--url https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate"
req, _ := http.NewRequest("POST", 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))
}HttpResponse<String> response = Unirest.post("https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"organization_id": "<string>",
"customer_id": "<string>",
"customer": {
"id": "992fae2a-2a17-4b7a-8d9e-e287cf90131b",
"created_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"metadata": {},
"email_verified": true,
"type": "individual",
"name": "John Doe",
"billing_name": "John Doe",
"billing_address": {
"country": "US",
"line1": "<string>",
"line2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"state": "<string>"
},
"tax_id": {
"[0]": "<string>"
},
"organization_id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737",
"deleted_at": "2023-11-07T05:31:56Z",
"first_user_event_at": "2023-11-07T05:31:56Z",
"avatar_url": "https://www.gravatar.com/avatar/xxx?d=404",
"external_id": "usr_1337",
"email": "customer@example.com",
"locale": "<string>",
"default_payment_method_id": "<string>"
},
"benefit_id": "<string>",
"key": "<string>",
"display_key": "<string>",
"status": "granted",
"limit_activations": 123,
"usage": 123,
"limit_usage": 123,
"validations": 123,
"last_validated_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}{
"error": "RotateNotPermitted",
"detail": "<string>"
}{
"error": "Unauthorized",
"detail": "<string>"
}{
"error": "ResourceNotFound",
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
customer_sessionmember_session
Customer session tokens are specific tokens that are used to authenticate customers on your organization. You can create those sessions programmatically using the Create Customer Session endpoint.
Path Parameters
Response
Successful Response
The ID of the object.
Creation timestamp of the object.
Last modification timestamp of the object.
Show child attributes
Show child attributes
The benefit ID.
Available options:
granted, revoked, disabled ⌘I
Python
from ourpay.v2026_10 import OurPay
ourpay = OurPay("ourpay_oat_xxx")
response = ourpay.customer_portal.license_keys.rotate(
'00000000-0000-4000-8000-000000000000',
)
print(response)import { createOurPay } from "@ourpay-dev/sdk/2026-10";
const ourpay = createOurPay({
accessToken: "ourpay_oat_xxx",
});
const response = await ourpay.customerPortal.licenseKeys.rotate(
"00000000-0000-4000-8000-000000000000",
);
console.log(response);
curl --request POST \
--url https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate"
req, _ := http.NewRequest("POST", 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))
}HttpResponse<String> response = Unirest.post("https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ourpay.dev/v1/customer-portal/license-keys/{id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"organization_id": "<string>",
"customer_id": "<string>",
"customer": {
"id": "992fae2a-2a17-4b7a-8d9e-e287cf90131b",
"created_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"metadata": {},
"email_verified": true,
"type": "individual",
"name": "John Doe",
"billing_name": "John Doe",
"billing_address": {
"country": "US",
"line1": "<string>",
"line2": "<string>",
"postal_code": "<string>",
"city": "<string>",
"state": "<string>"
},
"tax_id": {
"[0]": "<string>"
},
"organization_id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737",
"deleted_at": "2023-11-07T05:31:56Z",
"first_user_event_at": "2023-11-07T05:31:56Z",
"avatar_url": "https://www.gravatar.com/avatar/xxx?d=404",
"external_id": "usr_1337",
"email": "customer@example.com",
"locale": "<string>",
"default_payment_method_id": "<string>"
},
"benefit_id": "<string>",
"key": "<string>",
"display_key": "<string>",
"status": "granted",
"limit_activations": 123,
"usage": 123,
"limit_usage": 123,
"validations": 123,
"last_validated_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
}{
"error": "RotateNotPermitted",
"detail": "<string>"
}{
"error": "Unauthorized",
"detail": "<string>"
}{
"error": "ResourceNotFound",
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}