Legacy (v0)
Update an enrollment pack
Update an enrollment pack. Send only the fields to change under enrollment_pack. When you send member_enrollable_products_attributes or subscription_enrollable_products_attributes, the list replaces the pack’s current products of that kind: existing entries whose id you omit are removed. Mark other nested entries for removal with _destroy: true. Text is written in the language named by language_iso (the default language when omitted; a language the company does not support returns 422). Returns 404 when the pack does not belong to the company, or 422 with field errors. Admin users, company API tokens, and partner tokens need the enrollment_packs update permission.
PATCH
/
api
/
enrollment_packs
/
{id}
Update an enrollment pack
curl --request PATCH \
--url https://api.fluid.app/api/enrollment_packs/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enrollment_pack": {
"title": "Branch Starter Kit 2027",
"enrollment_fee": 35,
"member_enrollable_products_attributes": [
{
"id": 40117,
"variant_id": 90417
},
{
"variant_id": 90502
}
],
"images_attributes": [
{
"id": 7304,
"_destroy": true
}
]
}
}
'import requests
url = "https://api.fluid.app/api/enrollment_packs/{id}"
payload = { "enrollment_pack": {
"title": "Branch Starter Kit 2027",
"enrollment_fee": 35,
"member_enrollable_products_attributes": [{
"id": 40117,
"variant_id": 90417
}, { "variant_id": 90502 }],
"images_attributes": [
{
"id": 7304,
"_destroy": True
}
]
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enrollment_pack: {
title: 'Branch Starter Kit 2027',
enrollment_fee: 35,
member_enrollable_products_attributes: [{id: 40117, variant_id: 90417}, {variant_id: 90502}],
images_attributes: [{id: 7304, _destroy: true}]
}
})
};
fetch('https://api.fluid.app/api/enrollment_packs/{id}', 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.fluid.app/api/enrollment_packs/{id}",
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([
'enrollment_pack' => [
'title' => 'Branch Starter Kit 2027',
'enrollment_fee' => 35,
'member_enrollable_products_attributes' => [
[
'id' => 40117,
'variant_id' => 90417
],
[
'variant_id' => 90502
]
],
'images_attributes' => [
[
'id' => 7304,
'_destroy' => true
]
]
]
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/enrollment_packs/{id}"
payload := strings.NewReader("{\n \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\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))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/enrollment_packs/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/enrollment_packs/{id}")
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 \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"enrollment_pack": {
"enrollment_pack_id": 5120,
"active": true,
"additional_volume": 25,
"application_theme_template_id": null,
"canonical_url": "https://shop.dundermifflin.com/home/enrollments/branch-starter-kit",
"country_ids": [
214
],
"custom_slug": false,
"description": {
"body": "<div>Everything a new Dunder Mifflin rep needs on day one.</div>",
"created_at": "2026-09-08T16:20:03.512Z",
"id": 88213,
"locale": "en",
"name": "description",
"record_id": 5120,
"record_type": "EnrollmentPack",
"updated_at": "2026-09-08T16:20:03.512Z"
},
"enrollment_fee": "35.0",
"enrollment_pack_agreements": [
{
"id": 6021,
"agreement_id": 1188,
"required": true,
"position": 0
}
],
"images": [],
"member_enrollable_products": [
{
"id": 40117,
"product_id": 48213,
"variant_id": 90417
},
{
"id": 40163,
"product_id": 48251,
"variant_id": 90502
}
],
"membership_after_one_month": false,
"membership_optional": true,
"search_engine_optimizer": {
"id": 7719,
"title": "Branch Starter Kit | Dunder Mifflin",
"description": "Start selling with the Dunder Mifflin Branch Starter Kit.",
"image_url": null,
"image_path": null,
"block_crawler": false
},
"slug": "branch-starter-kit",
"status": "active",
"subscription_enrollable_products": [
{
"id": 40118,
"product_id": 48240,
"variant_id": 90466,
"subscription_plan_id": 318
}
],
"title": "Branch Starter Kit 2027",
"token": "Vq7Lm2XcR9tPkd4NwB8sHz3E"
},
"meta": {
"request_id": "5b0f7e2c-3d41-4a8e-9c6b-7f21d8e4a913",
"timestamp": "2026-09-14T15:32:08Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"scheduled_date": "2026-12-10",
"last_bill_date": "2026-11-10",
"requested_date": "2026-11-30",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}Body
application/json
⌘I
Update an enrollment pack
curl --request PATCH \
--url https://api.fluid.app/api/enrollment_packs/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enrollment_pack": {
"title": "Branch Starter Kit 2027",
"enrollment_fee": 35,
"member_enrollable_products_attributes": [
{
"id": 40117,
"variant_id": 90417
},
{
"variant_id": 90502
}
],
"images_attributes": [
{
"id": 7304,
"_destroy": true
}
]
}
}
'import requests
url = "https://api.fluid.app/api/enrollment_packs/{id}"
payload = { "enrollment_pack": {
"title": "Branch Starter Kit 2027",
"enrollment_fee": 35,
"member_enrollable_products_attributes": [{
"id": 40117,
"variant_id": 90417
}, { "variant_id": 90502 }],
"images_attributes": [
{
"id": 7304,
"_destroy": True
}
]
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enrollment_pack: {
title: 'Branch Starter Kit 2027',
enrollment_fee: 35,
member_enrollable_products_attributes: [{id: 40117, variant_id: 90417}, {variant_id: 90502}],
images_attributes: [{id: 7304, _destroy: true}]
}
})
};
fetch('https://api.fluid.app/api/enrollment_packs/{id}', 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.fluid.app/api/enrollment_packs/{id}",
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([
'enrollment_pack' => [
'title' => 'Branch Starter Kit 2027',
'enrollment_fee' => 35,
'member_enrollable_products_attributes' => [
[
'id' => 40117,
'variant_id' => 90417
],
[
'variant_id' => 90502
]
],
'images_attributes' => [
[
'id' => 7304,
'_destroy' => true
]
]
]
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/enrollment_packs/{id}"
payload := strings.NewReader("{\n \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\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))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/enrollment_packs/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/enrollment_packs/{id}")
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 \"enrollment_pack\": {\n \"title\": \"Branch Starter Kit 2027\",\n \"enrollment_fee\": 35,\n \"member_enrollable_products_attributes\": [\n {\n \"id\": 40117,\n \"variant_id\": 90417\n },\n {\n \"variant_id\": 90502\n }\n ],\n \"images_attributes\": [\n {\n \"id\": 7304,\n \"_destroy\": true\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"enrollment_pack": {
"enrollment_pack_id": 5120,
"active": true,
"additional_volume": 25,
"application_theme_template_id": null,
"canonical_url": "https://shop.dundermifflin.com/home/enrollments/branch-starter-kit",
"country_ids": [
214
],
"custom_slug": false,
"description": {
"body": "<div>Everything a new Dunder Mifflin rep needs on day one.</div>",
"created_at": "2026-09-08T16:20:03.512Z",
"id": 88213,
"locale": "en",
"name": "description",
"record_id": 5120,
"record_type": "EnrollmentPack",
"updated_at": "2026-09-08T16:20:03.512Z"
},
"enrollment_fee": "35.0",
"enrollment_pack_agreements": [
{
"id": 6021,
"agreement_id": 1188,
"required": true,
"position": 0
}
],
"images": [],
"member_enrollable_products": [
{
"id": 40117,
"product_id": 48213,
"variant_id": 90417
},
{
"id": 40163,
"product_id": 48251,
"variant_id": 90502
}
],
"membership_after_one_month": false,
"membership_optional": true,
"search_engine_optimizer": {
"id": 7719,
"title": "Branch Starter Kit | Dunder Mifflin",
"description": "Start selling with the Dunder Mifflin Branch Starter Kit.",
"image_url": null,
"image_path": null,
"block_crawler": false
},
"slug": "branch-starter-kit",
"status": "active",
"subscription_enrollable_products": [
{
"id": 40118,
"product_id": 48240,
"variant_id": 90466,
"subscription_plan_id": 318
}
],
"title": "Branch Starter Kit 2027",
"token": "Vq7Lm2XcR9tPkd4NwB8sHz3E"
},
"meta": {
"request_id": "5b0f7e2c-3d41-4a8e-9c6b-7f21d8e4a913",
"timestamp": "2026-09-14T15:32:08Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"scheduled_date": "2026-12-10",
"last_bill_date": "2026-11-10",
"requested_date": "2026-11-30",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}