Skip to content

DID (identificadores de llamada) ​

Generado desde DialerDigital/core commit 0fc18008b3c8 — especificación openapi/dialer-v1.yaml v0.134.0. No se edita a mano; consulta Cómo se construye esta referencia. Descargar la especificación OpenAPI.

English version

Traducción en curso

Esta referencia se genera desde la especificación OpenAPI. Las cadenas que todavía no tienen traducción aparecen en inglés.

Registro de DID, salud calculada a partir del CDR, lista de verificación de lanzamiento y tickets del carrier.

Endpoints ​

MétodoRutaResumen
GET/v1/didsRegistro de DID
POST/v1/didsRegistrar un número propio del tenant
GET/v1/dids/{id}Obtener un DID
PATCH/v1/dids/{id}Actualizar metadatos/estado (e164 inmutable)
DELETE/v1/dids/{id}Retirar un DID (las filas nunca se borran)
GET/v1/dids/{id}/healthSalud del DID calculada a partir del CDR
GET/v1/dids/{id}/launch-checklistLista de verificación de lanzamiento de un número
POST/v1/dids/{id}/launch-checklist/{step}/confirmationsConfirmar (o desconfirmar) un paso manual del lanzamiento
GET/v1/dids/{id}/carrier-ticketsTickets del carrier de un número
POST/v1/dids/{id}/carrier-ticketsAbrir un ticket del carrier para un número
POST/v1/dids/{id}/carrier-tickets/{ticket_id}/eventsAñadir una nota y/o cambiar el estado de un ticket del carrier

Registro de DID ​

http
GET /v1/dids

Parámetros

NombreEnTipoObligatorioDescripción
statusqueryactive · quarantine · retiredno

Respuestas

200 ​

Filas del registro ordenadas por e164.

CampoTipoObligatorioDescripción
didsarreglo de DIDsí
dids[].idstring (uuid)no
dids[].tenant_idstring (uuid)no
dids[].e164stringnoInmutable tras la creación.
dids[].npastring | nullno
dids[].us_statestring | nullno
dids[].attestationA · B · C · unknownnoNivel STIR/SHAKEN que firma el carrier. Solo lectura para el tenant: solo lo fija el admin de la plataforma (core#2415).
dids[].statusactive · quarantine · retiredno
dids[].verified_atstring (date-time) | nullnoPrueba de titularidad (core#2415, F-03). null = autodeclarado, nunca probado; los DID house nacen verificados.
dids[].verification_methodhouse · otp · admin | nullnoCómo se probó la titularidad; null mientras verified_at sea null.
dids[].originhouse · customernoLas filas house son inventario de la plataforma emitido por el admin; la superficie del tenant solo crea customer.
dids[].labelsarreglo de stringno
dids[].notesstring | nullno
dids[].created_atstring (date-time)no
dids[].updated_atstring (date-time)no
truncatedbooleansítrue cuando hay más filas que los 2 000 números que devuelve el listado: la respuesta es un prefijo en el orden documentado, no el conjunto completo.

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Registrar un número propio del tenant ​

http
POST /v1/dids

e164 es único por tenant → 409 conflict si se duplica; npa se deriva de los números +1 cuando se omite. La superficie del tenant solo puede crear filas con origin: customer; el inventario house lo emite el admin (POST /v1/admin/tenants/{id}/dids).

Cuerpo de la petición (JSON, obligatorio)

CampoTipoObligatorioDescripción
e164stringsíE.164 (inmutable tras la creación).
npastringno
us_statestringno
attestationA · B · C · unknownnoSe acepta e IGNORA (core#2415, F-03): la atestación STIR/SHAKEN es una afirmación que solo registra el admin de la plataforma (POST /v1/admin/tenants/{id}/dids/{did_id}/verify); nunca cambia por esta ruta, que responde como si la clave estuviera ausente.
statusactive · quarantine · retiredno
labelsarreglo de stringno
notesstringno
originhouse · customernoSe acepta e IGNORA POR SEGURIDAD: un tenant nunca puede emitir origin: house, así que cualquier valor aquí se sobrescribe con customer. El enum refleja el esquema de la respuesta porque un GET de un DID house devuelve house: reenviar ese valor no falla, no tiene efecto. Se declara para que ESTA clave no pase a ser un 400 ahora que las claves desconocidas lo son. NO hace que todo el objeto renderizado sea reenviable tal cual: id, tenant_id, created_at y updated_at no se aceptan y SÍ dan el 400.
json
{
  "e164": "+13125550142",
  "us_state": "IL"
}

Respuestas

201 ​

DID registrado.

CampoTipoObligatorioDescripción
didobject (DID)sí
did.idstring (uuid)no
did.tenant_idstring (uuid)no
did.e164stringnoInmutable tras la creación.
did.npastring | nullno
did.us_statestring | nullno
did.attestationA · B · C · unknownnoNivel STIR/SHAKEN que firma el carrier. Solo lectura para el tenant: solo lo fija el admin de la plataforma (core#2415).
did.statusactive · quarantine · retiredno
did.verified_atstring (date-time) | nullnoPrueba de titularidad (core#2415, F-03). null = autodeclarado, nunca probado; los DID house nacen verificados.
did.verification_methodhouse · otp · admin | nullnoCómo se probó la titularidad; null mientras verified_at sea null.
did.originhouse · customernoLas filas house son inventario de la plataforma emitido por el admin; la superficie del tenant solo crea customer.
did.labelsarreglo de stringno
did.notesstring | nullno
did.created_atstring (date-time)no
did.updated_atstring (date-time)no

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

409 — Conflict ​

Transición de estado no válida, conflicto de unicidad, o un asiento que está ocupado/reservado.

json
{
  "error": {
    "code": "conflict",
    "message": "invalid state transition"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Obtener un DID ​

http
GET /v1/dids/{id}

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Respuestas

200 ​

El DID.

CampoTipoObligatorioDescripción
didobject (DID)sí
did.idstring (uuid)no
did.tenant_idstring (uuid)no
did.e164stringnoInmutable tras la creación.
did.npastring | nullno
did.us_statestring | nullno
did.attestationA · B · C · unknownnoNivel STIR/SHAKEN que firma el carrier. Solo lectura para el tenant: solo lo fija el admin de la plataforma (core#2415).
did.statusactive · quarantine · retiredno
did.verified_atstring (date-time) | nullnoPrueba de titularidad (core#2415, F-03). null = autodeclarado, nunca probado; los DID house nacen verificados.
did.verification_methodhouse · otp · admin | nullnoCómo se probó la titularidad; null mientras verified_at sea null.
did.originhouse · customernoLas filas house son inventario de la plataforma emitido por el admin; la superficie del tenant solo crea customer.
did.labelsarreglo de stringno
did.notesstring | nullno
did.created_atstring (date-time)no
did.updated_atstring (date-time)no

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Actualizar metadatos/estado (e164 inmutable) ​

http
PATCH /v1/dids/{id}

Un número distinto es un DID distinto; el historial del CDR nunca se reatribuye.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Cuerpo de la petición (JSON, obligatorio)

CampoTipoObligatorioDescripción
npastringno
us_statestringno
attestationA · B · C · unknownnoSe acepta e IGNORA (core#2415, F-03): la atestación STIR/SHAKEN es una afirmación que solo registra el admin de la plataforma (POST /v1/admin/tenants/{id}/dids/{did_id}/verify); nunca cambia por esta ruta, que responde como si la clave estuviera ausente.
statusactive · quarantine · retiredno
labelsarreglo de stringno
notesstringno
originhouse · customernoSe acepta e IGNORA POR SEGURIDAD, igual que en POST /v1/dids: origin es inmutable y nunca se convierte, así que cualquier valor aquí no tiene efecto. Reenviar el valor que devolvió un GET no falla; el resto del objeto renderizado sí (id, tenant_id, e164, created_at, updated_at dan un 400).
json
{
  "attestation": "A",
  "labels": [
    "postman"
  ],
  "notes": "postman smoke"
}

Respuestas

200 ​

DID actualizado.

CampoTipoObligatorioDescripción
didobject (DID)sí
did.idstring (uuid)no
did.tenant_idstring (uuid)no
did.e164stringnoInmutable tras la creación.
did.npastring | nullno
did.us_statestring | nullno
did.attestationA · B · C · unknownnoNivel STIR/SHAKEN que firma el carrier. Solo lectura para el tenant: solo lo fija el admin de la plataforma (core#2415).
did.statusactive · quarantine · retiredno
did.verified_atstring (date-time) | nullnoPrueba de titularidad (core#2415, F-03). null = autodeclarado, nunca probado; los DID house nacen verificados.
did.verification_methodhouse · otp · admin | nullnoCómo se probó la titularidad; null mientras verified_at sea null.
did.originhouse · customernoLas filas house son inventario de la plataforma emitido por el admin; la superficie del tenant solo crea customer.
did.labelsarreglo de stringno
did.notesstring | nullno
did.created_atstring (date-time)no
did.updated_atstring (date-time)no

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Retirar un DID (las filas nunca se borran) ​

http
DELETE /v1/dids/{id}

Fija el estado retired, idempotente. Las filas nunca salen del registro (DELETE está revocado en Postgres): la procedencia de from_number del CDR debe seguir resolviéndose para el Defense Packet.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Respuestas

200 ​

El DID retirado.

CampoTipoObligatorioDescripción
didobject (DID)sí
did.idstring (uuid)no
did.tenant_idstring (uuid)no
did.e164stringnoInmutable tras la creación.
did.npastring | nullno
did.us_statestring | nullno
did.attestationA · B · C · unknownnoNivel STIR/SHAKEN que firma el carrier. Solo lectura para el tenant: solo lo fija el admin de la plataforma (core#2415).
did.statusactive · quarantine · retiredno
did.verified_atstring (date-time) | nullnoPrueba de titularidad (core#2415, F-03). null = autodeclarado, nunca probado; los DID house nacen verificados.
did.verification_methodhouse · otp · admin | nullnoCómo se probó la titularidad; null mientras verified_at sea null.
did.originhouse · customernoLas filas house son inventario de la plataforma emitido por el admin; la superficie del tenant solo crea customer.
did.labelsarreglo de stringno
did.notesstring | nullno
did.created_atstring (date-time)no
did.updated_atstring (date-time)no

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Salud del DID calculada a partir del CDR ​

http
GET /v1/dids/{id}/health

La salud se CALCULA a partir del CDR de solo anexar en el momento de la lectura: cada número es un recuento de filas, nunca una puntuación en caché. short_call_rate (llamadas contestadas que terminan en menos de 15 s / contestadas) es la señal más fuerte del lado del CDR de «posible spam». Las tasas son null cuando el denominador es cero. reputation.hiya/reputation.tns son nulos explícitos hasta que se contrate una fuente externa. Un DID retirado sigue sirviendo su salud (la procedencia sobrevive a la rotación).

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.
fromquerystring (date-time)noLímite inferior RFC 3339 (campo específico del endpoint; por defecto los últimos 30 días UTC donde se indica).
toquerystring (date-time)noLímite superior RFC 3339.

Respuestas

200 ​

Salud calculada para el periodo (por defecto, los últimos 30 días UTC).

CampoTipoObligatorioDescripción
did_idstring (uuid)no
e164stringno
statusactive · quarantine · retiredno
periodobjectno
period.fromstring (date-time)no
period.tostring (date-time)no
dialsintegerno
answeredintegerno
answer_ratenumber | nullno
short_callsintegerno
short_call_ratenumber | nullno
short_call_secondsintegerno
dailyarreglo de objectno
daily[].datestring (date)no
daily[].dialsintegerno
daily[].answeredintegerno
daily[].short_callsintegerno
reputationobjectnoNulos explícitos hasta que se contrate una fuente externa: muéstralo como pendiente, no como cero.
reputation.hiyanumber | nullno
reputation.tnsnumber | nullno
reputation.notestringno
json
{
  "did_id": "4e3d2c1b-0a9f-4e8d-7c6b-5a4f3e2d1c0b",
  "e164": "+13125550184",
  "status": "active",
  "period": {
    "from": "2026-06-05T00:00:00Z",
    "to": "2026-07-05T00:00:00Z"
  },
  "dials": 412,
  "answered": 67,
  "answer_rate": 0.1626,
  "short_calls": 24,
  "short_call_rate": 0.3582,
  "short_call_seconds": 15,
  "daily": [
    {
      "date": "2026-06-01",
      "dials": 80,
      "answered": 14,
      "short_calls": 5
    }
  ],
  "reputation": {
    "hiya": null,
    "tns": null,
    "note": "external reputation feeds not integrated yet"
  }
}

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Lista de verificación de lanzamiento de un número ​

http
GET /v1/dids/{id}/launch-checklist

Cuatro pasos, cada uno con su source. attestation es derived del registro (A/B/C = hecho; el valor es lo que declaró el tenant, no un veredicto del carrier). warmup es derived del propio CDR del número: hecho cuando ha marcado en warmup_min_active_days días UTC distintos de los últimos 30. registration y cnam son manual: la plataforma no tiene datos sobre ellos, así que son lo que confirmó el operador. No se consulta ninguna fuente externa de reputación.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Respuestas

200 ​

La lista de verificación.

CampoTipoObligatorioDescripción
did_idstring (uuid)sí
e164stringsí
completebooleansíLos cuatro pasos están done.
warmup_min_active_daysintegersí
stepsarreglo de objectsí
steps[].stepregistration · cnam · attestation · warmupsí
steps[].sourcederived · manualsíDe dónde sale el estado; manual es la palabra del operador.
steps[].statedone · pendingsí
steps[].evidenceobjectsíderived: {origin, ...} con los valores detrás del estado (dids.attestation + value; cdr + active_days, required_days, dials). manual: el último {confirmed_at, note}, vacío si nunca se confirmó.

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Confirmar (o desconfirmar) un paso manual del lanzamiento ​

http
POST /v1/dids/{id}/launch-checklist/{step}/confirmations

Añade una confirmación para un paso manual (registration o cnam); la última es el estado del paso y ninguna se edita ni se borra nunca. Un paso derived (attestation, warmup) da 422: lo calcula la plataforma. Un paso desconocido da 404. Devuelve la lista de verificación actualizada.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.
steppathregistration · cnam · attestation · warmupsí

Cuerpo de la petición (JSON, obligatorio)

CampoTipoObligatorioDescripción
confirmedbooleansí
notestringno

Respuestas

201 ​

La lista de verificación tras la confirmación.

CampoTipoObligatorioDescripción
did_idstring (uuid)sí
e164stringsí
completebooleansíLos cuatro pasos están done.
warmup_min_active_daysintegersí
stepsarreglo de objectsí
steps[].stepregistration · cnam · attestation · warmupsí
steps[].sourcederived · manualsíDe dónde sale el estado; manual es la palabra del operador.
steps[].statedone · pendingsí
steps[].evidenceobjectsíderived: {origin, ...} con los valores detrás del estado (dids.attestation + value; cdr + active_days, required_days, dials). manual: el último {confirmed_at, note}, vacío si nunca se confirmó.

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

422 — Unprocessable ​

La forma es correcta, la semántica no (regla de dominio incumplida).

json
{
  "error": {
    "code": "unprocessable",
    "message": "scheduled_at is closer than the minimum notice for a callback (10 minutes unless the tenant's callback_min_notice_seconds says otherwise)"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Tickets del carrier de un número ​

http
GET /v1/dids/{id}/carrier-tickets

Los tickets que el tenant mantiene sobre este número con su carrier, el de actividad más reciente primero, cada uno con su hilo completo de solo anexar. Un número retirado sigue sirviendo sus tickets.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Respuestas

200 ​

Los tickets.

CampoTipoObligatorioDescripción
ticketsarreglo de DidCarrierTicketsí
tickets[].idstring (uuid)sí
tickets[].did_idstring (uuid)sí
tickets[].carrierstringsí
tickets[].subjectstringsí
tickets[].referencestringsí
tickets[].statusopen · in_progress · resolved · closedsí
tickets[].opened_atstring (date-time)sí
tickets[].updated_atstring (date-time)sí
tickets[].eventsarreglo de objectsíEl hilo de solo anexar, del más antiguo al más reciente; el primero tiene kind opened.
tickets[].events[].idstring (uuid)sí
tickets[].events[].kindopened · updatesí
tickets[].events[].statusopen · in_progress · resolved · closedsí
tickets[].events[].notestringsí
tickets[].events[].created_atstring (date-time)sí

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Abrir un ticket del carrier para un número ​

http
POST /v1/dids/{id}/carrier-tickets

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.

Cuerpo de la petición (JSON, obligatorio)

CampoTipoObligatorioDescripción
carrierstringsí
subjectstringsí
referencestringnoLa referencia propia del carrier para el ticket, si dio una.
notestringno

Respuestas

201 ​

El ticket abierto (estado open).

CampoTipoObligatorioDescripción
ticketobject (DidCarrierTicket)sí
ticket.idstring (uuid)sí
ticket.did_idstring (uuid)sí
ticket.carrierstringsí
ticket.subjectstringsí
ticket.referencestringsí
ticket.statusopen · in_progress · resolved · closedsí
ticket.opened_atstring (date-time)sí
ticket.updated_atstring (date-time)sí
ticket.eventsarreglo de objectsíEl hilo de solo anexar, del más antiguo al más reciente; el primero tiene kind opened.
ticket.events[].idstring (uuid)sí
ticket.events[].kindopened · updatesí
ticket.events[].statusopen · in_progress · resolved · closedsí
ticket.events[].notestringsí
ticket.events[].created_atstring (date-time)sí

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Añadir una nota y/o cambiar el estado de un ticket del carrier ​

http
POST /v1/dids/{id}/carrier-tickets/{ticket_id}/events

Añade al hilo del ticket; nada se edita ni se borra. status toma por defecto el vigente. Un evento sin nota ni cambio de estado da 400.

Parámetros

NombreEnTipoObligatorioDescripción
idpathstring (uuid)síUUID del recurso. Los ids mal formados o de otro tenant se leen como 404.
ticket_idpathstring (uuid)síUUID del ticket. Debe pertenecer al número de la ruta; si no, 404.

Cuerpo de la petición (JSON, obligatorio)

CampoTipoObligatorioDescripción
statusopen · in_progress · resolved · closedno
notestringno

Respuestas

201 ​

El ticket con el nuevo evento añadido.

CampoTipoObligatorioDescripción
ticketobject (DidCarrierTicket)sí
ticket.idstring (uuid)sí
ticket.did_idstring (uuid)sí
ticket.carrierstringsí
ticket.subjectstringsí
ticket.referencestringsí
ticket.statusopen · in_progress · resolved · closedsí
ticket.opened_atstring (date-time)sí
ticket.updated_atstring (date-time)sí
ticket.eventsarreglo de objectsíEl hilo de solo anexar, del más antiguo al más reciente; el primero tiene kind opened.
ticket.events[].idstring (uuid)sí
ticket.events[].kindopened · updatesí
ticket.events[].statusopen · in_progress · resolved · closedsí
ticket.events[].notestringsí
ticket.events[].created_atstring (date-time)sí

400 — BadRequest ​

Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).

json
{
  "error": {
    "code": "bad_request",
    "message": "from must be RFC-3339"
  }
}

401 — Unauthorized ​

Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.

json
{
  "error": {
    "code": "unauthorized",
    "message": "invalid or revoked API key"
  }
}

404 — NotFound ​

Id desconocido, mal formado (no UUID) O id de otro tenant: RLS devuelve cero filas, así que los tres son indistinguibles por diseño (sin fuga de existencia, nunca un 403 para ids ajenos).

json
{
  "error": {
    "code": "not_found",
    "message": "resource not found for this tenant"
  }
}

429 — ApiKeyRateLimited ​

Esta clave de API ha superado su cuota de peticiones, o las claves del tenant en conjunto han superado el techo del tenant (core#2503) (code rate_limited). La petición no se procesó. Espera Retry-After segundos y reintenta; un rechazo no cuenta contra el presupuesto, así que esa espera siempre basta. Acotado por clave de API y, por encima de las claves, por tenant (api_tenant_requests_per_minute): una clave hermana no se ve afectada hasta que las claves del tenant en conjunto alcanzan ese techo. La cuota se aplica a toda operación alcanzable con una clave dd_, así que las operaciones que nombran un 429 más específico (control de llamadas, disposiciones, SMS, …) PUEDEN responder TAMBIÉN este, con sus cabeceras X-RateLimit-*.

json
{
  "error": {
    "code": "rate_limited",
    "message": "API key request quota exceeded; retry after the interval in Retry-After"
  }
}

Nothing in these docs is legal advice — always confirm compliance posture with your own counsel.