📚 Documentación API REST

Integra MiFirma en tu aplicación con nuestra potente API REST

REST API v1.0 OAuth 2.0 JSON

¿Listo para integrar?

Requiere plan Corporativo. Contacta con ventas para obtener tus credenciales API.

Solicitar Acceso API

🚀 Introducción

La API REST de MiFirma te permite integrar firma electrónica en tus aplicaciones de forma programática. Ideal para:

  • Sistemas ERP y CRM
  • Plataformas de gestión documental
  • Aplicaciones empresariales
  • Flujos de trabajo automatizados
Base URL: https://api.MiFirma.com/v1

🔐 Autenticación

La API utiliza tokens Bearer para autenticación. Todos los requests deben incluir el header:

Authorization: Bearer YOUR_API_KEY
Obtener API Key
  1. Contratar plan Corporativo
  2. Acceder al Dashboard → API Keys
  3. Crear nueva API Key
  4. Copiar y guardar de forma segura (solo se muestra una vez)
Importante: Nunca expongas tu API Key en código del lado del cliente. Úsala solo en backend.

⚠️ Códigos de Error

Código Significado Descripción
200 OK Request exitoso
201 Created Recurso creado exitosamente
400 Bad Request Parámetros inválidos
401 Unauthorized API Key inválida o faltante
403 Forbidden Sin permisos para este recurso
404 Not Found Recurso no encontrado
429 Too Many Requests Rate limit excedido
500 Internal Server Error Error del servidor
Formato de Error
{
  "success": false,
  "error": {
    "code": "INVALID_CERTIFICATE",
    "message": "El certificado digital es inválido o está vencido",
    "details": {
      "expiry_date": "2025-12-31"
    }
  }
}

⏱️ Rate Limits

Plan Requests/minuto Requests/día
Corporativo 120 10,000
Enterprise 300 50,000

Los headers de respuesta incluyen información del rate limit:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 115
X-RateLimit-Reset: 1704207600
POST /documents/sign

Firma un documento PDF con un certificado digital.

Parámetros
Parámetro Tipo Requerido Descripción
pdf_file file REQUERIDO Archivo PDF a firmar (base64 o multipart)
certificate_file file REQUERIDO Certificado digital (.p12/.pfx)
certificate_password string REQUERIDO Contraseña del certificado
signature_config object OPCIONAL Configuración de la firma visual
reason string OPCIONAL Razón de la firma
location string OPCIONAL Ubicación de la firma
cargo string OPCIONAL Cargo del firmante
Ejemplo de Request (cURL)
curl -X POST https://api.MiFirma.com/v1/documents/sign \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F "pdf_file=@/path/to/document.pdf" \
  -F "certificate_file=@/path/to/certificate.p12" \
  -F "certificate_password=mypassword" \
  -F "reason=Firma de contrato" \
  -F "location=Quito, Ecuador" \
  -F "cargo=Gerente General" \
  -F 'signature_config={"x":100,"y":200,"page":1,"showQr":true}'
Ejemplo de Request (JavaScript)
const formData = new FormData();
formData.append('pdf_file', pdfFile);
formData.append('certificate_file', certificateFile);
formData.append('certificate_password', 'mypassword');
formData.append('reason', 'Firma de contrato');
formData.append('location', 'Quito, Ecuador');
formData.append('cargo', 'Gerente General');
formData.append('signature_config', JSON.stringify({
  x: 100,
  y: 200,
  page: 1,
  showQr: true,
  borderColor: '#1a4d7a',
  textColor: '#000000'
}));

const response = await fetch('https://api.MiFirma.com/v1/documents/sign', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: formData
});

const result = await response.json();
Respuesta Exitosa (200)
{
  "success": true,
  "data": {
    "document_id": "doc_1234567890",
    "filename": "contrato_firmado.pdf",
    "download_url": "https://api.MiFirma.com/v1/documents/doc_1234567890/download",
    "signed_at": "2026-01-02T15:30:00Z",
    "signer": {
      "name": "Juan Pérez García",
      "certificate_issuer": "BCE"
    },
    "file_size": 524288,
    "pages": 5
  }
}
POST /documents/batch-sign

Firma múltiples documentos PDF con el mismo certificado.

Parámetros
Parámetro Tipo Descripción
documents array Array de objetos con pdf_file y configuración
certificate_file file Certificado digital
certificate_password string Contraseña del certificado
Ejemplo de Request
{
  "documents": [
    {
      "pdf_file": "base64_encoded_pdf_1",
      "filename": "contrato_1.pdf",
      "signature_config": {"x": 100, "y": 200, "page": 1}
    },
    {
      "pdf_file": "base64_encoded_pdf_2",
      "filename": "contrato_2.pdf",
      "signature_config": {"x": 150, "y": 250, "page": 2}
    }
  ],
  "certificate_file": "base64_encoded_certificate",
  "certificate_password": "mypassword"
}
Respuesta Exitosa (201)
{
  "success": true,
  "data": {
    "batch_id": "batch_abc123",
    "status": "processing",
    "total_documents": 2,
    "estimated_completion": "2026-01-02T15:35:00Z"
  }
}
GET /documents/{document_id}

Obtiene información de un documento firmado.

Respuesta Exitosa (200)
{
  "success": true,
  "data": {
    "document_id": "doc_1234567890",
    "filename": "contrato.pdf",
    "status": "signed",
    "signed_at": "2026-01-02T15:30:00Z",
    "signer": {
      "name": "Juan Pérez García",
      "certificate_issuer": "BCE",
      "certificate_valid_until": "2027-12-31"
    },
    "download_url": "https://api.MiFirma.com/v1/documents/doc_1234567890/download",
    "verification_url": "https://MiFirma.com/verificar?id=doc_1234567890"
  }
}
GET /documents

Lista todos los documentos firmados.

Query Parameters
Parámetro Tipo Descripción
page integer Número de página (default: 1)
per_page integer Resultados por página (default: 20, max: 100)
status string Filtrar por estado: signed, pending, failed
date_from date Fecha desde (YYYY-MM-DD)
date_to date Fecha hasta (YYYY-MM-DD)
Ejemplo
curl -X GET "https://api.MiFirma.com/v1/documents?page=1&per_page=20&status=signed" \
  -H "Authorization: Bearer YOUR_API_KEY"
POST /documents/verify

Verifica la autenticidad de un documento firmado.

Parámetros
Parámetro Tipo Descripción
pdf_file file Documento PDF firmado a verificar
Respuesta Exitosa (200)
{
  "success": true,
  "data": {
    "is_valid": true,
    "signatures": [
      {
        "signer_name": "Juan Pérez García",
        "signed_at": "2026-01-02T15:30:00Z",
        "certificate": {
          "issuer": "BCE",
          "serial_number": "ABC123456",
          "valid_from": "2025-01-01",
          "valid_until": "2027-12-31",
          "is_valid": true
        },
        "document_integrity": "intact"
      }
    ],
    "total_signatures": 1
  }
}

🔔 Webhooks

Recibe notificaciones en tiempo real cuando ocurren eventos en tu cuenta.

Eventos Disponibles
  • document.signed - Documento firmado exitosamente
  • document.failed - Error al firmar documento
  • batch.completed - Lote de firmas completado
  • certificate.expiring - Certificado por vencer (30 días)
Formato del Payload
{
  "event": "document.signed",
  "timestamp": "2026-01-02T15:30:00Z",
  "data": {
    "document_id": "doc_1234567890",
    "filename": "contrato.pdf",
    "signer_name": "Juan Pérez García",
    "download_url": "https://api.MiFirma.com/v1/documents/doc_1234567890/download"
  }
}
Configuración
  1. Accede a Dashboard → Webhooks
  2. Agrega tu URL de endpoint
  3. Selecciona los eventos que deseas recibir
  4. Copia el secret para verificar firmas

📦 SDKs y Librerías

JavaScript/Node.js
npm install MiFirma-sdk
Ver Docs
PHP
composer require MiFirma/php-sdk
Ver Docs
Python
pip install MiFirma
Ver Docs
REST API

Para cualquier lenguaje

Ver Docs

¿Necesitas ayuda con la integración?

Nuestro equipo técnico está disponible para asistirte