Packages
Status
GET
/
packages
/
{packageId}
/
status
Status
curl --request GET \
--url https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"packageId": "<string>"
}
'import requests
url = "https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status"
payload = { "packageId": "<string>" }
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({packageId: '<string>'})
};
fetch('https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status', 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://sandbox.syngrafii.com/api/v1/packages/{packageId}/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'packageId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api_key: <api-key>"
],
]);
$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://sandbox.syngrafii.com/api/v1/packages/{packageId}/status"
payload := strings.NewReader("{\n \"packageId\": \"<string>\"\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("api_key", "<api-key>")
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.get("https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"packageId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"packageId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"packageId": "<string>",
"organizationId": "<string>",
"memberId": "<string>",
"name": "<string>",
"timeSignBy": "<string>",
"type": "<string>",
"state": "<string>",
"externalData": {},
"isExecuted": true,
"documents": [
{
"packageId": "<string>",
"documentId": "<string>",
"fileId": "<string>",
"externalId": "<string>",
"name": "<string>",
"fileName": "<string>",
"order": 123,
"isExecuted": true,
"revisions": [
{
"packageId": "<string>",
"documentId": "<string>",
"revisionId": "<string>",
"signerId": "<string>",
"link": "<string>",
"isNext": true,
"isSigned": true
}
]
}
],
"signers": [
{
"signerId": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"mobileNumber": "<string>",
"order": 123,
"links": [
{
"token": "<string>",
"packageId": "<string>",
"documentId": "<string>",
"revisionId": "<string>",
"name": "<string>",
"link": "<string>",
"timeExpires": "<string>",
"type": "<string>",
"isNext": true,
"isSigned": true
}
]
}
]
}At any time you can get the status of a package by calling
packages/{packageId}/status endpoint.
Depending on your needs you may want to process the documents or signers array (sometimes both).
Package status will not contain links unless you set generateSignerLinks to true when calling packages/add.
Request
Request
GET /packages/{packageId}/status
Parameters
string
required
Unique identifier of the package to retrieve status for.
Response
string
Unique identifier for the package.
string
Unique identifier for the organization.
string
Unique identifier for the member who owns the package.
string
Name of the package.
string
Date by which the package should be signed (ISO 8601 format).
string
Type of the package.
Show values
Show values
| Value | Description |
|---|---|
| concurrent | Concurrent: Allows multiple signers to sign the document simultaneously. |
| Sequential | Sequential: Requires signers to sign the document in a specific order. |
| Counterpart | Group Send: Enables group signing, where all signers receive the document at the same time. |
| video_closing_room | Video Signing Room: A virtual room for signing documents via video conference. |
| Live Session | In Person: An in-person signing session with all parties present. |
Even though the signing workflow names have evolved, the constants used to identify them have remained the same.
The package type constants are case-sensitive. Ensure that you use the exact casing as shown in the table above when specifying package types in your API requests.
string
Current state of the package.
Show values
Show values
New package states may be added in future releases. It is recommended that you always validate your integration against the sandbox before new releases are deployed into production.
Release 4.0 introduces two new package states,
executed and expired. In 3.6 both executed and expired packages were in an open state.| Value | Version | Description |
|---|---|---|
| draft | 1.0 | Package will be added in a draft state. Notifications will not be sent to the signer(s). You must call the send API, or the package owner must manually send the package from within iinked Sign. |
| open | 1.0 | The package will be ready for signing, and notifications will be sent to the signer(s) if enabled. |
| executed | 4.0 | The package has been fully executed by all signers. |
| expired | 4.0 | The package was not signed by the sign by date and has now expired. VSR packages will expire 7 days after their scheduled meeting date. |
| rescinded | 3.5 | The package was rescinded and is no longer available for signing. |
| select | 3.6 | Use the select state only when the package will be opened in the embedded package editor and you want the workflow to prompt the user to choose a package type. Packages in the select state will be automatically deleted if not converted to draft or open within 24 hours. |
| add | 2.9 | Use the add state only when the package will be opened in the embedded package editor and you want the workflow to function as if you’re creating a new package, rather than editing an existing one. Packages in the add state will be automatically deleted if not converted to draft or open within 24 hours. |
object
External data associated with the package.
boolean
Set to
true if all documents have been signed by all signers.object[]
List of documents in the package.
Show properties
Show properties
string
Unique identifier for the package.
string
Unique identifier for the document.
string
Unique identifier for the file associated with the document.
string
External system identifier for the document, if available.
string
Name of the document.
string
File name of the document.
number
Order of the document in the package.
boolean
Set to
true if document has been signed by all signers.object[]
List of revisions for the document.
Show Properties
Show Properties
string
Unique identifier for the package.
string
Unique identifier for the document.
string
Unique identifier for the revision.
string
Unique identifier for the signer.
string
Link for signer to sign their revision of document.
boolean
Set to
true if signer is next signer in sequential signing.boolean
Set to
true if signer has signed their revision of document.object[]
List of signers for the package.
Show properties
Show properties
string
Unique identifier for the signer.
string
First name of the signer.
string
Last name of the signer.
string
Email address of the signer.
string
Mobile number of the signer.
number
Order of the signer in the signing process.
object[]
List of signing links for the signer.
Show properties
Show properties
string
Token for the signing link.
string
Unique identifier for the package.
string
Unique identifier for the document.
string
Unique identifier for the revision.
string
Name of document.
string
Link for signer to sign their revision of document.
string
Time link expires (ISO 8601 format).
string
Link type.
boolean
Set to
true if signer is next signer in sequential signing.boolean
Set to
true if signer has signed their revision of document.Examples
Response (200)
{
"packageId": "7a17e4e7-bc32-4256-bf81-27eac794c2b7",
"organizationId": "24261ee6-5f66-4692-ba49-533c9b58999b",
"memberId": "3e09a4ce-577c-492c-ba7c-c1ebf825f9b5",
"name": "My First Signing",
"timeSignBy": "2022-03-02T20:08:41Z",
"type": "Sequential",
"state": "open",
"externalData": null,
"isExecuted": false,
"documents": [
{
"packageId": "7a17e4e7-bc32-4256-bf81-27eac794c2b7",
"documentId": "ad8eac67-94e9-481b-a799-7396b447b8eb",
"fileId": null,
"exernalId": null,
"name": null,
"fileName": "agreement.pdf",
"order": 0,
"isExecuted": false,
"revisions": [
{
"packageId": "7a17e4e7-bc32-4256-bf81-27eac794c2b7",
"documentId": "ad8eac67-94e9-481b-a799-7396b447b8eb",
"revisionId": "a53b203b-af52-4766-a8be-eb0cdd18eb5f",
"signerId": "229c1a3b-c9d3-4546-bcf5-44cb8ea3bd1c",
"link": "https://localhost/tws/link/BKhD5EA0Dw6o0fv7-p3wnw",
"isNext": true,
"isSigned": false
}
]
}
],
"signers": [
{
"signerId": "229c1a3b-c9d3-4546-bcf5-44cb8ea3bd1c",
"firstName": "Signer",
"lastName": "One",
"email": "signer.one@example.com",
"mobileNumber": "",
"order": 0,
"links": [
{
"name": "agreement",
"link": "https://localhost/tws/link/BKhD5EA0Dw6o0fv7-p3wnw",
"type": "document",
"token": "BKhD5EA0Dw6o0fv7-p3wnw",
"timeExpires": "2022-03-02T20:08:41.261Z",
"packageId": "7a17e4e7-bc32-4256-bf81-27eac794c2b7",
"documentId": "ad8eac67-94e9-481b-a799-7396b447b8eb",
"revisionId": "a53b203b-af52-4766-a8be-eb0cdd18eb5f",
"isNext": true,
"isSigned": false
}
],
"signLink": {
"name": "My First Signing",
"link": "https://localhost/tws/link/MnWkMecgfNjfFZsye1YJmg",
"type": "package_sign",
"token": "MnWkMecgfNjfFZsye1YJmg",
"timeExpires": "2022-03-02T20:08:41.261Z",
"packageId": "7a17e4e7-bc32-4256-bf81-27eac794c2b7"
},
"meetingLink": null
}
]
}
⌘I
Status
curl --request GET \
--url https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"packageId": "<string>"
}
'import requests
url = "https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status"
payload = { "packageId": "<string>" }
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({packageId: '<string>'})
};
fetch('https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status', 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://sandbox.syngrafii.com/api/v1/packages/{packageId}/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'packageId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api_key: <api-key>"
],
]);
$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://sandbox.syngrafii.com/api/v1/packages/{packageId}/status"
payload := strings.NewReader("{\n \"packageId\": \"<string>\"\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("api_key", "<api-key>")
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.get("https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"packageId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.syngrafii.com/api/v1/packages/{packageId}/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"packageId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"packageId": "<string>",
"organizationId": "<string>",
"memberId": "<string>",
"name": "<string>",
"timeSignBy": "<string>",
"type": "<string>",
"state": "<string>",
"externalData": {},
"isExecuted": true,
"documents": [
{
"packageId": "<string>",
"documentId": "<string>",
"fileId": "<string>",
"externalId": "<string>",
"name": "<string>",
"fileName": "<string>",
"order": 123,
"isExecuted": true,
"revisions": [
{
"packageId": "<string>",
"documentId": "<string>",
"revisionId": "<string>",
"signerId": "<string>",
"link": "<string>",
"isNext": true,
"isSigned": true
}
]
}
],
"signers": [
{
"signerId": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"email": "<string>",
"mobileNumber": "<string>",
"order": 123,
"links": [
{
"token": "<string>",
"packageId": "<string>",
"documentId": "<string>",
"revisionId": "<string>",
"name": "<string>",
"link": "<string>",
"timeExpires": "<string>",
"type": "<string>",
"isNext": true,
"isSigned": true
}
]
}
]
}