Skip to content
Documentation
Get started

Business

Sign a DGII certification portal document

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" } }'

Signs the postulation (DGII step 1) or the Declaración Jurada (step 13) that DGII’s certification portal generated, with the business’s signing certificate in Timbro’s custody, and returns the signed file for upload in DGII’s portal. Timbro never submits it. Call it only while the business certification lists the sign_portal_document action; otherwise it answers business_certification_unavailable. Each signature needs the representative’s confirmation of the statement for that one document, recorded with the actor, time, document and signed hashes, and certificate. Only those two documents are signed: a Declaración Jurada must carry a text DGII published, compared after Unicode NFC normalization with whitespace runs collapsed, and a postulation must name the business’s RNC. Anything else is refused before the confirmation is recorded. The signed file keeps every element, attribute, and character of text of the submitted one; DGII verifies without the whitespace between tags, so it is removed. Timbro cannot check that the certificate belongs to the representative DGII has registered; DGII checks that when the file is uploaded. A retry with the same Idempotency-Key and body returns the same signed bytes with Idempotent-Replayed: true; a new confirmation needs a new key.

idempotency-key
required
string
>= 1 characters <= 255 characters /^[\x20-\x7e]+$/
Media typeapplication/json
object
kind
required
Any of:
string
Allowed value: postulation
xmlBase64
required

The XML file DGII’s certification portal generated, base64-encoded byte for byte. At most 32 KiB before encoding.

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

The statement the representative read and accepted for this one document. {business} is the business’s legal name. Send a new Idempotency-Key for each confirmation. 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
required
Any of:
string
Allowed value: 2026-10-13
language
required
Any of:
string
Allowed value: es

A DGII certification portal document signed with the business’s custodied certificate, with the confirmation recorded for it. Timbro does not submit it to DGII.

Media typeapplication/json
Response fields and codes

A DGII certification portal document signed with the business’s custodied certificate, with the confirmation recorded for it. Timbro does not submit it to DGII.

object
object
required
string
Allowed value: business_certification_portal_document_signature
id
required
string
/^certsign_[0-9a-z]{24}$/
kind
required
Any of:
string
Allowed value: postulation
signedXmlBase64
required

The signed document, base64-encoded, for upload in DGII’s portal.

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

SHA-256 of the DER certificate that signed.

string
/^[0-9a-f]{64}$/
signerSubjectSerialNumber
required
string
>= 1 characters
signedAt
required
string format: date-time
confirmation
required
object
statementVersion
required
Any of:
string
Allowed value: 2026-10-13
language
required
Any of:
string
Allowed value: es
statement
required
string
>= 1 characters
statementSha256
required
string
/^[0-9a-f]{64}$/
confirmedAt
required
string format: date-time
request-id
required
string

Identifies this request. Quote it when you contact support.

Idempotent-Replayed
string
Allowed value: true

true when this response replays the stored result of an earlier request with the same Idempotency-Key.