> ## 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.

# Curva del Tesoro

> Curva del Tesoro del último día con tasas en o antes de date (rate_date, rate_age_days). Tasas en porcentaje; compare.points[].change en puntos porcentuales. tenor_days agrega interpolated (lineal en días) y compare_date agrega compare. Hay tasas desde 2025-01-02.

> [!NOTE]
>
> Devuelve la curva del Tesoro de Estados Unidos de un día: una tasa por tenor. Opcionalmente suma una tasa interpolada a N días y la curva de otra fecha con el cambio por tenor. Las tasas vienen en porcentaje (`4.98` es 4,98%). Requiere el scope `treasuries:read`.

## Curvas disponibles

| `curve` | Qué es | Tenors |
| - | - | - |
| `par_yield` (predeterminada) | Rendimiento par de notas y bonos | `1M`, `1.5M`, `2M`, `3M`, `4M`, `6M`, `1Y`, `2Y`, `3Y`, `5Y`, `7Y`, `10Y`, `20Y`, `30Y` |
| `bill_discount` | Tasa de descuento bancario de letras | `4W`, `6W`, `8W`, `13W`, `17W`, `26W`, `52W` |
| `bill_coupon_equivalent` | Rendimiento equivalente de cupón de letras | `4W`, `6W`, `8W`, `13W`, `17W`, `26W`, `52W` |

Hay una curva por día hábil de Estados Unidos. `par_yield` tiene tasas desde el 2 de enero de 2025. Si pedís una fecha anterior a la primera de la curva, el error trae esa fecha en `first_rate_date`.

## Parámetros de consulta

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

`par_yield`, `bill_discount` o `bill_coupon_equivalent`.

**date** `string`

Día de la curva, `YYYY-MM-DD`. Si no hay tasas ese día (fin de semana, feriado o una fecha posterior a la última), la API devuelve el último día con tasas anterior y lo informa en `rate_date` y `rate_age_days`. Predeterminado: el último día con tasas.

**tenor\_days** `string`

Días al vencimiento, de 1 a 20000. Suma `interpolated`: la tasa interpolada linealmente en días entre los dos tenors que rodean ese plazo.

**compare\_date** `string`

Segunda fecha, `YYYY-MM-DD`. Suma `compare`: la curva de ese día, con la misma regla de último día con tasas, y el cambio por tenor.

## Ejemplo de solicitud

```bash cURL theme={null}
curl "https://api.doctacapital.com.ar/api/v1/treasuries/curve?date=2026-11-10&tenor_days=300&compare_date=2026-01-02" \
  -H "Authorization: Bearer $DOCTA_TOKEN"
```

## Respuesta exitosa

**curve** `string`

Curva devuelta.

**requested\_date** `string`

Fecha pedida en `date`, o el último día con tasas si no la mandaste.

**rate\_date** `string`

Día de la curva devuelta: el último día con tasas en o antes de `requested_date`.

**rate\_age\_days** `integer`

Días entre `rate_date` y `requested_date`. `0` si ese día tiene tasas.

**points** `array`

Un punto por tenor, de menor a mayor plazo.

**points\[].tenor** `string`

Etiqueta del tenor (ej., `2Y`, `1.5M`, `52W`).

**points\[].tenor\_days** `integer`

Plazo del tenor en días (ej., `2Y` es `730`, `52W` es `364`).

**points\[].rate** `number | null`

Tasa en porcentaje. `null` si el Tesoro no publicó ese tenor ese día.

**interpolated** `object | null`

Solo con `tenor_days`; si no, `null`.

**interpolated.tenor\_days** `integer`

El plazo pedido.

**interpolated.rate** `number`

Tasa interpolada, en porcentaje. En un tenor exacto es la tasa de ese tenor. Por debajo del primer tenor o por encima del último, la del extremo.

**interpolated.method** `string`

Siempre `linear_days`.

**interpolated.lower** `object`

Tenor inferior usado: `tenor`, `tenor_days` y `rate`.

**interpolated.upper** `object`

Tenor superior usado: `tenor`, `tenor_days` y `rate`. Igual a `lower` en un tenor exacto o fuera de los extremos.

**compare** `object | null`

Solo con `compare_date`; si no, `null`.

**compare.requested\_date** `string`

La fecha pedida en `compare_date`.

**compare.rate\_date** `string`

Día de la curva de comparación.

**compare.rate\_age\_days** `integer`

Días entre `compare.rate_date` y `compare.requested_date`.

**compare.points** `array`

Un punto por tenor, en el mismo orden que `points`: `tenor`, `tenor_days`, `rate` (la tasa del día de comparación, en porcentaje) y `change`.

**compare.points\[].change** `number | null`

Tasa de la curva principal menos tasa de la curva de comparación, en puntos porcentuales y redondeada a 6 decimales. `null` si falta alguna de las dos.

> [!NOTE]
>
> Una fecha posterior a la última con tasas no es un error. Con `compare_date=2099-01-01`, `compare` trae la última curva disponible y `rate_age_days: 26350`. Mirá siempre `rate_date` para saber qué día graficás.

## Ejemplo de respuesta exitosa

En el primer ejemplo, `points` y `compare.points` están recortados a cuatro de los 14 tenors.

```json 200 theme={null}
{
  "curve": "par_yield",
  "requested_date": "2026-11-10",
  "rate_date": "2026-11-10",
  "rate_age_days": 0,
  "points": [
    { "tenor": "1M", "tenor_days": 30, "rate": 4.05 },
    { "tenor": "2Y", "tenor_days": 730, "rate": 4.73 },
    { "tenor": "10Y", "tenor_days": 3652, "rate": 4.98 },
    { "tenor": "30Y", "tenor_days": 10957, "rate": 5.35 }
  ],
  "interpolated": {
    "tenor_days": 300,
    "rate": 4.4957142857142856,
    "method": "linear_days",
    "lower": { "tenor": "6M", "tenor_days": 183, "rate": 4.38 },
    "upper": { "tenor": "1Y", "tenor_days": 365, "rate": 4.56 }
  },
  "compare": {
    "requested_date": "2026-01-02",
    "rate_date": "2026-01-02",
    "rate_age_days": 0,
    "points": [
      { "tenor": "1M", "tenor_days": 30, "rate": 3.72, "change": 0.33 },
      { "tenor": "2Y", "tenor_days": 730, "rate": 3.47, "change": 1.26 },
      { "tenor": "10Y", "tenor_days": 3652, "rate": 4.19, "change": 0.79 },
      { "tenor": "30Y", "tenor_days": 10957, "rate": 4.86, "change": 0.49 }
    ]
  }
}
```

```json 200 bill_discount theme={null}
{
  "curve": "bill_discount",
  "requested_date": "2026-11-10",
  "rate_date": "2026-11-10",
  "rate_age_days": 0,
  "points": [
    { "tenor": "4W", "tenor_days": 28, "rate": 3.88 },
    { "tenor": "6W", "tenor_days": 42, "rate": 4.01 },
    { "tenor": "8W", "tenor_days": 56, "rate": 4.02 },
    { "tenor": "13W", "tenor_days": 91, "rate": 4.12 },
    { "tenor": "17W", "tenor_days": 119, "rate": 4.17 },
    { "tenor": "26W", "tenor_days": 182, "rate": 4.26 },
    { "tenor": "52W", "tenor_days": 364, "rate": 4.34 }
  ],
  "interpolated": null,
  "compare": null
}
```

```json 422 theme={null}
{
  "type": "/errors/validation-error",
  "title": "Validation Error",
  "status": 422,
  "detail": "No 'par_yield' rates on or before 1900-01-01",
  "details": {
    "code": "no_rates_on_or_before",
    "first_rate_date": "2025-01-02"
  }
}
```

## Errores

| Status | `details.code` | Cuándo |
| - | - | - |
| 422 | `invalid_curve` | `curve` fuera de las tres curvas. |
| 422 | `invalid_date` | `date` o `compare_date` no son una fecha `YYYY-MM-DD` válida. |
| 422 | `invalid_parameter` | `tenor_days` no es un entero de 1 a 20000. |
| 422 | `no_rates_on_or_before` | `date` o `compare_date` son anteriores al 2025-01-02. Trae `first_rate_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
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:
    get:
      tags:
        - US Treasuries
      description: >-
        Curva del Tesoro del último día con tasas en o antes de date (rate_date,
        rate_age_days). Tasas en porcentaje; compare.points[].change en puntos
        porcentuales. tenor_days agrega interpolated (lineal en días) y
        compare_date agrega compare. Hay tasas desde 2025-01-02.
      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: date
          in: query
          required: false
          description: >-
            Día de la curva, YYYY-MM-DD. Predeterminado: el último día con
            tasas.
          schema:
            type: string
            format: date
        - name: tenor_days
          in: query
          required: false
          description: Días al vencimiento, de 1 a 20000. Agrega interpolated.
          schema:
            type: integer
            minimum: 1
            maximum: 20000
          example: 300
        - name: compare_date
          in: query
          required: false
          description: Segunda fecha, YYYY-MM-DD. Agrega compare con el cambio por tenor.
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Curva de un día
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryCurveResponse'
              example:
                curve: par_yield
                requested_date: '2026-11-10'
                rate_date: '2026-11-10'
                rate_age_days: 0
                points:
                  - tenor: 1M
                    tenor_days: 30
                    rate: 4.05
                  - tenor: 1.5M
                    tenor_days: 46
                    rate: 4.16
                  - tenor: 2M
                    tenor_days: 61
                    rate: 4.21
                  - tenor: 3M
                    tenor_days: 91
                    rate: 4.3
                  - tenor: 4M
                    tenor_days: 122
                    rate: 4.28
                  - tenor: 6M
                    tenor_days: 183
                    rate: 4.38
                  - tenor: 1Y
                    tenor_days: 365
                    rate: 4.56
                  - tenor: 2Y
                    tenor_days: 730
                    rate: 4.73
                  - tenor: 3Y
                    tenor_days: 1096
                    rate: 4.74
                  - tenor: 5Y
                    tenor_days: 1826
                    rate: 4.81
                  - tenor: 7Y
                    tenor_days: 2557
                    rate: 4.89
                  - tenor: 10Y
                    tenor_days: 3652
                    rate: 4.98
                  - tenor: 20Y
                    tenor_days: 7305
                    rate: 5.39
                  - tenor: 30Y
                    tenor_days: 10957
                    rate: 5.35
                interpolated:
                  tenor_days: 300
                  rate: 4.4957142857142856
                  method: linear_days
                  lower:
                    tenor: 6M
                    tenor_days: 183
                    rate: 4.38
                  upper:
                    tenor: 1Y
                    tenor_days: 365
                    rate: 4.56
                compare:
                  requested_date: '2026-01-02'
                  rate_date: '2026-01-02'
                  rate_age_days: 0
                  points:
                    - tenor: 1M
                      tenor_days: 30
                      rate: 3.72
                      change: 0.33
                    - tenor: 1.5M
                      tenor_days: 46
                      rate: 3.71
                      change: 0.45
                    - tenor: 2M
                      tenor_days: 61
                      rate: 3.66
                      change: 0.55
                    - tenor: 3M
                      tenor_days: 91
                      rate: 3.65
                      change: 0.65
                    - tenor: 4M
                      tenor_days: 122
                      rate: 3.62
                      change: 0.66
                    - tenor: 6M
                      tenor_days: 183
                      rate: 3.58
                      change: 0.8
                    - tenor: 1Y
                      tenor_days: 365
                      rate: 3.47
                      change: 1.09
                    - tenor: 2Y
                      tenor_days: 730
                      rate: 3.47
                      change: 1.26
                    - tenor: 3Y
                      tenor_days: 1096
                      rate: 3.55
                      change: 1.19
                    - tenor: 5Y
                      tenor_days: 1826
                      rate: 3.74
                      change: 1.07
                    - tenor: 7Y
                      tenor_days: 2557
                      rate: 3.95
                      change: 0.94
                    - tenor: 10Y
                      tenor_days: 3652
                      rate: 4.19
                      change: 0.79
                    - tenor: 20Y
                      tenor_days: 7305
                      rate: 4.81
                      change: 0.58
                    - tenor: 30Y
                      tenor_days: 10957
                      rate: 4.86
                      change: 0.49
        '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_date, invalid_parameter,
            no_rates_on_or_before o no_rates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
              example:
                type: /errors/validation-error
                title: Validation Error
                status: 422
                detail: No 'par_yield' rates on or before 1900-01-01
                details:
                  code: no_rates_on_or_before
                  first_rate_date: '2025-01-02'
        '429':
          description: Límite de requests de tu plan superado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryError'
      security:
        - bearerAuth: []
components:
  schemas:
    TreasuryCurveResponse:
      type: object
      properties:
        curve:
          type: string
          enum:
            - par_yield
            - bill_discount
            - bill_coupon_equivalent
        requested_date:
          type: string
          format: date
        rate_date:
          type: string
          format: date
        rate_age_days:
          type: integer
        points:
          type: array
          items:
            type: object
            properties:
              tenor:
                type: string
              tenor_days:
                type: integer
              rate:
                type:
                  - number
                  - 'null'
                description: En porcentaje
        interpolated:
          type:
            - object
            - 'null'
          properties:
            tenor_days:
              type: integer
            rate:
              type: number
              description: En porcentaje
            method:
              type: string
              enum:
                - linear_days
            lower:
              type: object
              properties:
                tenor:
                  type: string
                tenor_days:
                  type: integer
                rate:
                  type:
                    - number
                    - 'null'
                  description: En porcentaje
            upper:
              type: object
              properties:
                tenor:
                  type: string
                tenor_days:
                  type: integer
                rate:
                  type:
                    - number
                    - 'null'
                  description: En porcentaje
        compare:
          type:
            - object
            - 'null'
          properties:
            requested_date:
              type: string
              format: date
            rate_date:
              type: string
              format: date
            rate_age_days:
              type: integer
            points:
              type: array
              items:
                type: object
                properties:
                  tenor:
                    type: string
                  tenor_days:
                    type: integer
                  rate:
                    type:
                      - number
                      - 'null'
                    description: En porcentaje
                  change:
                    type:
                      - number
                      - 'null'
                    description: Principal menos comparada, en puntos porcentuales
    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.