curl --request PUT \
--url https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-Client-Id: <x-client-id>' \
--data '
{
"amount_minor": 2,
"sku": "<string>",
"currency": "USD"
}
'import requests
url = "https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing"
payload = {
"amount_minor": 2,
"sku": "<string>",
"currency": "USD"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-Client-Id": "<x-client-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-Client-Id': '<x-client-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount_minor: 2, sku: '<string>', currency: 'USD'})
};
fetch('https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing', 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.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing",
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([
'amount_minor' => 2,
'sku' => '<string>',
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-Client-Id: <x-client-id>"
],
]);
$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.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing"
payload := strings.NewReader("{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-Client-Id", "<x-client-id>")
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))
}HttpResponse<String> response = Unirest.put("https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Client-Id", "<x-client-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Client-Id"] = '<x-client-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount_minor": 123,
"brand_id": "<string>",
"currency": "USD",
"id": "<string>",
"sku_id": "<string>",
"min_price": 123
}
}{
"data": {
"amount_minor": 123,
"brand_id": "<string>",
"currency": "USD",
"id": "<string>",
"sku_id": "<string>",
"min_price": 123
}
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}Set your brand's price for an offering
Sets the price your patients pay for one of your brand’s offerings. Send the offering code and the new price in integer minor units (USD cents); the price takes effect immediately — the next checkout for your brand resolves it. Before anything is stored, the price is validated against your account’s per-transaction cost floor: a price below the floor is rejected and the response names the floor so you can correct and retry. You can price only brands that belong to your account. A rejected request stores nothing and does not consume the Idempotency-Key, so a corrected retry may reuse the same key; repeating a completed request with the same Idempotency-Key and body returns the original result. Every price change is recorded in your brand’s audit trail, attributed to your account.
curl --request PUT \
--url https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-Client-Id: <x-client-id>' \
--data '
{
"amount_minor": 2,
"sku": "<string>",
"currency": "USD"
}
'import requests
url = "https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing"
payload = {
"amount_minor": 2,
"sku": "<string>",
"currency": "USD"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-Client-Id": "<x-client-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-Client-Id': '<x-client-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount_minor: 2, sku: '<string>', currency: 'USD'})
};
fetch('https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing', 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.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing",
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([
'amount_minor' => 2,
'sku' => '<string>',
'currency' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-Client-Id: <x-client-id>"
],
]);
$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.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing"
payload := strings.NewReader("{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-Client-Id", "<x-client-id>")
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))
}HttpResponse<String> response = Unirest.put("https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Client-Id", "<x-client-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.purplelabelmd.com/v1/account/brands/{brand_id}/pricing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Client-Id"] = '<x-client-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount_minor\": 2,\n \"sku\": \"<string>\",\n \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount_minor": 123,
"brand_id": "<string>",
"currency": "USD",
"id": "<string>",
"sku_id": "<string>",
"min_price": 123
}
}{
"data": {
"amount_minor": 123,
"brand_id": "<string>",
"currency": "USD",
"id": "<string>",
"sku_id": "<string>",
"min_price": 123
}
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}{
"status": 123,
"title": "<string>",
"code": "<string>",
"detail": "<string>",
"instance": "<string>",
"type": "<string>"
}Authorizations
Per-client API key (M2M). Presented as Authorization: Bearer <key>.
Headers
Required on every mutation. Replaying the same request with the same key returns the original result; reusing the key with a materially different request is rejected 409 with machine code IDEMPOTENCY_CONFLICT.
1Identifies your account. The platform sets this header from your API key when the request is authenticated — you do not send it yourself, and a value you supply is never trusted. Requests without a resolved account identity answer 401 before any processing, and every write is attributed to this identity in the audit trail.
1Path Parameters
The brand to price. Must be one of your account's own brands.
Body
The price to set. The brand rides the path (one of your account's own brands); the body names the offering and the new amount. The offering must already exist — a price never creates one.
Response
price row updated — or an idempotent replay of the original write
The price one brand charges for one offering. A price row is configuration, not a charge — the charge happens at checkout, which resolves this row.
Show child attributes
Show child attributes