Agreements
Clones multiple agreement
Clones several of the company’s agreements in one transaction and returns the new copies. Each copy keeps the source’s content, settings and countries, and every localized title gets a (Copy) suffix, or the next (Copy N) number when the source is already a copy. If any id in agreement_ids does not belong to the company the request answers 404 listing the missing ids, and nothing is cloned. Requires permission to update agreements.
POST
/
api
/
agreements
/
bulk_clone
Clones multiple agreement
curl --request POST \
--url https://api.fluid.app/api/agreements/bulk_clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agreement_ids": [
48213,
48214
]
}
'import requests
url = "https://api.fluid.app/api/agreements/bulk_clone"
payload = { "agreement_ids": [48213, 48214] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({agreement_ids: [48213, 48214]})
};
fetch('https://api.fluid.app/api/agreements/bulk_clone', 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/agreements/bulk_clone",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agreement_ids' => [
48213,
48214
]
]),
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/agreements/bulk_clone"
payload := strings.NewReader("{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/agreements/bulk_clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/agreements/bulk_clone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}"
response = http.request(request)
puts response.read_body{
"agreements": [
{
"id": 48301,
"title": "Terms and Conditions (Copy)",
"active": true,
"show_at_checkout": true,
"default_checked": false,
"required_on_checkout": true,
"subscription_only": false,
"standalone_on_checkout": false,
"content_digest": "4f7f9a2d0c6b1e8e3a5d9c7b2f1e0d4c8b6a5f3e2d1c0b9a8f7e6d5c4b3a2918",
"company_country_ids": [
2207
],
"description": "<p>By placing an order with Dunder Mifflin Paper Company you agree to these terms of sale, shipping and returns.</p>",
"show_path": "/api/agreements/48301",
"language_iso": "en",
"required": true,
"enrollment_pack_id": null,
"created_at": "2026-09-22T14:05:31Z",
"updated_at": "2026-09-22T14:05:31Z",
"company_logo": "https://cdn.fluid.app/companies/1405/logo/dunder-mifflin-logo.png",
"attachments": []
},
{
"id": 48302,
"title": "Privacy Policy (Copy)",
"active": true,
"show_at_checkout": true,
"default_checked": false,
"required_on_checkout": false,
"subscription_only": false,
"standalone_on_checkout": false,
"content_digest": "4f7f9a2d0c6b1e8e3a5d9c7b2f1e0d4c8b6a5f3e2d1c0b9a8f7e6d5c4b3a2918",
"company_country_ids": [],
"description": "<p>Dunder Mifflin Paper Company collects only the information needed to fulfill your order.</p>",
"show_path": "/api/agreements/48302",
"language_iso": "en",
"required": false,
"enrollment_pack_id": null,
"created_at": "2026-09-22T14:05:31Z",
"updated_at": "2026-09-22T14:05:31Z",
"company_logo": "https://cdn.fluid.app/companies/1405/logo/dunder-mifflin-logo.png",
"attachments": []
}
],
"meta": {
"request_id": "7f3c2a91-5d4e-4b8a-9c61-2e8f0d3b5a47",
"timestamp": "2026-09-22T14:05:31Z"
}
}{
"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
}
}⌘I
Clones multiple agreement
curl --request POST \
--url https://api.fluid.app/api/agreements/bulk_clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agreement_ids": [
48213,
48214
]
}
'import requests
url = "https://api.fluid.app/api/agreements/bulk_clone"
payload = { "agreement_ids": [48213, 48214] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({agreement_ids: [48213, 48214]})
};
fetch('https://api.fluid.app/api/agreements/bulk_clone', 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/agreements/bulk_clone",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agreement_ids' => [
48213,
48214
]
]),
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/agreements/bulk_clone"
payload := strings.NewReader("{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/agreements/bulk_clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/agreements/bulk_clone")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agreement_ids\": [\n 48213,\n 48214\n ]\n}"
response = http.request(request)
puts response.read_body{
"agreements": [
{
"id": 48301,
"title": "Terms and Conditions (Copy)",
"active": true,
"show_at_checkout": true,
"default_checked": false,
"required_on_checkout": true,
"subscription_only": false,
"standalone_on_checkout": false,
"content_digest": "4f7f9a2d0c6b1e8e3a5d9c7b2f1e0d4c8b6a5f3e2d1c0b9a8f7e6d5c4b3a2918",
"company_country_ids": [
2207
],
"description": "<p>By placing an order with Dunder Mifflin Paper Company you agree to these terms of sale, shipping and returns.</p>",
"show_path": "/api/agreements/48301",
"language_iso": "en",
"required": true,
"enrollment_pack_id": null,
"created_at": "2026-09-22T14:05:31Z",
"updated_at": "2026-09-22T14:05:31Z",
"company_logo": "https://cdn.fluid.app/companies/1405/logo/dunder-mifflin-logo.png",
"attachments": []
},
{
"id": 48302,
"title": "Privacy Policy (Copy)",
"active": true,
"show_at_checkout": true,
"default_checked": false,
"required_on_checkout": false,
"subscription_only": false,
"standalone_on_checkout": false,
"content_digest": "4f7f9a2d0c6b1e8e3a5d9c7b2f1e0d4c8b6a5f3e2d1c0b9a8f7e6d5c4b3a2918",
"company_country_ids": [],
"description": "<p>Dunder Mifflin Paper Company collects only the information needed to fulfill your order.</p>",
"show_path": "/api/agreements/48302",
"language_iso": "en",
"required": false,
"enrollment_pack_id": null,
"created_at": "2026-09-22T14:05:31Z",
"updated_at": "2026-09-22T14:05:31Z",
"company_logo": "https://cdn.fluid.app/companies/1405/logo/dunder-mifflin-logo.png",
"attachments": []
}
],
"meta": {
"request_id": "7f3c2a91-5d4e-4b8a-9c61-2e8f0d3b5a47",
"timestamp": "2026-09-22T14:05:31Z"
}
}{
"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
}
}