---
title: "Gasto de la conversación y si el tope ya detuvo al Met"
method: GET
path: "/contacts/{contactId}/budget"
tags: ["Contacts"]
---

# Gasto de la conversación y si el tope ya detuvo al Met

`GET /contacts/{contactId}/budget`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/contacts/{contactId}/budget`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Devuelve lo gastado en la conversación **en curso** (`spent_usd`), en cuántas respuestas del Met (`turns`), el tope vigente (`cap_usd`), si la función está encendida (`enabled`) y si el Met ya dejó de responder por haberlo pasado (`stopped`).

La conversación en curso arranca en el último reinicio (`reset_at`, del botón o del cierre del chat) o tras 24 horas de silencio, lo que haya pasado después. Por eso `spent_usd` **no** es el gasto histórico del contacto.

`enabled` es `false` si el workspace no encendió la función o si el monto configurado no es utilizable — el mismo criterio con el que el Met decide, para que la pantalla no prometa una protección que no está corriendo.

## Path parameters

- `contactId` number, required

## Query parameters

- `line_id` string

## Response `200`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` ContactBudgetDto, required
    - `cap_usd` number, required: El monto contra el que se compara. Cuando no hay uno utilizable viaja el valor por defecto (US$1,50), que es lo que la pantalla precarga al encender.
    - `enabled` boolean, required: `true` solo si el workspace lo encendió **y** el monto es utilizable. Es el mismo criterio que usa la compuerta, no el valor crudo de la jsonb: un tope encendido con un monto corrupto no detiene nada, y decir acá que está encendido sería mostrarle al operador una protección que no existe.
    - `reset_at` string, nullable, required: Último reinicio (botón del operador o cierre del chat). `null` si nunca.
    - `spent_usd` number, required: Lo gastado en la conversación EN CURSO, no en la vida del contacto.
    - `stopped` boolean, required: `true` cuando el Met **ya no está respondiendo** en esta conversación. Es la misma decisión que toma la compuerta antes de cada turno, no una comparación aparte: si esto dijera algo distinto de lo que hace el Met, la pantalla estaría mintiendo justo cuando el operador la mira para entender por qué el cliente no recibe nada.
    - `turns` number, required: Cuántas respuestas del Met entraron en esa suma. Las de costo cero no.

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/5d9ca294295c?raw)
