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, keeping the current value of any field left out. Requires canSendPackages and edit access to the draft.
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. WORKFLOW is a 422 unless the draft already has a workflow, since a workflow is drawn in the app or comes from a template. A recipient's delay is only kept while this is SEQUENTIAL.
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. An id the package does not have is a 422.
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, merged over the current values. Every key must be a live custom field that applies to this package; an unknown key is a 422. 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, and a bad value is a 422.
Show child attributes
Show child attributes
{ "start_date": "2026-10-12" }
Response
Success
Show child attributes
Show child attributes
Was this page helpful?

