Skip to main content
DIAN (Dirección de Impuestos y Aduanas Nacionales) is Colombia’s tax and customs authority. A taxpayer’s online account holds what DIAN knows about their year: the electronic invoices issued to them and the information third parties reported (información exógena). These endpoints read that account as the taxpayer’s own connection, one tax year at a time.

Connect your account

DIAN answers only to a signed-in person: their DIAN account’s document type, number and password. Signed in on their own behalf (sign_in_as: self, the default) the connection reads the person’s own records; signed in on behalf of a third party they represent at DIAN (sign_in_as: third_party, with its NIT in on_behalf_of_nit) it reads that company’s or person’s records. The person and each third party are separate connections. Each query runs as your organization’s own connection, so register one before your first query. Register the account once; Croma keeps the session open and reuses it across queries. POST /co/dian-muisca/connections/v1 Register a connection once. Croma checks it with the source before saving it, and answers with its id and a masked name.
Every query then runs as one of your organization’s connections. Croma picks one, keeps its session open between queries, and moves to the next when one reaches its daily allowance. Register more than one to get more capacity a day. To run as a specific one, send its id as connection_id. How the flow works, step by step: Connections. List and delete them:
Over MCP, the same verbs are the dian_muisca_connect, dian_muisca_list_connections, dian_muisca_delete_connection tools. Connecting from an agent never passes the credentials through the conversation: the agent gets a secure link, and the user enters the account’s details in the Croma console. When a query cannot run as any connection:
Credentials are encrypted as soon as they reach Croma, bound to your organization, and can only be opened by the isolated service that signs in to the source on your behalf. They are never returned by the API or shown to anyone. Deleting a connection destroys it permanently.

Electronic invoices

POST /co/dian-muisca/electronic-invoices/v1 DIAN keeps this report for persons only, so it runs on a connection signed in on its own behalf. A connection signed in for a third party cannot read it, and the job fails.

Response

Each invoice has issuer_id, issuer_name, issued_on, the invoiced_amount with its credit_notes_amount and debit_notes_amount, the net_amount and deductible_amount (COP), payment_method, invoice_number and cufe.
Every call reads DIAN live as your connection, so the answer is current and is never shared between organizations.
This lookup can take longer than a typical request. It is an async job. By default the request waits inline and returns { data }, or you can poll / use a callback_url.

Third-party reports

POST /co/dian-muisca/third-party-reports/v1

Response

Each report has reporter_id and reporter_name (who reported), reported_id and reported_name (how they reported it; reported_id is null before 2023), concept, amount (COP), and suggested_use and additional_info (null before 2023).
Every call reads DIAN live as your connection, so the answer is current and is never shared between organizations.
This lookup can take longer than a typical request. It is an async job. By default the request waits inline and returns { data }, or you can poll / use a callback_url.

Full reference

Schemas, all response fields, and an interactive playground.