curl --request POST \
--url https://api.firma.dev/functions/v1/signing-request-api/seals \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"display_name": "<string>",
"statement": {
"language": "<string>",
"signatory_name": "<string>",
"text": "<string>",
"accepted": true,
"signatory_title": "<string>",
"version": 2
},
"signatory_title": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image": "<string>",
"typed": {
"text": "<string>",
"style": "<string>"
},
"is_default": false
}
'import requests
url = "https://api.firma.dev/functions/v1/signing-request-api/seals"
payload = {
"name": "<string>",
"display_name": "<string>",
"statement": {
"language": "<string>",
"signatory_name": "<string>",
"text": "<string>",
"accepted": True,
"signatory_title": "<string>",
"version": 2
},
"signatory_title": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image": "<string>",
"typed": {
"text": "<string>",
"style": "<string>"
},
"is_default": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
display_name: '<string>',
statement: {
language: '<string>',
signatory_name: '<string>',
text: '<string>',
accepted: true,
signatory_title: '<string>',
version: 2
},
signatory_title: '<string>',
workspace_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
image: '<string>',
typed: {text: '<string>', style: '<string>'},
is_default: false
})
};
fetch('https://api.firma.dev/functions/v1/signing-request-api/seals', 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.firma.dev/functions/v1/signing-request-api/seals",
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([
'name' => '<string>',
'display_name' => '<string>',
'statement' => [
'language' => '<string>',
'signatory_name' => '<string>',
'text' => '<string>',
'accepted' => true,
'signatory_title' => '<string>',
'version' => 2
],
'signatory_title' => '<string>',
'workspace_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'image' => '<string>',
'typed' => [
'text' => '<string>',
'style' => '<string>'
],
'is_default' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.firma.dev/functions/v1/signing-request-api/seals"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.post("https://api.firma.dev/functions/v1/signing-request-api/seals")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.firma.dev/functions/v1/signing-request-api/seals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lineage_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version": 2,
"companies_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"companies_workspaces_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"display_name": "<string>",
"signatory_title": "<string>",
"kind": "uploaded",
"is_default": 0,
"statement_language": "<string>",
"statement_version": 2,
"signatory_name": "<string>",
"signatory_title_attested": "<string>",
"attested_at": "2023-11-07T05:31:56Z",
"revoked_on": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"deleted": 0
}{
"error": "Validation Error",
"message": "Invalid input data",
"details": {
"name": "Name is required",
"email": "Invalid email format"
}
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Forbidden",
"message": "You do not have permission to access this resource"
}{
"error": "<string>",
"code": "SEALS_DISABLED"
}{
"error": "Rate Limit Exceeded",
"message": "Too many requests. Please wait before retrying.",
"details": {
"retry_after": 45
}
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"message": "<string>"
}
],
"message": "<string>",
"details": {}
}Create an organization seal
Create a new organization seal with an uploaded, typed, or drawn image. Company-scope seals require a protected API key.
curl --request POST \
--url https://api.firma.dev/functions/v1/signing-request-api/seals \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"display_name": "<string>",
"statement": {
"language": "<string>",
"signatory_name": "<string>",
"text": "<string>",
"accepted": true,
"signatory_title": "<string>",
"version": 2
},
"signatory_title": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image": "<string>",
"typed": {
"text": "<string>",
"style": "<string>"
},
"is_default": false
}
'import requests
url = "https://api.firma.dev/functions/v1/signing-request-api/seals"
payload = {
"name": "<string>",
"display_name": "<string>",
"statement": {
"language": "<string>",
"signatory_name": "<string>",
"text": "<string>",
"accepted": True,
"signatory_title": "<string>",
"version": 2
},
"signatory_title": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image": "<string>",
"typed": {
"text": "<string>",
"style": "<string>"
},
"is_default": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
display_name: '<string>',
statement: {
language: '<string>',
signatory_name: '<string>',
text: '<string>',
accepted: true,
signatory_title: '<string>',
version: 2
},
signatory_title: '<string>',
workspace_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
image: '<string>',
typed: {text: '<string>', style: '<string>'},
is_default: false
})
};
fetch('https://api.firma.dev/functions/v1/signing-request-api/seals', 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.firma.dev/functions/v1/signing-request-api/seals",
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([
'name' => '<string>',
'display_name' => '<string>',
'statement' => [
'language' => '<string>',
'signatory_name' => '<string>',
'text' => '<string>',
'accepted' => true,
'signatory_title' => '<string>',
'version' => 2
],
'signatory_title' => '<string>',
'workspace_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'image' => '<string>',
'typed' => [
'text' => '<string>',
'style' => '<string>'
],
'is_default' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.firma.dev/functions/v1/signing-request-api/seals"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.post("https://api.firma.dev/functions/v1/signing-request-api/seals")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.firma.dev/functions/v1/signing-request-api/seals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"display_name\": \"<string>\",\n \"statement\": {\n \"language\": \"<string>\",\n \"signatory_name\": \"<string>\",\n \"text\": \"<string>\",\n \"accepted\": true,\n \"signatory_title\": \"<string>\",\n \"version\": 2\n },\n \"signatory_title\": \"<string>\",\n \"workspace_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"image\": \"<string>\",\n \"typed\": {\n \"text\": \"<string>\",\n \"style\": \"<string>\"\n },\n \"is_default\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lineage_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version": 2,
"companies_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"companies_workspaces_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"display_name": "<string>",
"signatory_title": "<string>",
"kind": "uploaded",
"is_default": 0,
"statement_language": "<string>",
"statement_version": 2,
"signatory_name": "<string>",
"signatory_title_attested": "<string>",
"attested_at": "2023-11-07T05:31:56Z",
"revoked_on": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"deleted": 0
}{
"error": "Validation Error",
"message": "Invalid input data",
"details": {
"name": "Name is required",
"email": "Invalid email format"
}
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Forbidden",
"message": "You do not have permission to access this resource"
}{
"error": "<string>",
"code": "SEALS_DISABLED"
}{
"error": "Rate Limit Exceeded",
"message": "Too many requests. Please wait before retrying.",
"details": {
"retry_after": 45
}
}{
"error": "<string>",
"code": "<string>",
"errors": [
{
"message": "<string>"
}
],
"message": "<string>",
"details": {}
}Authorizations
API key for authentication. Use your API key directly without any prefix (e.g., 'your-api-key'). Bearer prefix is optional but not required.
Body
Request body to create an organization seal.
Internal name for the seal
120Display name rendered on the seal image
200How the seal image was created
uploaded, typed, drawn Scope of the seal. Company-scope requires a protected API key.
company, workspace Attestation statement affirming authority to apply the seal.
Show child attributes
Show child attributes
Signatory title rendered on the seal image
200Required when scope is 'workspace'
Base64-encoded PNG data URI (data:image/png;base64,...). Required for 'uploaded' and 'drawn' kinds.
Typed seal parameters. Required for 'typed' kind.
Show child attributes
Show child attributes
Set as default seal for this scope
Response
Seal created successfully
Organization seal metadata (image and statement internals are stripped from list/get responses).
Shared across versions of the same seal
x >= 1Null for company-scope seals
120200200uploaded, typed, drawn 1 if this is the default seal for its scope
0, 1 x >= 12002000, 1 Was this page helpful?