Set Product Feature Access
curl --request PUT \
--url https://api.example.com/v1/products/{productKey}/feature-access \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"featureAccess": [
{
"featureKey": "<string>",
"hasAccess": true,
"limit": 1,
"isUnlimited": true
}
]
}
'import requests
url = "https://api.example.com/v1/products/{productKey}/feature-access"
payload = { "featureAccess": [
{
"featureKey": "<string>",
"hasAccess": True,
"limit": 1,
"isUnlimited": True
}
] }
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
featureAccess: [{featureKey: '<string>', hasAccess: true, limit: 1, isUnlimited: true}]
})
};
fetch('https://api.example.com/v1/products/{productKey}/feature-access', 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.example.com/v1/products/{productKey}/feature-access",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'featureAccess' => [
[
'featureKey' => '<string>',
'hasAccess' => true,
'limit' => 1,
'isUnlimited' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/products/{productKey}/feature-access"
payload := strings.NewReader("{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
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))
}HttpResponse<String> response = Unirest.put("https://api.example.com/v1/products/{productKey}/feature-access")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/products/{productKey}/feature-access")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"key": "<string>",
"name": "<string>",
"isDefault": true,
"version": 123,
"stripeProductId": "<string>",
"metadata": {},
"prices": [
{
"id": "<string>",
"stripePriceId": "<string>",
"currency": "<string>",
"unitAmount": 123,
"recurringInterval": "<string>",
"recurringIntervalCount": 123,
"isActive": true,
"isDefault": true
}
],
"featureAccess": [
{
"featureKey": "<string>",
"name": "<string>",
"hasAccess": true,
"limit": 123,
"isUnlimited": true
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Products
Set Product Feature Access
Replace the complete feature access configuration for the latest product version.
PUT
/
v1
/
products
/
{productKey}
/
feature-access
Set Product Feature Access
curl --request PUT \
--url https://api.example.com/v1/products/{productKey}/feature-access \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"featureAccess": [
{
"featureKey": "<string>",
"hasAccess": true,
"limit": 1,
"isUnlimited": true
}
]
}
'import requests
url = "https://api.example.com/v1/products/{productKey}/feature-access"
payload = { "featureAccess": [
{
"featureKey": "<string>",
"hasAccess": True,
"limit": 1,
"isUnlimited": True
}
] }
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
featureAccess: [{featureKey: '<string>', hasAccess: true, limit: 1, isUnlimited: true}]
})
};
fetch('https://api.example.com/v1/products/{productKey}/feature-access', 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.example.com/v1/products/{productKey}/feature-access",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'featureAccess' => [
[
'featureKey' => '<string>',
'hasAccess' => true,
'limit' => 1,
'isUnlimited' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/products/{productKey}/feature-access"
payload := strings.NewReader("{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
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))
}HttpResponse<String> response = Unirest.put("https://api.example.com/v1/products/{productKey}/feature-access")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/products/{productKey}/feature-access")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"featureAccess\": [\n {\n \"featureKey\": \"<string>\",\n \"hasAccess\": true,\n \"limit\": 1,\n \"isUnlimited\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"key": "<string>",
"name": "<string>",
"isDefault": true,
"version": 123,
"stripeProductId": "<string>",
"metadata": {},
"prices": [
{
"id": "<string>",
"stripePriceId": "<string>",
"currency": "<string>",
"unitAmount": 123,
"recurringInterval": "<string>",
"recurringIntervalCount": 123,
"isActive": true,
"isDefault": true
}
],
"featureAccess": [
{
"featureKey": "<string>",
"name": "<string>",
"hasAccess": true,
"limit": 123,
"isUnlimited": true
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Headers
API key from your PriceOS dashboard.
Path Parameters
Product key.
Body
application/json
Complete desired feature access configuration for the product.
Show child attributes
Show child attributes
Response
Product feature access updated
Product.
Product ID.
Product key.
Product name.
Product type.
Available options:
stripe, custom Whether this is the default custom product.
Product version number.
Stripe product ID (Stripe products only).
Custom product metadata (custom products only).
Show child attributes
Show child attributes
Stripe prices linked to the product.
Show child attributes
Show child attributes
Feature access entries configured for this product.
Show child attributes
Show child attributes
⌘I