Passer au contenu principal
POST
/
signing-requests
@firma-dev/sdk
import { FirmaClient } from "@firma-dev/sdk";

const firma = new FirmaClient({ apiKey: "YOUR_API_KEY" });

const response = await firma.signingRequests.createSigningRequest({
    template_id: "template_id",
    name: "Updated Contract Name",
    expiration_hours: 72
});
console.log(response);
curl --request POST \
--url https://api.firma.dev/functions/v1/signing-request-api/signing-requests \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated Contract Name",
"expiration_hours": 72
}
'
import requests

url = "https://api.firma.dev/functions/v1/signing-request-api/signing-requests"

payload = {
"name": "Updated Contract Name",
"expiration_hours": 72
}
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: 'Updated Contract Name', expiration_hours: 72})
};

fetch('https://api.firma.dev/functions/v1/signing-request-api/signing-requests', 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/signing-requests",
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' => 'Updated Contract Name',
'expiration_hours' => 72
]),
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/signing-requests"

payload := strings.NewReader("{\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\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/signing-requests")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.firma.dev/functions/v1/signing-request-api/signing-requests")

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\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n}"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "name": "<string>",
  "status": "draft",
  "description": "<string>",
  "document_url": "<string>",
  "page_count": 2,
  "expiration_hours": 168,
  "template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "settings": {
    "allow_download": true,
    "attach_pdf_on_finish": true,
    "allow_editing_before_sending": false,
    "use_signing_order": true,
    "hand_drawn_only": false,
    "send_signing_email": true,
    "send_finish_email": true,
    "send_expiration_email": true,
    "send_cancellation_email": true,
    "require_otp_verification": null,
    "disable_guided_navigation": true,
    "allow_presigning_download": true,
    "show_qr_code": true,
    "identity_editable_fields": [
      "<string>"
    ],
    "notify_identity_change_email": false
  },
  "created_date": "2023-11-07T05:31:56Z",
  "updated_date": "2023-11-07T05:31:56Z",
  "sent_date": "2023-11-07T05:31:56Z",
  "finished_date": "2023-11-07T05:31:56Z",
  "cancelled_date": "2023-11-07T05:31:56Z",
  "recipients": [
    {
      "first_name": "<string>",
      "email": "jsmith@example.com",
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "last_name": "<string>",
      "name": "<string>",
      "order": 2,
      "phone_number": "<string>",
      "street_address": "<string>",
      "city": "<string>",
      "state_province": "<string>",
      "postal_code": "<string>",
      "country": "<string>",
      "title": "<string>",
      "company": "<string>",
      "custom_fields": {},
      "finished_date": "2023-11-07T05:31:56Z"
    }
  ],
  "fields": [
    {
      "recipient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "page_number": 2,
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "x_position": 123,
      "y_position": 123,
      "width": 123,
      "height": 123,
      "required": true,
      "read_only": true,
      "read_only_value": "<string>",
      "variable_name": "<string>",
      "variable_defined_name": "<string>",
      "dropdown_options": [
        "<string>"
      ],
      "format_rules": {},
      "validation_rules": {},
      "date_signing_default": true,
      "final_value": "<string>"
    }
  ],
  "warnings": [
    "<string>"
  ]
}
{
"error": "Validation Error",
"message": "Invalid input data",
"details": {
"name": "Name is required",
"email": "Invalid email format"
}
}
{
"error": "Unauthorized",
"message": "Invalid API key"
}
{
"error": "<string>",
"message": "<string>",
"details": {}
}
{
"error": "Rate Limit Exceeded",
"message": "Too many requests. Please wait before retrying.",
"details": {
"retry_after": 45
}
}

Autorisations

Authorization
string
header
requis

Clé API pour l'authentification. Utilisez votre clé API directement sans préfixe (par exemple, 'your-api-key'). Le préfixe Bearer est optionnel mais pas obligatoire.

Corps

application/json

Créer une Demande de Signature à partir d'un document PDF

document
string<byte>
requis

Document PDF ou DOCX encodé en base64. Les fichiers DOCX sont automatiquement convertis en PDF. Le nombre de pages sera extrait automatiquement.

name
string

Nom de la Demande de Signature

Maximum string length: 255
description
string

Description de la Demande de Signature

expiration_hours
integer
défaut:168

Nombre d'heures avant l'expiration de la Demande de Signature (par défaut : 168 = 7 jours)

Plage requise: x >= 1
recipients
object[]

Destinataires de la Demande de Signature. Utilise des ID temporaires (ex. 'temp_1') dans le champ id pour référencer les destinataires dans fields/reminders.

fields
object[]

Champs à placer sur le document. Utilise recipient_id pour assigner les champs aux destinataires.

anchor_tags
object[]

Balises d'ancrage pour le placement automatique des champs. Les marqueurs de texte dans le PDF sont localisés et convertis en champs positionnés. Le texte d'ancrage est supprimé du PDF après traitement. Les champs créés à partir de balises d'ancrage sont ajoutés en plus des champs spécifiés manuellement. Disponible uniquement pour la création basée sur un document (pas basée sur un Modèle).

Maximum array length: 100
reminders
object[]

Rappels à envoyer aux destinataires

settings
object

Paramètres de la Demande de Signature

Réponse

Demande de signature créée avec succès. La réponse peut inclure un tableau 'warnings' pour les avertissements de validation de format d'email (non bloquants).

Demande de signature telle que renvoyée par les endpoints CREATE (POST /signing-requests)

id
string<uuid>
requis

Identifiant unique de la demande de signature

name
string
requis

Nom de la demande de signature

Maximum string length: 255
status
enum<string>
requis

Le statut est toujours 'draft' pour les demandes de signature nouvellement créées

Options disponibles:
draft
description
string | null

Description de la demande de signature

document_url
string<uri>

URL pré-signée vers le document PDF

page_count
integer

Nombre de pages dans le document

Plage requise: x >= 1
expiration_hours
integer
défaut:168

Nombre d'heures avant l'expiration de la demande de signature (par défaut : 168 = 7 jours)

Plage requise: x >= 1
template_id
string<uuid> | null

ID du modèle si créé à partir d'un modèle

settings
object

Paramètres renvoyés par les endpoints de liste et de détail des demandes de signature. Les modèles utilisent le schéma TemplateSettings (sans champs d'identité).

created_date
string<date-time>

Horodatage de création

updated_date
string<date-time>

Horodatage de dernière mise à jour

sent_date
string<date-time> | null

Date d'envoi de la demande de signature

finished_date
string<date-time> | null

Date à laquelle toutes les signatures ont été complétées

cancelled_date
string<date-time> | null

Date d'annulation de la demande de signature

recipients
object[]

Destinataires de la demande de signature

fields
object[]

Champs de la demande de signature avec des valeurs de position à plat

warnings
string[]

Avertissements optionnels de validation du format des e-mails. Présents uniquement lorsque les e-mails des destinataires ont des formats inhabituels.