import { FirmaClient } from "@firma-dev/sdk";
const firma = new FirmaClient({ apiKey: "YOUR_API_KEY" });
const response = await firma.signingRequests.updateSigningRequest({
id: "id",
signing_request_properties: {
name: "Updated Contract Name",
expiration_hours: 72
},
recipients: [{
id: "rec1-e89b-12d3-a456-426614174000",
first_name: "John",
last_name: "Smith",
email: "john.smith@example.com",
designation: "Signer",
order: 1
}, {
first_name: "Jane",
last_name: "Doe",
email: "jane@example.com",
designation: "Signer",
order: 2
}],
deleted_recipients: [{
recipient_id: "rec2-e89b-12d3-a456-426614174000",
field_action: "reassign",
reassign_to_recipient_id: "rec1-e89b-12d3-a456-426614174000"
}],
fields: [{
id: "field1-e89b-12d3-a456-426614174000",
type: "signature",
position: {
x: 15,
y: 85,
width: 30,
height: 10
},
page_number: 1,
required: true,
recipient_id: "rec1-e89b-12d3-a456-426614174000"
}],
reminders: [{
hours: 48,
all_users: true,
subject: "Reminder: Please sign the document",
message: "This is a reminder to complete your signature."
}]
});
console.log(response);curl --request PUT \
--url https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"signing_request_properties": {
"name": "Updated Contract Name",
"expiration_hours": 72
},
"recipients": [
{
"id": "rec1-e89b-12d3-a456-426614174000",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"designation": "Signer",
"order": 1
},
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"designation": "Signer",
"order": 2
}
],
"deleted_recipients": [
{
"recipient_id": "rec2-e89b-12d3-a456-426614174000",
"field_action": "reassign",
"reassign_to_recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"fields": [
{
"id": "field1-e89b-12d3-a456-426614174000",
"type": "signature",
"position": {
"x": 15,
"y": 85,
"width": 30,
"height": 10
},
"page_number": 1,
"required": true,
"recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"reminders": [
{
"hours": 48,
"all_users": true,
"subject": "Reminder: Please sign the document",
"message": "This is a reminder to complete your signature."
}
]
}
'import requests
url = "https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}"
payload = {
"signing_request_properties": {
"name": "Updated Contract Name",
"expiration_hours": 72
},
"recipients": [
{
"id": "rec1-e89b-12d3-a456-426614174000",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"designation": "Signer",
"order": 1
},
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"designation": "Signer",
"order": 2
}
],
"deleted_recipients": [
{
"recipient_id": "rec2-e89b-12d3-a456-426614174000",
"field_action": "reassign",
"reassign_to_recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"fields": [
{
"id": "field1-e89b-12d3-a456-426614174000",
"type": "signature",
"position": {
"x": 15,
"y": 85,
"width": 30,
"height": 10
},
"page_number": 1,
"required": True,
"recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"reminders": [
{
"hours": 48,
"all_users": True,
"subject": "Reminder: Please sign the document",
"message": "This is a reminder to complete your signature."
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signing_request_properties: {name: 'Updated Contract Name', expiration_hours: 72},
recipients: [
{
id: 'rec1-e89b-12d3-a456-426614174000',
first_name: 'John',
last_name: 'Smith',
email: 'john.smith@example.com',
designation: 'Signer',
order: 1
},
{
first_name: 'Jane',
last_name: 'Doe',
email: 'jane@example.com',
designation: 'Signer',
order: 2
}
],
deleted_recipients: [
{
recipient_id: 'rec2-e89b-12d3-a456-426614174000',
field_action: 'reassign',
reassign_to_recipient_id: 'rec1-e89b-12d3-a456-426614174000'
}
],
fields: [
{
id: 'field1-e89b-12d3-a456-426614174000',
type: 'signature',
position: {x: 15, y: 85, width: 30, height: 10},
page_number: 1,
required: true,
recipient_id: 'rec1-e89b-12d3-a456-426614174000'
}
],
reminders: [
{
hours: 48,
all_users: true,
subject: 'Reminder: Please sign the document',
message: 'This is a reminder to complete your signature.'
}
]
})
};
fetch('https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{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://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'signing_request_properties' => [
'name' => 'Updated Contract Name',
'expiration_hours' => 72
],
'recipients' => [
[
'id' => 'rec1-e89b-12d3-a456-426614174000',
'first_name' => 'John',
'last_name' => 'Smith',
'email' => 'john.smith@example.com',
'designation' => 'Signer',
'order' => 1
],
[
'first_name' => 'Jane',
'last_name' => 'Doe',
'email' => 'jane@example.com',
'designation' => 'Signer',
'order' => 2
]
],
'deleted_recipients' => [
[
'recipient_id' => 'rec2-e89b-12d3-a456-426614174000',
'field_action' => 'reassign',
'reassign_to_recipient_id' => 'rec1-e89b-12d3-a456-426614174000'
]
],
'fields' => [
[
'id' => 'field1-e89b-12d3-a456-426614174000',
'type' => 'signature',
'position' => [
'x' => 15,
'y' => 85,
'width' => 30,
'height' => 10
],
'page_number' => 1,
'required' => true,
'recipient_id' => 'rec1-e89b-12d3-a456-426614174000'
]
],
'reminders' => [
[
'hours' => 48,
'all_users' => true,
'subject' => 'Reminder: Please sign the document',
'message' => 'This is a reminder to complete your signature.'
]
]
]),
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/{id}"
payload := strings.NewReader("{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"signing_request": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"document_url": "<string>",
"document_url_expires_at": "2023-11-07T05:31:56Z",
"document_page_count": 123,
"status": "<string>",
"expiration_hours": 123,
"settings": {
"allow_download": true,
"attach_pdf_on_finish": true,
"hand_drawn_only": true
},
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expires_at": "2023-11-07T05:31:56Z",
"created_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": "<string>",
"_temp_id": "<string>",
"template_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_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": {}
}
],
"reminders": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hours": 2,
"subject": "<string>",
"message": "<string>",
"all_users": true,
"template_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"recipient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_on": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"summary": {
"properties_updated": true,
"recipients_created": 123,
"recipients_updated": 123,
"recipients_deleted": 123,
"fields_created": 123,
"fields_updated": 123,
"fields_reassigned": 123,
"fields_deleted": 123,
"reminders_created": 123,
"reminders_updated": 123,
"warnings": [
"<string>"
]
}
}{
"error": "Validation failed",
"message": "Multiple validation errors occurred",
"details": {
"recipients": [
"Recipient 1: email is invalid"
],
"deleted_recipients": [
"Cannot reassign: designations must match"
],
"fields": [
"Field 2: x coordinate must be between 0 and 100"
]
}
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Not Found",
"message": "The requested resource was not found"
}{
"error": "Rate Limit Exceeded",
"message": "Too many requests. Please wait before retrying.",
"details": {
"retry_after": 45
}
}Actualización Integral de Solicitud de Firma
Realiza actualizaciones integrales a una solicitud de firma, incluyendo propiedades, destinatarios, campos y recordatorios. No se puede actualizar después de que la solicitud de firma haya sido enviada, completada o cancelada. Todas las secciones son opcionales, pero se debe proporcionar al menos una.
Patrón de ID Temporal para Nuevos Destinatarios: Al agregar nuevos destinatarios en una actualización integral, usa el campo ‘temp_id’ (formato: ‘temp_X’) en lugar de ‘id’ para establecer relaciones con campos y recordatorios. Esto te permite crear nuevos destinatarios y referenciarlos en campos/recordatorios en una sola solicitud. Usa el campo ‘id’ para actualizar destinatarios existentes. Reglas de validación: (1) Los IDs temporales deben comenzar con ‘temp’; (2) Cada ID temporal debe ser único dentro de la solicitud; (3) Los campos y recordatorios pueden referenciar IDs temporales en su propiedad recipient_id; (4) La API resolverá automáticamente los IDs temporales a UUIDs reales después de la creación del destinatario.
import { FirmaClient } from "@firma-dev/sdk";
const firma = new FirmaClient({ apiKey: "YOUR_API_KEY" });
const response = await firma.signingRequests.updateSigningRequest({
id: "id",
signing_request_properties: {
name: "Updated Contract Name",
expiration_hours: 72
},
recipients: [{
id: "rec1-e89b-12d3-a456-426614174000",
first_name: "John",
last_name: "Smith",
email: "john.smith@example.com",
designation: "Signer",
order: 1
}, {
first_name: "Jane",
last_name: "Doe",
email: "jane@example.com",
designation: "Signer",
order: 2
}],
deleted_recipients: [{
recipient_id: "rec2-e89b-12d3-a456-426614174000",
field_action: "reassign",
reassign_to_recipient_id: "rec1-e89b-12d3-a456-426614174000"
}],
fields: [{
id: "field1-e89b-12d3-a456-426614174000",
type: "signature",
position: {
x: 15,
y: 85,
width: 30,
height: 10
},
page_number: 1,
required: true,
recipient_id: "rec1-e89b-12d3-a456-426614174000"
}],
reminders: [{
hours: 48,
all_users: true,
subject: "Reminder: Please sign the document",
message: "This is a reminder to complete your signature."
}]
});
console.log(response);curl --request PUT \
--url https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"signing_request_properties": {
"name": "Updated Contract Name",
"expiration_hours": 72
},
"recipients": [
{
"id": "rec1-e89b-12d3-a456-426614174000",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"designation": "Signer",
"order": 1
},
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"designation": "Signer",
"order": 2
}
],
"deleted_recipients": [
{
"recipient_id": "rec2-e89b-12d3-a456-426614174000",
"field_action": "reassign",
"reassign_to_recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"fields": [
{
"id": "field1-e89b-12d3-a456-426614174000",
"type": "signature",
"position": {
"x": 15,
"y": 85,
"width": 30,
"height": 10
},
"page_number": 1,
"required": true,
"recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"reminders": [
{
"hours": 48,
"all_users": true,
"subject": "Reminder: Please sign the document",
"message": "This is a reminder to complete your signature."
}
]
}
'import requests
url = "https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}"
payload = {
"signing_request_properties": {
"name": "Updated Contract Name",
"expiration_hours": 72
},
"recipients": [
{
"id": "rec1-e89b-12d3-a456-426614174000",
"first_name": "John",
"last_name": "Smith",
"email": "john.smith@example.com",
"designation": "Signer",
"order": 1
},
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"designation": "Signer",
"order": 2
}
],
"deleted_recipients": [
{
"recipient_id": "rec2-e89b-12d3-a456-426614174000",
"field_action": "reassign",
"reassign_to_recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"fields": [
{
"id": "field1-e89b-12d3-a456-426614174000",
"type": "signature",
"position": {
"x": 15,
"y": 85,
"width": 30,
"height": 10
},
"page_number": 1,
"required": True,
"recipient_id": "rec1-e89b-12d3-a456-426614174000"
}
],
"reminders": [
{
"hours": 48,
"all_users": True,
"subject": "Reminder: Please sign the document",
"message": "This is a reminder to complete your signature."
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signing_request_properties: {name: 'Updated Contract Name', expiration_hours: 72},
recipients: [
{
id: 'rec1-e89b-12d3-a456-426614174000',
first_name: 'John',
last_name: 'Smith',
email: 'john.smith@example.com',
designation: 'Signer',
order: 1
},
{
first_name: 'Jane',
last_name: 'Doe',
email: 'jane@example.com',
designation: 'Signer',
order: 2
}
],
deleted_recipients: [
{
recipient_id: 'rec2-e89b-12d3-a456-426614174000',
field_action: 'reassign',
reassign_to_recipient_id: 'rec1-e89b-12d3-a456-426614174000'
}
],
fields: [
{
id: 'field1-e89b-12d3-a456-426614174000',
type: 'signature',
position: {x: 15, y: 85, width: 30, height: 10},
page_number: 1,
required: true,
recipient_id: 'rec1-e89b-12d3-a456-426614174000'
}
],
reminders: [
{
hours: 48,
all_users: true,
subject: 'Reminder: Please sign the document',
message: 'This is a reminder to complete your signature.'
}
]
})
};
fetch('https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{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://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'signing_request_properties' => [
'name' => 'Updated Contract Name',
'expiration_hours' => 72
],
'recipients' => [
[
'id' => 'rec1-e89b-12d3-a456-426614174000',
'first_name' => 'John',
'last_name' => 'Smith',
'email' => 'john.smith@example.com',
'designation' => 'Signer',
'order' => 1
],
[
'first_name' => 'Jane',
'last_name' => 'Doe',
'email' => 'jane@example.com',
'designation' => 'Signer',
'order' => 2
]
],
'deleted_recipients' => [
[
'recipient_id' => 'rec2-e89b-12d3-a456-426614174000',
'field_action' => 'reassign',
'reassign_to_recipient_id' => 'rec1-e89b-12d3-a456-426614174000'
]
],
'fields' => [
[
'id' => 'field1-e89b-12d3-a456-426614174000',
'type' => 'signature',
'position' => [
'x' => 15,
'y' => 85,
'width' => 30,
'height' => 10
],
'page_number' => 1,
'required' => true,
'recipient_id' => 'rec1-e89b-12d3-a456-426614174000'
]
],
'reminders' => [
[
'hours' => 48,
'all_users' => true,
'subject' => 'Reminder: Please sign the document',
'message' => 'This is a reminder to complete your signature.'
]
]
]),
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/{id}"
payload := strings.NewReader("{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.firma.dev/functions/v1/signing-request-api/signing-requests/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signing_request_properties\": {\n \"name\": \"Updated Contract Name\",\n \"expiration_hours\": 72\n },\n \"recipients\": [\n {\n \"id\": \"rec1-e89b-12d3-a456-426614174000\",\n \"first_name\": \"John\",\n \"last_name\": \"Smith\",\n \"email\": \"john.smith@example.com\",\n \"designation\": \"Signer\",\n \"order\": 1\n },\n {\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@example.com\",\n \"designation\": \"Signer\",\n \"order\": 2\n }\n ],\n \"deleted_recipients\": [\n {\n \"recipient_id\": \"rec2-e89b-12d3-a456-426614174000\",\n \"field_action\": \"reassign\",\n \"reassign_to_recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"fields\": [\n {\n \"id\": \"field1-e89b-12d3-a456-426614174000\",\n \"type\": \"signature\",\n \"position\": {\n \"x\": 15,\n \"y\": 85,\n \"width\": 30,\n \"height\": 10\n },\n \"page_number\": 1,\n \"required\": true,\n \"recipient_id\": \"rec1-e89b-12d3-a456-426614174000\"\n }\n ],\n \"reminders\": [\n {\n \"hours\": 48,\n \"all_users\": true,\n \"subject\": \"Reminder: Please sign the document\",\n \"message\": \"This is a reminder to complete your signature.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"signing_request": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"document_url": "<string>",
"document_url_expires_at": "2023-11-07T05:31:56Z",
"document_page_count": 123,
"status": "<string>",
"expiration_hours": 123,
"settings": {
"allow_download": true,
"attach_pdf_on_finish": true,
"hand_drawn_only": true
},
"template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"expires_at": "2023-11-07T05:31:56Z",
"created_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": "<string>",
"_temp_id": "<string>",
"template_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_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": {}
}
],
"reminders": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hours": 2,
"subject": "<string>",
"message": "<string>",
"all_users": true,
"template_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"recipient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_on": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"summary": {
"properties_updated": true,
"recipients_created": 123,
"recipients_updated": 123,
"recipients_deleted": 123,
"fields_created": 123,
"fields_updated": 123,
"fields_reassigned": 123,
"fields_deleted": 123,
"reminders_created": 123,
"reminders_updated": 123,
"warnings": [
"<string>"
]
}
}{
"error": "Validation failed",
"message": "Multiple validation errors occurred",
"details": {
"recipients": [
"Recipient 1: email is invalid"
],
"deleted_recipients": [
"Cannot reassign: designations must match"
],
"fields": [
"Field 2: x coordinate must be between 0 and 100"
]
}
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Not Found",
"message": "The requested resource was not found"
}{
"error": "Rate Limit Exceeded",
"message": "Too many requests. Please wait before retrying.",
"details": {
"retry_after": 45
}
}Autorizaciones
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.
Parámetros de ruta
ID de la solicitud de firma
Cuerpo
Actualiza las propiedades de la solicitud de firma
Show child attributes
Show child attributes
Inserta o actualiza destinatarios: incluye 'id' para actualizar destinatarios existentes, usa '_temp_id' (por ejemplo, 'temp_1') para destinatarios nuevos y así poder referenciarlos en fields y reminders dentro de la misma solicitud
Show child attributes
Show child attributes
Destinatarios a eliminar y cómo manejar sus campos
Show child attributes
Show child attributes
Al eliminar destinatarios cuyos campos son referenciados por condiciones en otros campos: si es true, se eliminan automáticamente las referencias de la condición; si es false (predeterminado), la solicitud se rechazará con un error que lista los campos dependientes.
Inserta o actualiza campos: incluye id para actualizar, omite id para crear uno nuevo
Show child attributes
Show child attributes
Inserta o actualiza recordatorios: incluye id para actualizar, omite id para crear uno nuevo
Show child attributes
Show child attributes
Respuesta
Solicitud de firma actualizada correctamente. Devuelve la solicitud de firma actualizada y un resumen de los cambios realizados.
Resultado de la actualización de la solicitud de firma
ID de la solicitud de firma (por compatibilidad con versiones anteriores)
Nombre de la solicitud de firma (por compatibilidad con versiones anteriores)
Resumen de la solicitud de firma actualizada (subconjunto del esquema completo de SigningRequest)
Show child attributes
Show child attributes
Lista actualizada de destinatarios
Show child attributes
Show child attributes
Lista actualizada de recordatorios
Show child attributes
Show child attributes
Resumen de todos los cambios realizados en esta actualización
Show child attributes
Show child attributes
¿Esta página le ayudó?