Documentación API
API REST para integrar firma electrónica simple en tus aplicaciones.
Todas las solicitudes requieren un API key en el header Authorization:
curl -X POST https://www.firmaelectronicasimple.cl/api/v1/signatures \ -H "Authorization: Bearer frm_live_tu_api_key" \ -F "file=@contrato.pdf" \ -F "signer_name=Juan Pérez" \ -F "signer_email=juan@ejemplo.cl" \ -F "signer_phone=+56912345678"
Las API keys se generan desde el dashboard en la sección API Objects.
Endpoints
/api/v1/signaturesCrear solicitud de firmaEnvía un documento PDF para ser firmado electrónicamente. Requiere multipart/form-data con el archivo y datos del firmante. Parámetro opcional send_confirmation_email (default: true): si se envía como false, la plataforma omite el email de confirmación al firmante tras firmar — útil cuando el cliente maneja la comunicación vía el webhook signature.completed.
Request body:
{
"file": "(PDF binary)",
"signer_name": "Juan Pérez",
"signer_email": "juan@ejemplo.cl",
"signer_phone": "+56912345678",
"send_confirmation_email": false
}Response:
{
"id": "uuid",
"status": "pending",
"signer_name": "Juan Pérez",
"signer_email": "juan@ejemplo.cl",
"original_filename": "contrato.pdf",
"created_at": "2026-03-12T..."
}/api/v1/signaturesListar firmasRetorna las solicitudes de firma paginadas. Soporta filtros por status y fecha.
Response:
{
"data": [...],
"pagination": {
"total": 42,
"page": 1,
"per_page": 20
}
}/api/v1/signatures/:idDetalle de firmaRetorna el detalle completo de una solicitud incluyendo audit trail.
Response:
{
"id": "uuid",
"status": "signed",
"signer_name": "...",
"audit_trail": [...]
}/api/v1/signatures/:id/downloadDescargar PDF firmadoRetorna una URL pre-firmada temporal para descargar el documento firmado.
Response:
{
"download_url": "https://...",
"expires_in": 3600
}/api/v1/signatures/:id/cancelCancelar solicitudCancela una solicitud de firma pendiente.
Response:
{
"id": "uuid",
"status": "cancelled"
}/api/v1/webhooksRegistrar webhookCrea un endpoint webhook para recibir notificaciones de eventos.
Request body:
{
"url": "https://tu-servidor.com/webhook",
"events": ["signature.completed", "signature.viewed"]
}Response:
{
"id": "uuid",
"url": "https://...",
"secret": "whsec_...",
"events": [...]
}/api/v1/usageConsultar usoRetorna el uso del período de facturación actual desglosado por API Object.
Response:
{
"billing_period": "2026-03",
"total_tokens": 150,
"by_api_object": [...]
}Firma envía webhooks firmados con HMAC-SHA256. Verifica la firma usando el secret proporcionado al crear el webhook.
// Headers recibidos:
// X-Firma-Signature: sha256=<hex>
// X-Firma-Timestamp: <unix_seconds>
// X-Firma-Event: signature.completed
const crypto = require('crypto');
// La firma cubre: "<timestamp>.<raw_body>"
function verifyWebhook(rawBody, secret, headers) {
const timestamp = headers['x-firma-timestamp'];
const received = headers['x-firma-signature'].replace('sha256=', '');
const expected = crypto
.createHmac('sha256', secret)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(received)
);
}Eventos disponibles:
signature.viewedsignature.completedsignature.failedsignature.expiredPor defecto, 60 requests por minuto por API Object. Configurable desde el dashboard. Cuando se excede el límite, la API retorna 429 Too Many Requests.