---
title: "DIAN Doctrina Search"
method: POST
path: "/co/dian/doctrina-search/v1"
tags: ["Colombia", "DIAN"]
---

# DIAN Doctrina Search

`POST /co/dian/doctrina-search/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/co/dian/doctrina-search/v1`
- Auth: HTTP bearer

Full-text search over DIAN's published tax doctrine and related legal compilation: oficios, conceptos, decretos, resoluciones, leyes and high-court rulings. Each hit carries the `document_id` used by `dian-doctrina-document`, plus the title, issuing body, epigraph and a matching excerpt. Optional filters: `document_type` (e.g. `Oficios`, `Conceptos`) and `year`. Paginated with `page` and `per_page`; `capped: true` means the source returned more matches than are retrievable, so narrow the query.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `query` string, required: Términos de búsqueda en el texto de la doctrina (p. ej. `dividendos`).
  - `document_type` string: Filtro por tipo de documento (p. ej. `Oficios`, `Conceptos`). Vacío para todos.
  - `year` string: Filtro por año de expedición (yyyy). Vacío para todos.
  - `page` integer: 1-based page number for paginated results.
  - `per_page` integer: Resultados por página (1-100).

## Response `200`

Successful response

- DianDoctrinaSearchResponse
  - `data` DianDoctrinaSearchData, required
    - `query` string, required
    - `document_type` string, nullable, required
    - `year` string, nullable, required
    - `page` number, required
    - `per_page` number, required
    - `total` number, required: Matches after the filters, across all pages.
    - `count` number, required: Results on this page.
    - `capped` boolean, required: True when the search hit its result cap and may be incomplete.
    - `results` object[], required
      - `document_id` string, required: Pass it to the document lookup.
      - `title` string, nullable, required
      - `document_type` string, nullable, required
      - `number` string, nullable, required
      - `year` string, nullable, required
      - `issuer` string, nullable, required
      - `summary` string, nullable, required: The epígrafe, when the record carries one.
      - `excerpt` string, nullable, required: Match context from the search index, HTML stripped.
      - `url` string, required

## Other responses

- `400`: Invalid request body
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded
- `500`: Internal error
- `502`: Upstream source returned an error

---

[API](https://skmtc.dev/usecroma/apis/croma-marketplace-api.md) · [All operations](https://skmtc.dev/usecroma/apis/croma-marketplace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usecroma/apis/croma-marketplace-api/revisions/df016cdb29d7?raw)
