> ## Documentation Index
> Fetch the complete documentation index at: https://docs.docta.com.ar/llms.txt
> Use this file to discover all available pages before exploring further.

# Historia de la curva del Tesoro

> Serie diaria de la curva por tenor, ascendente, una fila por día con tasas: data[] con rate_date y una clave por tenor. Con spread=A-B cada fila suma spread (A menos B). Tasas en porcentaje; spread en puntos porcentuales.

> [!NOTE]
>
> Devuelve la serie diaria de la curva del Tesoro de Estados Unidos por tenor, una fila por día con tasas, en orden ascendente. Con `spread` cada fila suma la diferencia entre dos tenors. Las tasas vienen en porcentaje (`4.98` es 4,98%) y el spread en puntos porcentuales. Requiere el scope `treasuries:read`.

## Parámetros de consulta

**curve** `string` (default: par\_yield)

`par_yield` (notas y bonos, de `1M` a `30Y`), `bill_discount` o `bill_coupon_equivalent` (letras, de `4W` a `52W`). Ver los tenors de cada curva en [Curva del Tesoro](https://docs.docta.com.ar/api-reference/endpoint/treasuries-curve.md).

**tenors** `string`

Tenors separados por punto, sin distinguir mayúsculas: `2Y.10Y`. `1.5M` lleva su propio punto y funciona igual (`1.5M.2Y`). Un tenor repetido se devuelve una vez. Predeterminado: todos los tenors de la curva.

**from\_date** `string`

Primera fecha, `YYYY-MM-DD`, inclusiva. Predeterminado: un año antes de `to_date`.

**to\_date** `string`

Última fecha, `YYYY-MM-DD`, inclusiva. Predeterminado: el último día con tasas.

**spread** `string`

Dos tenors de la curva con la forma `A-B`, por ejemplo `10Y-2Y`. Suma `spread` a cada fila: la tasa de A menos la de B. Si A o B no están en `tenors`, se agregan al final de la lista.

> [!NOTE]
>
> Las tasas existen desde el 2 de enero de 2025. Un rango que empieza antes no da error: las filas empiezan ese día. Un rango sin días con tasas devuelve `total_records: 0`. Los días sin curva (fines de semana y feriados de Estados Unidos) no tienen fila.

## Ejemplo de solicitud

```bash cURL theme={null}
curl "https://api.doctacapital.com.ar/api/v1/treasuries/curve/history?tenors=2Y.10Y&from_date=2026-10-26&to_date=2026-11-10&spread=10Y-2Y" \
  -H "Authorization: Bearer $DOCTA_TOKEN"
```

## Respuesta exitosa

**curve** `string`

Curva devuelta.

**tenors** `string[]`

Tenors de cada fila, en el orden pedido, con los de `spread` agregados al final si no estaban.

**spread** `string | null`

El spread calculado, normalizado en mayúscula (ej., `10Y-2Y`), o `null`.

**from\_date** `string`

Primera fecha del rango usado.

**to\_date** `string`

Última fecha del rango usado.

**total\_records** `integer`

Cantidad de filas en `data`.

**data** `array`

Una fila por día con tasas, ordenadas por fecha ascendente.

**data\[].rate\_date** `string`

Fecha de la curva.

**data\[].\<tenor>** `number | null`

Una clave por cada tenor de `tenors` (ej., `"2Y"`, `"10Y"`, `"1.5M"`), con la tasa de ese día en porcentaje. `null` si ese día no hay dato para el tenor.

**data\[].spread** `number | null`

Solo con `spread`. Tasa de A menos tasa de B, en puntos porcentuales, redondeada a 6 decimales. `null` si falta alguna de las dos.

## Ejemplo de respuesta exitosa

La serie trae 12 filas. Se muestran las primeras dos y la última.

```json 200 theme={null}
{
  "curve": "par_yield",
  "tenors": ["2Y", "10Y"],
  "spread": "10Y-2Y",
  "from_date": "2026-10-26",
  "to_date": "2026-11-10",
  "total_records": 12,
  "data": [
    { "rate_date": "2026-10-26", "2Y": 4.68, "10Y": 5.0, "spread": 0.32 },
    { "rate_date": "2026-10-27", "2Y": 4.7, "10Y": 4.99, "spread": 0.29 },
    { "rate_date": "2026-11-10", "2Y": 4.73, "10Y": 4.98, "spread": 0.25 }
  ]
}
```

```json 200 bill_discount theme={null}
{
  "curve": "bill_discount",
  "tenors": ["4W", "52W"],
  "spread": "52W-4W",
  "from_date": "2026-11-02",
  "to_date": "2026-11-10",
  "total_records": 7,
  "data": [
    { "rate_date": "2026-11-02", "4W": 3.9, "52W": 4.18, "spread": 0.28 },
    { "rate_date": "2026-11-03", "4W": 3.88, "52W": 4.2, "spread": 0.32 },
    { "rate_date": "2026-11-04", "4W": 3.85, "52W": 4.19, "spread": 0.34 },
    { "rate_date": "2026-11-05", "4W": 3.89, "52W": 4.09, "spread": 0.2 },
    { "rate_date": "2026-11-06", "4W": 3.88, "52W": 4.13, "spread": 0.25 },
    { "rate_date": "2026-11-09", "4W": 3.89, "52W": 4.18, "spread": 0.29 },
    { "rate_date": "2026-11-10", "4W": 3.88, "52W": 4.34, "spread": 0.46 }
  ]
}
```

```json 422 theme={null}
{
  "type": "/errors/validation-error",
  "title": "Validation Error",
  "status": 422,
  "detail": "'8Y' is not a tenor of the curve; valid: ['1M', '1.5M', '2M', '3M', '4M', '6M', '1Y', '2Y', '3Y', '5Y', '7Y', '10Y', '20Y', '30Y']",
  "details": {
    "code": "invalid_tenor"
  }
}
```

## Errores

| Status | `details.code` | Cuándo |
| - | - | - |
| 422 | `invalid_curve` | `curve` fuera de las tres curvas. |
| 422 | `invalid_tenor` | Un tenor de `tenors` no es de la curva pedida. El mensaje lista los válidos. |
| 422 | `invalid_spread` | `spread` sin la forma `A-B` o con un tenor que no es de la curva (`'spread' must be 'A-B' with two tenors of the curve [...], got '10Y'`). |
| 422 | `invalid_date` | `from_date` o `to_date` no son una fecha `YYYY-MM-DD` válida. |
| 422 | `invalid_range` | `from_date` es posterior a `to_date`. |
| 422 | `no_rates` | La curva no tiene ninguna tasa cargada. Trae `first_rate_date`. |

La taxonomía completa está en la [guía](https://docs.docta.com.ar/api-reference/treasuries-guia.md#errores).


## OpenAPI

````yaml GET /api/v1/treasuries/curve/history
openapi: 3.1.0
info:
  title: API de Docta
  description: >-
    API de mercado argentino: bonos (instrumentos, cashflows, curvas/yields) y
    FCI (screener, series, performance, comparaciones y analytics de industria).
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.doctacapital.com.ar
security: []
paths:
  /api/v1/treasuries/curve/history:
    get:
      tags:
        - US Treasuries
      description: >-
        Serie diaria de la curva por tenor, ascendente, una fila por día con
        tasas: data[] con rate_date y una clave por tenor. Con spread=A-B cada
        fila suma spread (A menos B). Tasas en porcentaje; spread en puntos
        porcentuales.
      parameters:
        - name: curve
          in: query
          required: false
          description: >-
            Curva: par_yield (notas y bonos, 1M a 30Y), bill_discount o
            bill_coupon_equivalent (letras, 4W a 52W).
          schema:
            type: string
            enum:
              - par_yield
              - bill_discount
              - bill_coupon_equivalent
            default: par_yield
        - name: tenors
          in: query
          required: false
          description: >-
            Tenors separados por punto, ej. 2Y.10Y o 1.5M.2Y. Predeterminado:
            todos los de la curva.
          schema:
            type: string
          example: 2Y.10Y
        - name: from_date
          in: query
          required: false
          description: >-
            Primera fecha, inclusiva, YYYY-MM-DD. Predeterminado: un año antes
            de to_date.
          schema:
            type: string
            format: date
        - name: to_date
          in: query
          required: false
          description: >-
            Última fecha, inclusiva, YYYY-MM-DD. Predeterminado: el último día
            con tasas.
          schema:
            type: string
            format: date
        - name: spread
          in: query
          required: false
          description: A-B entre dos tenors de la curva, ej. 10Y-2Y.
          schema:
            type: string
          example: 10Y-2Y
      responses:
        '200':
          description: Serie de la curva
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryCurveHistoryResponse'
              example:
                curve: par_yield
                tenors:
                  - 2Y
                  - 10Y
                spread: 10Y-2Y
                from_date: '2026-10-26'
                to_date: '2026-11-10'
                total_records: 12
                data:
                  - rate_date: '2026-10-26'
                    2Y: 4.68
                    10Y: 5
                    spread: 0.32
                  - rate_date: '2026-10-27'
                    2Y: 4.7
                    10Y: 4.99
                    spread: 0.29
                  - rate_date: '2026-10-28'
                    2Y: 4.67
                    10Y: 5.05
                    spread: 0.38
                  - rate_date: '2026-10-29'
                    2Y: 4.61
                    10Y: 4.98
                    spread: 0.37
                  - rate_date: '2026-10-30'
                    2Y: 4.56
                    10Y: 4.94
                    spread: 0.38
                  - rate_date: '2026-11-02'
                    2Y: 4.59
                    10Y: 4.91
                    spread: 0.32
                  - rate_date: '2026-11-03'
                    2Y: 4.61
                    10Y: 4.95
                    spread: 0.34
                  - rate_date: '2026-11-04'
                    2Y: 4.58
                    10Y: 4.9
                    spread: 0.32
                  - rate_date: '2026-11-05'
                    2Y: 4.46
                    10Y: 4.84
                    spread: 0.38
                  - rate_date: '2026-11-06'
                    2Y: 4.51
                    10Y: 4.86
                    spread: 0.35
                  - rate_date: '2026-11-09'
                    2Y: 4.56
                    10Y: 4.88
                    spread: 0.32
                  - rate_date: '2026-11-10'
                    2Y: 4.73
                    10Y: 4.98
                    spread: 0.25
        '401':
          description: Autenticación requerida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
              example:
                type: /errors/authentication-required
                title: Authorization header missing
                status: 401
                detail: Authorization header missing
        '403':
          description: 'Permisos insuficientes: requiere el scope treasuries:read'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
              example:
                type: /errors/insufficient-permissions
                title: 'Insufficient permissions. Required scope: treasuries:read'
                status: 403
                detail: 'Insufficient permissions. Required scope: treasuries:read'
        '422':
          description: >-
            invalid_curve, invalid_tenor, invalid_spread, invalid_date,
            invalid_range o no_rates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
              example:
                type: /errors/validation-error
                title: Validation Error
                status: 422
                detail: >-
                  '8Y' is not a tenor of the curve; valid: ['1M', '1.5M', '2M',
                  '3M', '4M', '6M', '1Y', '2Y', '3Y', '5Y', '7Y', '10Y', '20Y',
                  '30Y']
                details:
                  code: invalid_tenor
        '429':
          description: Límite de requests de tu plan superado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
      security:
        - bearerAuth: []
components:
  schemas:
    TreasuryCurveHistoryResponse:
      type: object
      properties:
        curve:
          type: string
        tenors:
          type: array
          items:
            type: string
        spread:
          type:
            - string
            - 'null'
        from_date:
          type: string
          format: date
        to_date:
          type: string
          format: date
        total_records:
          type: integer
        data:
          type: array
          items:
            type: object
            properties:
              rate_date:
                type: string
                format: date
              spread:
                type:
                  - number
                  - 'null'
                description: A menos B, en puntos porcentuales
            additionalProperties:
              type:
                - number
                - 'null'
              description: Una clave por tenor, tasa en porcentaje
    TreasuryError:
      type: object
      properties:
        type:
          type: string
          description: Tipo de error
          example: /errors/not-found
        title:
          type: string
          description: Título del error
          example: Resource not found
        status:
          type: integer
          description: Status HTTP
          example: 404
        detail:
          type: string
          description: 'Mensaje legible, en inglés. Puede cambiar: no lo parsees.'
        details:
          type: object
          properties:
            code:
              type: string
              description: Código estable del error. Es lo que distingue cada caso.
              enum:
                - invalid_id
                - invalid_date
                - invalid_type
                - invalid_include
                - invalid_parameter
                - invalid_curve
                - invalid_tenor
                - invalid_spread
                - invalid_range
                - invalid_currency
                - missing_parameter
                - invalid_input
                - invalid_value
                - invalid_settlement_entry
                - invalid_fx_value
                - no_rates_on_or_before
                - no_rates
                - no_fx
                - did_not_converge
                - not_in_catalog
                - excluded_strips
                - excluded_tips
                - excluded_frn
                - excluded_other
                - matured
                - not_issued
            isin:
              type: string
              description: ISIN del título, en los 404 y en did_not_converge
            maturity_date:
              type: string
              description: Vencimiento, en matured
              format: date
            issue_date:
              type: string
              description: Emisión, en not_issued
              format: date
            first_rate_date:
              type: string
              description: Primera fecha con tasas, en no_rates_on_or_before y no_rates
              format: date
            fx_used:
              type: string
              description: ccl o mep, en no_fx
          required:
            - code
          description: Solo en los errores del dominio (404 y 422 de Treasuries)
      required:
        - type
        - title
        - status
        - detail
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.