HomeAge Verification HeadlessAI Services for TerminalsAge Estimation VerifySupportTrust APIIdentity Verification LivenessDigital IDIdentity verificationDigital ID MigrationDBS RTWDigital IDDBS/RTW portaleSignaturesAge verificationAge estimationIn-Branch VerificationAge Estimation v2idv-portal-errorsIdentity ProfilesVerifiable Credentialssandbox-betaIdentity Verification APIAI Services APITrust APIProof of Age (PoA) API
eSignatures
v9.0
Title
Message
Create new category
What is the title of your new category?
Edit page index title
What is the title of the page index?
Edit category
What is the new title of your category?
Edit link
What is the new title and URL of your link?
Quick start
AI Tools
Summarize Page
Copy Markdown
Open in ChatGPT
Open in Claude
Connect to Cursor
Connect to VS Code
We suggest you read through the step by step integration guide to understand the integration in detail. Please see below for example code snippets and a postman example.
Before you start
Request your API keys, please let us know if you want to use sandbox or production.
Example code
Below is an example of the full request for creating an envelope.
HintWe suggest you read through the full documentation first.
{
"name": "envelope name",
"emails": {
"invitation": {
"body": {
"message": "Please sign this document"
}
}
},
"recipients": [
{
"name": "User 1",
"email": "user1@test.com",
"role": "CEO",
"auth_type": "no-auth",
"sign_group": 1,
"tags": [
{
"page_number": 1,
"x": 0.1,
"y": 0.1,
"type": "signature",
"optional": false,
"file_name": "myfile.pdf"
}
]
},
{
"name": "User 2",
"email": "user2@test.com",
"role": "CPO",
"auth_type": "sign-auth",
"yoti_attributes": ["full_name"],
"sign_group": 2,
"tags": [
{
"page_number": 1,
"x": 0.6,
"y": 0.3,
"type": "signature",
"optional": false,
"file_name": "myfile.pdf"
}
]
}
],
"notifications": {
"destination": "https://mysite.example/events",
"subscriptions": [
"envelope_completion"
]
}
}
const rp = require("request-promise");
const fs = require("fs");
const options = {}; //options object
const createEnvelope = () => {
const request = {
method: "POST",
uri: `<BASE_URL>/v2/envelopes`,
formData: {
file: fs.createReadStream("path/to.pdf"),
options: JSON.stringify(options),
},
headers: {
authorization: "Bearer <API_KEY>",
},
};
return rp(request)
.then((body) => body)
.catch((err) => err);
};
//send request
let result = await createEnvelope();
package com.yoti.sign;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class Example {
private static final String YOTI_SIGN_AUTH_TOKEN = "<YOUR_AUTH_TOKEN>";
private static final String YOTI_SIGN_BASE_URL = "https://api.yotisign.com/v2";
public static void main(String[] args) {
// Create the client and HttpRequest
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost();
URI uri = URI.create(YOTI_SIGN_BASE_URL + "/envelopes");
httpPost.setURI(uri);
// Set the 'Authorization' header
httpPost.setHeader("Authorization", "Bearer " + YOTI_SIGN_AUTH_TOKEN);
// Create a Multipart request entity, and add the file to send
// along with the options
MultipartEntityBuilder formDataBuilder = MultipartEntityBuilder.create();
File file = new File("/path/to/your/file.pdf");
formDataBuilder.addBinaryBody("file", file);
String jsonPayload = ...; // JSON string containing the options
formDataBuilder.addTextBody("options", jsonPayload, ContentType.APPLICATION_JSON);
// Add the Multipart request entity to the Http request
httpPost.setEntity(formDataBuilder.build());
try {
// Perform the POST request and read the created envelope ID
HttpResponse response = client.execute(httpPost);
JsonReader reader = Json.createReader(response.getEntity().getContent());
JsonObject responseObject = reader.readObject();
String envelopeId = responseObject.getString("envelope_id");
} catch (IOException e) {
e.printStackTrace();
}
}
}
<?php
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\MultipartStream;
use GuzzleHttp\Psr7\Request;
use function GuzzleHttp\Psr7\stream_for;
$options = [
'file_name' => 'example-document.pdf',
'name' => 'Sign your request for..',
'emails' => [
'invitation' => [
'body' => [
'message' => 'Please sign the example document',
],
],
],
'recipients' => [
[
'name' => 'John Smith',
'email' => 'example@example.com',
'role' => 'Signee',
'auth_type' => 'no-auth',
'sign_group' => 1,
'tags' => [
[
'page_number' => 1,
'x' => 0.3,
'y' => 0.4,
'type' => 'signature',
'optional' => false,
'file_name' => 'example-document.pdf',
],
],
],
],
'custom_webhook_uri' => YOUR_WEBHOOK_URL,
];
$request = new Request(
'POST',
API_BASE_URL . '/envelopes',
[
'Authorization' => 'Bearer ' . YOUR_API_KEY,
],
new MultipartStream([
[
'name' => 'file',
'contents' => stream_for(fopen('./example-document.pdf', 'r')),
],
[
'name' => 'options',
'contents' => stream_for(json_encode($options)),
],
])
);
$client = new Client();
$response = $client->send($request);
$json = json_decode($response->getBody());
$envelope_id = $json->envelope_id;
using (var pdfFileContent = new StreamContent(
new FileStream(
"test.pdf",
FileMode.Open,
FileAccess.Read)))
{
using (var optionsJsonContent = new StringContent(
optionsJson,
Encoding.UTF8))
{
MultipartFormDataContent multiPartContent = new MultipartFormDataContent
{
{ pdfFileContent, "file", "test.pdf" },
{ optionsJsonContent, "options" }
};
using (HttpRequestMessage request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.yotisign.com/v2/envelopes"),
Content = multiPartContent
})
{
request.Headers.Add("Authorization", "Bearer " + yotiAuthenticationToken);
using (HttpClient httpClient = new HttpClient())
{
HttpResponseMessage response = httpClient.SendAsync(request).Result;
}
}
}
}
options := `{}`
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("options", options)
file, err := os.Open("path/to.pdf")
defer file.Close()
formFile, err := writer.CreateFormFile("file",filepath.Base("path/to.pdf"))
_, err = io.Copy(formFile, file)
err = writer.Close()
req, err := http.NewRequest("POST", "<BASE_URL>/v2/envelopes", payload)
req.Header.Add("Authorization", "Bearer <API_KEY>")
req.Header.Add("Content-Type", "multipart/form-data")
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
response, err := client.Do(req)
if err != nil {
fmt.Println(err)
} else {
result, _ := ioutil.ReadAll(response.Body)
}
Web Examples
If you wanna just dive in to hacking this together, click below to see the examples. Otherwise continue with our step by step guide:
Postman
Last updated on
Was this page helpful?
Next to read:
Integration guideGot a question? Contact us here.
Discard Changes
Do you want to discard your current changes and overwrite with the template?
Archive Synced Block
Message
Create new Template
What is this template's title?
Delete Template
Message