[{"data":1,"prerenderedAt":757},["ShallowReactive",2],{"developers:\u002Fdevelopers\u002Fes\u002Freference-account":3},{"doc":4,"lang":123,"nav":135,"alternatePath":240,"policy":241,"specVersion":285,"reference":286,"layout":130,"toc":739,"prev":749,"next":750,"operations":751,"overview":125,"heroExample":125},{"id":5,"title":6,"apiTag":7,"body":8,"description":120,"draft":121,"extension":122,"lang":123,"meta":124,"navTitle":125,"navigation":126,"order":127,"path":128,"rawbody":129,"section":130,"seo":131,"stem":132,"translationKey":133,"version":125,"__hash__":134},"developers_es\u002Fdevelopers\u002Fes\u002Freference-account.md","Cuenta, equipos y miembros","account",{"type":9,"value":10,"toc":114},"minimark",[11,16,20,69,95,102],[12,13,15],"h2",{"id":14},"resumen","Resumen",[17,18,19],"p",{},"Empieza aquí para saber qué puede leer tu clave.",[21,22,23,35,51,60],"ul",{},[24,25,26,34],"li",{},[27,28,30],"a",{"href":29},"\u002Fdevelopers\u002Fes\u002Freference-account#me.get",[31,32,33],"code",{},"GET \u002Fv1\u002Fme"," indica 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.",[24,36,37,43,44,50],{},[27,38,40],{"href":39},"\u002Fdevelopers\u002Fes\u002Freference-account#teams.list",[31,41,42],{},"GET \u002Fv1\u002Fteams"," lista 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. ",[27,45,47],{"href":46},"\u002Fdevelopers\u002Fes\u002Freference-account#teams.get",[31,48,49],{},"GET \u002Fv1\u002Fteams\u002F{id}"," devuelve uno de ellos.",[24,52,53,59],{},[27,54,56],{"href":55},"\u002Fdevelopers\u002Fes\u002Freference-account#members.list",[31,57,58],{},"GET \u002Fv1\u002Fmembers"," lista 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.",[24,61,62,68],{},[27,63,65],{"href":64},"\u002Fdevelopers\u002Fes\u002Freference-account#health",[31,66,67],{},"GET \u002Fv1\u002Fhealth"," indica si la API está funcionando. Es el único endpoint que no necesita clave.",[17,70,71,72,76,77,79,80,82,83,86,87,89,90,94],{},"Un ",[73,74,75],"strong",{},"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. ",[31,78,33],{}," y ",[31,81,42],{}," describen la clave y nunca llevan la cabecera ",[31,84,85],{},"Totem-Team","; ",[31,88,58],{}," lee un solo equipo, así que una clave con varios equipos lo indica en esa cabecera. ",[27,91,93],{"href":92},"\u002Fdevelopers\u002Fes\u002Fauthentication#equipos-y-la-cabecera-totem-team","Autenticación"," explica cuándo enviarla.",[17,96,97,98,101],{},"Todas las fechas y horas que devuelve la API están en UTC. Usa la ",[31,99,100],{},"timezone"," de un equipo para mostrar sus horas en hora local, nunca para guardarlas.",[17,103,104,105,108,109,113],{},"El identificador de un miembro pertenece a un solo equipo: la misma persona tiene un identificador ",[31,106,107],{},"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 ",[27,110,111],{"href":39},[31,112,42],{}," en cada ejecución de la sincronización, porque un equipo que ya no aparece ha salido de la clave.",{"title":115,"searchDepth":116,"depth":116,"links":117},"",3,[118],{"id":14,"depth":119,"text":15},2,"Comprueba que una clave funciona y qué puede leer, lista sus equipos con su zona horaria, lista los miembros de cada equipo y comprueba que la API está funcionando.",false,"md","es",{},null,true,"40","\u002Fdevelopers\u002Fes\u002Freference-account","---\ntitle: Cuenta, equipos y miembros\ndescription: Comprueba que una clave funciona y qué puede leer, lista sus equipos con su zona horaria, lista los miembros de cada equipo y comprueba que la API está funcionando.\nsection: reference\norder: 40\ntranslationKey: reference-account\nlang: es\ndraft: false\napiTag: account\n---\n\n## Resumen\n\nEmpieza aquí para saber qué puede leer tu clave.\n\n- [`GET \u002Fv1\u002Fme`](\u002Fdevelopers\u002Fes\u002Freference-account#me.get) indica 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.\n- [`GET \u002Fv1\u002Fteams`](\u002Fdevelopers\u002Fes\u002Freference-account#teams.list) lista 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 \u002Fv1\u002Fteams\u002F{id}`](\u002Fdevelopers\u002Fes\u002Freference-account#teams.get) devuelve uno de ellos.\n- [`GET \u002Fv1\u002Fmembers`](\u002Fdevelopers\u002Fes\u002Freference-account#members.list) lista 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.\n- [`GET \u002Fv1\u002Fhealth`](\u002Fdevelopers\u002Fes\u002Freference-account#health) indica si la API está funcionando. Es el único endpoint que no necesita clave.\n\nUn **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 \u002Fv1\u002Fme` y `GET \u002Fv1\u002Fteams` describen la clave y nunca llevan la cabecera `Totem-Team`; `GET \u002Fv1\u002Fmembers` lee un solo equipo, así que una clave con varios equipos lo indica en esa cabecera. [Autenticación](\u002Fdevelopers\u002Fes\u002Fauthentication#equipos-y-la-cabecera-totem-team) explica cuándo enviarla.\n\nTodas 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.\n\nEl 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 \u002Fv1\u002Fteams`](\u002Fdevelopers\u002Fes\u002Freference-account#teams.list) en cada ejecución de la sincronización, porque un equipo que ya no aparece ha salido de la clave.\n","reference",{"title":6,"description":120},"developers\u002Fes\u002Freference-account","reference-account","HsNJ6T6jIiN4rMOZ81CSn5TBChAxq4P75VJY8W09B-Y",[136,150,177,221],{"section":137,"items":138},"start",[139,143,147],{"path":140,"title":141,"description":142},"\u002Fdevelopers\u002Fes","Introducción","Lee desde tus propios sistemas los leads, las llamadas, las conversaciones y las citas de tus equipos de Totem, y mantén una copia sincronizada.",{"path":144,"title":145,"description":146},"\u002Fdevelopers\u002Fes\u002Fquickstart","Inicio rápido","Haz tus primeras peticiones a la API de Totem en unos minutos. Comprueba tu clave, busca tu equipo, lista leads e inicia una sincronización.",{"path":148,"title":93,"description":149},"\u002Fdevelopers\u002Fes\u002Fauthentication","Las claves secretas y dónde pueden guardarse, la cabecera Totem-Team de las claves con varios equipos, la lista de IP permitidas y cómo rotar o revocar una clave.",{"section":151,"items":152},"guides",[153,157,161,165,169,173],{"path":154,"title":155,"description":156},"\u002Fdevelopers\u002Fes\u002Ftypescript","SDK de TypeScript","Usa el cliente oficial de TypeScript para leer tus datos de Totem, paginar listas y gestionar errores de la API desde tu servidor.",{"path":158,"title":159,"description":160},"\u002Fdevelopers\u002Fes\u002Fsync","Sincroniza una copia","Copia un equipo con el feed de cambios y mantén la copia al día. Aplica las páginas sin riesgos, recupérate de los errores y parte de un cliente de referencia que Totem prueba.",{"path":162,"title":163,"description":164},"\u002Fdevelopers\u002Fes\u002Fpagination","Listas y paginación","Cómo devuelven los endpoints de lista los registros página a página, cómo leer todas las páginas y qué orden y qué filtros admite una lista.",{"path":166,"title":167,"description":168},"\u002Fdevelopers\u002Fes\u002Fcoverage","Cobertura de los datos","Qué registra Totem, desde cuándo y cómo distinguir un valor vacío de un dato que nunca se registró.",{"path":170,"title":171,"description":172},"\u002Fdevelopers\u002Fes\u002Ftesting","Pruebas y puesta en producción","Cómo construir y probar una integración con seguridad mientras la API no tiene entorno de pruebas, y qué comprobar antes de pasar a producción.",{"path":174,"title":175,"description":176},"\u002Fdevelopers\u002Fes\u002Fsecurity","Seguridad y datos personales","Cómo protege Totem las claves de la API y los datos que sirve, qué registra de cada clave, dónde funciona la API y qué hacer con los datos personales que copias.",{"section":130,"items":178},[179,183,187,191,192,197,202,207,212,217],{"path":180,"title":181,"description":182},"\u002Fdevelopers\u002Fes\u002Fconventions","Convenciones","La notación de esta documentación y las reglas que siguen todas las respuestas: identificadores, fechas, valores vacíos, importes, enumeraciones, versiones, estabilidad, errores y textos no fiables.",{"path":184,"title":185,"description":186},"\u002Fdevelopers\u002Fes\u002Ferrors","Errores","El formato de los errores, cómo debe tratar tu integración cada tipo de error y todos los códigos de error, con cuándo ocurren y qué hacer.",{"path":188,"title":189,"description":190},"\u002Fdevelopers\u002Fes\u002Frate-limits","Límites de frecuencia y cuota","Cuánto puede leer una clave por minuto y por día, qué cuenta para cada límite, cómo reintentar tras un 429 y cuánto tarda una carga inicial.",{"path":128,"title":6,"description":120,"apiTag":7},{"path":193,"title":194,"description":195,"apiTag":196},"\u002Fdevelopers\u002Fes\u002Freference-leads","Leads, tableros y actividades","Lista, obtén y busca los leads y los clientes de un equipo, lee las actividades de cada lead y lista los tableros y las etapas por los que pasan.","leads",{"path":198,"title":199,"description":200,"apiTag":201},"\u002Fdevelopers\u002Fes\u002Freference-calls","Llamadas","Lista y obtén las llamadas de un equipo, con su dirección, su horario y un resultado normalizado. Sin grabaciones ni transcripciones.","calls",{"path":203,"title":204,"description":205,"apiTag":206},"\u002Fdevelopers\u002Fes\u002Freference-conversations","Conversaciones","Lista y obtén las conversaciones de un equipo en todos los canales, con su estado, la persona asignada, si una persona ha tomado el control y cuándo llegaron y salieron los últimos mensajes. Nunca el contenido de los mensajes.","conversations",{"path":208,"title":209,"description":210,"apiTag":211},"\u002Fdevelopers\u002Fes\u002Freference-bookings","Citas y servicios","Lista y obtén las citas de un equipo, y lista los servicios que pueden reservar sus clientes.","bookings",{"path":213,"title":214,"description":215,"apiTag":216},"\u002Fdevelopers\u002Fes\u002Freference-sync","Feed de cambios","Un único endpoint que copia un equipo y, después, devuelve cada cambio, página a página.","sync",{"path":218,"title":219,"description":220},"\u002Fdevelopers\u002Fes\u002Fobjects","Todos los objetos","Todos los objetos que devuelve la API, campo a campo, con un ejemplo de cada uno.",{"section":222,"items":223},"resources",[224,228,232,236],{"path":225,"title":226,"description":227},"\u002Fdevelopers\u002Fes\u002Fchangelog","Registro de cambios","Los cambios de la API de Totem, del más reciente al más antiguo, cada uno bajo la fecha en que se publicó.",{"path":229,"title":230,"description":231},"\u002Fdevelopers\u002Fes\u002Fsupport","Soporte","Cómo pedir ayuda con la API de Totem, qué incluir en una solicitud y qué hacer si se filtra una clave.",{"path":233,"title":234,"description":235},"\u002Fdevelopers\u002Fes\u002Fglossary","Glosario","Los términos de esta documentación, definidos en un solo lugar, cada uno con un enlace a la página que lo explica.",{"path":237,"title":238,"description":239},"\u002Fdevelopers\u002Fes\u002Ffaq","Preguntas frecuentes","Respuestas breves a las preguntas más habituales sobre la API de Totem, con enlaces a los detalles.","\u002Fdevelopers\u002Freference-account",{"ACTIVATION_MARGIN_MS":242,"ADMIN_ACCESS_DISCLOSURE_VERSION":243,"AUDIT_RETENTION_DAYS":244,"AUTH_FAILURE_LIMITS":245,"CAPTURE_LAG_FLOOR_MS":249,"CAPTURE_LAG_P99_MS":125,"CURSOR_MAX_AGE_DAYS":250,"DIRTY_TTL_DAYS":250,"FAMILY_TEAM_SCOPE":251,"FAMILY_TEAM_SCOPE_OPTIONS":252,"FEED_SETTLE_LAG_MS":254,"GATE_REFRESH_MS":242,"INTEGRATION_NAME_LENGTH":255,"INTEGRATION_PURPOSE_LENGTH":257,"KEY_CACHE_TTL_MS":260,"KEY_STATS_RETENTION_DAYS":261,"LEAD_RESPONSE_READ_BUDGET":262,"LIST_SCAN_MAX":265,"MAX_FAMILY_INTEGRATION_TEAMS":250,"MAX_INTEGRATIONS_PER_FAMILY":266,"MAX_IP_ALLOWLIST":247,"PAGE_LIMIT":267,"PLATFORM_CONFIG_TTL_MS":270,"REMOVAL_RETENTION_DAYS":271,"REQUEST_BODY_MAX_BYTES":272,"ROLL_GRACE_DEFAULT_HOURS":273,"ROLL_GRACE_HOURS":274,"SEARCH_MAX_RESULTS":266,"SENSITIVE_SECTOR_POLICY":277,"SENSITIVE_SECTOR_POLICY_OPTIONS":278,"SYNC_DAILY_BUDGET":280,"SYNC_VELOCITY":282,"TEAM_CACHE_TTL_MS":284},60000,"2026-10-17",365,{"perIpPerMinute":246,"perLookupIdPerMinute":247,"banMs":248},60,20,600000,300000,30,"explicit_list",[251,253],"all_family_teams",10000,{"min":119,"max":256},80,{"min":258,"max":259},1,280,5000,90,{"conversations":247,"messageReads":263,"calls":264},200,50,1000,10,{"default":268,"max":269},25,100,15000,45,16384,24,[275,258,273,276],0,168,"exclude",[277,279],"allow",{"floor":281,"recordsMultiplier":116},250000,{"perMinute":283,"burst":254},2000,30000,"1.0a",{"operations":287,"schemas":538,"errors":603,"commonErrors":735,"defaultStability":294,"policy":241,"problemExample":736},[288,372,421,467,511],{"id":289,"method":290,"path":291,"summary":292,"description":293,"stability":294,"scopes":295,"rateClass":296,"tenantBinding":297,"authenticated":126,"parameters":298,"parametersByLocation":299,"body":303,"bodyDescription":115,"responseFields":304,"responseComponent":350,"listOf":125,"example":351,"errors":359,"tag":7},"me.get","GET","\u002Fv1\u002Fme","Obtén la integración de esta clave","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 \u002Fv1\u002Fteams`.","beta",[],"read","principal",[],{"path":300,"query":301,"header":302},[],[],[],[],[305,312,318,322,325,328,333,340],{"name":306,"type":307,"required":126,"description":308,"nullable":121,"typeLabel":309,"enumValues":310,"constant":126},"object","\"integration\"","Siempre `integration`.","string",[311],"integration",{"name":313,"type":309,"required":126,"description":314,"nullable":121,"typeLabel":309,"constraints":315},"id","Identificador público de la integración.",{"prefixes":316},[317],"prn_",{"name":319,"type":320,"required":126,"description":321,"nullable":121,"typeLabel":320},"livemode","boolean","`true` con una clave real; `false` en los datos de ejemplo.",{"name":323,"type":309,"required":126,"description":324,"nullable":121,"typeLabel":309},"name","El nombre que un administrador dio a la integración.",{"name":326,"type":306,"required":126,"description":327,"nullable":121,"typeLabel":306},"key","La clave usada en esta petición.",{"name":329,"type":309,"required":126,"description":330,"nullable":121,"typeLabel":309,"constraints":331},"key.last4","Los cuatro últimos caracteres de la clave usada en esta petición.",{"minLength":332,"maxLength":332},4,{"name":334,"type":335,"required":126,"description":336,"nullable":121,"typeLabel":335,"constraints":337},"teams","Array\u003Cstring>","Los equipos que lee esta clave hoy. Sus datos están en `GET \u002Fv1\u002Fteams`.",{"prefixes":338},[339],"team_",{"name":341,"type":342,"required":126,"description":343,"nullable":121,"typeLabel":335,"enumValues":344},"scopes","Array\u003C\"teams:read\" | \"crm:read\" | \"calls:read\" | \"messages:read\" | \"calendar:read\">","Los permisos de la clave: el conjunto fijo de lectura en v1.0a.",[345,346,347,348,349],"teams:read","crm:read","calls:read","messages:read","calendar:read","Me",{"object":311,"id":352,"livemode":121,"name":353,"key":354,"teams":356,"scopes":358},"prn_m1NFIcoIU8smXfqR4ymgt6j07TfRF","Example CRM sync",{"last4":355},"Q7xZ",[357],"team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",[345,346,347,348,349],[360,361,362,363,364,365,366,367,368,369,370,371],"invalid_request","secret_key_in_browser","invalid_credentials","key_expired","insufficient_scope","plan_not_entitled","ip_not_allowed","capability_disabled","rate_limited","internal_error","api_disabled","service_unavailable",{"id":373,"method":290,"path":374,"summary":375,"description":376,"stability":294,"scopes":377,"rateClass":216,"tenantBinding":297,"authenticated":126,"parameters":378,"parametersByLocation":379,"body":383,"bodyDescription":115,"responseFields":384,"responseComponent":411,"listOf":398,"example":412,"errors":419,"tag":7},"teams.list","\u002Fv1\u002Fteams","Lista los equipos que lee esta clave","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.",[345],[],{"path":380,"query":381,"header":382},[],[],[],[],[385,390,401,406],{"name":306,"type":386,"required":126,"description":387,"nullable":121,"typeLabel":309,"enumValues":388,"constant":126},"\"list\"","Siempre `list`.",[389],"list",{"name":391,"type":392,"required":126,"description":393,"nullable":121,"typeLabel":392,"typeTokens":394,"ref":398},"data","Array\u003CTeam>","Todos los equipos que lee esta clave, incluidos los restringidos.",[395,397,399],{"text":396},"Array\u003C",{"text":398,"ref":398},"Team",{"text":400},">",{"name":402,"type":403,"required":126,"description":404,"nullable":121,"typeLabel":320,"enumValues":405,"constant":126},"has_more","false","Siempre `false`: esta lista nunca se pagina.",[121],{"name":407,"type":408,"required":126,"description":409,"nullable":126,"typeLabel":408,"typeTokens":410},"next_cursor","null","Siempre `null`: no hay página siguiente.",[],"TeamList",{"object":389,"data":413,"has_more":121,"next_cursor":125},[414],{"id":357,"object":415,"livemode":121,"name":416,"timezone":417,"default_country":418},"team","Example Dental","America\u002FNew_York","US",[360,361,362,363,364,365,366,367,368,369,370,371,420],"quota_exceeded",{"id":422,"method":290,"path":423,"summary":424,"description":425,"stability":294,"scopes":426,"rateClass":296,"tenantBinding":427,"authenticated":126,"parameters":428,"parametersByLocation":434,"body":438,"bodyDescription":115,"responseFields":439,"responseComponent":398,"listOf":125,"example":462,"errors":463,"tag":7},"teams.get","\u002Fv1\u002Fteams\u002F{id}","Obtén un equipo","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`.",[345],"resource_id",[429],{"name":313,"type":309,"required":126,"description":430,"nullable":121,"typeLabel":309,"constraints":431,"location":433},"El identificador público del equipo.",{"prefixes":432},[339],"path",{"path":435,"query":436,"header":437},[429],[],[],[],[440,444,448,450,454,457],{"name":313,"type":309,"required":126,"description":441,"nullable":121,"typeLabel":309,"constraints":442},"Identificador público del registro.",{"prefixes":443},[339],{"name":306,"type":445,"required":126,"description":446,"nullable":121,"typeLabel":309,"enumValues":447,"constant":126},"\"team\"","Siempre `team`.",[415],{"name":319,"type":320,"required":126,"description":449,"nullable":121,"typeLabel":320},"`true` en datos reales; `false` en los datos de ejemplo.",{"name":323,"type":451,"required":126,"description":452,"nullable":126,"typeLabel":309,"constraints":453},"string | null","El nombre del equipo tal como aparece en Totem, o null si no hay ninguno guardado.",{"minLength":258},{"name":100,"type":309,"required":126,"description":455,"nullable":121,"typeLabel":309,"constraints":456},"La zona horaria IANA del equipo: la de su horario comercial si es válida; si no, la de su país por defecto (Europe\u002FMadrid si no hay ninguna). Úsala para interpretar las horas locales del equipo.",{"minLength":258},{"name":458,"type":451,"required":126,"description":459,"nullable":126,"typeLabel":309,"constraints":460},"default_country","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.phone` se valida sin país por defecto, así que un número guardado sin prefijo de país tiene `phone_status: invalid`.",{"pattern":461},"^[A-Z]{2}$",{"id":357,"object":415,"livemode":121,"name":416,"timezone":417,"default_country":418},[360,361,362,363,364,365,366,367,368,369,370,371,464,465,466],"resource_missing","team_state_restricted","sector_restricted",{"id":468,"method":290,"path":469,"summary":470,"description":471,"stability":294,"scopes":472,"rateClass":216,"tenantBinding":473,"authenticated":126,"parameters":474,"parametersByLocation":480,"body":484,"bodyDescription":115,"responseFields":485,"responseComponent":500,"listOf":494,"example":501,"errors":507,"tag":7},"members.list","\u002Fv1\u002Fmembers","Lista los miembros del equipo","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.",[345],"team_header",[475],{"name":85,"type":309,"required":121,"description":476,"nullable":121,"typeLabel":309,"constraints":477,"conditional":126,"location":479},"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 recibe `400 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.",{"prefixes":478},[339],"header",{"path":481,"query":482,"header":483},[],[],[475],[],[486,488,496,498],{"name":306,"type":386,"required":126,"description":387,"nullable":121,"typeLabel":309,"enumValues":487,"constant":126},[389],{"name":391,"type":489,"required":126,"description":490,"nullable":121,"typeLabel":489,"typeTokens":491,"ref":494},"Array\u003CMember>","Todos los miembros del equipo.",[492,493,495],{"text":396},{"text":494,"ref":494},"Member",{"text":400},{"name":402,"type":403,"required":126,"description":404,"nullable":121,"typeLabel":320,"enumValues":497,"constant":126},[121],{"name":407,"type":408,"required":126,"description":409,"nullable":126,"typeLabel":408,"typeTokens":499},[],"MemberList",{"object":389,"data":502,"has_more":121,"next_cursor":125},[503],{"id":504,"object":505,"livemode":121,"team":357,"display_name":506},"mem_h548E7UiYhutHhucVrQCzkM0eaea0","member","Sam Lee",[360,361,362,363,364,365,366,367,368,369,370,371,508,509,465,466,510,420],"team_required","team_not_accessible","capture_not_ready",{"id":512,"method":290,"path":513,"summary":514,"description":515,"stability":294,"scopes":516,"rateClass":517,"tenantBinding":517,"authenticated":121,"parameters":518,"parametersByLocation":519,"body":523,"bodyDescription":115,"responseFields":524,"responseComponent":535,"listOf":125,"example":536,"errors":537,"tag":7},"health","\u002Fv1\u002Fhealth","Comprueba que la API está disponible","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ó.",[],"none",[],{"path":520,"query":521,"header":522},[],[],[],[],[525,529],{"name":306,"type":526,"required":126,"description":527,"nullable":121,"typeLabel":309,"enumValues":528,"constant":126},"\"health\"","Siempre `health`.",[512],{"name":530,"type":531,"required":126,"description":532,"nullable":121,"typeLabel":309,"enumValues":533,"constant":126},"status","\"ok\"","Siempre `ok`: si la API no está disponible, la respuesta es un error.",[534],"ok","Health",{"object":512,"status":534},[360,361,369,371],[539,563,581],{"name":350,"description":540,"fields":541,"example":557,"variants":561,"sharedFields":562},"La integración propietaria de la clave, con los equipos que lee.",[542,544,547,548,549,550,552,555],{"name":306,"type":307,"required":126,"description":308,"nullable":121,"typeLabel":309,"enumValues":543,"constant":126},[311],{"name":313,"type":309,"required":126,"description":314,"nullable":121,"typeLabel":309,"constraints":545},{"prefixes":546},[317],{"name":319,"type":320,"required":126,"description":321,"nullable":121,"typeLabel":320},{"name":323,"type":309,"required":126,"description":324,"nullable":121,"typeLabel":309},{"name":326,"type":306,"required":126,"description":327,"nullable":121,"typeLabel":306},{"name":329,"type":309,"required":126,"description":330,"nullable":121,"typeLabel":309,"constraints":551},{"minLength":332,"maxLength":332},{"name":334,"type":335,"required":126,"description":336,"nullable":121,"typeLabel":335,"constraints":553},{"prefixes":554},[339],{"name":341,"type":342,"required":126,"description":343,"nullable":121,"typeLabel":335,"enumValues":556},[345,346,347,348,349],{"object":311,"id":352,"livemode":121,"name":353,"key":558,"teams":559,"scopes":560},{"last4":355},[357],[345,346,347,348,349],[],[],{"name":398,"description":564,"fields":565,"example":578,"variants":579,"sharedFields":580},"Un equipo que lee esta clave, con su zona horaria y su país predeterminado.",[566,569,571,572,574,576],{"name":313,"type":309,"required":126,"description":441,"nullable":121,"typeLabel":309,"constraints":567},{"prefixes":568},[339],{"name":306,"type":445,"required":126,"description":446,"nullable":121,"typeLabel":309,"enumValues":570,"constant":126},[415],{"name":319,"type":320,"required":126,"description":449,"nullable":121,"typeLabel":320},{"name":323,"type":451,"required":126,"description":452,"nullable":126,"typeLabel":309,"constraints":573},{"minLength":258},{"name":100,"type":309,"required":126,"description":455,"nullable":121,"typeLabel":309,"constraints":575},{"minLength":258},{"name":458,"type":451,"required":126,"description":459,"nullable":126,"typeLabel":309,"constraints":577},{"pattern":461},{"id":357,"object":415,"livemode":121,"name":416,"timezone":417,"default_country":418},[],[],{"name":494,"description":582,"fields":583,"example":600,"variants":601,"sharedFields":602},"Un miembro del equipo, solo por su nombre visible: Totem no exporta su correo electrónico, su teléfono ni su rol.",[584,587,591,592,596],{"name":313,"type":309,"required":126,"description":441,"nullable":121,"typeLabel":309,"constraints":585},{"prefixes":586},[107],{"name":306,"type":588,"required":126,"description":589,"nullable":121,"typeLabel":309,"enumValues":590,"constant":126},"\"member\"","Siempre `member`.",[505],{"name":319,"type":320,"required":126,"description":449,"nullable":121,"typeLabel":320},{"name":415,"type":309,"required":126,"description":593,"nullable":121,"typeLabel":309,"constraints":594},"El equipo al que pertenece este registro.",{"prefixes":595},[339],{"name":597,"type":451,"required":126,"description":598,"nullable":126,"typeLabel":309,"constraints":599},"display_name","El 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.",{"minLength":258},{"id":504,"object":505,"livemode":121,"team":357,"display_name":506},[],[],[604,612,617,622,629,634,641,648,653,658,664,669,675,682,690,697,704,712,717,724,730],{"code":360,"status":605,"title":606,"wireTitle":607,"action":608,"description":609,"fix":610,"retryable":121,"retry":611},400,"Petición no válida","Invalid request","fix_request","Algo de la petición no es válido: un parámetro de consulta desconocido, repetido o fuera de rango, una cadena de consulta o un cuerpo en un endpoint que no los admite, un cursor emitido para otro endpoint, otros filtros u otro equipo, una cabecera `Totem-Team` mal formada o un cuerpo que no es el JSON que espera el endpoint. `param` indica el parámetro, la cabecera o el campo que ha fallado. Un cursor de conversaciones también se rechaza cuando se suprime la conversación a la que apunta.","Corrige lo que indica `param` antes de reintentar: la misma petición falla igual. Si es un cursor, envía el `next_cursor` que recibiste del mismo endpoint, con los mismos filtros y el mismo equipo. Si se rechaza un cursor de conversaciones que no cambiaste, vuelve a empezar esa lista desde la primera página.","no",{"code":508,"status":605,"title":613,"wireTitle":614,"action":608,"description":615,"fix":616,"retryable":121,"retry":611},"Falta el equipo","Team required","La clave lee más de un equipo y este endpoint lee los datos de uno, pero la petición no indica cuál.","Envía el identificador del equipo (`team_…`, tal como aparece en `GET \u002Fv1\u002Fteams`) en la cabecera `Totem-Team`.",{"code":361,"status":605,"title":618,"wireTitle":619,"action":608,"description":620,"fix":621,"retryable":121,"retry":611},"Clave secreta enviada desde un navegador","Secret key sent from a browser","La petición llevaba una clave secreta junto con una cabecera `Origin`, lo que indica que salió de un navegador. Totem la rechaza sin leer nada.","Llama a la API solo desde tu servidor. Si la clave ha estado en una página web, una aplicación móvil o una extensión del navegador, dala por filtrada: rótala y márcala como comprometida para que la antigua deje de funcionar al instante.",{"code":362,"status":623,"title":624,"wireTitle":625,"action":626,"description":627,"fix":628,"retryable":121,"retry":611},401,"Credenciales no válidas","Invalid credentials","check_credentials","Falta la cabecera `Authorization` o está mal formada, o la clave no existe, es incorrecta o está revocada, o su integración ya no está activa.","Envía `Authorization: Bearer \u003Cclave>` con una clave secreta vigente. No reintentes en bucle: muchos fallos desde la misma dirección IP, o con la misma clave, la bloquean durante un tiempo con `429 rate_limited`.",{"code":363,"status":623,"title":630,"wireTitle":631,"action":626,"description":632,"fix":633,"retryable":121,"retry":611},"Clave caducada","Key expired","La clave se rotó y su periodo de gracia ha terminado.","Despliega la clave que la sustituyó: la antigua ya superó su periodo de gracia y no volverá a funcionar. Si no hay ninguna que la sustituya, crea una clave nueva en Ajustes → Desarrolladores.",{"code":364,"status":635,"title":636,"wireTitle":637,"action":638,"description":639,"fix":640,"retryable":121,"retry":611},403,"Permisos insuficientes","Insufficient scope","contact_support","A la clave le falta un permiso que necesita este endpoint. Todas las claves de la versión 1.0a tienen el conjunto completo de lectura, así que no debería ocurrir.","Escribe a soporte e indica el `Totem-Request-Id` de la respuesta.",{"code":365,"status":635,"title":642,"wireTitle":643,"action":644,"description":645,"fix":646,"retryable":126,"retry":647},"El plan no incluye la API","Plan not entitled","keep_and_retry","El plan de la organización no incluye ahora mismo la API de Totem.","Conserva tus datos y tus cursores y deja de llamar hasta que el cliente vuelva a tener un plan con acceso a la API; después, continúa donde lo dejaste. Mientras el acceso está denegado, el feed no entrega nada de los equipos de la clave, tampoco eliminaciones: si la denegación dura más de lo que permite tu política de conservación, borra tu copia.","restored",{"code":366,"status":635,"title":649,"wireTitle":650,"action":626,"description":651,"fix":652,"retryable":121,"retry":611},"Dirección IP no permitida","IP address not allowed","La clave es válida, pero la petición salió de una dirección IP que no está en la lista de IP permitidas de la integración.","Llama desde una dirección permitida o pide a un administrador que añada la tuya a la lista en Ajustes → Desarrolladores.",{"code":465,"status":635,"title":654,"wireTitle":655,"action":644,"description":656,"fix":657,"retryable":126,"retry":647},"Equipo restringido","Team restricted","El equipo está restringido por ahora: está desactivado (por ejemplo, suspendido por impago), archivado o es solo de facturación, o tiene pausado el acceso a la API. `GET \u002Fv1\u002Fteams` lo sigue mostrando.","Conserva los datos y el cursor del equipo, omítelo en esta ejecución y vuelve a intentarlo más tarde. Los demás equipos de la clave no se ven afectados. Mientras el equipo está restringido, el feed no entrega nada de él, tampoco eliminaciones: si la restricción dura más de lo que permite tu política de conservación, borra la copia del equipo.",{"code":466,"status":635,"title":659,"wireTitle":660,"action":644,"description":661,"fix":662,"retryable":121,"retry":663},"Sector restringido","Sector restricted","Totem no exporta los datos de este equipo por la API porque el equipo trabaja en un sector sensible, como el sanitario, en el que sus registros pueden revelar información de salud.","Omite el equipo: esperar no lo cambia. El feed no entrega nada de él, tampoco eliminaciones, así que conserva lo que ya tengas solo mientras lo permita tu política de conservación y después borra la copia del equipo. Si necesitas sus datos, habla con el cliente o con Totem.","blocked",{"code":367,"status":635,"title":665,"wireTitle":666,"action":644,"description":667,"fix":668,"retryable":126,"retry":647},"Función desactivada","Capability disabled","Totem ha desactivado temporalmente este endpoint para todas las claves.","Conserva tus datos y tus cursores y vuelve a intentarlo más tarde; el resto de endpoints sigue funcionando.",{"code":464,"status":670,"title":671,"wireTitle":672,"action":608,"description":673,"fix":674,"retryable":121,"retry":611},404,"Recurso no encontrado","Resource not found","El registro no existe, se eliminó, pertenece a un equipo que esta clave no lee o se creó hace tan poco que Totem aún no lo ha preparado. Un `GET` o un `POST` bajo `\u002Fv1\u002F` que no corresponde a ningún endpoint también recibe este código. Cualquier otro método, y cualquier ruta fuera de `\u002Fv1\u002F`, recibe un `404` simple del cortafuegos que protege la API, sin cuerpo de error ni `Totem-Request-Id`.","Comprueba el identificador y la ruta. Si el registro se acaba de crear, no reintentes en bucle: el feed de cambios lo entregará en cuanto esté listo.",{"code":509,"status":670,"title":676,"wireTitle":677,"action":678,"description":679,"fix":680,"retryable":121,"retry":681},"Equipo no accesible","Team not accessible","drop_team","La cabecera `Totem-Team` indica un equipo que esta clave no lee: uno que nunca incluyó, uno que se quitó de la clave o de la organización, o uno que se eliminó. Sin la cabecera, significa que la clave ya no lee ningún equipo.","Vuelve a leer `GET \u002Fv1\u002Fteams` antes de actuar. Si el equipo ya no aparece, borra su copia y su cursor; si sigue apareciendo, conserva todo y vuelve a intentarlo en la siguiente ejecución.","confirm",{"code":683,"status":684,"title":685,"wireTitle":686,"action":687,"description":688,"fix":689,"retryable":121,"retry":611},"resync_required",409,"Hay que volver a sincronizar","Resync required","resync","Totem no puede continuar el feed desde este cursor: los datos se restauraron desde una copia de seguridad o se detectó un hueco en los cambios del equipo.","Haz una resincronización completa: olvida las versiones que guardaste del equipo, vuelve a leer el feed sin cursor y, cuando estés al día, borra los registros locales del equipo que no hayan llegado. Hasta entonces, sigue usando tu copia actual.",{"code":510,"status":684,"title":691,"wireTitle":692,"action":693,"description":694,"fix":695,"retryable":126,"retry":696},"Los datos del equipo aún se están preparando","Team data is still being prepared","wait_capture","Totem aún está preparando los datos de este equipo para la API. Ocurre una sola vez por equipo, después de que se añada por primera vez a una clave; añadirlo después a otra clave no lo repite.","Conserva lo que tengas del equipo y vuelve a intentarlo dentro de unos minutos; mientras tanto, los demás equipos de la clave siguen sincronizándose.","later",{"code":698,"status":699,"title":700,"wireTitle":701,"action":687,"description":702,"fix":703,"retryable":121,"retry":611},"sync_cursor_expired",410,"Cursor de sincronización caducado","Sync cursor expired","El cursor tiene más de 30 días, contados desde el punto del feed al que llegó (o, mientras una carga inicial sigue en curso, desde que empezó).","Haz una resincronización completa, como con `resync_required`. Para evitarlo, guarda el `next_cursor` de cada página, también de las vacías: el cursor de un equipo que consultas con regularidad nunca caduca.",{"code":368,"status":705,"title":706,"wireTitle":707,"action":708,"description":709,"fix":710,"retryable":126,"retry":711},429,"Límite de frecuencia superado","Rate limited","retry_after","La clave ha superado su límite de frecuencia (elementos por minuto), o demasiados intentos de autenticación fallidos desde esta dirección IP o con esta clave la han bloqueado durante un tiempo.","Espera los segundos que indica `Retry-After` y repite la misma petición. Cada petición aparta su `limit` completo al empezar y devuelve lo que no usa, así que con un `limit` más pequeño avanzas aunque quede poco margen.","after",{"code":420,"status":705,"title":713,"wireTitle":714,"action":708,"description":715,"fix":716,"retryable":126,"retry":711},"Cuota diaria superada","Daily quota exceeded","La clave ha consumido su cuota diaria de elementos. Para la cuota cuenta cada elemento que devuelven el feed de cambios y todas las listas, incluidas `GET \u002Fv1\u002Fteams`, `GET \u002Fv1\u002Fmembers`, `GET \u002Fv1\u002Fbooking_services` y las actividades de un lead. La cuota se renueva a las 00:00 UTC.","Deja de sincronizar hasta las 00:00 UTC (`Retry-After` indica los segundos que faltan) y continúa entonces con el mismo cursor: no se pierde nada. Las peticiones de un solo registro, como `GET \u002Fv1\u002Fleads\u002F{id}`, la búsqueda y `GET \u002Fv1\u002Fme` no cuentan para la cuota y siguen funcionando.",{"code":369,"status":718,"title":719,"wireTitle":720,"action":721,"description":722,"fix":723,"retryable":126,"retry":721},500,"Error interno","Internal error","backoff","Algo ha fallado dentro de Totem al responder a esta petición.","Reintenta con una espera exponencial. Si sigue fallando, escribe a soporte e indica el `Totem-Request-Id`.",{"code":370,"status":725,"title":726,"wireTitle":727,"action":721,"description":728,"fix":729,"retryable":126,"retry":721},503,"API desactivada","API disabled","Totem ha desactivado temporalmente la API para todas las claves.","Conserva tus datos y tus cursores y reintenta más tarde con una espera exponencial.",{"code":371,"status":725,"title":731,"wireTitle":732,"action":721,"description":733,"fix":734,"retryable":126,"retry":721},"Servicio no disponible","Service unavailable","Reservado: la API no devuelve hoy este código. Un `503` del balanceador de carga o de la plataforma que aloja la API llega sin cuerpo de error; trátalo como este código.","Reintenta con una espera exponencial; tus datos y tus cursores siguen siendo válidos.",[360,361,362,363,364,365,366,367,368,369,370,371],{"type":737,"title":672,"status":670,"code":464,"request_id":738,"doc_url":737},"https:\u002F\u002Ftotemstudio.ai\u002Fdevelopers\u002Ferrors#resource_missing","req_0f6b2c1e-8d4a-4b7e-9c3f-5a2d1e7b9c40",[740,741,742,743,744,745,746,747,748],{"id":14,"text":15,"depth":119},{"id":289,"text":292,"depth":119},{"id":373,"text":375,"depth":119},{"id":422,"text":424,"depth":119},{"id":468,"text":470,"depth":119},{"id":512,"text":514,"depth":119},{"id":350,"text":350,"depth":119},{"id":398,"text":398,"depth":119},{"id":494,"text":494,"depth":119},{"path":188,"title":189,"section":130},{"path":193,"title":194,"section":130},[752,753,754,755,756],{"id":289,"method":290,"path":291,"summary":292},{"id":373,"method":290,"path":374,"summary":375},{"id":422,"method":290,"path":423,"summary":424},{"id":468,"method":290,"path":469,"summary":470},{"id":512,"method":290,"path":513,"summary":514},1792502790828]