Saltar al contenido
Desarrolladores

Referencia

Todos los endpoints, con sus parámetros, sus respuestas y un ejemplo por operación. Al final están los webhooks, con el cuerpo de cada evento.

v1.0.0
OpenAPI 3.1.0

DialSprint API

API para que tus sistemas (CRM, ERP, core del negocio) creen, actualicen e importen contactos en DialSprint.

Autenticación. Una clave de cuenta en el encabezado Authorization. La clave pertenece a la empresa, no a la persona que la creó, así que sigue andando cuando esa persona se va. No se manda ningún otro encabezado de identificación: la clave ES la cuenta.

Requiere una cuenta activa. La cuenta se activa con la primera carga de saldo. No hay entorno de prueba: se integra contra la cuenta real, y por eso un teléfono repetido responde 409 en vez de crear un duplicado.

Reintentos seguros. Mandá Idempotency-Key: <algo único> en cualquier escritura y un reintento con la misma clave devuelve la respuesta de la primera, sin escribir de nuevo. La clave se recuerda 24 horas; si la reutilizás con otro cuerpo, te avisamos en vez de adivinar.

Avisos. En vez de preguntar cada minuto, registrá un webhook en Configuración → API y te avisamos apenas pasa algo (ver webhooks al final de esta referencia).

Compatibilidad. Los campos nuevos en una respuesta, los valores nuevos de un enum y los parámetros opcionales nuevos son aditivos y NO cambian la versión. Un cambio que rompa algo estrena /v2 y /v1 sigue funcionando.

Server:https://api.dialsprint.com/api/v1

Producción

Client Libraries

Contactos

​

Listar contactos

​

Paginado por cursor y ordenado del más nuevo al más viejo. Usá updated_since para traer sólo lo que cambió desde tu última corrida.

Query Parameters

  • Tu propio identificador.

  • Un teléfono en cualquier formato. Se normaliza antes de buscar.

  • Contactos de una lista.

  • the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

  • Integer numbers.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/contacts
curl https://api.dialsprint.com/api/v1/contacts \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "id": "string",
      "external_id": "string",
      "archived_at": "2026-11-02T23:49:41.166Z",
      "name": "string",
      "phones": [
        "string"
      ],
      "email": "string",
      "company": "string",
      "timezone": "string",
      "tags": [
        "string"
      ],
      "fields": {
        "additionalProperty": "anything"
      },
      "list_ids": [
        "string"
      ],
      "compliance": {
        "dnc_at": "2026-11-02T23:49:41.166Z",
        "blocked_at": "2026-11-02T23:49:41.166Z",
        "sms_opt_out_phones": [
          "string"
        ]
      },
      "warnings": [
        "string"
      ],
      "created_at": "2026-11-02T23:49:41.166Z",
      "updated_at": "2026-11-02T23:49:41.166Z"
    }
  ],
  "meta": {
    "per_page": 1,
    "next_cursor": "string",
    "prev_cursor": "string"
  }
}

Crear un contacto

​

Requiere name y al menos un teléfono. Si alguno de los teléfonos ya pertenece a otro contacto responde 409 con el contact_id del dueño, así la recuperación es un solo PATCH.

Body·ContactWrite

required
application/json
  • Properties: 1

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/contacts
curl https://api.dialsprint.com/api/v1/contacts \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "external_id": "crm-8837",
  "name": "Juan Pérez",
  "phones": [
    "+5491155550000"
  ],
  "email": "juan@ejemplo.com",
  "timezone": "America/Argentina/Buenos_Aires",
  "tags": [
    "plan-30"
  ]
}'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Traer un contacto

​

Path Parameters

Responses

  • application/json
  • application/json
Request Example for get/contacts/{id}
curl 'https://api.dialsprint.com/api/v1/contacts/{id}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Actualizar un contacto (merge)

​

Es un merge, no un reemplazo. Un campo que no mandás queda como estaba. Un campo simple con null se borra.

Las listas (phones, tags, campos personalizados de varios valores) son aditivas: lo que mandás se SUMA. Para sacar algo, usá remove_phones, remove_tags o remove_fields. Es a propósito: los agentes cargan teléfonos y etiquetas desde la app todos los días, y una sincronización que reemplace la lista borraría el teléfono que un agente consiguió ayer.

Path Parameters

Body·ContactPatch

required
application/json
  • Properties: 1
  • Se SUMAN a los que ya tiene.

  • Properties: 1
  • Se SUMAN a las que ya tiene.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for patch/contacts/{id}
curl 'https://api.dialsprint.com/api/v1/contacts/{id}' \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "company": "Ejemplo SRL",
  "tags": [
    "interesado"
  ],
  "remove_tags": [
    "plan-30"
  ]
}'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Crear o reemplazar por tu identificador

​

La operación idempotente: se puede reintentar sin miedo. Responde 201 cuando crea y 200 cuando actualiza, siempre con el contacto en el cuerpo.

A diferencia de PATCH, PUT reemplaza: es el verbo que significa "este es el registro completo". Si tu identificador apunta a un contacto y alguno de los teléfonos pertenece a otro, responde 409 con los dos ids y no escribe nada: un teléfono nunca se muda de contacto solo.

Path Parameters

Body·ContactWrite

required
application/json
  • Properties: 1

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for put/contacts/by-external-id/{external_id}
curl 'https://api.dialsprint.com/api/v1/contacts/by-external-id/{external_id}' \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "external_id": "",
  "name": "",
  "phones": [
    ""
  ],
  "email": "",
  "company": "",
  "timezone": "",
  "tags": [
    ""
  ],
  "fields": {
    "additionalProperty": "anything"
  },
  "list_ids": [
    ""
  ]
}'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Notas del contacto

​

El registro que ve el agente antes de discar. Trae lo que escribieron los agentes al tipificar y lo que escribió tu propio sistema.

Path Parameters

Query Parameters

  • Integer numbers.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/contacts/{id}/notes
curl 'https://api.dialsprint.com/api/v1/contacts/{id}/notes' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "id": "string",
      "contact_id": "string",
      "body": "string",
      "call_id": "string",
      "author": {
        "type": "agent",
        "id": "string",
        "name": "string"
      },
      "created_at": "2026-11-02T23:49:41.166Z",
      "updated_at": "2026-11-02T23:49:41.166Z"
    }
  ]
}

Dejar una nota

​

La nota aparece en la ficha que el agente mira antes de la próxima llamada. El autor es la clave, no una persona.

Path Parameters

Body

required
application/json

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/contacts/{id}/notes
curl 'https://api.dialsprint.com/api/v1/contacts/{id}/notes' \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "body": ""
}'
{
  "data": {
    "id": "string",
    "contact_id": "string",
    "body": "string",
    "call_id": "string",
    "author": {
      "type": "agent",
      "id": "string",
      "name": "string"
    },
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Archivar un contacto

​

Lo saca de todo camino de discado y lo deja legible. No hay borrado, y la razón es concreta: al borrar un contacto se van sus teléfonos, y con ellos la baja de SMS que había pedido el cliente. Un sistema que borra y recrea para sincronizar resucitaría esa baja.

Es idempotente, así que podés reenviar tu cola sin pensarlo. El tope es de 500 por día y por cuenta.

Path Parameters

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/contacts/{id}/archive
curl 'https://api.dialsprint.com/api/v1/contacts/{id}/archive' \
  --request POST \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Desarchivar

​

Explícito a propósito, porque un PUT que toque un contacto archivado lo deja archivado.

Path Parameters

Responses

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for delete/contacts/{id}/archive
curl 'https://api.dialsprint.com/api/v1/contacts/{id}/archive' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "id": "string",
    "external_id": "string",
    "archived_at": "2026-11-02T23:49:41.166Z",
    "name": "string",
    "phones": [
      "string"
    ],
    "email": "string",
    "company": "string",
    "timezone": "string",
    "tags": [
      "string"
    ],
    "fields": {
      "additionalProperty": "anything"
    },
    "list_ids": [
      "string"
    ],
    "compliance": {
      "dnc_at": "2026-11-02T23:49:41.166Z",
      "blocked_at": "2026-11-02T23:49:41.166Z",
      "sms_opt_out_phones": [
        "string"
      ]
    },
    "warnings": [
      "string"
    ],
    "created_at": "2026-11-02T23:49:41.166Z",
    "updated_at": "2026-11-02T23:49:41.166Z"
  }
}

Importación (Collapsed)

​

Cargar contactos de a miles.

Llamadas (Collapsed)

​

Qué pasó después de que el contacto entró.

Cumplimiento (Collapsed)

​

Los números que no se llaman.

Campañas (Collapsed)

​

Qué se está discando, y a quién sumarle.

Conversaciones (Collapsed)

​

Los hilos de texto, de sólo lectura.

Recontactos (Collapsed)

​

Los compromisos que tomaron los agentes.

Recontactos Operations