Cambio Uruguay Regional API

Cotizaciones de la región: el dólar y los cruces en Argentina, Brasil, Paraguay, Chile, Bolivia y Uruguay, con series diarias y comparación de rutas

Operations 8

GET /regional Tablero de cotizaciones de la región (AR, BR, PY, CL, BO, UY) #
GET /regional/sources Las fuentes del tablero regional, con el estado de cada una #
GET /regional/sources/{id} Una sola fuente, con todo lo que se sabe de ella #
GET /regional/changes Cada movimiento de precio del tablero regional #
GET /regional/series Qué series históricas existen y desde cuándo #
GET /regional/history Serie diaria de un mercado regional #
GET /regional/compare ¿Compro la moneda acá o llevo dólares? #
GET /regional/convert Convertir entre monedas de la región, pasando por el dólar #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cambio-uruguay-regional-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cambio-uruguay-regional-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cambio Uruguay Regional API
  version: 1.0.0
  description: '# Cambio Uruguay API


    API completa para obtener tipos de cambio y información de casas de cambio en Uruguay.'
  contact:
    name: Cambio Uruguay
    url: https://cambio-uruguay.com
    email: info@cambio-uruguay.com
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  termsOfService: https://cambio-uruguay.com/terminos
servers:
- url: https://api.cambio-uruguay.com
  description: Servidor de Producción
- url: http://localhost:3528
  description: Servidor de Desarrollo
tags:
- name: Regional
  description: 'Cotizaciones de la región: el dólar y los cruces en Argentina, Brasil, Paraguay, Chile, Bolivia y Uruguay, con series diarias y comparación de rutas'
paths:
  /regional:
    get:
      tags:
      - Regional
      summary: Tablero de cotizaciones de la región (AR, BR, PY, CL, BO, UY)
      description: 'Una foto del dólar en los seis países, con TODOS los mercados que cada

        uno publica: los siete dólares argentinos (oficial, blue, MEP, CCL,

        mayorista, cripto y tarjeta), el fixing PTAX y el dólar turismo

        brasileños, el referencial y la planilla del Banco Central del

        Paraguay, el dólar observado chileno, el oficial y el paralelo

        bolivianos, y el mejor precio entre las casas de cambio uruguayas.


        Además de las cotizaciones crudas devuelve lo derivado: la brecha

        entre el precio oficial y el que se consigue en cada país, la matriz

        de cruces regionales implícitos por el dólar, y la comparación de

        rutas ("comprar la moneda acá" contra "llevar dólares y cambiarlos

        allá") para cada vecino.


        Cada cotización dice de qué fuente salió, cuándo la fijó esa fuente,

        qué tipo de precio es (`official`, `parallel`, `retail`, ...) y qué

        otras fuentes publicaron ese mismo mercado (`corroboratedBy`) con la

        diferencia máxima entre ellas (`disagreementPct`). `rejected` lista lo

        que el validador descartó y por qué.


        Se actualiza cada 20 minutos. Endpoint público, sin autenticación.'
      responses:
        '200':
          description: Snapshot regional completo
          content:
            application/json:
              schema:
                type: object
                properties:
                  generatedAt:
                    type: string
                    format: date-time
                  oldestQuoteAt:
                    type:
                    - string
                    - 'null'
                    format: date-time
                  quotes:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: AR:blue:USDARS
                        country:
                          type: string
                          enum:
                          - AR
                          - BR
                          - CL
                          - PY
                          - BO
                          - UY
                        market:
                          type: string
                          example: blue
                        label:
                          type: string
                          example: Dólar blue
                        kind:
                          type: string
                          enum:
                          - official
                          - wholesale
                          - parallel
                          - financial
                          - card
                          - retail
                          - reference
                        base:
                          type: string
                          example: USD
                        quote:
                          type: string
                          example: ARS
                        buy:
                          type:
                          - number
                          - 'null'
                        sell:
                          type:
                          - number
                          - 'null'
                        avg:
                          type: number
                        spreadPct:
                          type:
                          - number
                          - 'null'
                        variationPct:
                          type:
                          - number
                          - 'null'
                        updatedAt:
                          type: string
                          format: date-time
                        source:
                          type: string
                          example: ar_bluelytics
                        sourceUrl:
                          type: string
                        corroboratedBy:
                          type: array
                          items:
                            type: string
                        disagreementPct:
                          type:
                          - number
                          - 'null'
                  board:
                    type: array
                    items:
                      type: object
                  gaps:
                    type: array
                    items:
                      type: object
                  cross:
                    type: array
                    items:
                      type: object
                  routes:
                    type: array
                    items:
                      type: object
                  sources:
                    type: array
                    items:
                      type: object
                  rejected:
                    type: array
                    items:
                      type: object
      operationId: getRegional
      x-operation-id-source: derived
  /regional/sources:
    get:
      tags:
      - Regional
      summary: Las fuentes del tablero regional, con el estado de cada una
      description: 'Quién publica cada número, con qué acceso (API documentada o scraping

        de HTML), qué aporta que no aporte ninguna otra — y **cómo le fue en la

        última corrida**: si respondió, cuánto tardó, qué mercados terminó

        publicando, en cuáles quedó como corroboración de otra, qué se le

        descartó y con qué motivo.


        Los feeds mundiales traen `country: null` y `scope: "global"`: no

        describen a un país en particular y ponerles uno era engañoso.


        `summary.singleSourceMarkets` es el número que importa vigilar: son los

        mercados que hoy dependen de una sola lectura.'
      responses:
        '200':
          description: Catálogo y estado de las fuentes
      operationId: getRegionalSources
      x-operation-id-source: derived
  /regional/sources/{id}:
    get:
      tags:
      - Regional
      summary: Una sola fuente, con todo lo que se sabe de ella
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          example: py_bcp
      responses:
        '200':
          description: Ficha de la fuente
        '404':
          description: No existe una fuente con ese id
      operationId: getRegionalSourcesById
      x-operation-id-source: derived
  /regional/changes:
    get:
      tags:
      - Regional
      summary: Cada movimiento de precio del tablero regional
      description: 'Una fila por cada vez que un precio cambió, **sin umbral mínimo**: un

        guaraní, un centavo de real o una diezmilésima de peso entran igual.


        Es la otra mitad de `/regional/history`: la fila diaria guarda el

        cierre y se sobrescribe en cada corrida, así que lo que pasa adentro de

        un día sólo existe acá.


        La RESOLUCIÓN es la del trabajo que lo alimenta: se ve lo que hay

        cuando se mira, cada diez minutos. Dos movimientos dentro de la misma

        ventana quedan registrados como uno, del primer valor al último; por

        eso cada fila trae `observedAt` (cuándo lo vimos), `sourceUpdatedAt`

        (cuándo dice la fuente que se fijó) y `sinceMinutes` (cuánto pasó desde

        la lectura anterior de ese mercado).'
      parameters:
      - name: key
        in: query
        schema:
          type: string
          example: AR:blue:USDARS
        description: Clave exacta del mercado
      - name: country
        in: query
        schema:
          type: string
          enum:
          - AR
          - BR
          - CL
          - PY
          - BO
          - UY
      - name: market
        in: query
        schema:
          type: string
          example: blue
      - name: base
        in: query
        schema:
          type: string
          example: USD
      - name: quote
        in: query
        schema:
          type: string
          example: ARS
      - name: from
        in: query
        schema:
          type: string
          format: date-time
      - name: to
        in: query
        schema:
          type: string
          format: date-time
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 5000
          default: 500
      responses:
        '200':
          description: Movimientos, del más nuevo al más viejo
        '400':
          $ref: '#/components/responses/ValidationError'
      operationId: getRegionalChanges
      x-operation-id-source: derived
  /regional/series:
    get:
      tags:
      - Regional
      summary: Qué series históricas existen y desde cuándo
      description: 'Una fila por serie almacenada, con la cantidad de días y el rango de

        fechas. Las argentinas arrancan en 2011 y la brasileña antes; las que

        ningún tercero publica (Paraguay, Bolivia, el tablero uruguayo)

        arrancan el día que este trabajo corrió por primera vez.'
      responses:
        '200':
          description: Catálogo de series
      operationId: getRegionalSeries
      x-operation-id-source: derived
  /regional/history:
    get:
      tags:
      - Regional
      summary: Serie diaria de un mercado regional
      description: 'Devuelve un punto por día (cierre) filtrando por país, mercado y par.

        Las series con historia propia del publicador llegan hasta 2011

        (dólares argentinos) o antes (PTAX brasileño); el resto empieza el día

        que este tablero se publicó.


        Sin filtros devuelve TODAS las series mezcladas, lo cual casi nunca es

        lo que se quiere: filtrar por `country` + `market` es lo habitual.'
      parameters:
      - name: country
        in: query
        schema:
          type: string
          enum:
          - AR
          - BR
          - CL
          - PY
          - BO
          - UY
      - name: market
        in: query
        schema:
          type: string
          example: blue
      - name: base
        in: query
        schema:
          type: string
          example: USD
      - name: quote
        in: query
        schema:
          type: string
          example: ARS
      - name: from
        in: query
        schema:
          type: string
          format: date
          example: '2024-01-01'
      - name: to
        in: query
        schema:
          type: string
          format: date
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 20000
          default: 5000
      responses:
        '200':
          description: Puntos diarios en orden cronológico
        '400':
          $ref: '#/components/responses/ValidationError'
      operationId: getRegionalHistory
      x-operation-id-source: derived
  /regional/compare:
    get:
      tags:
      - Regional
      summary: ¿Compro la moneda acá o llevo dólares?
      description: 'Para cada vecino compara dos rutas con precios reales: comprar la

        moneda en una casa de cambio uruguaya, o comprar dólares acá y

        cambiarlos allá. Devuelve el costo de una unidad por cada ruta, cuál

        gana y por cuánto.


        Con `amount` devuelve además cuánto sale esa cantidad por cada ruta.'
      parameters:
      - name: currency
        in: query
        schema:
          type: string
          example: ARS
        description: Limitar a una moneda (ARS, BRL, PYG, CLP, BOB).
      - name: amount
        in: query
        schema:
          type: number
          example: 10000
        description: Cantidad de moneda extranjera a costear.
      responses:
        '200':
          description: Comparación de rutas
        '400':
          $ref: '#/components/responses/ValidationError'
      operationId: getRegionalCompare
      x-operation-id-source: derived
  /regional/convert:
    get:
      tags:
      - Regional
      summary: Convertir entre monedas de la región, pasando por el dólar
      description: 'El dólar es el pivote porque es la única moneda que los seis países

        cotizan directamente. `market` fija el mercado del lado de origen: la

        diferencia entre convertir pesos argentinos al oficial y al blue es

        justamente el sentido del parámetro.


        La respuesta incluye `legs`, los identificadores de las cotizaciones

        usadas, para que cualquier resultado se pueda rehacer a mano.'
      parameters:
      - name: from
        in: query
        required: true
        schema:
          type: string
          example: ARS
      - name: to
        in: query
        required: true
        schema:
          type: string
          example: UYU
      - name: amount
        in: query
        schema:
          type: number
          default: 1
      - name: market
        in: query
        schema:
          type: string
          example: blue
        description: Mercado del lado de origen (blue, oficial, ptax, turismo, ...).
      responses:
        '200':
          description: Resultado de la conversión con las cotizaciones usadas
        '400':
          $ref: '#/components/responses/ValidationError'
        '404':
          description: No hay cotizaciones para ese par
      operationId: getRegionalConvert
      x-operation-id-source: derived
components:
  schemas:
    ValidationError:
      type: object
      properties:
        error:
          type: string
          description: Mensaje de error de validación
        parameter:
          type: string
          description: Nombre del parámetro inválido
        value:
          type: string
          description: Valor proporcionado que es inválido
        validValues:
          type: array
          items:
            type: string
          description: Lista de valores válidos para este parámetro
        suggestion:
          type: string
          description: Sugerencia para corregir el error
      required:
      - error
      - parameter
      - validValues
  responses:
    ValidationError:
      description: Error de validación de parámetros
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
          examples:
            invalid_origin:
              summary: Casa de cambio inválida
              value:
                error: Invalid origin parameter
                parameter: origin
                value: invalid_exchange
                validValues:
                - la_favorita
                - cambio_minas
                - brou
                - cambio_regul
                - itau
                - oca
                - prex
                - santander
                - bcu
                - cambilex
                suggestion: Use /parameters/origins to get all valid origins
            invalid_currency:
              summary: Moneda inválida
              value:
                error: Invalid currency code
                parameter: code
                value: INVALID
                validValues:
                - USD
                - EUR
                - ARS
                - BRL
                - XAU
                - UR
                - UP
                - UI
                - PYG
                - PEN
                - MXN
                - JPY
                - GBP
                - COP
                - CLP
                - CHF
                - CAD
                - AUD
                suggestion: Use /parameters/currencies to get all valid currency codes