Resumen
Empieza aquí para saber qué puede leer tu clave.
GET /v1/meindica la integración de tu clave, los cuatro últimos caracteres de la clave, los equipos que lee y sus permisos. Llámalo primero para comprobar que una clave funciona.GET /v1/teamslista todos los equipos que lee la clave, con su nombre, su zona horaria y su país por defecto, en una sola respuesta. Incluye los equipos que están restringidos por ahora.GET /v1/teams/{id}devuelve uno de ellos.GET /v1/memberslista los miembros de un equipo, solo con su nombre visible, en una sola respuesta. Totem no exporta el correo electrónico, el teléfono ni el rol de ningún miembro.GET /v1/healthindica si la API está funcionando. Es el único endpoint que no necesita clave.
Un equipo es un espacio de trabajo de Totem, con sus propios tableros, miembros, leads y citas. Una clave lee un equipo o varios equipos de la misma organización. GET /v1/me y GET /v1/teams describen la clave y nunca llevan la cabecera Totem-Team; GET /v1/members lee un solo equipo, así que una clave con varios equipos lo indica en esa cabecera. Autenticación explica cuándo enviarla.
Todas las fechas y horas que devuelve la API están en UTC. Usa la timezone de un equipo para mostrar sus horas en hora local, nunca para guardarlas.
El identificador de un miembro pertenece a un solo equipo: la misma persona tiene un identificador mem_ distinto en cada equipo. Los miembros no están en el feed de cambios, así que lee la lista cuando empieces a sincronizar un equipo, cuando un registro indique un miembro que no conoces y al menos una vez al día. Un miembro que deja el equipo sale de la lista, pero los registros anteriores siguen indicando su identificador: no vuelvas a leer la lista por un identificador que no resolvió la última vez y, si muestras nombres en registros anteriores, conserva el de una lectura anterior. Los miembros desactivados siguen en la lista, sin nada que indique que lo están. Lee GET /v1/teams en cada ejecución de la sincronización, porque un equipo que ya no aparece ha salido de la clave.
GET /
Devuelve la integración a la que pertenece esta clave: su nombre, los cuatro últimos caracteres de la clave, los equipos que lee hoy y sus permisos. Llámalo primero para comprobar que la clave funciona y ver qué equipos lee; sus datos están en GET /v1/teams.
Respuesta
Devuelve un objeto Me.
objectstringSiempre
integration.idstring Prefijo del idprn_…Identificador público de la integración.
livemodebooleantruecon una clave real;falseen los datos de ejemplo.namestringEl nombre que un administrador dio a la integración.
keyobjectLa clave usada en esta petición.
last4string 4 caracteresLos cuatro últimos caracteres de la clave usada en esta petición.
teamsArray<string> Prefijo del idteam_…Los equipos que lee esta clave hoy. Sus datos están en
GET /v1/teams.scopesArray<string>Los permisos de la clave: el conjunto fijo de lectura en v1.0a.
Valores posiblesteams:readcrm:readcalls:readmessages:readcalendar:read
Errores
curl 'https://api.totemstudio.ai/v1/me' \
-H "Authorization: Bearer $TOTEM_API_KEY"{
"object": "integration",
"id": "prn_m1NFIcoIU8smXfqR4ymgt6j07TfRF",
"livemode": false,
"name": "Example CRM sync",
"key": {
"last4": "Q7xZ"
},
"teams": [
"team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR"
],
"scopes": [
"teams:read",
"crm:read",
"calls:read",
"messages:read",
"calendar:read"
]
}GET /
Lista todos los equipos que lee esta clave, en una sola respuesta que nunca se pagina, incluidos los que están restringidos por ahora (sus otros endpoints responden 403). Vuelve a leer esta lista en cada sincronización: un equipo que ya no aparece ha salido de la clave, así que borra su copia y su cursor.
Respuesta
Devuelve una lista de objetos Team.
objectstringSiempre
list.dataArray<Team>Todos los equipos que lee esta clave, incluidos los restringidos.
has_morebooleanSiempre
false: esta lista nunca se pagina.next_cursornull Puede ser nullSiempre
null: no hay página siguiente.
Errores
- 429
quota_exceededCuota diaria superada
curl 'https://api.totemstudio.ai/v1/teams' \
-H "Authorization: Bearer $TOTEM_API_KEY"{
"object": "list",
"data": [
{
"id": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"object": "team",
"livemode": false,
"name": "Example Dental",
"timezone": "America/New_York",
"default_country": "US"
}
],
"has_more": false,
"next_cursor": null
}GET /
Devuelve un equipo que lee esta clave: su nombre, su zona horaria y su país predeterminado. Un equipo que la clave no lee responde 404 resource_missing.
Parámetros de ruta
idstring Obligatorio Prefijo del idteam_…El identificador público del equipo.
Respuesta
Devuelve un objeto Team.
idstring Prefijo del idteam_…Identificador público del registro.
objectstringSiempre
team.livemodebooleantrueen datos reales;falseen los datos de ejemplo.namestring Puede ser null ≥ 1 caracteresEl nombre del equipo tal como aparece en Totem, o null si no hay ninguno guardado.
timezonestring ≥ 1 caracteresLa zona horaria IANA del equipo: la de su horario comercial si es válida; si no, la de su país por defecto (Europe/Madrid si no hay ninguna). Úsala para interpretar las horas locales del equipo.
default_countrystring Puede ser null Patrón^[A-Z]{2}$El país por defecto del equipo (ISO 3166-1 alfa-2), que Totem usa cuando alguien escribe un teléfono sin prefijo; null si no hay ninguno. La API no lo aplica:
Lead.phonese valida sin país por defecto, así que un número guardado sin prefijo de país tienephone_status: invalid.
Errores
- 403
team_state_restrictedEquipo restringido - 403
sector_restrictedSector restringido - 404
resource_missingRecurso no encontrado
curl 'https://api.totemstudio.ai/v1/teams/team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR' \
-H "Authorization: Bearer $TOTEM_API_KEY"{
"id": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"object": "team",
"livemode": false,
"name": "Example Dental",
"timezone": "America/New_York",
"default_country": "US"
}GET /
Lista todos los miembros del equipo en una sola respuesta, que nunca se pagina y no admite limit ni cursor. Los miembros no llegan por el feed de cambios: lee esta lista al empezar a sincronizar un equipo, de nuevo cuando un elemento indique un miembro que no conoces y, como mínimo, una vez al día. Un miembro que deja el equipo sale de la lista, pero los registros anteriores siguen indicando su identificador, así que conserva de una lectura anterior el nombre que necesites.
Cabeceras
Totem-Teamstring Condicional Prefijo del idteam_…El equipo que se lee, como identificador
team_…. Omítelo si la clave lee un solo equipo; es obligatorio si lee varios (400 team_required). Si lo envías, debe indicar un equipo que la clave lee: un identificador mal formado recibe400 invalid_request, y un equipo fuera de la clave,404 team_not_accessible, igual que una petición sin la cabecera cuando la clave ya no lee ningún equipo.
Respuesta
Devuelve una lista de objetos Member.
objectstringSiempre
list.dataArray<Member>Todos los miembros del equipo.
has_morebooleanSiempre
false: esta lista nunca se pagina.next_cursornull Puede ser nullSiempre
null: no hay página siguiente.
Errores
- 400
team_requiredFalta el equipo - 403
team_state_restrictedEquipo restringido - 403
sector_restrictedSector restringido - 404
team_not_accessibleEquipo no accesible - 409
capture_not_readyLos datos del equipo aún se están preparando - 429
quota_exceededCuota diaria superada
curl 'https://api.totemstudio.ai/v1/members' \
-H "Authorization: Bearer $TOTEM_API_KEY" \
-H "Totem-Team: $TOTEM_TEAM_ID"{
"object": "list",
"data": [
{
"id": "mem_h548E7UiYhutHhucVrQCzkM0eaea0",
"object": "member",
"livemode": false,
"team": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"display_name": "Sam Lee"
}
],
"has_more": false,
"next_cursor": null
}GET /
Indica si la API está disponible; llama a este endpoint con GET, porque el cortafuegos que protege la API responde a cualquier otro método, HEAD incluido, con un 404 simple. No necesita clave ni admite cadena de consulta: cualquier parámetro, incluso uno para evitar la caché, recibe 400 invalid_request. La cabecera de respuesta Totem-Release indica la versión que respondió.
Respuesta
Devuelve un objeto Health.
objectstringSiempre
health.statusstringSiempre
ok: si la API no está disponible, la respuesta es un error.
Errores
- 400
invalid_requestPetición no válida - 400
secret_key_in_browserClave secreta enviada desde un navegador - 500
internal_errorError interno - 503
service_unavailableServicio no disponible
curl 'https://api.totemstudio.ai/v1/health'{
"object": "health",
"status": "ok"
}La integración propietaria de la clave, con los equipos que lee.
Atributos
objectstringSiempre
integration.idstring Prefijo del idprn_…Identificador público de la integración.
livemodebooleantruecon una clave real;falseen los datos de ejemplo.namestringEl nombre que un administrador dio a la integración.
keyobjectLa clave usada en esta petición.
last4string 4 caracteresLos cuatro últimos caracteres de la clave usada en esta petición.
teamsArray<string> Prefijo del idteam_…Los equipos que lee esta clave hoy. Sus datos están en
GET /v1/teams.scopesArray<string>Los permisos de la clave: el conjunto fijo de lectura en v1.0a.
Valores posiblesteams:readcrm:readcalls:readmessages:readcalendar:read
{
"object": "integration",
"id": "prn_m1NFIcoIU8smXfqR4ymgt6j07TfRF",
"livemode": false,
"name": "Example CRM sync",
"key": {
"last4": "Q7xZ"
},
"teams": [
"team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR"
],
"scopes": [
"teams:read",
"crm:read",
"calls:read",
"messages:read",
"calendar:read"
]
}Un equipo que lee esta clave, con su zona horaria y su país predeterminado.
Atributos
idstring Prefijo del idteam_…Identificador público del registro.
objectstringSiempre
team.livemodebooleantrueen datos reales;falseen los datos de ejemplo.namestring Puede ser null ≥ 1 caracteresEl nombre del equipo tal como aparece en Totem, o null si no hay ninguno guardado.
timezonestring ≥ 1 caracteresLa zona horaria IANA del equipo: la de su horario comercial si es válida; si no, la de su país por defecto (Europe/Madrid si no hay ninguna). Úsala para interpretar las horas locales del equipo.
default_countrystring Puede ser null Patrón^[A-Z]{2}$El país por defecto del equipo (ISO 3166-1 alfa-2), que Totem usa cuando alguien escribe un teléfono sin prefijo; null si no hay ninguno. La API no lo aplica:
Lead.phonese valida sin país por defecto, así que un número guardado sin prefijo de país tienephone_status: invalid.
{
"id": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"object": "team",
"livemode": false,
"name": "Example Dental",
"timezone": "America/New_York",
"default_country": "US"
}Un miembro del equipo, solo por su nombre visible: Totem no exporta su correo electrónico, su teléfono ni su rol.
Atributos
idstring Prefijo del idmem_…Identificador público del registro.
objectstringSiempre
member.livemodebooleantrueen datos reales;falseen los datos de ejemplo.teamstring Prefijo del idteam_…El equipo al que pertenece este registro.
display_namestring Puede ser null ≥ 1 caracteresEl nombre visible del miembro, o su nombre y apellido, o null si no hay ninguno guardado. Totem no exporta su correo electrónico, su teléfono ni su rol.
{
"id": "mem_h548E7UiYhutHhucVrQCzkM0eaea0",
"object": "member",
"livemode": false,
"team": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"display_name": "Sam Lee"
}