Create an embedded signature template draft
Uses Dropbox Sign for the organization-owned trip; provider actions exclude sample trips. Minor signers may require guardian contact details. Setup failures return 409 and temporary provider failures return 503. Creating a template draft adds it to this trip; deleting a template removes it from required templates across organization trips.
curl --request POST \
--url https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Follow up with trip participants",
"file_urls": [
"<string>"
],
"signer_roles": [
{
"name": "Follow up with trip participants",
"order": 1
}
],
"subject": "<string>",
"message": "Please review the updated trip details.",
"cc_roles": [
"<string>"
],
"test_mode": false
}
'import requests
url = "https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft"
payload = {
"title": "Follow up with trip participants",
"file_urls": ["<string>"],
"signer_roles": [
{
"name": "Follow up with trip participants",
"order": 1
}
],
"subject": "<string>",
"message": "Please review the updated trip details.",
"cc_roles": ["<string>"],
"test_mode": False
}
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({
title: 'Follow up with trip participants',
file_urls: ['<string>'],
signer_roles: [{name: 'Follow up with trip participants', order: 1}],
subject: '<string>',
message: 'Please review the updated trip details.',
cc_roles: ['<string>'],
test_mode: false
})
};
fetch('https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft', 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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft",
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([
'title' => 'Follow up with trip participants',
'file_urls' => [
'<string>'
],
'signer_roles' => [
[
'name' => 'Follow up with trip participants',
'order' => 1
]
],
'subject' => '<string>',
'message' => 'Please review the updated trip details.',
'cc_roles' => [
'<string>'
],
'test_mode' => false
]),
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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft"
payload := strings.NewReader("{\n \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft")
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 \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"template_id": "<string>",
"edit_url": "<string>",
"embedded_client_id": "<string>",
"test_mode": true,
"expires_at": "<string>",
"raw": {},
"required_esign_templates": [
"<string>"
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "<string>",
"reason_code": "<string>"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}{
"message": "<string>",
"reason_code": "<string>"
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Trip ID belonging to the authenticated organization.
Body
Request fields accepted by this operation. Omitted optional properties retain the behavior described above.
Validation: required|string|max:255.
255"Follow up with trip participants"
11Show child attributes
Show child attributes
Validation: nullable|string|max:255.
255Validation: nullable|string|max:2000.
2000"Please review the updated trip details."
255Validation: nullable|boolean.
false
Response
Create an embedded signature template draft response.
Show child attributes
Show child attributes
curl --request POST \
--url https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Follow up with trip participants",
"file_urls": [
"<string>"
],
"signer_roles": [
{
"name": "Follow up with trip participants",
"order": 1
}
],
"subject": "<string>",
"message": "Please review the updated trip details.",
"cc_roles": [
"<string>"
],
"test_mode": false
}
'import requests
url = "https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft"
payload = {
"title": "Follow up with trip participants",
"file_urls": ["<string>"],
"signer_roles": [
{
"name": "Follow up with trip participants",
"order": 1
}
],
"subject": "<string>",
"message": "Please review the updated trip details.",
"cc_roles": ["<string>"],
"test_mode": False
}
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({
title: 'Follow up with trip participants',
file_urls: ['<string>'],
signer_roles: [{name: 'Follow up with trip participants', order: 1}],
subject: '<string>',
message: 'Please review the updated trip details.',
cc_roles: ['<string>'],
test_mode: false
})
};
fetch('https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft', 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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft",
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([
'title' => 'Follow up with trip participants',
'file_urls' => [
'<string>'
],
'signer_roles' => [
[
'name' => 'Follow up with trip participants',
'order' => 1
]
],
'subject' => '<string>',
'message' => 'Please review the updated trip details.',
'cc_roles' => [
'<string>'
],
'test_mode' => false
]),
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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft"
payload := strings.NewReader("{\n \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\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.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/trips/{tripId}/esignatures/templates/embedded-draft")
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 \"title\": \"Follow up with trip participants\",\n \"file_urls\": [\n \"<string>\"\n ],\n \"signer_roles\": [\n {\n \"name\": \"Follow up with trip participants\",\n \"order\": 1\n }\n ],\n \"subject\": \"<string>\",\n \"message\": \"Please review the updated trip details.\",\n \"cc_roles\": [\n \"<string>\"\n ],\n \"test_mode\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"template_id": "<string>",
"edit_url": "<string>",
"embedded_client_id": "<string>",
"test_mode": true,
"expires_at": "<string>",
"raw": {},
"required_esign_templates": [
"<string>"
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"message": "<string>",
"reason_code": "<string>"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}{
"message": "<string>",
"reason_code": "<string>"
}