[{"data":1,"prerenderedAt":435},["ShallowReactive",2],{"developers:\u002Fdevelopers\u002Fes\u002Fchangelog":3},{"doc":4,"lang":269,"nav":281,"alternatePath":383,"policy":384,"specVersion":279,"reference":7,"layout":428,"toc":429,"prev":432,"next":433,"operations":434,"overview":7,"heroExample":7},{"id":5,"title":6,"apiTag":7,"body":8,"description":266,"draft":267,"extension":268,"lang":269,"meta":270,"navTitle":6,"navigation":271,"order":272,"path":273,"rawbody":274,"section":275,"seo":276,"stem":277,"translationKey":278,"version":279,"__hash__":280},"developers_es\u002Fdevelopers\u002Fes\u002Fchangelog.md","Registro de cambios",null,{"type":9,"value":10,"toc":259},"minimark",[11,26,31,223,227,234],[12,13,14,15,19,20,25],"p",{},"Cada entrada lleva su fecha, y una entrada que te pide cambiar tu integración o hacer una resincronización completa empieza por ",[16,17,18],"strong",{},"Acción necesaria",". En ",[21,22,24],"a",{"href":23},"\u002Fdevelopers\u002Fes\u002Fconventions#qu%C3%A9-significa-beta","Convenciones"," se explica qué puede cambiar durante la Beta.",[27,28,30],"h2",{"id":29},"_10a-actualizaciones-de-la-beta-2026-10-18","1.0a: actualizaciones de la Beta (2026-10-18)",[32,33,34,54,74,81,88,91,101,104,122,136,159,169,181,199,202,216],"ul",{},[35,36,37,41,42,45,46,49,50,53],"li",{},[38,39,40],"code",{},"GET \u002Fv1\u002Fcalls",", ",[38,43,44],{},"GET \u002Fv1\u002Fconversations"," y ",[38,47,48],{},"GET \u002Fv1\u002Fbookings"," admiten un filtro opcional ",[38,51,52],{},"lead",": las llamadas, las conversaciones o las citas de un lead, sin recorrer toda la lista.",[35,55,56,59,60,63,64,41,67,45,70,73],{},[38,57,58],{},"POST \u002Fv1\u002Fleads\u002Fsearch"," por ",[38,61,62],{},"phone"," también encuentra el número guardado en los formatos que escriben las bibliotecas de teléfonos (",[38,65,66],{},"+1 202-555-0123",[38,68,69],{},"(202) 555-0123",[38,71,72],{},"2025550123","), como lo guardaban las importaciones antiguas.",[35,75,76,77,80],{},"La documentación en español muestra el título de cada error en español. El ",[38,78,79],{},"title"," del cuerpo de un error sigue en inglés.",[35,82,83,84,87],{},"Totem deja de exportar los equipos de un sector de actividad sensible, como el sanitario, hasta que cambie su política de sectores. Un equipo así ya no se puede añadir a una integración, y una clave que ya lo cubre recibe ",[38,85,86],{},"403 sector_restricted"," para él. Omite el equipo. El feed de cambios 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 tu copia.",[35,89,90],{},"Las actividades cuya primera captura falló se capturan ahora más tarde, así que un lead puede recibir actividades anteriores a las que ya tienes.",[35,92,93,96,97,100],{},[38,94,95],{},"transferred_to.lead"," documenta ahora que también es ",[38,98,99],{},"null"," cuando el traspaso cayó en un lead de anuncios que ya existía o en otro lead con identificador fijo.",[35,102,103],{},"La documentación indica ahora que la API solo es accesible por IPv4, así que una entrada IPv6 de una lista de IP permitidas nunca coincide.",[35,105,106,107,110,111,114,115,118,119,121],{},"Las llamadas que Totem ha conciliado o importado de su proveedor de voz con IA indican ahora su ",[38,108,109],{},"outcome"," real, en lugar de ",[38,112,113],{},"unknown",". Una llamada en curso indica ",[38,116,117],{},"duration_seconds"," como ",[38,120,99],{},".",[35,123,124,125,128,129,132,133,121],{},"Un lead cuyo estado no conoce esta versión trae ahora ",[38,126,127],{},"record_kind: \"lead\""," con ",[38,130,131],{},"status: null",", en lugar de ",[38,134,135],{},"client",[35,137,138,139,142,143,146,147,150,151,154,155,158],{},"En un lead, ",[38,140,141],{},"attribution.original_capture.origin.kind"," es siempre ",[38,144,145],{},"conversation"," o ",[38,148,149],{},"call",", y ",[38,152,153],{},"original_capture.source"," usa los mismos valores que el ",[38,156,157],{},"source"," del lead. Un envío de LinkedIn que la persona retiró ya no aparece como el último envío.",[35,160,161,164,165,168],{},[16,162,163],{},"Acción necesaria."," Una clave de un solo equipo deja de leer su equipo, con ",[38,166,167],{},"404 team_not_accessible",", cuando el equipo entra en una organización, sale de ella o cambia de organización. Revócala y crea una nueva.",[35,170,171,172,175,176,180],{},"El límite de frecuencia por clave cobra al menos un elemento por cada petición que cuenta, también por una búsqueda sin resultados y por un ",[38,173,174],{},"404",". ",[21,177,179],{"href":178},"\u002Fdevelopers\u002Fes\u002Frate-limits","Límites de frecuencia y cuota"," indica qué no se cobra.",[35,182,183,184,187,188,191,192,195,196,121],{},"Un ",[38,185,186],{},"cursor"," manipulado de ",[38,189,190],{},"GET \u002Fv1\u002Fsync\u002Fchanges"," recibe ",[38,193,194],{},"400 invalid_request",", en lugar de un ",[38,197,198],{},"500",[35,200,201],{},"Los intentos fallidos con una clave revocada o caducada ya no cuentan para un bloqueo, y una clave bloqueada sigue funcionando para quien tiene su secreto real.",[35,203,204,207,208,212,213,121],{},[38,205,206],{},"limit"," documenta su valor por defecto, ",[209,210],"api-const",{"name":211},"PAGE_LIMIT.default",". La documentación explica ahora qué envía el feed de cambios al borrar un lead, una llamada o una conversación en Totem, y qué responde el cortafuegos fuera de ",[38,214,215],{},"\u002Fv1\u002F",[35,217,218,222],{},[21,219,221],{"href":220},"\u002Fdevelopers\u002Fes\u002Ftypescript","SDK de TypeScript"," 0.1.0-beta.2: acciones y códigos de error tipados, reintentos que respetan el plazo, enums abiertos y compatibilidad con Node.js 22.12.",[27,224,226],{"id":225},"_10a-beta-2026-10-18","1.0a: Beta (2026-10-18)",[12,228,229,230,233],{},"Beta pública. Los administradores de equipos y de la organización que cumplen los requisitos pueden crear integraciones en ",[16,231,232],{},"Ajustes → Desarrolladores",", sin invitación.",[32,235,236,239,242,251,256],{},[35,237,238],{},"La primera versión de la API: de solo lectura y en beta.",[35,240,241],{},"Endpoints para la integración y sus equipos, tableros, miembros, servicios reservables, leads (con su atribución, su respuesta y sus actividades), llamadas, conversaciones y citas.",[35,243,244,245,250],{},"El feed de cambios, ",[21,246,248],{"href":247},"\u002Fdevelopers\u002Fes\u002Freference-sync#sync.changes",[38,249,190],{},", con eliminaciones y resincronización completa.",[35,252,253,254,121],{},"Claves secretas con rotación, revocación y una lista opcional de IP permitidas, gestionadas en ",[16,255,232],{},[35,257,258],{},"Sin webhooks: consulta el feed de cambios cada 1 a 5 minutos.",{"title":260,"searchDepth":261,"depth":261,"links":262},"",3,[263,265],{"id":29,"depth":264,"text":30},2,{"id":225,"depth":264,"text":226},"Los cambios de la API de Totem, del más reciente al más antiguo, cada uno bajo la fecha en que se publicó.",false,"md","es",{},true,"1","\u002Fdevelopers\u002Fes\u002Fchangelog","---\ntitle: Registro de cambios\ndescription: Los cambios de la API de Totem, del más reciente al más antiguo, cada uno bajo la fecha en que se publicó.\nnavTitle: Registro de cambios\nsection: resources\norder: 1\ntranslationKey: changelog\nlang: es\ndraft: false\nversion: \"1.0a\"\n---\n\nCada entrada lleva su fecha, y una entrada que te pide cambiar tu integración o hacer una resincronización completa empieza por **Acción necesaria**. En [Convenciones](\u002Fdevelopers\u002Fes\u002Fconventions#qué-significa-beta) se explica qué puede cambiar durante la Beta.\n\n## 1.0a: actualizaciones de la Beta (2026-10-18)\n\n- `GET \u002Fv1\u002Fcalls`, `GET \u002Fv1\u002Fconversations` y `GET \u002Fv1\u002Fbookings` admiten un filtro opcional `lead`: las llamadas, las conversaciones o las citas de un lead, sin recorrer toda la lista.\n- `POST \u002Fv1\u002Fleads\u002Fsearch` por `phone` también encuentra el número guardado en los formatos que escriben las bibliotecas de teléfonos (`+1 202-555-0123`, `(202) 555-0123` y `2025550123`), como lo guardaban las importaciones antiguas.\n- La documentación en español muestra el título de cada error en español. El `title` del cuerpo de un error sigue en inglés.\n- Totem deja de exportar los equipos de un sector de actividad sensible, como el sanitario, hasta que cambie su política de sectores. Un equipo así ya no se puede añadir a una integración, y una clave que ya lo cubre recibe `403 sector_restricted` para él. Omite el equipo. El feed de cambios 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 tu copia.\n- Las actividades cuya primera captura falló se capturan ahora más tarde, así que un lead puede recibir actividades anteriores a las que ya tienes.\n- `transferred_to.lead` documenta ahora que también es `null` cuando el traspaso cayó en un lead de anuncios que ya existía o en otro lead con identificador fijo.\n- La documentación indica ahora que la API solo es accesible por IPv4, así que una entrada IPv6 de una lista de IP permitidas nunca coincide.\n- Las llamadas que Totem ha conciliado o importado de su proveedor de voz con IA indican ahora su `outcome` real, en lugar de `unknown`. Una llamada en curso indica `duration_seconds` como `null`.\n- Un lead cuyo estado no conoce esta versión trae ahora `record_kind: \"lead\"` con `status: null`, en lugar de `client`.\n- En un lead, `attribution.original_capture.origin.kind` es siempre `conversation` o `call`, y `original_capture.source` usa los mismos valores que el `source` del lead. Un envío de LinkedIn que la persona retiró ya no aparece como el último envío.\n- **Acción necesaria.** Una clave de un solo equipo deja de leer su equipo, con `404 team_not_accessible`, cuando el equipo entra en una organización, sale de ella o cambia de organización. Revócala y crea una nueva.\n- El límite de frecuencia por clave cobra al menos un elemento por cada petición que cuenta, también por una búsqueda sin resultados y por un `404`. [Límites de frecuencia y cuota](\u002Fdevelopers\u002Fes\u002Frate-limits) indica qué no se cobra.\n- Un `cursor` manipulado de `GET \u002Fv1\u002Fsync\u002Fchanges` recibe `400 invalid_request`, en lugar de un `500`.\n- Los intentos fallidos con una clave revocada o caducada ya no cuentan para un bloqueo, y una clave bloqueada sigue funcionando para quien tiene su secreto real.\n- `limit` documenta su valor por defecto, :api-const{name=\"PAGE_LIMIT.default\"}. La documentación explica ahora qué envía el feed de cambios al borrar un lead, una llamada o una conversación en Totem, y qué responde el cortafuegos fuera de `\u002Fv1\u002F`.\n- [SDK de TypeScript](\u002Fdevelopers\u002Fes\u002Ftypescript) 0.1.0-beta.2: acciones y códigos de error tipados, reintentos que respetan el plazo, enums abiertos y compatibilidad con Node.js 22.12.\n\n## 1.0a: Beta (2026-10-18)\n\nBeta pública. Los administradores de equipos y de la organización que cumplen los requisitos pueden crear integraciones en **Ajustes → Desarrolladores**, sin invitación.\n\n- La primera versión de la API: de solo lectura y en beta.\n- Endpoints para la integración y sus equipos, tableros, miembros, servicios reservables, leads (con su atribución, su respuesta y sus actividades), llamadas, conversaciones y citas.\n- El feed de cambios, [`GET \u002Fv1\u002Fsync\u002Fchanges`](\u002Fdevelopers\u002Fes\u002Freference-sync#sync.changes), con eliminaciones y resincronización completa.\n- Claves secretas con rotación, revocación y una lista opcional de IP permitidas, gestionadas en **Ajustes → Desarrolladores**.\n- Sin webhooks: consulta el feed de cambios cada 1 a 5 minutos.\n","resources",{"title":6,"description":266},"developers\u002Fes\u002Fchangelog","changelog","1.0a","p8iL4HUsZoOL46gKjYKOE_9i4ecUfykNk3w9ppiq5yA",[282,297,322,368],{"section":283,"items":284},"start",[285,289,293],{"path":286,"title":287,"description":288},"\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":290,"title":291,"description":292},"\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":294,"title":295,"description":296},"\u002Fdevelopers\u002Fes\u002Fauthentication","Autenticación","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":298,"items":299},"guides",[300,302,306,310,314,318],{"path":220,"title":221,"description":301},"Usa el cliente oficial de TypeScript para leer tus datos de Totem, paginar listas y gestionar errores de la API desde tu servidor.",{"path":303,"title":304,"description":305},"\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":307,"title":308,"description":309},"\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":311,"title":312,"description":313},"\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":315,"title":316,"description":317},"\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":319,"title":320,"description":321},"\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":323,"items":324},"reference",[325,328,332,334,339,344,349,354,359,364],{"path":326,"title":24,"description":327},"\u002Fdevelopers\u002Fes\u002Fconventions","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":329,"title":330,"description":331},"\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":178,"title":179,"description":333},"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":335,"title":336,"description":337,"apiTag":338},"\u002Fdevelopers\u002Fes\u002Freference-account","Cuenta, equipos y miembros","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.","account",{"path":340,"title":341,"description":342,"apiTag":343},"\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":345,"title":346,"description":347,"apiTag":348},"\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":350,"title":351,"description":352,"apiTag":353},"\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":355,"title":356,"description":357,"apiTag":358},"\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":360,"title":361,"description":362,"apiTag":363},"\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":365,"title":366,"description":367},"\u002Fdevelopers\u002Fes\u002Fobjects","Todos los objetos","Todos los objetos que devuelve la API, campo a campo, con un ejemplo de cada uno.",{"section":275,"items":369},[370,371,375,379],{"path":273,"title":6,"description":266},{"path":372,"title":373,"description":374},"\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":376,"title":377,"description":378},"\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":380,"title":381,"description":382},"\u002Fdevelopers\u002Fes\u002Ffaq","Preguntas frecuentes","Respuestas breves a las preguntas más habituales sobre la API de Totem, con enlaces a los detalles.","\u002Fdevelopers\u002Fchangelog",{"ACTIVATION_MARGIN_MS":385,"ADMIN_ACCESS_DISCLOSURE_VERSION":386,"AUDIT_RETENTION_DAYS":387,"AUTH_FAILURE_LIMITS":388,"CAPTURE_LAG_FLOOR_MS":392,"CAPTURE_LAG_P99_MS":7,"CURSOR_MAX_AGE_DAYS":393,"DIRTY_TTL_DAYS":393,"FAMILY_TEAM_SCOPE":394,"FAMILY_TEAM_SCOPE_OPTIONS":395,"FEED_SETTLE_LAG_MS":397,"GATE_REFRESH_MS":385,"INTEGRATION_NAME_LENGTH":398,"INTEGRATION_PURPOSE_LENGTH":400,"KEY_CACHE_TTL_MS":403,"KEY_STATS_RETENTION_DAYS":404,"LEAD_RESPONSE_READ_BUDGET":405,"LIST_SCAN_MAX":408,"MAX_FAMILY_INTEGRATION_TEAMS":393,"MAX_INTEGRATIONS_PER_FAMILY":409,"MAX_IP_ALLOWLIST":390,"PAGE_LIMIT":410,"PLATFORM_CONFIG_TTL_MS":413,"REMOVAL_RETENTION_DAYS":414,"REQUEST_BODY_MAX_BYTES":415,"ROLL_GRACE_DEFAULT_HOURS":416,"ROLL_GRACE_HOURS":417,"SEARCH_MAX_RESULTS":409,"SENSITIVE_SECTOR_POLICY":420,"SENSITIVE_SECTOR_POLICY_OPTIONS":421,"SYNC_DAILY_BUDGET":423,"SYNC_VELOCITY":425,"TEAM_CACHE_TTL_MS":427},60000,"2026-10-17",365,{"perIpPerMinute":389,"perLookupIdPerMinute":390,"banMs":391},60,20,600000,300000,30,"explicit_list",[394,396],"all_family_teams",10000,{"min":264,"max":399},80,{"min":401,"max":402},1,280,5000,90,{"conversations":390,"messageReads":406,"calls":407},200,50,1000,10,{"default":411,"max":412},25,100,15000,45,16384,24,[418,401,416,419],0,168,"exclude",[420,422],"allow",{"floor":424,"recordsMultiplier":261},250000,{"perMinute":426,"burst":397},2000,30000,"guide",[430,431],{"id":29,"text":30,"depth":264},{"id":225,"text":226,"depth":264},{"path":365,"title":366,"section":323},{"path":372,"title":373,"section":275},[],1792502790222]