curl --request PATCH \
--url https://app.sajn.se/api/v1/documents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"externalId": "<string>",
"expiresAt": null,
"responsibleUserId": "<string>",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"forceReadFullDocument": true,
"showChatToSigners": true,
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": true,
"internalRecipients": [
"[email protected]"
],
"signableAfterExpired": true,
"sendPlainTextEmailOnly": true,
"reminderIntervalDays": "<string>",
"allowDelegation": true,
"aiChatEnabled": true,
"sameDeviceSigning": true,
"documentCategoryId": "<string>"
},
"documentStyle": {
"paddingEnabled": true,
"backgroundColor": "<string>",
"backgroundOpacity": 0.5,
"backgroundImageUrl": "<string>",
"backgroundImageOpacity": 0.5
},
"customFields": [
{
"customInputId": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://app.sajn.se/api/v1/documents/{id}"
payload = {
"name": "<string>",
"externalId": "<string>",
"expiresAt": None,
"responsibleUserId": "<string>",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"forceReadFullDocument": True,
"showChatToSigners": True,
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": True,
"internalRecipients": ["[email protected]"],
"signableAfterExpired": True,
"sendPlainTextEmailOnly": True,
"reminderIntervalDays": "<string>",
"allowDelegation": True,
"aiChatEnabled": True,
"sameDeviceSigning": True,
"documentCategoryId": "<string>"
},
"documentStyle": {
"paddingEnabled": True,
"backgroundColor": "<string>",
"backgroundOpacity": 0.5,
"backgroundImageUrl": "<string>",
"backgroundImageOpacity": 0.5
},
"customFields": [
{
"customInputId": "<string>",
"value": "<string>"
}
]
}
headers = {
"authorization": "<authorization>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
authorization: '<authorization>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
externalId: '<string>',
expiresAt: null,
responsibleUserId: '<string>',
documentMeta: {
subject: '<string>',
message: '<string>',
forceReadFullDocument: true,
showChatToSigners: true,
value: '<string>',
redirectUrl: '<string>',
redirectEnabled: true,
internalRecipients: ['[email protected]'],
signableAfterExpired: true,
sendPlainTextEmailOnly: true,
reminderIntervalDays: '<string>',
allowDelegation: true,
aiChatEnabled: true,
sameDeviceSigning: true,
documentCategoryId: '<string>'
},
documentStyle: {
paddingEnabled: true,
backgroundColor: '<string>',
backgroundOpacity: 0.5,
backgroundImageUrl: '<string>',
backgroundImageOpacity: 0.5
},
customFields: [{customInputId: '<string>', value: '<string>'}]
})
};
fetch('https://app.sajn.se/api/v1/documents/{id}', 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://app.sajn.se/api/v1/documents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'externalId' => '<string>',
'expiresAt' => null,
'responsibleUserId' => '<string>',
'documentMeta' => [
'subject' => '<string>',
'message' => '<string>',
'forceReadFullDocument' => true,
'showChatToSigners' => true,
'value' => '<string>',
'redirectUrl' => '<string>',
'redirectEnabled' => true,
'internalRecipients' => [
'[email protected]'
],
'signableAfterExpired' => true,
'sendPlainTextEmailOnly' => true,
'reminderIntervalDays' => '<string>',
'allowDelegation' => true,
'aiChatEnabled' => true,
'sameDeviceSigning' => true,
'documentCategoryId' => '<string>'
],
'documentStyle' => [
'paddingEnabled' => true,
'backgroundColor' => '<string>',
'backgroundOpacity' => 0.5,
'backgroundImageUrl' => '<string>',
'backgroundImageOpacity' => 0.5
],
'customFields' => [
[
'customInputId' => '<string>',
'value' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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://app.sajn.se/api/v1/documents/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
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.patch("https://app.sajn.se/api/v1/documents/{id}")
.header("authorization", "<authorization>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sajn.se/api/v1/documents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"status": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"externalId": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"signingOrder": "PARALLEL",
"forceReadFullDocument": true,
"showChatToSigners": true,
"preferredLanguage": "sv",
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": true,
"internalRecipients": [
"<string>"
],
"signableAfterExpired": true,
"sendPlainTextEmailOnly": true,
"reminderIntervalDays": "<string>",
"allowDelegation": true,
"accessVerification": "NONE",
"aiChatEnabled": true,
"ssnDisplayMode": "FULL",
"sameDeviceSigning": true,
"documentCategoryId": "<string>"
},
"completedAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"code": "<string>",
"errorId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"errorId": "<string>"
}Update a document
Update document properties. Only DRAFT documents can have all fields updated. Sent documents have restrictions.
Updatable Fields:
name- Document titleexternalId- Your external reference IDexpiresAt- Document expiration dateresponsibleUserId- User ID of responsible team member (must be in your organization)documentMeta- Metadata including subject, message, and signing ordercustomFields- Custom field values
Per-Signer Settings: Delivery method and signature type are configured per-signer via the signers endpoint, not at the document level.
Note: Some fields like signing order cannot be modified after the document is sent.
curl --request PATCH \
--url https://app.sajn.se/api/v1/documents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"externalId": "<string>",
"expiresAt": null,
"responsibleUserId": "<string>",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"forceReadFullDocument": true,
"showChatToSigners": true,
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": true,
"internalRecipients": [
"[email protected]"
],
"signableAfterExpired": true,
"sendPlainTextEmailOnly": true,
"reminderIntervalDays": "<string>",
"allowDelegation": true,
"aiChatEnabled": true,
"sameDeviceSigning": true,
"documentCategoryId": "<string>"
},
"documentStyle": {
"paddingEnabled": true,
"backgroundColor": "<string>",
"backgroundOpacity": 0.5,
"backgroundImageUrl": "<string>",
"backgroundImageOpacity": 0.5
},
"customFields": [
{
"customInputId": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://app.sajn.se/api/v1/documents/{id}"
payload = {
"name": "<string>",
"externalId": "<string>",
"expiresAt": None,
"responsibleUserId": "<string>",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"forceReadFullDocument": True,
"showChatToSigners": True,
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": True,
"internalRecipients": ["[email protected]"],
"signableAfterExpired": True,
"sendPlainTextEmailOnly": True,
"reminderIntervalDays": "<string>",
"allowDelegation": True,
"aiChatEnabled": True,
"sameDeviceSigning": True,
"documentCategoryId": "<string>"
},
"documentStyle": {
"paddingEnabled": True,
"backgroundColor": "<string>",
"backgroundOpacity": 0.5,
"backgroundImageUrl": "<string>",
"backgroundImageOpacity": 0.5
},
"customFields": [
{
"customInputId": "<string>",
"value": "<string>"
}
]
}
headers = {
"authorization": "<authorization>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
authorization: '<authorization>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
externalId: '<string>',
expiresAt: null,
responsibleUserId: '<string>',
documentMeta: {
subject: '<string>',
message: '<string>',
forceReadFullDocument: true,
showChatToSigners: true,
value: '<string>',
redirectUrl: '<string>',
redirectEnabled: true,
internalRecipients: ['[email protected]'],
signableAfterExpired: true,
sendPlainTextEmailOnly: true,
reminderIntervalDays: '<string>',
allowDelegation: true,
aiChatEnabled: true,
sameDeviceSigning: true,
documentCategoryId: '<string>'
},
documentStyle: {
paddingEnabled: true,
backgroundColor: '<string>',
backgroundOpacity: 0.5,
backgroundImageUrl: '<string>',
backgroundImageOpacity: 0.5
},
customFields: [{customInputId: '<string>', value: '<string>'}]
})
};
fetch('https://app.sajn.se/api/v1/documents/{id}', 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://app.sajn.se/api/v1/documents/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'externalId' => '<string>',
'expiresAt' => null,
'responsibleUserId' => '<string>',
'documentMeta' => [
'subject' => '<string>',
'message' => '<string>',
'forceReadFullDocument' => true,
'showChatToSigners' => true,
'value' => '<string>',
'redirectUrl' => '<string>',
'redirectEnabled' => true,
'internalRecipients' => [
'[email protected]'
],
'signableAfterExpired' => true,
'sendPlainTextEmailOnly' => true,
'reminderIntervalDays' => '<string>',
'allowDelegation' => true,
'aiChatEnabled' => true,
'sameDeviceSigning' => true,
'documentCategoryId' => '<string>'
],
'documentStyle' => [
'paddingEnabled' => true,
'backgroundColor' => '<string>',
'backgroundOpacity' => 0.5,
'backgroundImageUrl' => '<string>',
'backgroundImageOpacity' => 0.5
],
'customFields' => [
[
'customInputId' => '<string>',
'value' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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://app.sajn.se/api/v1/documents/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
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.patch("https://app.sajn.se/api/v1/documents/{id}")
.header("authorization", "<authorization>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sajn.se/api/v1/documents/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"externalId\": \"<string>\",\n \"expiresAt\": null,\n \"responsibleUserId\": \"<string>\",\n \"documentMeta\": {\n \"subject\": \"<string>\",\n \"message\": \"<string>\",\n \"forceReadFullDocument\": true,\n \"showChatToSigners\": true,\n \"value\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"redirectEnabled\": true,\n \"internalRecipients\": [\n \"[email protected]\"\n ],\n \"signableAfterExpired\": true,\n \"sendPlainTextEmailOnly\": true,\n \"reminderIntervalDays\": \"<string>\",\n \"allowDelegation\": true,\n \"aiChatEnabled\": true,\n \"sameDeviceSigning\": true,\n \"documentCategoryId\": \"<string>\"\n },\n \"documentStyle\": {\n \"paddingEnabled\": true,\n \"backgroundColor\": \"<string>\",\n \"backgroundOpacity\": 0.5,\n \"backgroundImageUrl\": \"<string>\",\n \"backgroundImageOpacity\": 0.5\n },\n \"customFields\": [\n {\n \"customInputId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"status": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"externalId": "<string>",
"expiresAt": "2023-11-07T05:31:56Z",
"documentMeta": {
"subject": "<string>",
"message": "<string>",
"signingOrder": "PARALLEL",
"forceReadFullDocument": true,
"showChatToSigners": true,
"preferredLanguage": "sv",
"value": "<string>",
"redirectUrl": "<string>",
"redirectEnabled": true,
"internalRecipients": [
"<string>"
],
"signableAfterExpired": true,
"sendPlainTextEmailOnly": true,
"reminderIntervalDays": "<string>",
"allowDelegation": true,
"accessVerification": "NONE",
"aiChatEnabled": true,
"ssnDisplayMode": "FULL",
"sameDeviceSigning": true,
"documentCategoryId": "<string>"
},
"completedAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"code": "<string>",
"errorId": "<string>"
}{
"message": "<string>",
"code": "<string>",
"errorId": "<string>"
}Authorizations
OAuth 2.0 access token for a connected application. Limited to the scopes granted at consent.
Headers
Bearer token for API authentication
Makes retries safe. A retry with the same key and the same request replays the stored response for 24 hours (header Idempotent-Replayed: true); the same key with a different request returns 400.
255Path Parameters
Body
Body
User ID of the person responsible for this document. Must be a member of your organization.
Show child attributes
Show child attributes
Document styling configuration including orientation, padding, background, and layout
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
200
Unique document identifier
Document name/title
Document status: DRAFT, SENDING, PENDING, COMPLETED, EXPIRED, CANCELLED, or IMPORTED
Date and time when the document was created
Date and time when the document was last updated
Your external reference ID for this document
Date and time when the document expires
Document metadata including subject, message, signing order, etc.
Show child attributes
Show child attributes
Date and time when all signers completed signing
Was this page helpful?

