API para integraciones
Conductores
Usuarios de la empresa. Con clave API solo se dan de alta y de baja conductores.
En esta página
Lista las personas de la empresa y sus plazas
POST/auth/usuarios/list
- Permiso
lectura
Devuelve todas las personas de la empresa (responsables owner, conductores user y asesoría
gestor) con su estado, y las plazas ocupadas del plan. Con clave API ves lo mismo que el owner
que creó la clave: todo el equipo, no solo los conductores. Para quedarte con los conductores,
filtra por role: user.
- Incluye invitados, activos y desactivados (también a quien ha pedido la baja:
status: inactivecondeletion). No incluye al equipo de FlotaDoc ni a las personas ya anonimizadas tras su baja. - Sin filtros ni paginación: una sola respuesta con todo el equipo, ordenada por nombre (sin
distinguir mayúsculas) y después por
id. Para una persona concreta, usaget. seatsdice cuántas plazas quedan antes de invitar o reactivar (los mismos números que compruebaninviteyreactivate).- Funciona también con la cuenta de la empresa en solo lectura.
- El cuerpo puede ir vacío o ser
{}.
Errores propios
422 invalid_input: el cuerpo no es un objeto JSON, o trae una clave distinta detenantId(fields.<clave>: unexpected_field).
Petición
Cuerpo opcional
object
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/list" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Respuesta
200
El equipo de la empresa y sus plazas.
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
dataobjectusersUsuariosUser[]Todo el equipo de la empresa, ordenado por nombre y después por
id.seatsUsuariosSeats | nullPlazas ocupadas y límites;
nullsi la empresa no tiene cuenta.
Ejemplo de respuesta
{
"data": {
"users": [
{
"id": 5,
"email": "ana.garcia@transportesgarcia.es",
"fullName": "Ana García",
"role": "owner",
"status": "active",
"isBillingOwner": true,
"lastLoginAt": "2026-10-13T07:45:12.000Z",
"inviteExpiresAt": null,
"deletion": null
},
{
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "invited",
"isBillingOwner": false,
"lastLoginAt": null,
"inviteExpiresAt": "2026-10-20T09:30:00.000Z",
"deletion": null
},
{
"id": 17,
"email": "marta.ruiz@transportesgarcia.es",
"fullName": "Marta Ruiz",
"role": "user",
"status": "inactive",
"isBillingOwner": false,
"lastLoginAt": "2026-09-30T16:02:41.000Z",
"inviteExpiresAt": null,
"deletion": null
},
{
"id": 9,
"email": "asesoria@gestoriasol.es",
"fullName": "Gestoría Sol",
"role": "gestor",
"status": "active",
"isBillingOwner": false,
"lastLoginAt": "2026-10-02T10:15:00.000Z",
"inviteExpiresAt": null,
"deletion": null
}
],
"seats": {
"users": {
"used": 1,
"limit": 5
},
"gestores": {
"used": 1,
"limit": 1
}
}
}
}
Además, las respuestas comunes: 401, 403, 404, 422, 429, 503.
Obtiene una persona de la empresa
POST/auth/usuarios/get
- Permiso
lectura
Devuelve una persona de la empresa por su userId, con el mismo objeto que list. Con clave API
sirve para cualquier persona de la empresa (no solo conductores), igual que para el owner.
Útil para seguir una invitación (status pasa de invited a active cuando el conductor crea su
contraseña) o comprobar el estado tras deactivate o reactivate.
Errores propios
404 user_not_found: no existe, es de otra empresa, es del equipo de FlotaDoc o ya se anonimizó tras su baja (no se distingue).422 invalid_input:fields.userId(requiredoinvalid), o una clave no admitida (unexpected_field).
Petición
Cuerpo obligatorio
Cuerpo de get, resend-invite, deactivate y reactivate.
userIdinteger | stringobligatorioId de la persona (
iddelist). Entero positivo; también se admite como texto de dígitos.integer: mínimo
1integer: máximo9007199254740991string: patrón^[1-9][0-9]{0,15}$Ejemplo:42
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/get" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userId": 42
}'
Respuesta
200
La persona.
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
dataobjectuserUsuariosUserUna persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
Ejemplo de respuesta
{
"data": {
"user": {
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "active",
"isBillingOwner": false,
"lastLoginAt": "2026-10-13T15:12:44.000Z",
"inviteExpiresAt": null,
"deletion": null
}
}
}
Además, las respuestas comunes: 401, 403, 404, 422, 429, 503.
Da de alta un conductor y le envía la invitación
POST/auth/usuarios/invite
- Permiso
flota - Admite
Idempotency-Key
Da de alta a un conductor como invitado y le envía por email un enlace para crear su contraseña.
Con clave API solo se invitan conductores (role: user). El email sale a nombre del owner que
creó la clave: «{owner} te invita a {empresa} en FlotaDoc», con el botón «Aceptar la invitación».
Qué hace, en orden:
- Valida y normaliza el cuerpo: email sin espacios alrededor y en minúsculas; nombre sin espacios sobrantes (los internos se reducen a uno).
- Exige que la empresa pueda registrar (
423) y que el email no esté ya en uso en la empresa (409 email_in_use). El email es único por empresa, no global: la misma persona puede estar en otra empresa de FlotaDoc. - Exige plaza de usuario (
409 seat_limit): ocupan plaza los conductores y los owners (salvo el titular), invitados incluidos; los desactivados no. - Crea el usuario con
status: invitedy su invitación: un enlace de un solo uso ahttps://app.flotadoc.com/invitacion?token=…que caduca a los 7 días (inviteExpiresAt). - Envía el email. Si el envío falla, el conductor queda invitado igualmente y la respuesta lleva
emailSent: false: reenvíalo conresend-invite(pasado al menos un minuto).
El conductor abre el enlace, crea su contraseña (de 8 caracteres a 72 bytes) y pasa a active;
desde entonces entra con su email en la app móvil o en la web. Ya como invitado se le pueden
asignar vehículos fijos (movimientos/flota/assign) y registrar viajes o gastos a su nombre
(driverUserId).
Con Idempotency-Key, un reintento devuelve el mismo 201 sin crear otro usuario ni enviar otro
email.
Errores propios
403 api_role_not_allowed:roleesownerogestor. Se comprueba tras validar los campos y antes de crear nada.404 tenant_not_found: la empresa ya no existe (no debería darse con una clave válida).409 email_in_use: ya hay una persona con ese email en la empresa, con cualquier rol. TraeuserIdystatusde esa persona: si esinvited, usaresend-invite; si esinactive,reactivate(con clave, solo si su rol esuser).409 seat_limit: no quedan plazas de usuario. Traeresource: users,limit,usedynext: contact_us: ampliar plazas lo gestiona el owner con FlotaDoc («Habla con nosotros»).422 invalid_input:fieldscon todos los errores a la vez:email(required,invalid,too_long,invalid_email),fullName(required,invalid,too_long),role(required,invalid_role), o una clave no admitida (unexpected_field).423 account_read_only: la empresa no puede registrar ahora.reason:account(cuenta en solo lectura: prueba o contrato vencidos, cancelada…),suspended(suspendida por FlotaDoc) opending_payment(la cuenta aún no está activa).
Petición
Cabeceras
Idempotency-KeystringClave de idempotencia de la escritura (opcional, recomendada). Vale 24 horas por clave API: la misma
Idempotency-Keycon la misma ruta y el mismo cuerpo exacto devuelve la respuesta guardada conIdempotent-Replayed: truesin volver a ejecutar la operación. Con otro cuerpo u otra ruta:409 idempotency_conflict; si la primera aún está en curso:409 idempotency_in_progress. Una respuesta 5xx no se guarda (se puede reintentar). Mal formada:422 invalid_idempotency_key.Patrón:
^[A-Za-z0-9_-]{1,100}$
Cuerpo obligatorio
emailstring (email)obligatorioEmail del conductor. Se guarda sin espacios alrededor y en minúsculas (máximo 254 caracteres). Tiene que poder recibir correo (dominio con punto y sin caracteres como
<,>,,o;): si no,invalid_email.Hasta 254 caracteresEjemplo:
luis.perez@transportesgarcia.esfullNamestringobligatorioNombre completo. Se quitan los espacios de los extremos y los internos se reducen a uno; de 1 a 200 caracteres, sin saltos de línea ni caracteres de control (
invalid). Sale en el email, en el libro de viajes y en los informes.De 1 a 200 caracteresEjemplo:
Luis PérezrolestringobligatorioRol de la persona invitada. Con clave API solo
user(conductor):ownerogestorresponden403 api_role_not_allowed; cualquier otro valor,422confields.role: invalid_role.Valores:
user
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/invite" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-d '{
"email": "Luis.Perez@TransportesGarcia.es",
"fullName": "Luis Pérez",
"role": "user"
}'
Respuesta
201
Conductor invitado. emailSent dice si el email de invitación salió.
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
Idempotent-Replayedstringtruesi es la respuesta guardada de una petición anterior con la mismaIdempotency-Key.Valores:
true
dataobjectRespuesta de
inviteyresend-invite.userUsuariosUserUna persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
emailSentbooleantruesi el email de invitación salió. Confalseel conductor queda invitado igualmente: reenvíalo conresend-invitepasado al menos un minuto.
Ejemplo de respuesta
{
"data": {
"user": {
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "invited",
"isBillingOwner": false,
"lastLoginAt": null,
"inviteExpiresAt": "2026-10-20T09:30:00.000Z",
"deletion": null
},
"emailSent": true
}
}
Además, las respuestas comunes: 401, 403, 404, 409, 422, 423, 429, 503.
Reenvía la invitación a un conductor
POST/auth/usuarios/resend-invite
- Permiso
flota - Admite
Idempotency-Key
Envía otra vez la invitación a un conductor que aún no la ha aceptado (status: invited). Genera un
enlace nuevo (el anterior deja de valer) y los 7 días vuelven a contar desde ahora
(inviteExpiresAt). No ocupa otra plaza.
Úsalo si invite devolvió emailSent: false, si la invitación caducó (inviteExpiresAt ya pasado)
o si el conductor no encuentra el email. Entre dos envíos al mismo conductor (también el de
invite) tiene que pasar al menos un minuto.
Con clave API, solo para usuarios con rol user: con otro rol responde 403 y el enlace que
tuviera sigue valiendo (no se rota).
Con Idempotency-Key, un reintento devuelve la respuesta guardada sin enviar otro email.
Errores propios
403 api_role_not_allowed: la persona no es conductor (ownerogestor).404 user_not_found: no existe en la empresa (o ya se anonimizó tras su baja).404 tenant_not_found: la empresa ya no existe (no debería darse con una clave válida).409 not_invited: ya no está invitado;statusdice por qué:active(ya aceptó: que entre con su contraseña) oinactive(desactivado: primeroreactivate).422 invalid_input:fields.userId(requiredoinvalid), o una clave no admitida (unexpected_field).423 account_read_only: la empresa no puede registrar ahora (reason:account,suspendedopending_payment). Se comprueba antes de buscar al usuario.429 resend_too_soon: no ha pasado un minuto desde el último envío. Comorate_limited, lleva la cabeceraRetry-AfteryretryAfterSecondsen el cuerpo (segundos que faltan, de 1 a 60). Reintenta pasado ese tiempo con otraIdempotency-Key: con la misma te devuelve este 429 guardado.
Petición
Cabeceras
Idempotency-KeystringClave de idempotencia de la escritura (opcional, recomendada). Vale 24 horas por clave API: la misma
Idempotency-Keycon la misma ruta y el mismo cuerpo exacto devuelve la respuesta guardada conIdempotent-Replayed: truesin volver a ejecutar la operación. Con otro cuerpo u otra ruta:409 idempotency_conflict; si la primera aún está en curso:409 idempotency_in_progress. Una respuesta 5xx no se guarda (se puede reintentar). Mal formada:422 invalid_idempotency_key.Patrón:
^[A-Za-z0-9_-]{1,100}$
Cuerpo obligatorio
Cuerpo de get, resend-invite, deactivate y reactivate.
userIdinteger | stringobligatorioId de la persona (
iddelist). Entero positivo; también se admite como texto de dígitos.integer: mínimo
1integer: máximo9007199254740991string: patrón^[1-9][0-9]{0,15}$Ejemplo:42
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/resend-invite" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-d '{
"userId": 42
}'
Respuesta
200
Invitación reenviada. emailSent dice si el email salió.
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
Idempotent-Replayedstringtruesi es la respuesta guardada de una petición anterior con la mismaIdempotency-Key.Valores:
true
dataobjectRespuesta de
inviteyresend-invite.userUsuariosUserUna persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
emailSentbooleantruesi el email de invitación salió. Confalseel conductor queda invitado igualmente: reenvíalo conresend-invitepasado al menos un minuto.
Ejemplo de respuesta
{
"data": {
"user": {
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "invited",
"isBillingOwner": false,
"lastLoginAt": null,
"inviteExpiresAt": "2026-10-22T11:04:37.000Z",
"deletion": null
},
"emailSent": true
}
}
Además, las respuestas comunes: 401, 403, 404, 409, 422, 423, 429, 503.
Da de baja (desactiva) a un conductor
POST/auth/usuarios/deactivate
- Permiso
flota - Admite
Idempotency-Key
Quita el acceso a un conductor sin borrarlo (status: inactive). Se deshace con reactivate.
- No puede entrar: sus sesiones abiertas dejan de valer (en un máximo de 5 minutos) y, si aún estaba invitado, su enlace de invitación deja de funcionar.
- Deja de ocupar plaza.
- Sus viajes, gastos, tickets y firmas se conservan y siguen en los informes, los cierres y el libro de viajes.
- No se le quita de los vehículos fijos que tenía asignados (sigue saliendo en sus
drivers), pero ya no se le pueden registrar viajes ni gastos nuevos (422 invalid_inputconfields.driverUserId: not_found) ni volver a asignar: al actualizar los conductores de esos vehículos conmovimientos/flota/assign, déjalo fuera (si no,422 invalid_inputconinvalidUserIds). - Si ya estaba desactivado:
200sin cambios. - Funciona también con la cuenta de la empresa en solo lectura: quitar el acceso a quien se va no espera a que la cuenta se regularice.
Con clave API, solo sobre usuarios con rol user (también si ya estaban desactivados). El rol se
comprueba en la misma operación que desactiva: si alguien lo cambia a la vez desde la web, la clave
ve el rol nuevo.
Errores propios
403 api_role_not_allowed: la persona no es conductor (ownerogestor).404 user_not_found: no existe en la empresa (o ya se anonimizó tras su baja).409 cannot_modify_self:userIdes el owner que creó la clave.422 invalid_input:fields.userId(requiredoinvalid), o una clave no admitida (unexpected_field).
Petición
Cabeceras
Idempotency-KeystringClave de idempotencia de la escritura (opcional, recomendada). Vale 24 horas por clave API: la misma
Idempotency-Keycon la misma ruta y el mismo cuerpo exacto devuelve la respuesta guardada conIdempotent-Replayed: truesin volver a ejecutar la operación. Con otro cuerpo u otra ruta:409 idempotency_conflict; si la primera aún está en curso:409 idempotency_in_progress. Una respuesta 5xx no se guarda (se puede reintentar). Mal formada:422 invalid_idempotency_key.Patrón:
^[A-Za-z0-9_-]{1,100}$
Cuerpo obligatorio
Cuerpo de get, resend-invite, deactivate y reactivate.
userIdinteger | stringobligatorioId de la persona (
iddelist). Entero positivo; también se admite como texto de dígitos.integer: mínimo
1integer: máximo9007199254740991string: patrón^[1-9][0-9]{0,15}$Ejemplo:42
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/deactivate" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-d '{
"userId": 42
}'
Respuesta
200
Conductor desactivado (o ya lo estaba).
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
Idempotent-Replayedstringtruesi es la respuesta guardada de una petición anterior con la mismaIdempotency-Key.Valores:
true
dataobjectuserUsuariosUserUna persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
Ejemplo de respuesta
{
"data": {
"user": {
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "inactive",
"isBillingOwner": false,
"lastLoginAt": "2026-10-13T15:12:44.000Z",
"inviteExpiresAt": null,
"deletion": null
}
}
}
Además, las respuestas comunes: 401, 403, 404, 409, 422, 429, 503.
Devuelve el acceso a un conductor desactivado
POST/auth/usuarios/reactivate
- Permiso
flota - Admite
Idempotency-Key
Devuelve el acceso a un conductor desactivado. Vuelve a ocupar plaza.
- Si ya había creado su contraseña, queda
activey puede entrar enseguida con la misma. - Si nunca aceptó la invitación, vuelve a
invited: su enlace anterior vuelve a valer si no ha caducado (inviteExpiresAt). Si caducó, envíale otro conresend-invite. Reactivar no envía ningún email. - Si no estaba desactivado:
200sin cambios (no mira plazas).
Con clave API, solo sobre usuarios con rol user. El rol se vuelve a comprobar en la misma
operación que reactiva.
Errores propios (en el orden en que se comprueban)
423 account_read_only: la empresa no puede registrar ahora (reason:account,suspendedopending_payment).404 user_not_found: no existe en la empresa (o ya se anonimizó tras su baja).403 api_role_not_allowed: la persona no es conductor (ownerogestor).409 deletion_pending: la propia persona pidió darse de baja. Solo la deshace el owner desde la web, no la API.409 seat_limit: no quedan plazas de usuario. Traeresource: users,limit,usedynext: contact_us.422 invalid_input:fields.userId(requiredoinvalid), o una clave no admitida (unexpected_field). Se comprueba antes que todo lo anterior.
Petición
Cabeceras
Idempotency-KeystringClave de idempotencia de la escritura (opcional, recomendada). Vale 24 horas por clave API: la misma
Idempotency-Keycon la misma ruta y el mismo cuerpo exacto devuelve la respuesta guardada conIdempotent-Replayed: truesin volver a ejecutar la operación. Con otro cuerpo u otra ruta:409 idempotency_conflict; si la primera aún está en curso:409 idempotency_in_progress. Una respuesta 5xx no se guarda (se puede reintentar). Mal formada:422 invalid_idempotency_key.Patrón:
^[A-Za-z0-9_-]{1,100}$
Cuerpo obligatorio
Cuerpo de get, resend-invite, deactivate y reactivate.
userIdinteger | stringobligatorioId de la persona (
iddelist). Entero positivo; también se admite como texto de dígitos.integer: mínimo
1integer: máximo9007199254740991string: patrón^[1-9][0-9]{0,15}$Ejemplo:42
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/auth/usuarios/reactivate" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
-d '{
"userId": 42
}'
Respuesta
200
Conductor reactivado (o no estaba desactivado).
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
Idempotent-Replayedstringtruesi es la respuesta guardada de una petición anterior con la mismaIdempotency-Key.Valores:
true
dataobjectuserUsuariosUserUna persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
Ejemplo de respuesta
{
"data": {
"user": {
"id": 42,
"email": "luis.perez@transportesgarcia.es",
"fullName": "Luis Pérez",
"role": "user",
"status": "active",
"isBillingOwner": false,
"lastLoginAt": "2026-10-13T15:12:44.000Z",
"inviteExpiresAt": null,
"deletion": null
}
}
}
Además, las respuestas comunes: 401, 403, 404, 409, 422, 423, 429, 503.
Modelos
Objetos que devuelven o reciben las operaciones de esta área. Cada campo enlaza a su modelo.
UsuariosUserobject
Una persona de la empresa. Nunca incluye contraseñas, tokens ni contadores.
idintegerId de la persona. Es el
userIddel resto de operaciones y eldriverUserIdde viajes y gastos.Mínimo
1emailstring (email)Email de acceso, en minúsculas. Único dentro de la empresa.
fullNamestringNombre completo, tal como sale en el libro de viajes y en los informes.
rolestringowner: responsable de la cuenta (también conduce).user: conductor.gestor: asesoría (solo descarga). Con clave API solo se invitan y gestionan losuser.Valores:
ownerusergestorstatusstringinvited: invitado, aún sin contraseña; ocupa plaza.active: puede entrar; ocupa plaza.inactive: desactivado o con la baja pedida (deletion); no entra ni ocupa plaza.Valores:
invitedactiveinactiveisBillingOwnerbooleanOwner titular de la cuenta (quien la contrató). No ocupa plaza ni se puede desactivar.
lastLoginAtstring (date-time) | nullÚltimo inicio de sesión;
nullsi nunca ha entrado.inviteExpiresAtstring (date-time) | nullSolo con
status: invited: cuándo caduca su enlace de invitación. Puede estar en el pasado (la invitación caducó: reenvíala conresend-invite).nullen los demás casos.deletionUsuariosDeletion | nullBaja pedida por la persona y aún pendiente;
nullsi no hay.
UsuariosSeatsobject
Plazas del plan. Con el plan base, 5 usuarios y 1 gestor; cada vehículo extra contratado añade un
usuario. Si FlotaDoc pactó un límite a medida, limit es ese.
usersUsuariosSeatUsagePlazas de usuario. Las ocupan los conductores (
user) y los owners salvo el titular.gestoresUsuariosSeatUsagePlazas de asesoría (
gestor).
UsuariosDeletionobject
Baja pedida por la propia persona y aún pendiente (con ella, status es inactive). El día
finalOn la cuenta se anonimiza y deja de aparecer; hasta el día anterior el owner puede deshacerla
desde la web. Sus registros siguen siendo de la empresa.
requestedAtstring (date-time)Cuándo pidió la baja.
finalOnstring (date)Día (Europe/Madrid) en que la baja será definitiva.
UsuariosSeatUsageobject
usedintegerPlazas ocupadas (invitados y activos; los desactivados no cuentan).
Mínimo
0limitintegerLímite vigente de la empresa.
Mínimo
0
¿Quieres conectar tu sistema?
Cuéntanos qué quieres integrar y lo vemos en una llamada: qué datos necesitas, con qué permisos y cada cuánto.
Si tu empresa ya usa FlotaDoc, el titular puede pedir el acceso desde la web, en Mi cuenta › Integraciones.