Saltar al contenido 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
}
}

Autorizaciones

Authorization
string
header
requerido

Clave API para autenticación. Usa tu clave API directamente sin ningún prefijo (por ejemplo, 'your-api-key'). El prefijo Bearer es opcional pero no obligatorio.

Cuerpo

application/json

Crear una Solicitud de Firma a partir de un documento PDF

document
string<byte>
requerido

Documento PDF o DOCX codificado en base64. Los archivos DOCX se convierten automáticamente a PDF. El número de páginas se extraerá automáticamente.

name
string

Nombre para la Solicitud de Firma

Maximum string length: 255
description
string

Descripción para la Solicitud de Firma

expiration_hours
integer
predeterminado:168

Horas hasta que expire la Solicitud de Firma (predeterminado: 168 = 7 días)

Rango requerido: x >= 1
recipients
object[]

Destinatarios para la Solicitud de Firma. Usa IDs temporales (por ejemplo, 'temp_1') en el campo id para hacer referencia a los destinatarios en fields/reminders.

fields
object[]

Campos para colocar en el documento. Usa recipient_id para asignar campos a los destinatarios.

anchor_tags
object[]

Etiquetas de anclaje para la colocación automática de campos. Se localizan marcadores de texto en el PDF y se convierten en campos posicionados. El texto de anclaje se elimina del PDF después del procesamiento. Los campos creados a partir de etiquetas de anclaje se añaden junto con cualquier campo especificado manualmente. Solo está disponible para la creación basada en documento (no basada en Plantilla).

Maximum array length: 100
reminders
object[]

Recordatorios para enviar a los destinatarios

settings
object

Configuración de la Solicitud de Firma

Respuesta

Solicitud de firma creada correctamente. La respuesta puede incluir un array 'warnings' con advertencias de validación de formato de email (no bloqueantes).

Solicitud de firma tal como la devuelven los endpoints CREATE (POST /signing-requests)

id
string<uuid>
requerido

Identificador único de la solicitud de firma

name
string
requerido

Nombre de la solicitud de firma

Maximum string length: 255
status
enum<string>
requerido

El status siempre es 'draft' para solicitudes de firma recién creadas

Opciones disponibles:
draft
description
string | null

Descripción de la solicitud de firma

document_url
string<uri>

URL prefirmada al documento PDF

page_count
integer

Número de páginas en el documento

Rango requerido: x >= 1
expiration_hours
integer
predeterminado:168

Horas hasta que la solicitud de firma expire (por defecto: 168 = 7 días)

Rango requerido: x >= 1
template_id
string<uuid> | null

ID de la plantilla si se creó a partir de una plantilla

settings
object

Configuración devuelta por los endpoints de listado y detalle de Solicitudes de Firma. Las Plantillas usan el esquema TemplateSettings (sin campos de identidad).

created_date
string<date-time>

Marca de tiempo de creación

updated_date
string<date-time>

Marca de tiempo de la última actualización

sent_date
string<date-time> | null

Cuándo se envió la solicitud de firma

finished_date
string<date-time> | null

Cuándo se completaron todas las firmas

cancelled_date
string<date-time> | null

Cuándo se canceló la solicitud de firma

recipients
object[]

Destinatarios de la solicitud de firma

fields
object[]

Campos de la solicitud de firma con valores de posición planos

warnings
string[]

Advertencias opcionales de validación de formato de correo electrónico. Solo están presentes cuando los correos electrónicos de los destinatarios tienen formatos inusuales.