Precios, TIR, flujos, condiciones y series del BCRA: todo lo que ves en pantalla se puede pedir por API y llevar a una planilla, un script o tu propia herramienta.
El camino más corto: en vez de escribir consultas, le preguntás en castellano a tu propio Claude, Cursor o agente, y él consulta el tablero por vos. Necesitás dos datos: la URL y tu clave de API. Disponible para cuentas plus y admin.
claude mcp add --transport http curvas https://tu-tablero/api/mcp \ --header "Authorization: Bearer ck_TU_CLAVE"
{
"mcpServers": {
"curvas": {
"type": "http",
"url": "https://tu-tablero/api/mcp",
"headers": { "Authorization": "Bearer ck_TU_CLAVE" }
}
}
}curl -s -X POST https://tu-tablero/api/mcp \
-H "Authorization: Bearer ck_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'| herramienta | qué hace |
|---|---|
buscar_instrumento | Resuelve un nombre a medias en tickers reales. Es la que usa el agente cuando le nombrás un bono de memoria. |
tasas | Precio, TIR, TEM, TNA, duration y convexidad en vivo, de uno o de todo el mercado. |
flujos | El calendario de pagos: cada fecha y su monto por 100 VN. |
condiciones | El pliego: vencimiento, tasa, periodicidad, moneda, ley y jurisdicción. |
historico | La serie larga de TIR o de paridad, desde 2018 (344 y 239 instrumentos). Para ver dónde está un bono contra su propia historia. |
intradiario | TIR y precio tick a tick de la rueda de hoy. |
calcular | Precio → tasa, o tasa → precio, sobre el calendario real. Es la que responde «ia qué precio rinde 10 %?». |
curva | Los puntos de un grupo para comparar rendimiento contra duration. |
fx | MEP, CCL y oficial A3500. |
serie_bcra | Una serie del BCRA por id (30 = CER, 44 = TAMAR, 7 = BADLAR). |
Todo lo que ves es de lectura. Ninguna de las diez tools modifica nada, y tu clave nace de sólo lectura: aunque el agente quisiera, el servidor rechaza cualquier escritura.
El agente no hace las cuentas. Cada respuesta trae la TIR, la TEM y la TNA ya resueltas por el motor de valuación, con la liquidación y el tipo de cambio que se usaron. El agente cita esos números en lugar de derivarlos del precio — que es de dónde salen las tasas inventadas que suenan bien.
Rigen los mismos límites que la API: 120 llamadas por minuto (500 para admin) y 3 IPs por clave. Si además consultás por script, conviene una clave para cada cosa.
Unidades. Las tasas vienen en decimal (0.0868 es 8,68 %), salvo las series del BCRA, que vienen en porcentaje. Los precios son por 100 VN en la moneda de la especie: el ticker en pesos en ARS, la especie D en USD.
Iniciás sesión una vez, guardás la cookie y la mandás en cada consulta. La sesión dura 7 días.
curl -s -c cookies.txt \
-X POST https://tu-tablero/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "vos@ejemplo.com", "password": "tu-password"}'curl -s -b cookies.txt https://tu-tablero/api/me
Para que un script o una planilla consulten sin iniciar sesión. Las emitís vos, desde tu cuenta, y las revocás cuando quieras. Disponibles para cuentas plus y admin.
curl -s -b cookies.txt \
-X POST https://tu-tablero/api/internal/api-keys \
-H "Content-Type: application/json" \
-d '{"nombre": "planilla de flujos", "solo_lectura": true}'curl -s -H "Authorization: Bearer ck_TU_CLAVE" \ "https://tu-tablero/api/internal/flujos?ticker=AL30"
curl -s -b cookies.txt https://tu-tablero/api/internal/api-keys curl -s -b cookies.txt -X DELETE https://tu-tablero/api/internal/api-keys/EL_ID
La clave actúa como vos: nunca da más permisos que los que tenés en el momento de usarla. Si tu cuenta cambia de rol o se desactiva, deja de funcionar sola, sin revocarla. Por defecto es de sólo lectura; una clave así no puede escribir aunque vos sí puedas.
Límites por clave. 120 llamadas por minuto para cuentas plus y 500 para admin — dos por segundo alcanzan de sobra para cualquier uso normal; el tope existe para que un bucle mal cerrado no se lleve puesto el backend. Al superarlo llega un 429 con Retry-After.
Además, cada clave se puede usar desde hasta 3 IPs distintas por semana (las cuentas admin no tienen este tope). Si tu proceso corre en varios lugares, emití una clave para cada uno: es gratis, te deja revocar sólo el que haga falta, y cada una lleva su propio presupuesto de llamadas.
Le mandás un precio y te devuelve la TIR, la TEM y la TNA. O al revés: le mandás una tasa y te devuelve el precio. Sobre el calendario real del activo, con la fecha de concertación y el T+x hábiles que le indiques.
curl -s -b cookies.txt -X POST https://tu-tablero/api/rf/calc/tasa \
-H "Content-Type: application/json" \
-d '{"ticker": "AL30D", "precio": 55.85, "t_mas": 1}'curl -s -b cookies.txt -X POST https://tu-tablero/api/rf/calc/precio \
-H "Content-Type: application/json" \
-d '{"ticker": "AL30D", "tasa": 0.0868, "modo": "tir", "t_mas": 1}'curl -s -b cookies.txt -X POST https://tu-tablero/api/rf/calc/tasa \
-H "Content-Type: application/json" \
-d '{"ticker": "TX28", "precio": 1739.5,
"fecha_concertacion": "2026-09-22", "t_mas": 2,
"conv": "30/360"}'curl -s -b cookies.txt -X POST https://tu-tablero/api/rf/calc/tasa \
-H "Content-Type: application/json" \
-d '{"ticker": "AL30", "precio": 85440, "t_mas": 1}'Parámetros. ticker es lo único obligatorio además del precio o la tasa. fecha_concertacion por defecto es hoy; t_mas son días hábiles AR (saltea feriados) y por defecto sigue la rueda de 24 hs del tablero; modo acepta tir, tea, tem o tna; conv acepta actual/365 (por defecto), act/360, 30/360 o cualquier días/base.
Qué gobierna la convención. conv cambia cómo se expresa la TNA; no cambia la TIR ni el precio. El descuento es siempre días calendario sobre 365 — el campo base_descuento de la respuesta lo dice explícito. Pedir act/360 esperando que cambie la TIR es el malentendido más fácil de cometer acá.
Precios en pesos de bonos en dólares. Si mandás un AL30 a 120.710 (pesos), el tipo de cambio se aplica solo: la respuesta trae precio (el que mandaste), precio_descuento (el que se usó contra los flujos) y fx_kind/fx_val para que veas cuál se aplicó. Con fx forzás mep, ccl, a3500 o none.
Es el mismo motor que el tablero. Para el mismo papel, el mismo precio y la misma rueda, esta TIR es idéntica a la que ves en pantalla — verificado sobre 971 especies con diferencia exactamente cero.
El stock de tasas: precio, TIR por punta, TEM, TNA, duration y convexidad de cada bono, con el tipo de cambio ya aplicado.
curl -s -b cookies.txt \ "https://tu-tablero/api/rf/tasas?tickers=AL30,GD30,TX28&plazo=24hs"
curl -s -b cookies.txt \ "https://tu-tablero/api/rf/tasas/book?tickers=AL30&plazo=24hs"
curl -s -b cookies.txt \ "https://tu-tablero/api/rf/tasas/intraday?ticker=AL30&plazo=24hs&limit=500"
El calendario de pagos de cada bono: fecha teórica y efectiva, interés, amortización, total y valor residual. Es la fuente que usa la valuación.
curl -s -b cookies.txt \ "https://tu-tablero/api/internal/flujos?ticker=AL30"
curl -s -b cookies.txt https://tu-tablero/api/internal/flujos/tickers
A Google Sheets. Con Apps Script lo traés directo a la hoja:
function traerFlujos(ticker) {
var r = UrlFetchApp.fetch(
"https://tu-tablero/api/internal/flujos?ticker=" + ticker,
{ headers: { "Authorization": "Bearer ck_TU_CLAVE" } }
);
var filas = JSON.parse(r.getContentText());
var out = [["fecha", "interés", "amortización", "total"]];
filas.forEach(function (f) {
out.push([f.fecha_efectiva, f.interes, f.amortizacion, f.total]);
});
SpreadsheetApp.getActiveSheet()
.getRange(1, 1, out.length, 4).setValues(out);
}El pliego del instrumento: vencimiento, tasa, periodicidad, valor residual, moneda, legislación y jurisdicción de pago.
curl -s -b cookies.txt https://tu-tablero/api/internal/condiciones/AL30
curl -s -b cookies.txt \ "https://tu-tablero/api/internal/condiciones?ticker=TX&limit=50"
MEP, CCL, canje, A3500 y la curva de futuros de ROFEX, con su interés abierto.
curl -s -b cookies.txt https://tu-tablero/api/dolar/contratos
curl -s -b cookies.txt https://tu-tablero/api/dolar/oi-matrix
La tasa forward implícita entre dos bonos, la matriz completa de un grupo y las pendientes. Acepta bid, offer o mid.
curl -s -b cookies.txt \
-X POST https://tu-tablero/api/analysis/forward \
-H "Content-Type: application/json" \
-d '{"tickers": ["S30S6", "S29E7"], "tipo_serie": "clean"}'curl -s -b cookies.txt \
-X POST https://tu-tablero/api/analysis/forward-curves \
-H "Content-Type: application/json" \
-d '{"tickers": ["S30S6","S16O6","S30O6"]}'Son POST porque el cuerpo lleva la lista de tickers y los parámetros. No modifican nada: calculan y devuelven.
Qué sendero de TAMAR o BADLAR necesita el mercado para que un flotante cupón cero iguale a una alternativa a tasa fija.
curl -s -b cookies.txt \ "https://tu-tablero/api/rf/tamar-be/tabla?modo=curva&tol=0.041&plazo=24hs"
curl -s -b cookies.txt \ "https://tu-tablero/api/rf/tamar-be?ticker=TTD26&objetivo=0.3336&precio=169.3"
Las series oficiales, ya normalizadas. Las más usadas: 44 es TAMAR y 7 es BADLAR.
curl -s -b cookies.txt \ "https://tu-tablero/api/bcra/series/44?desde=2026-01-01"
curl -s -b cookies.txt https://tu-tablero/api/bcra/catalog
Esto explica la mayoría de las confusiones.
| campo | unidad | ejemplo |
|---|---|---|
tir_*, tea | decimal | 0.3152 es 31,52 % |
tem | decimal | Año de 12 meses: (1+TEA)1/12 − 1 |
tna | decimal | Sobre el período del cupón, no sobre el plazo al vencimiento |
valor_residual | fracción | 0.64 es 64 % |
tasa_interes | decimal | 0.0075 es 0,75 % anual |
| Series del BCRA | porcentaje | 23.5625 es 23,5625 % TNA |
| Precios | por 100 VN | En la moneda de la especie: el ticker en pesos en ARS, la especie D en USD |
Fechas. Van en ISO (2026-09-17). Cada pago tiene fecha teórica y efectiva: la efectiva es la teórica corrida al día hábil siguiente. El devengamiento corre sobre la teórica; el pago ocurre en la efectiva.
| código | detalle | qué pasó | qué hacer |
|---|---|---|---|
401 | unauthorized | No hay sesión válida | Volvé a iniciar sesión |
403 | forbidden | Tu rol no alcanza para ese endpoint | Mirá la etiqueta de acceso en la referencia |
403 | invalid_identity | El token de sesión no verifica | Iniciá sesión de nuevo |
403 | session_superseded | Tu sesión fue invalidada | Iniciá sesión de nuevo |
422 | — | Falta un parámetro o tiene el tipo equivocado | El cuerpo del error dice cuál |
503 | identity_unavailable | Problema de infraestructura | No es tuyo; reintentá en un rato |
404 | sin_flujos | Ese ticker no tiene calendario de pagos cargado | Mirá /api/internal/flujos/tickers |
409 | sin_tipo_de_cambio | Es un bono en moneda extranjera y no hay TC | Pasá fx=mep|ccl|a3500, o mandá el precio ya en USD |
422 | tir_no_converge | Con ese precio no hay TIR resoluble | Revisá el precio |
422 | tir_fuera_de_rango | La TIR da más de 10.000 % anual | Casi siempre es un precio mal tipeado |
422 | precio_no_calculable | Con esa tasa el precio no da un número usable | Revisá el modo y la tasa |
422 | modo_invalido | El modo no es tir/tea/tem/tna | Corregí el modo |
403 | invalid_api_key | La clave no existe, fue revocada, o está mal copiada | Emití una nueva desde Claves de API |
403 | api_access_denied | Tu cuenta ya no tiene acceso a la API | Pedí el rol plus a un administrador |
403 | api_key_read_only | La clave es de sólo lectura y el método escribe | Emití una clave sin sólo lectura, si tu rol lo permite |
403 | api_key_too_many_ips | La clave ya se usó desde demasiadas IPs distintas | Emití una clave por cada lugar donde corra tu proceso |
429 | rate_limited | Superaste las llamadas por minuto de tu clave | El header Retry-After dice cuántos segundos esperar |
Límites. El inicio de sesión acepta 20 intentos por IP y 5 por email cada 15 minutos.
Los 195 endpoints. Buscá por ruta o por lo que hace.
| ruta | acceso | qué hace | |
|---|---|---|---|
| POST | /api/internal/admin/reseed | admin | Optionally truncate the listed tables, then re-seed empty tables from fixtures. |
| GET | /api/md/alerts | viewer | — |
| POST | /api/md/alerts | viewer | — |
| DELETE | /api/md/alerts/{aid} | viewer | — |
| GET | /api/internal/api-keys | viewer | Las claves del usuario. Nunca devuelve el secreto, sólo el prefijo. |
| POST | /api/internal/api-keys | viewer | Emite una clave. El campo `clave` viene UNA sola vez: guardala ahora. |
| DELETE | /api/internal/api-keys/{kid} | viewer | Revoca una clave. No se borra la fila: queda el rastro de que existió. |
| POST | /api/analysis/cer-scenarios | viewer | — |
| POST | /api/analysis/cer-scenarios.xlsx | viewer | — |
| POST | /api/analysis/curve | viewer | — |
| POST | /api/analysis/curve-custom | viewer | — |
| POST | /api/analysis/curve-slope | viewer | — |
| POST | /api/analysis/expectations | viewer | — |
| POST | /api/analysis/forward | viewer | — |
| POST | /api/analysis/forward-curves | viewer | — |
| POST | /api/analysis/forward-custom | viewer | — |
| POST | /api/analysis/forward-slopes | viewer | — |
| POST | /api/analysis/fwd-matrix | viewer | — |
| POST | /api/analysis/fwd-pair | viewer | — |
| POST | /api/analysis/historic | viewer | — |
| POST | /api/analysis/implied-fx | viewer | — |
| POST | /api/analysis/inflation | viewer | — |
| POST | /api/analysis/inflation.xlsx | viewer | — |
| POST | /api/analysis/ratio | viewer | — |
| POST | /api/analysis/relval | viewer | — |
| GET | /api/analysis/rem-dataset | viewer | — |
| POST | /api/analysis/rem-refresh | admin | Dispara el barrido completo del REM en background (1 req/min). |
| POST | /api/analysis/series | viewer | — |
| POST | /api/analysis/synthetics | viewer | — |
| POST | /api/analysis/var-summary | viewer | — |
| POST | /api/analysis/yield-curves | viewer | — |
| GET | /api/bcra/catalog | viewer | — |
| GET | /api/bcra/fixings | viewer | Estado de las series con las que se FIJAN los ajustes (TAMAR, BADLAR, CER, |
| POST | /api/bcra/fixings/refresh | admin | Fuerza AHORA el refresco de las series núcleo contra la API del BCRA y |
| GET | /api/bcra/public/series/{variable_id} | viewer | — |
| GET | /api/bcra/series/{variable_id} | viewer | — |
| GET | /api/catalog | viewer | — |
| PUT | /api/catalog | admin | — |
| PUT | /api/catalog/item/{ticker} | admin | — |
| POST | /api/catalog/reclassify | admin | — |
| GET | /api/dolar/contratos | viewer | — |
| POST | /api/dolar/futuros-curva | viewer | — |
| POST | /api/dolar/futuros-hist | viewer | — |
| POST | /api/dolar/oficial | viewer | — |
| POST | /api/dolar/oficial.xlsx | viewer | — |
| GET | /api/dolar/oi-matrix | viewer | — |
| POST | /api/dolar/refresh | admin | — |
| GET | /api/embi | viewer | — |
| GET | /api/health | sin sesión | — |
| GET | /api/internal/mae/history | viewer | Intradiario MAE (datosgrafico) de HOY con el MISMO shape que /api/md/history, |
| GET | /api/internal/mae/vwap | viewer | Intradiario MAE (datosgrafico) del título `cod` para HOY: precio + VWAP acumulado. |
| GET | /api/mae/forex | viewer | — |
| GET | /api/market/fx/a3500 | viewer | A3500 mayorista para valuación. Prioriza el SPOT MAE en vivo (UST$TM000, |
| GET | /api/md/book | viewer | — |
| GET | /api/md/books | viewer | Order books (depth-N) de varios símbolos en UN solo hmget. `symbols` = lista |
| GET | /api/md/cauciones | viewer | — |
| GET | /api/md/cauciones.xlsx | viewer | — |
| GET | /api/md/day-range | viewer | Rango del día (min/max/apertura de `last`) de VARIOS símbolos en UNA |
| GET | /api/md/dolar | viewer | — |
| GET | /api/md/futuros | viewer | — |
| POST | /api/md/fx | viewer | — |
| GET | /api/md/history | viewer | — |
| GET | /api/md/instruments | viewer | — |
| GET | /api/md/movers | viewer | — |
| GET | /api/md/quotes | viewer | — |
| GET | /api/md/quotes-scoped | viewer | Quotes en vivo SOLO de los símbolos pedidos (hmget), con el mismo shape de |
| GET | /api/md/status | viewer | — |
| GET | /api/md/watch | viewer | — |
| GET | /api/presets | viewer | — |
| POST | /api/presets | viewer | — |
| DELETE | /api/presets/{pid} | viewer | — |
| POST | /api/refresh | admin | — |
| GET | /api/status | viewer | — |
| GET | /api/tesoro/licitaciones | viewer | — |
| GET | /api/tesoro/rollover | viewer | — |
| POST | /api/tesoro/seed | admin | — |
| GET | /api/tesoro/stock | viewer | — |
| POST | /api/tesoro/upload | admin | Carga un Excel oficial de Finanzas. kind: 'licitaciones' (resultados) por ahora. |
| GET | /api/tesoro/vencimientos | viewer | — |
| GET | /api/tickers | viewer | — |
| POST | /api/upload | admin | — |
| GET | /api/internal/asset-groups | viewer | Lista los grupos con su conteo de miembros (evaluado en vivo). |
| POST | /api/internal/asset-groups | admin | — |
| GET | /api/internal/asset-groups/fields | viewer | Campos filtrables, operadores y los VALORES distintos por campo (para que el |
| POST | /api/internal/asset-groups/preview | viewer | Evalúa criterios SIN guardar. Devuelve los candidatos (por criterios) y |
| GET | /api/internal/asset-groups/resolve | viewer | A qué grupo pertenece un ticker. |
| DELETE | /api/internal/asset-groups/{slug} | admin | — |
| PUT | /api/internal/asset-groups/{slug} | admin | — |
| GET | /api/internal/asset-groups/{slug}/members | viewer | Tickers que cumplen los criterios del grupo (membresía dinámica). |
| GET | /api/internal/auth/admin/users | admin | — |
| POST | /api/internal/auth/admin/users/{uid}/deactivate | admin | — |
| POST | /api/internal/auth/admin/users/{uid}/reactivate | admin | — |
| POST | /api/internal/auth/admin/users/{uid}/role | admin | — |
| POST | /api/internal/auth/admin/users/{uid}/temp-password | admin | — |
| POST | /api/internal/auth/admin/users/{uid}/verify | admin | Marca la cuenta como verificada A MANO (aprobación del admin). |
| POST | /api/internal/auth/login | sin sesión | — |
| POST | /api/internal/auth/logout | sin sesión | No-op server-side: no hay lista de revocación por-sesión (el token es |
| POST | /api/internal/auth/register | sin sesión | — |
| POST | /api/internal/auth/resend-verification | sin sesión | — |
| POST | /api/internal/auth/verify | sin sesión | — |
| GET | /api/me | sin sesión | Reporta la identidad EFECTIVA que `_auth_gate` ya resolvió (pasos 3-4 |
| GET | /api/internal/bond-classifier | viewer | Lista de familias desde el JSON persistido. |
| POST | /api/internal/bond-classifier/override | admin | Upsert manual de una familia (source="manual"). Persiste y devuelve la familia. |
| POST | /api/internal/bond-classifier/sync | admin | Re-deriva desde Redis, mergea con overrides manuales, persiste. |
| GET | /api/internal/bonds/cer | viewer | — |
| POST | /api/internal/bonds/cer | admin | — |
| POST | /api/internal/bonds/cer/bulk-apply | admin | — |
| POST | /api/internal/bonds/cer/seed | admin | — |
| DELETE | /api/internal/bonds/cer/{ticker} | admin | — |
| GET | /api/internal/bonds/cer/{ticker} | viewer | — |
| PATCH | /api/internal/bonds/cer/{ticker} | admin | — |
| PUT | /api/internal/bonds/cer/{ticker} | admin | — |
| GET | /api/internal/bonds/dolar-linked | viewer | — |
| POST | /api/internal/bonds/dolar-linked | admin | — |
| POST | /api/internal/bonds/dolar-linked/bulk-apply | admin | — |
| POST | /api/internal/bonds/dolar-linked/seed | admin | — |
| DELETE | /api/internal/bonds/dolar-linked/{ticker} | admin | — |
| GET | /api/internal/bonds/dolar-linked/{ticker} | viewer | — |
| PATCH | /api/internal/bonds/dolar-linked/{ticker} | admin | — |
| PUT | /api/internal/bonds/dolar-linked/{ticker} | admin | — |
| GET | /api/internal/bonds/hard-dollar | viewer | — |
| POST | /api/internal/bonds/hard-dollar | admin | — |
| POST | /api/internal/bonds/hard-dollar/bulk-apply | admin | — |
| POST | /api/internal/bonds/hard-dollar/seed | admin | — |
| DELETE | /api/internal/bonds/hard-dollar/{ticker} | admin | — |
| GET | /api/internal/bonds/hard-dollar/{ticker} | viewer | — |
| PATCH | /api/internal/bonds/hard-dollar/{ticker} | admin | — |
| PUT | /api/internal/bonds/hard-dollar/{ticker} | admin | — |
| POST | /api/internal/bonds/hd-upload | admin | Bulk upsert bonds_hd from an Excel file in emisiones_hd format. |
| GET | /api/internal/bonds/lecap-boncap | viewer | List all LECAP/BONCAP bonds, optionally filtered by ticker. |
| POST | /api/internal/bonds/lecap-boncap | admin | Create a new LECAP/BONCAP bond. |
| POST | /api/internal/bonds/lecap-boncap/bulk-apply | admin | — |
| POST | /api/internal/bonds/lecap-boncap/seed | admin | Seed the database with known LECAP/BONCAP bonds. Idempotent (upserts). |
| GET | /api/internal/bonds/lecap-boncap/vt-map | viewer | Returns a simple { ticker: valor_final } map for the frontend. |
| DELETE | /api/internal/bonds/lecap-boncap/{ticker} | admin | Delete a LECAP/BONCAP bond. |
| GET | /api/internal/bonds/lecap-boncap/{ticker} | viewer | Get a single LECAP/BONCAP by ticker. |
| PATCH | /api/internal/bonds/lecap-boncap/{ticker} | admin | Partially update a LECAP/BONCAP bond. |
| PUT | /api/internal/bonds/lecap-boncap/{ticker} | admin | Create or update a LECAP/BONCAP bond. |
| GET | /api/internal/bonds/on-corp | viewer | — |
| POST | /api/internal/bonds/on-corp | admin | — |
| POST | /api/internal/bonds/on-corp/bulk-apply | admin | — |
| POST | /api/internal/bonds/on-corp/seed | admin | — |
| DELETE | /api/internal/bonds/on-corp/{ticker} | admin | — |
| GET | /api/internal/bonds/on-corp/{ticker} | viewer | — |
| PATCH | /api/internal/bonds/on-corp/{ticker} | admin | — |
| GET | /api/internal/bonds/tamar | viewer | — |
| POST | /api/internal/bonds/tamar | admin | — |
| POST | /api/internal/bonds/tamar/bulk-apply | admin | — |
| POST | /api/internal/bonds/tamar/seed | admin | — |
| DELETE | /api/internal/bonds/tamar/{ticker} | admin | — |
| GET | /api/internal/bonds/tamar/{ticker} | viewer | — |
| PATCH | /api/internal/bonds/tamar/{ticker} | admin | — |
| PUT | /api/internal/bonds/tamar/{ticker} | admin | — |
| GET | /api/internal/cer-flows/bonds | viewer | Return CER bonds as BondRef-compatible objects derived from cer_flujos. |
| POST | /api/internal/cer-flows/bulk-apply | admin | Apply a draft diff: upsert rows and delete keys in a single transaction. |
| GET | /api/internal/cer-flows/calendar | viewer | Return upcoming CER coupon payments grouped by payment date. |
| GET | /api/internal/cer-flows/flows | viewer | Paginated list of CER coupon flows, optionally filtered by ticker and date range. |
| POST | /api/internal/cer-flows/import | admin | Upload an Excel file (calendario-de-pagos sheet) and bulk-upsert its rows |
| POST | /api/internal/cer-flows/seed-from-file | admin | Seed cer_flujos from a local file path accessible to the container. |
| GET | /api/internal/cer-flows/tickers | viewer | Return the sorted list of unique tickers stored in cer_flujos. |
| GET | /api/internal/condiciones | viewer | List all condiciones, optionally filtered by ticker. |
| POST | /api/internal/condiciones/ | admin | Create a single condicion de emision (ticker required). 409 if it exists. |
| POST | /api/internal/condiciones/bulk-apply | admin | Apply a draft diff: upsert condiciones and delete tickers in one transaction. |
| POST | /api/internal/condiciones/seed-from-file | admin | Seed condiciones from a local file path (admin/dev only). |
| POST | /api/internal/condiciones/sync-all | admin | Sync all tickers from condiciones_emision to bond tables. |
| POST | /api/internal/condiciones/upload | admin | Ingesta ACUMULATIVA de condiciones desde Excel. **Nunca borra.** |
| DELETE | /api/internal/condiciones/{ticker} | admin | Delete a single condicion de emision. |
| GET | /api/internal/condiciones/{ticker} | viewer | Get a single condicion de emision by ticker. |
| PATCH | /api/internal/condiciones/{ticker} | admin | Partially update a condicion de emision (only provided fields). 404 if missing. |
| POST | /api/internal/condiciones/{ticker}/sync-to-bonds | admin | Sync one ticker from condiciones_emision to bond tables. |
| GET | /api/internal/dlk-flows/ | viewer | — |
| POST | /api/internal/dlk-flows/bulk-apply | admin | Apply a draft diff: upsert rows and delete keys in a single transaction. |
| POST | /api/internal/dlk-flows/upload | admin | — |
| GET | /api/internal/flujos | viewer | Lista plana de flujos (ordenada por ticker, fecha, cupón). |
| POST | /api/internal/flujos/bulk-apply | admin | Aplica un diff de borrador: upsert de filas y baja de claves en una sola |
| POST | /api/internal/flujos/floater-run | admin | Dispara la revaluación de floaters cupón cero AHORA y devuelve el resumen. |
| GET | /api/internal/flujos/floater-status | viewer | Resumen de la última valuación de floaters cupón cero (TEA/TEM + flujo |
| GET | /api/internal/flujos/tickers | viewer | — |
| POST | /api/internal/flujos/upload | admin | Sube un Excel (hoja 'calendario-de-pagos') y lo ACUMULA sobre flujos_fondos. |
| GET | /api/internal/inflation/sources | viewer | { ipc_published:[{month,value}], rem:{ name, percentiles:[...], path:[{month, <pct>...}] } } |
| GET | /api/internal/matriz/catalog | viewer | Buscador del universo, por ticker, nombre o categoría. |
| GET | /api/internal/matriz/health | viewer | Estado de la sesión, sin tirar un login nuevo si ya hay cookie. |
| GET | /api/internal/matriz/vwap | viewer | Las últimas `days` ruedas del instrumento, con su VWAP corrido. |
| POST | /api/mcp | viewer | Único endpoint del servidor MCP. JSON-RPC 2.0 sobre POST. |
| GET | /api/rf/params | viewer | Parámetros de valuación guardados (los que el backend usa: tamar/badlar |
| PUT | /api/rf/params | admin | Guarda los parámetros globales y revalúa los floaters cupón cero con la |
| GET | /api/rf/sintetico/serie | viewer | Serie de un sintético (bono × futuro): últimas `ruedas` de cierre + el |
| GET | /api/rf/tamar-be | viewer | Break-even de `ticker` contra un rendimiento `objetivo` (TEA DECIMAL). |
| GET | /api/rf/tamar-be/tabla | viewer | Break-even de TODOS los flotantes elegibles en UNA llamada. |
| GET | /api/rf/tamar-be/universo | viewer | Flotantes sobre los que hoy se puede calcular: cupón cero Tamar/Badlar. |
| GET | /api/rf/tasas | viewer | Stock de tasas vivo desde Redis (rates:live + rates:meta). fast_json: |
| GET | /api/rf/tasas/book | viewer | Book depth-5 enriquecido con tasas por nivel (rates_stock.rates_for_book), |
| GET | /api/rf/tasas/intraday | viewer | TIR (TEA) intradiaria de UN ticker: el intradiario de market data valuado tick a |
| POST | /api/rf/calc/precio | viewer | Tasa -> precio. Inverso exacto de /tasa: la salida de uno, metida en el |
| POST | /api/rf/calc/tasa | viewer | Precio -> TIR/TEA, TEM y TNA sobre el calendario real del activo. |