Ir al contenido
Documentación

Negocio

Firmar un documento del portal de certificación DGII

POST
/v1/business/certification/portal-documents/sign
curl --request POST \
--url https://api.timbro.do/v1/business/certification/portal-documents/sign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: example' \
--data '{ "kind": "postulation", "xmlBase64": "example", "confirmation": { "statementVersion": "2026-10-13", "language": "es" } }'

Firma la postulación (paso 1 de la DGII) o la Declaración Jurada (paso 13) que generó el portal de certificación de la DGII con el certificado del negocio que Timbro custodia, y devuelve el archivo firmado para subirlo en el portal de la DGII. Timbro nunca lo envía. Llámala solo mientras la certificación del negocio incluya la acción sign_portal_document; si no, responde business_certification_unavailable. Cada firma requiere que el representante confirme la declaración de ese documento, y se registra con el actor, la hora, los hashes del documento y del archivo firmado, y el certificado. Solo se firman esos dos documentos: una Declaración Jurada debe contener un texto que la DGII publicó, comparado tras normalizarlo a Unicode NFC y reducir cada secuencia de espacios a uno, y una postulación debe indicar el RNC del negocio. Todo lo demás se rechaza antes de registrar la confirmación. El archivo firmado conserva cada elemento, atributo y carácter de texto del enviado; la DGII verifica sin los espacios entre etiquetas, así que se eliminan. Timbro no puede comprobar que el certificado pertenezca al representante que la DGII tiene registrado; la DGII lo revisa cuando subes el archivo. Un reintento con la misma clave de idempotencia (Idempotency-Key) y el mismo cuerpo devuelve los mismos bytes firmados con Idempotent-Replayed: true; una confirmación nueva requiere una clave nueva.

idempotency-key
obligatorio
string
>= 1 characters <= 255 characters /^[\x20-\x7e]+$/
Media typeapplication/json
object
kind
obligatorio
Cualquiera de:
string
Valor permitido: postulation
xmlBase64
obligatorio

El archivo XML que generó el portal de certificación de la DGII, codificado en base64 byte por byte. Máximo 32 KiB antes de codificarlo.

string
>= 4 characters <= 43692 characters /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
confirmation
obligatorio

La declaración que el representante leyó y aceptó para este documento. {business} es la razón social del negocio. Envía una clave de idempotencia (Idempotency-Key) nueva para cada confirmación. 2026-10-13, postulation, es: “Firmo esta postulación como representante de {business} ante la DGII.” 2026-10-13, postulation, en: “I sign this application as the representative of {business} on record with DGII.” 2026-10-13, sworn_declaration, es: “Firmo esta declaración jurada como representante de {business} ante la DGII.” 2026-10-13, sworn_declaration, en: “I sign this sworn declaration as the representative of {business} on record with DGII.”

object
statementVersion
obligatorio
Cualquiera de:
string
Valor permitido: 2026-10-13
language
obligatorio
Cualquiera de:
string
Valor permitido: es

Un documento del portal de certificación DGII firmado con el certificado que Timbro custodia para el negocio, con la confirmación registrada. Timbro no lo envía a la DGII.

Media typeapplication/json
Campos y códigos de la respuesta

Un documento del portal de certificación DGII firmado con el certificado que Timbro custodia para el negocio, con la confirmación registrada. Timbro no lo envía a la DGII.

object
object
obligatorio
string
Valor permitido: business_certification_portal_document_signature
id
obligatorio
string
/^certsign_[0-9a-z]{24}$/
kind
obligatorio
Cualquiera de:
string
Valor permitido: postulation
signedXmlBase64
obligatorio

El documento firmado, codificado en base64, para subirlo en el portal de la DGII.

string
>= 1 characters
sourceSha256
obligatorio
string
/^[0-9a-f]{64}$/
signedSha256
obligatorio
string
/^[0-9a-f]{64}$/
certificateSha256
obligatorio

SHA-256 del certificado DER que firmó.

string
/^[0-9a-f]{64}$/
signerSubjectSerialNumber
obligatorio
string
>= 1 characters
signedAt
obligatorio
string format: date-time
confirmation
obligatorio
object
statementVersion
obligatorio
Cualquiera de:
string
Valor permitido: 2026-10-13
language
obligatorio
Cualquiera de:
string
Valor permitido: es
statement
obligatorio
string
>= 1 characters
statementSha256
obligatorio
string
/^[0-9a-f]{64}$/
confirmedAt
obligatorio
string format: date-time
request-id
obligatorio
string

Identifica esta solicitud. Indícalo cuando contactes a soporte.

Idempotent-Replayed
string
Valor permitido: true

true cuando esta respuesta repite el resultado guardado de una solicitud anterior con la misma clave de idempotencia (Idempotency-Key).