curl --request POST \
--url https://my.flowsign.app/api/v1/packages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}
EOFconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
fetch('https://my.flowsign.app/api/v1/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
fetch('https://my.flowsign.app/api/v1/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://my.flowsign.app/api/v1/packages';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
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"
payload = {
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": ["HR", "Onboarding"],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\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 }\n ],\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"accessCode\": \"harbour-4821\",\n \"externalId\": \"crm-deal-48213\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"reminderIntervalDays\": 3,\n \"scheduledAt\": \"2026-10-01T20:00:00.000Z\",\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 \"documents\": []\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\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 }\n ],\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"accessCode\": \"harbour-4821\",\n \"externalId\": \"crm-deal-48213\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"reminderIntervalDays\": 3,\n \"scheduledAt\": \"2026-10-01T20:00:00.000Z\",\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 \"documents\": []\n}", false);
var response = await client.PostAsync(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' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}'{
"data": {
"id": "cmg4v8q2k0001s7xh3b9d2f6a",
"recipients": [
{
"id": "cmg4v8q2k0002s7xh6k4m1p9c",
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz"
}
],
"documents": [
{
"id": "cmg4v8q2k0003s7xhq1w8n5r7",
"nonce": "doc-1",
"filePath": "cmf9x1a2b0000abcd1e2f3g4h/cmf9x1a2b0001abcd5i6j7k8l/packages/cmg4v8q2k0001s7xh3b9d2f6a/cmg4v8q2k0003s7xhq1w8n5r7-Employment agreement.pdf",
"uploadUrl": "https://xyzcompany.supabase.co/storage/v1/object/upload/sign/pdf/cmf9x1a2b0000abcd1e2f3g4h/cmf9x1a2b0001abcd5i6j7k8l/packages/cmg4v8q2k0001s7xh3b9d2f6a/cmg4v8q2k0003s7xhq1w8n5r7-Employment%20agreement.pdf?token=eyJhbGciOiJIUzI1NiJ9.example"
}
]
}
}{
"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"
]
}
}Create a package
Creates a DRAFT package, or a SCHEDULED one when scheduledAt is set. Requires canSendPackages.
curl --request POST \
--url https://my.flowsign.app/api/v1/packages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}
EOFconst options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
fetch('https://my.flowsign.app/api/v1/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
fetch('https://my.flowsign.app/api/v1/packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://my.flowsign.app/api/v1/packages';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Employment agreement for Jane Ahu',
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
}
],
description: 'Jane\'s signed agreement ahead of her 12 October start.',
signingMode: 'SEQUENTIAL',
accessCode: 'harbour-4821',
externalId: 'crm-deal-48213',
emailSubject: 'Please sign your employment agreement',
emailMessage: 'Kia ora Jane, please review and sign before your start date. Tom',
reminderIntervalDays: 3,
scheduledAt: '2026-10-01T20:00:00.000Z',
expirationDays: 30,
expiryWarningDays: 5,
tags: ['HR', 'Onboarding'],
metadata: {cost_centre: 'CC-4410', region: 'Auckland'},
documents: []
})
};
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"
payload = {
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": ["HR", "Onboarding"],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\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 }\n ],\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"accessCode\": \"harbour-4821\",\n \"externalId\": \"crm-deal-48213\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"reminderIntervalDays\": 3,\n \"scheduledAt\": \"2026-10-01T20:00:00.000Z\",\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 \"documents\": []\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://my.flowsign.app/api/v1/packages");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"title\": \"Employment agreement for Jane Ahu\",\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 }\n ],\n \"description\": \"Jane's signed agreement ahead of her 12 October start.\",\n \"signingMode\": \"SEQUENTIAL\",\n \"accessCode\": \"harbour-4821\",\n \"externalId\": \"crm-deal-48213\",\n \"emailSubject\": \"Please sign your employment agreement\",\n \"emailMessage\": \"Kia ora Jane, please review and sign before your start date. Tom\",\n \"reminderIntervalDays\": 3,\n \"scheduledAt\": \"2026-10-01T20:00:00.000Z\",\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 \"documents\": []\n}", false);
var response = await client.PostAsync(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' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"title": "Employment agreement for Jane Ahu",
"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
}
],
"description": "Jane's signed agreement ahead of her 12 October start.",
"signingMode": "SEQUENTIAL",
"accessCode": "harbour-4821",
"externalId": "crm-deal-48213",
"emailSubject": "Please sign your employment agreement",
"emailMessage": "Kia ora Jane, please review and sign before your start date. Tom",
"reminderIntervalDays": 3,
"scheduledAt": "2026-10-01T20:00:00.000Z",
"expirationDays": 30,
"expiryWarningDays": 5,
"tags": [
"HR",
"Onboarding"
],
"metadata": {
"cost_centre": "CC-4410",
"region": "Auckland"
},
"documents": []
}'{
"data": {
"id": "cmg4v8q2k0001s7xh3b9d2f6a",
"recipients": [
{
"id": "cmg4v8q2k0002s7xh6k4m1p9c",
"name": "Jane Ahu",
"email": "jane.ahu@example.co.nz"
}
],
"documents": [
{
"id": "cmg4v8q2k0003s7xhq1w8n5r7",
"nonce": "doc-1",
"filePath": "cmf9x1a2b0000abcd1e2f3g4h/cmf9x1a2b0001abcd5i6j7k8l/packages/cmg4v8q2k0001s7xh3b9d2f6a/cmg4v8q2k0003s7xhq1w8n5r7-Employment agreement.pdf",
"uploadUrl": "https://xyzcompany.supabase.co/storage/v1/object/upload/sign/pdf/cmf9x1a2b0000abcd1e2f3g4h/cmf9x1a2b0001abcd5i6j7k8l/packages/cmg4v8q2k0001s7xh3b9d2f6a/cmg4v8q2k0003s7xhq1w8n5r7-Employment%20agreement.pdf?token=eyJhbGciOiJIUzI1NiJ9.example"
}
]
}
}{
"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.
Body
The package's title, shown to recipients.
1"Employment agreement for Jane Ahu"
The people the package goes to, in signing order. At least one and at most 100.
1 - 100 elementsShow child attributes
Show child attributes
A description of the package. Defaults to "Package with N documents" when omitted.
"Jane's signed agreement ahead of her 12 October start."
PARALLEL (the default) invites everyone at once; SEQUENTIAL invites one recipient at a time in the order given. WORKFLOW is refused here, since a workflow is drawn in the app or comes from a template.
PARALLEL, SEQUENTIAL, WORKFLOW "SEQUENTIAL"
A password every signing recipient must enter before signing, 4 to 64 characters. Stored only as a hash.
4 - 64"harbour-4821"
Your own identifier for the package, unique within the organisation. Find the package by it with GET /api/v1/packages/by-external-id/:externalId. A second package with the same value is a 409.
1 - 255"crm-deal-48213"
The subject line of the invitation email. Omit for the default subject.
"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"
Days between automatic reminders to each recipient who hasn't finished, counted from their invitation. Null or absent sends none.
x >= 13
An ISO 8601 time to send the package automatically. Creates it as SCHEDULED rather than DRAFT, and needs at least one document.
"2026-10-01T20:00:00.000Z"
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
Tag names to attach to the package.
A tag name. Tags the organisation does not have yet are created.
["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. Unknown keys are rejected with 422, and so are missing required values when scheduledAt is set.
Show child attributes
Show child attributes
{ "cost_centre": "CC-4410", "region": "Auckland" }
The PDFs to attach. Each comes back with an upload URL for its bytes. May be empty for a draft that takes its documents from the library through POST /api/v1/packages/:packageId/library-documents; a scheduled package needs at least one.
Show child attributes
Show child attributes
Response
Success
Show child attributes
Show child attributes
Was this page helpful?

