curl --request PUT \
--url https://my.flowsign.app/api/v1/packages/{packageId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": [
"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"
],
"hostGroupIds": [
"cmg1hd3x10002v8p9f6r8bt4n"
],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": {
"start_date": "2026-10-12"
}
}
EOFconst options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch('https://my.flowsign.app/api/v1/packages/{packageId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch('https://my.flowsign.app/api/v1/packages/{packageId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://my.flowsign.app/api/v1/packages/{packageId}';
const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://my.flowsign.app/api/v1/packages/{packageId}"
payload = {
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": ["8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"],
"hostGroupIds": ["cmg1hd3x10002v8p9f6r8bt4n"],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": ["HR", "Onboarding"],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": { "start_date": "2026-10-12" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages/{packageId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"recipients\": [\n {\n \"name\": \"Jane Ahu\",\n \"email\": \"jane.ahu@example.co.nz\",\n \"actionType\": \"SIGNER\",\n \"delivery\": \"EMAIL\",\n \"hostRole\": \"SENDER\",\n \"hostUserIds\": [\n \"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f\"\n ],\n \"hostGroupIds\": [\n \"cmg1hd3x10002v8p9f6r8bt4n\"\n ],\n \"delay\": 60,\n \"id\": \"cmg4v8q2k0002s7xh6k4m1p9c\"\n }\n ],\n \"accessCode\": \"harbour-4821\",\n \"reminderIntervalDays\": 3,\n \"expirationDays\": 30,\n \"expiryWarningDays\": 5,\n \"tags\": [\n \"HR\",\n \"Onboarding\"\n ],\n \"metadata\": {\n \"cost_centre\": \"CC-4410\",\n \"region\": \"Auckland\"\n },\n \"mergeValues\": {\n \"start_date\": \"2026-10-12\"\n }\n}", false);
var response = await client.PutAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages/{packageId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"recipients\": [\n {\n \"name\": \"Jane Ahu\",\n \"email\": \"jane.ahu@example.co.nz\",\n \"actionType\": \"SIGNER\",\n \"delivery\": \"EMAIL\",\n \"hostRole\": \"SENDER\",\n \"hostUserIds\": [\n \"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f\"\n ],\n \"hostGroupIds\": [\n \"cmg1hd3x10002v8p9f6r8bt4n\"\n ],\n \"delay\": 60,\n \"id\": \"cmg4v8q2k0002s7xh6k4m1p9c\"\n }\n ],\n \"accessCode\": \"harbour-4821\",\n \"reminderIntervalDays\": 3,\n \"expirationDays\": 30,\n \"expiryWarningDays\": 5,\n \"tags\": [\n \"HR\",\n \"Onboarding\"\n ],\n \"metadata\": {\n \"cost_centre\": \"CC-4410\",\n \"region\": \"Auckland\"\n },\n \"mergeValues\": {\n \"start_date\": \"2026-10-12\"\n }\n}", false);
var response = await client.PutAsync(request);
Console.WriteLine("{0}", response.Content);
$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://my.flowsign.app/api/v1/packages/{packageId}' -Method PUT -Headers $headers -ContentType 'application/json' -Body '{
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": [
"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"
],
"hostGroupIds": [
"cmg1hd3x10002v8p9f6r8bt4n"
],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": {
"start_date": "2026-10-12"
}
}'{
"data": {
"id": "cmg4v8q2k0001s7xh3b9d2f6a",
"warnings": []
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}Edit a draft package
Changes a DRAFT package’s details; any other status is a 409. Every field is optional, and a field left out keeps its current value. recipients replaces the whole list: keep a recipient by carrying their id. metadata is merged over the current custom field values; unknown keys are rejected with 422. mergeValues is checked against each merge field’s type and options, and a bad value is a 422. Requires canSendPackages, and the same draft access the app requires.
curl --request PUT \
--url https://my.flowsign.app/api/v1/packages/{packageId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": [
"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"
],
"hostGroupIds": [
"cmg1hd3x10002v8p9f6r8bt4n"
],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": {
"start_date": "2026-10-12"
}
}
EOFconst options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch('https://my.flowsign.app/api/v1/packages/{packageId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch('https://my.flowsign.app/api/v1/packages/{packageId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://my.flowsign.app/api/v1/packages/{packageId}';
const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
recipients: [
{
name: 'Jane Ahu',
email: 'jane.ahu@example.co.nz',
actionType: 'SIGNER',
delivery: 'EMAIL',
hostRole: 'SENDER',
hostUserIds: ['8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f'],
hostGroupIds: ['cmg1hd3x10002v8p9f6r8bt4n'],
delay: 60,
id: 'cmg4v8q2k0002s7xh6k4m1p9c'
}
],
accessCode: 'harbour-4821',
reminderIntervalDays: 3,
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
mergeValues: {start_date: '2026-10-12'}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://my.flowsign.app/api/v1/packages/{packageId}"
payload = {
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": ["8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"],
"hostGroupIds": ["cmg1hd3x10002v8p9f6r8bt4n"],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": ["HR", "Onboarding"],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": { "start_date": "2026-10-12" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages/{packageId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"recipients\": [\n {\n \"name\": \"Jane Ahu\",\n \"email\": \"jane.ahu@example.co.nz\",\n \"actionType\": \"SIGNER\",\n \"delivery\": \"EMAIL\",\n \"hostRole\": \"SENDER\",\n \"hostUserIds\": [\n \"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f\"\n ],\n \"hostGroupIds\": [\n \"cmg1hd3x10002v8p9f6r8bt4n\"\n ],\n \"delay\": 60,\n \"id\": \"cmg4v8q2k0002s7xh6k4m1p9c\"\n }\n ],\n \"accessCode\": \"harbour-4821\",\n \"reminderIntervalDays\": 3,\n \"expirationDays\": 30,\n \"expiryWarningDays\": 5,\n \"tags\": [\n \"HR\",\n \"Onboarding\"\n ],\n \"metadata\": {\n \"cost_centre\": \"CC-4410\",\n \"region\": \"Auckland\"\n },\n \"mergeValues\": {\n \"start_date\": \"2026-10-12\"\n }\n}", false);
var response = await client.PutAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages/{packageId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"recipients\": [\n {\n \"name\": \"Jane Ahu\",\n \"email\": \"jane.ahu@example.co.nz\",\n \"actionType\": \"SIGNER\",\n \"delivery\": \"EMAIL\",\n \"hostRole\": \"SENDER\",\n \"hostUserIds\": [\n \"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f\"\n ],\n \"hostGroupIds\": [\n \"cmg1hd3x10002v8p9f6r8bt4n\"\n ],\n \"delay\": 60,\n \"id\": \"cmg4v8q2k0002s7xh6k4m1p9c\"\n }\n ],\n \"accessCode\": \"harbour-4821\",\n \"reminderIntervalDays\": 3,\n \"expirationDays\": 30,\n \"expiryWarningDays\": 5,\n \"tags\": [\n \"HR\",\n \"Onboarding\"\n ],\n \"metadata\": {\n \"cost_centre\": \"CC-4410\",\n \"region\": \"Auckland\"\n },\n \"mergeValues\": {\n \"start_date\": \"2026-10-12\"\n }\n}", false);
var response = await client.PutAsync(request);
Console.WriteLine("{0}", response.Content);
$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://my.flowsign.app/api/v1/packages/{packageId}' -Method PUT -Headers $headers -ContentType 'application/json' -Body '{
"title": "Employment agreement for Jane Ahu",
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"recipients": [
{
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz",
"actionType": "SIGNER",
"delivery": "EMAIL",
"hostRole": "SENDER",
"hostUserIds": [
"8f1c2a4e-6b3d-4c9a-9e7f-2d5b1a3c4e6f"
],
"hostGroupIds": [
"cmg1hd3x10002v8p9f6r8bt4n"
],
"delay": 60,
"id": "cmg4v8q2k0002s7xh6k4m1p9c"
}
],
"accessCode": "harbour-4821",
"reminderIntervalDays": 3,
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"mergeValues": {
"start_date": "2026-10-12"
}
}'{
"data": {
"id": "cmg4v8q2k0001s7xh3b9d2f6a",
"warnings": []
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}{
"error": "Missing permission: canSendPackages",
"details": {
"recipients.0.email": [
"Invalid email"
]
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The workspace the key was issued for, as returned by GET /api/v1/workspaces. Optional: omitting it acts in the key's workspace, and any other id is rejected with 401.
Path Parameters
Body
The package's title, shown to recipients.
1"Employment agreement for Jane Ahu"
A description of the package. An empty string clears it.
"Jane's signed agreement ahead of her 12 October start."
How recipients are walked through signing. PARALLEL invites every recipient at once; SEQUENTIAL invites one at a time in order; WORKFLOW follows the template's workflow, asking recipients its questions as they open the package.
PARALLEL, SEQUENTIAL, WORKFLOW "SEQUENTIAL"
The subject line of the invitation email. An empty string restores the default.
"Please sign your employment agreement"
A message from the sender included in the invitation email.
"Kia ora Jane, please review and sign before your start date. Tom"
Replaces the recipients, in signing order. Carry a recipient's id to keep them and the fields assigned to them; a recipient left out is removed along with their fields' assignment.
1 - 100 elementsShow child attributes
Show child attributes
A password every signing recipient must enter before signing, 4 to 64 characters. Null removes it; leaving it out keeps the current one.
4 - 64"harbour-4821"
Days between automatic reminders to each recipient who hasn't finished, counted from their invitation. Null or absent sends none.
x >= 13
Days the package stays open for signing, counted from when it is sent. Null or absent means it never expires.
x >= 130
Days before expiry at which recipients who haven't finished are warned. MUST be fewer than expirationDays.
x >= 15
Replaces the package's tags. Tags the organisation does not have yet are created.
1["HR", "Onboarding"]
Custom field values keyed by custom field key. Every key must be a live custom field that applies to this package. An empty string clears a value.
Show child attributes
Show child attributes
{
"cost_centre": "CC-4410",
"region": "Auckland"
}
Values for the package's merge fields, keyed by merge field key. Each is checked against the field's type and list options.
Show child attributes
Show child attributes
{ "start_date": "2026-10-12" }
Response
Success
Show child attributes
Show child attributes
Was this page helpful?

