Issue and follow Dominican e-CF documents on behalf of one Organization. Authenticate with `Authorization: Bearer <API key>` (create keys in the dashboard, under Integraciones). Amounts are decimal strings, never numbers. Additive changes keep `/v1`; breaking ones go to `/v2`. A key acts for its whole Organization.
Machine-readable: openapi.json. Webhook events: document.accepted, document.rejected, document.conditionally_accepted, document.received, contingency.entered, contingency.regularized, sequence.low.
POST /v1/invoicesIssue an invoice
A credit-fiscal invoice (31) or a consumer invoice (32). A consumer invoice under DOP 250,000 reaches DGII as its summary (RFCE).
{
"type": "31",
"buyer": {
"name": "Hotel Ejemplo, S.A.",
"rnc": "101000002",
"email": "cuentas@hotel.example"
},
"incomeType": "01",
"payment": {
"type": "credit",
"dueOn": "2026-11-30"
},
"lines": [
{
"name": "Suscripción mensual BillingSoft",
"kind": "service",
"quantity": "1",
"unitPrice": "2500.00",
"tax": "itbis18"
}
]
}
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"31",
"32"
]
},
"buyer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 150
},
"rnc": {
"type": "string",
"pattern": "^(\\d{9}|\\d{11})$"
},
"foreignId": {
"type": "string",
"minLength": 1,
"maxLength": 20
},
"email": {
"type": "string",
"maxLength": 80,
"pattern": "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"name"
]
},
"reference": {
"type": "object",
"properties": {
"ncf": {
"type": "string",
"minLength": 1
},
"issuedOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"modification": {
"type": "string",
"enum": [
"void",
"correctsText",
"correctsAmounts",
"replacesContingency",
"consumerInvoice"
]
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 90
}
},
"required": [
"ncf",
"issuedOn",
"modification"
]
},
"incomeType": {
"type": "string",
"enum": [
"01",
"02",
"03",
"04",
"05",
"06"
]
},
"payment": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "cash"
}
},
"required": [
"type"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "credit"
},
"dueOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"type",
"dueOn"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "free"
}
},
"required": [
"type"
]
}
]
},
"lines": {
"minItems": 1,
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"kind": {
"type": "string",
"enum": [
"good",
"service"
]
},
"quantity": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"unitPrice": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,4})?$"
},
"tax": {
"type": "string",
"enum": [
"itbis18",
"itbis16",
"itbis0",
"exempt"
]
},
"withholding": {
"type": "object",
"properties": {
"itbis": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"isr": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
}
}
}
},
"required": [
"name",
"kind",
"quantity",
"unitPrice",
"tax"
]
}
}
},
"required": [
"type",
"payment",
"lines"
]
}POST /v1/credit-notesIssue a credit note
Type 34. `reference` names the document it modifies; a credit note cannot credit more than that document, when it is one issued through BillingSoft.
{
"buyer": {
"name": "Hotel Ejemplo, S.A.",
"rnc": "101000002"
},
"incomeType": "01",
"payment": {
"type": "cash"
},
"lines": [
{
"name": "Suscripción mensual BillingSoft",
"kind": "service",
"quantity": "1",
"unitPrice": "1000.00",
"tax": "itbis18"
}
],
"reference": {
"ncf": "E310000000001",
"issuedOn": "2026-10-22",
"modification": "correctsAmounts",
"reason": "Descuento acordado"
}
}
{
"type": "object",
"properties": {
"type": {
"default": "34",
"type": "string",
"enum": [
"34"
]
},
"buyer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 150
},
"rnc": {
"type": "string",
"pattern": "^(\\d{9}|\\d{11})$"
},
"foreignId": {
"type": "string",
"minLength": 1,
"maxLength": 20
},
"email": {
"type": "string",
"maxLength": 80,
"pattern": "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"name"
]
},
"reference": {
"type": "object",
"properties": {
"ncf": {
"type": "string",
"minLength": 1
},
"issuedOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"modification": {
"type": "string",
"enum": [
"void",
"correctsText",
"correctsAmounts",
"replacesContingency",
"consumerInvoice"
]
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 90
}
},
"required": [
"ncf",
"issuedOn",
"modification"
]
},
"incomeType": {
"type": "string",
"enum": [
"01",
"02",
"03",
"04",
"05",
"06"
]
},
"payment": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "cash"
}
},
"required": [
"type"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "credit"
},
"dueOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"type",
"dueOn"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "free"
}
},
"required": [
"type"
]
}
]
},
"lines": {
"minItems": 1,
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"kind": {
"type": "string",
"enum": [
"good",
"service"
]
},
"quantity": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"unitPrice": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,4})?$"
},
"tax": {
"type": "string",
"enum": [
"itbis18",
"itbis16",
"itbis0",
"exempt"
]
},
"withholding": {
"type": "object",
"properties": {
"itbis": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"isr": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
}
}
}
},
"required": [
"name",
"kind",
"quantity",
"unitPrice",
"tax"
]
}
}
},
"required": [
"payment",
"lines"
]
}POST /v1/debit-notesIssue a debit note
Type 33, with `reference` as a credit note.
{
"buyer": {
"name": "Hotel Ejemplo, S.A.",
"rnc": "101000002"
},
"incomeType": "01",
"payment": {
"type": "cash"
},
"lines": [
{
"name": "Intereses por mora",
"kind": "service",
"quantity": "1",
"unitPrice": "150.00",
"tax": "exempt"
}
],
"reference": {
"ncf": "E310000000001",
"issuedOn": "2026-10-22",
"modification": "correctsAmounts"
}
}
{
"type": "object",
"properties": {
"type": {
"default": "33",
"type": "string",
"enum": [
"33"
]
},
"buyer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 150
},
"rnc": {
"type": "string",
"pattern": "^(\\d{9}|\\d{11})$"
},
"foreignId": {
"type": "string",
"minLength": 1,
"maxLength": 20
},
"email": {
"type": "string",
"maxLength": 80,
"pattern": "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"name"
]
},
"reference": {
"type": "object",
"properties": {
"ncf": {
"type": "string",
"minLength": 1
},
"issuedOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"modification": {
"type": "string",
"enum": [
"void",
"correctsText",
"correctsAmounts",
"replacesContingency",
"consumerInvoice"
]
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 90
}
},
"required": [
"ncf",
"issuedOn",
"modification"
]
},
"incomeType": {
"type": "string",
"enum": [
"01",
"02",
"03",
"04",
"05",
"06"
]
},
"payment": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "cash"
}
},
"required": [
"type"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "credit"
},
"dueOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"type",
"dueOn"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "free"
}
},
"required": [
"type"
]
}
]
},
"lines": {
"minItems": 1,
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"kind": {
"type": "string",
"enum": [
"good",
"service"
]
},
"quantity": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"unitPrice": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,4})?$"
},
"tax": {
"type": "string",
"enum": [
"itbis18",
"itbis16",
"itbis0",
"exempt"
]
},
"withholding": {
"type": "object",
"properties": {
"itbis": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"isr": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
}
}
}
},
"required": [
"name",
"kind",
"quantity",
"unitPrice",
"tax"
]
}
}
},
"required": [
"payment",
"lines"
]
}POST /v1/otherIssue a purchase, minor-expense, special-regime, government, export or payment-abroad document
Types 41, 43, 44, 45, 46 and 47: `type` is required, and each admits the fields its rules say (buyer, withholding, taxes, income type).
{
"type": "43",
"payment": {
"type": "cash"
},
"lines": [
{
"name": "Peaje",
"kind": "service",
"quantity": "2",
"unitPrice": "100.00",
"tax": "exempt"
}
]
}
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"41",
"43",
"44",
"45",
"46",
"47"
]
},
"buyer": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 150
},
"rnc": {
"type": "string",
"pattern": "^(\\d{9}|\\d{11})$"
},
"foreignId": {
"type": "string",
"minLength": 1,
"maxLength": 20
},
"email": {
"type": "string",
"maxLength": 80,
"pattern": "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"name"
]
},
"reference": {
"type": "object",
"properties": {
"ncf": {
"type": "string",
"minLength": 1
},
"issuedOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"modification": {
"type": "string",
"enum": [
"void",
"correctsText",
"correctsAmounts",
"replacesContingency",
"consumerInvoice"
]
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 90
}
},
"required": [
"ncf",
"issuedOn",
"modification"
]
},
"incomeType": {
"type": "string",
"enum": [
"01",
"02",
"03",
"04",
"05",
"06"
]
},
"payment": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "cash"
}
},
"required": [
"type"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "credit"
},
"dueOn": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
},
"required": [
"type",
"dueOn"
]
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "free"
}
},
"required": [
"type"
]
}
]
},
"lines": {
"minItems": 1,
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"kind": {
"type": "string",
"enum": [
"good",
"service"
]
},
"quantity": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"unitPrice": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,4})?$"
},
"tax": {
"type": "string",
"enum": [
"itbis18",
"itbis16",
"itbis0",
"exempt"
]
},
"withholding": {
"type": "object",
"properties": {
"itbis": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
},
"isr": {
"type": "string",
"pattern": "^\\d{1,16}(\\.\\d{1,2})?$"
}
}
}
},
"required": [
"name",
"kind",
"quantity",
"unitPrice",
"tax"
]
}
}
},
"required": [
"type",
"payment",
"lines"
]
}GET /v1/documents/{id}Get a document
Its status, e-NCF, security code, lines, DGII submissions and answers, and the notes issued on it.
GET /v1/documents/{id}/xmlDownload the signed XML
GET /v1/documents/{id}/pdfDownload the printed representation
POST /v1/documents/{id}/refresh-statusAsk DGII for the verdict now
BillingSoft polls DGII itself and tells your webhook; use this to look sooner. 502 `DGII_ERROR` if DGII could not be asked.
POST /v1/sequences/annulCancel unused e-NCFs
Cancels numbers never used, and documents signed but never sent. A document that was sent is voided with a credit note instead.
{
"ranges": [
{
"documentType": "31",
"from": 90,
"to": 100
}
]
}
{
"type": "object",
"properties": {
"ranges": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"documentType": {
"type": "string",
"enum": [
"31",
"32",
"33",
"34",
"41",
"43",
"44",
"45",
"46",
"47"
]
},
"from": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"to": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"documentType",
"from",
"to"
]
}
}
},
"required": [
"ranges"
]
}GET /v1/config/testCheck the API key
Which Organization the key acts for, its DGII environment and whether it can sign and number documents.
GET /v1/directoryLook up an electronic issuer in DGII’s directory