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

# Comparar bonos

> Comparar métricas de rendimiento intradiario de 2 a 20 bonos en una sola solicitud: TIR, TNA, TNA 30/360, TEM, duration, DTM y margen (solo bonos TAMAR/BADLAR) por bono. Los tickers no encontrados se informan por ticker en errors sin fallar la comparación.

<Note>
  Compará las métricas de rendimiento intradiario de 2 a 20 bonos en una sola solicitud: una fila por bono con TIR, TNA, TEM, duration y días al vencimiento. Requiere el scope `bonds:read`.
</Note>

## Parámetros de consulta

<ParamField query="tickers" type="string[]" required>
  Tickers de los bonos a comparar (2 a 20). Repetí el parámetro: `?tickers=AL30&tickers=GD30`.
</ParamField>

<Info>
  Los tickers que no existen se informan por ticker en `errors` sin hacer fallar la comparación. Un bono sin datos de pricing en la rueda actual vuelve con `no_data: true` y métricas en null.
</Info>

## Ejemplo de Solicitud

<RequestExample>
  ```bash cURL theme={null}
  curl -G 'https://api.doctacapital.com.ar/api/v1/bonds/compare' \
    --header 'Authorization: Bearer $DOCTA_TOKEN' \
    --data-urlencode 'tickers=AL30' \
    --data-urlencode 'tickers=GD30' \
    --data-urlencode 'tickers=AL35'
  ```
</RequestExample>

## Respuesta Exitosa

<ResponseField name="tickers_requested" type="string[]">
  Tickers solicitados, normalizados a mayúsculas.
</ResponseField>

<ResponseField name="rows" type="object[]">
  Una fila por bono resuelto: `ticker`, `sub_asset_class`, `no_data` y las métricas intradiarias `tir`, `tna`, `tna_30_360`, `tem` (todas decimales, 0.0742 = 7,42%), `duration` (años), `dtm` (días al vencimiento) y `margen` (solo bonos TAMAR/BADLAR; null en el resto).
</ResponseField>

<ResponseField name="errors" type="object[]">
  Tickers que no pudieron resolverse: `ticker` y `detail` con el motivo.
</ResponseField>

<ResponseField name="metadata" type="object">
  `total_records`: cantidad de filas devueltas.
</ResponseField>

## Ejemplo de Respuesta Exitosa

<ResponseExample>
  ```json 200 theme={null}
  {
    "tickers_requested": ["AL30", "GD30", "AL35"],
    "rows": [
      {
        "ticker": "AL30",
        "sub_asset_class": "HARD_DOLLAR",
        "no_data": false,
        "tir": 0.0742,
        "tna": 0.0826,
        "tna_30_360": 0.0718,
        "tem": 0.006,
        "duration": 2.09,
        "dtm": 1436,
        "margen": null
      },
      {
        "ticker": "GD30",
        "sub_asset_class": "HARD_DOLLAR",
        "no_data": false,
        "tir": 0.0591,
        "tna": 0.0644,
        "tna_30_360": 0.0576,
        "tem": 0.0048,
        "duration": 2.1,
        "dtm": 1436,
        "margen": null
      }
    ],
    "errors": [],
    "metadata": { "total_records": 2 }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /api/v1/bonds/compare
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/bonds/compare:
    get:
      tags:
        - Bonos
      description: >-
        Comparar métricas de rendimiento intradiario de 2 a 20 bonos en una sola
        solicitud: TIR, TNA, TNA 30/360, TEM, duration, DTM y margen (solo bonos
        TAMAR/BADLAR) por bono. Los tickers no encontrados se informan por
        ticker en errors sin fallar la comparación.
      parameters:
        - name: tickers
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
            minItems: 2
            maxItems: 20
          style: form
          explode: true
      responses:
        '200':
          description: Comparación de bonos
          content:
            application/json:
              schema:
                type: object
              example:
                tickers_requested:
                  - AL30
                  - GD30
                  - AL35
                rows:
                  - ticker: AL30
                    sub_asset_class: HARD_DOLLAR
                    no_data: false
                    tir: 0.0742
                    tna: 0.0826
                    tna_30_360: 0.0718
                    tem: 0.006
                    duration: 2.09
                    dtm: 1436
                    margen: null
                  - ticker: GD30
                    sub_asset_class: HARD_DOLLAR
                    no_data: false
                    tir: 0.0591
                    tna: 0.0644
                    tna_30_360: 0.0576
                    tem: 0.0048
                    duration: 2.1
                    dtm: 1436
                    margen: null
                  - ticker: AL35
                    sub_asset_class: HARD_DOLLAR
                    no_data: false
                    tir: 0.0926
                    tna: 0.1351
                    tna_30_360: 0.0889
                    tem: 0.0074
                    duration: 5.93
                    dtm: 3262
                    margen: null
                errors: []
                metadata:
                  total_records: 3
        '401':
          description: Autenticación requerida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Permisos insuficientes: requiere el scope bonds:read'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Parámetros inválidos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    Error:
      required:
        - type
        - title
        - status
        - detail
        - correlation_id
      type: object
      properties:
        type:
          description: El identificador del tipo de error
          type: string
          example: /errors/authentication-required
        title:
          description: Una breve descripción del error
          type: string
          example: Invalid client credentials
        status:
          description: El código de estado HTTP
          type: integer
          example: 401
        detail:
          description: Una descripción detallada del error
          type: string
          example: Invalid client credentials
        correlation_id:
          description: Un identificador único para rastrear esta solicitud de error
          type: string
          format: uuid
          example: 2eb07802-94de-468a-b70f-75a49f3e9516
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````