[{"data":1,"prerenderedAt":767},["ShallowReactive",2],{"developers:\u002Fdevelopers\u002Fglossary":3},{"doc":4,"lang":613,"nav":624,"alternatePath":712,"policy":713,"specVersion":757,"reference":7,"layout":758,"toc":759,"prev":764,"next":765,"operations":766,"overview":7,"heroExample":7},{"id":5,"title":6,"apiTag":7,"body":8,"description":610,"draft":611,"extension":612,"lang":613,"meta":614,"navTitle":7,"navigation":615,"order":616,"path":617,"rawbody":618,"section":619,"seo":620,"stem":621,"translationKey":622,"version":7,"__hash__":623},"developers_en\u002Fdevelopers\u002Fglossary.md","Glossary",null,{"type":9,"value":10,"toc":601},"minimark",[11,15,20,53,69,85,108,117,133,137,153,171,185,208,223,243,256,269,282,297,301,322,341,351,361,383,411,423,437,457,471,493,497,522,547,566,584],[12,13,14],"p",{},"The words these docs use, in one place. Each entry links to the page that explains it in full.",[16,17,19],"h2",{"id":18},"account","Account",[12,21,22,26,27,30,31,34,35,39,40,47,48,52],{},[23,24,25],"strong",{},"Integration."," The connection to the Totem API that an administrator creates in ",[23,28,29],{},"Settings → Developers",": a name and the teams it reads, with an optional description and IP allowlist. The interface calls this ",[23,32,33],{},"Create API key",". Its id starts with ",[36,37,38],"code",{},"prn_",", and ",[41,42,44],"a",{"href":43},"\u002Fdevelopers\u002Freference-account#me.get",[36,45,46],{},"GET \u002Fv1\u002Fme"," describes it. See ",[41,49,51],{"href":50},"\u002Fdevelopers\u002Fauthentication","Authentication",".",[12,54,55,58,59,62,63,66,67,52],{},[23,56,57],{},"Key."," The secret, starting with ",[36,60,61],{},"tsk_live_",", that your server sends in the ",[36,64,65],{},"Authorization"," header. It belongs to one integration. Totem shows it once; you can roll it or revoke it at any time. See ",[41,68,51],{"href":50},[12,70,71,74,75,78,79,82,83,52],{},[23,72,73],{},"Team."," A workspace in Totem, with its own boards, members, leads, calls, conversations and bookings. Its id starts with ",[36,76,77],{},"team_",". A key reads one team or several, and requests for one team's collections name it in the ",[36,80,81],{},"Totem-Team"," header when the key has several. See ",[41,84,51],{"href":50},[12,86,87,90,91,93,94,97,98,101,102,105,106,52],{},[23,88,89],{},"Organization."," A billing account and its sub-teams. One integration can cover several teams, as long as they belong to the same organization. In ",[23,92,29],{},", an integration that covers several of its teams has the access scope ",[23,95,96],{},"Selected family teams",", and API names such as ",[36,99,100],{},"family_transfer"," and ",[36,103,104],{},"family_origin"," refer to it. See ",[41,107,51],{"href":50},[12,109,110,113,114,52],{},[23,111,112],{},"Family administrator."," An administrator of an organization's billing account who is also listed on it as a family administrator. Only a family administrator can create or change an integration that covers several teams. See ",[41,115,51],{"href":116},"\u002Fdevelopers\u002Fauthentication#teams-and-the-totem-team-header",[12,118,119,122,123,126,127,52],{},[23,120,121],{},"Member."," A person in a team, known by display name only. Member ids start with ",[36,124,125],{},"mem_"," and belong to one team: the same person has a different id in each team. See ",[41,128,130],{"href":129},"\u002Fdevelopers\u002Freference-account#members.list",[36,131,132],{},"GET \u002Fv1\u002Fmembers",[16,134,136],{"id":135},"crm-records","CRM records",[12,138,139,142,143,146,147,52],{},[23,140,141],{},"Board."," A pipeline that a team uses to organize its leads, with its stages in order. Board ids start with ",[36,144,145],{},"brd_",". See ",[41,148,150],{"href":149},"\u002Fdevelopers\u002Freference-leads#boards.list",[36,151,152],{},"GET \u002Fv1\u002Fboards",[12,154,155,158,159,162,163,166,167,52],{},[23,156,157],{},"Stage."," One step of a board, such as \"Contacted\". Stage ids start with ",[36,160,161],{},"stg_",". A lead's ",[36,164,165],{},"stage"," names the step it is on, and stages travel inside their board. See ",[41,168,169],{"href":149},[36,170,152],{},[12,172,173,176,177,180,181,52],{},[23,174,175],{},"Lead."," A person or company a team works with, with their place in the pipeline, their origin and their contact permissions. Lead ids start with ",[36,178,179],{},"lead_",". See the ",[41,182,184],{"href":183},"\u002Fdevelopers\u002Freference-leads","Leads reference",[12,186,187,190,191,194,195,198,199,146,202,52],{},[23,188,189],{},"Client."," A record of the leads endpoints with ",[36,192,193],{},"record_kind: \"client\"",". It has no pipeline status, so its ",[36,196,197],{},"status"," is ",[36,200,201],{},"null",[41,203,205],{"href":204},"\u002Fdevelopers\u002Freference-leads#leads.list",[36,206,207],{},"GET \u002Fv1\u002Fleads",[12,209,210,213,214,146,217,52],{},[23,211,212],{},"Activity."," One stage, status or assignee change of a lead. An activity never changes once written. Activity ids start with ",[36,215,216],{},"act_",[41,218,220],{"href":219},"\u002Fdevelopers\u002Freference-leads#leads.activities",[36,221,222],{},"GET \u002Fv1\u002Fleads\u002F{id}\u002Factivities",[12,224,225,228,229,232,233,236,237,52],{},[23,226,227],{},"Facet."," A part of a lead that the API delivers as an object of its own, with the lead's id and a version of its own. A lead has two: its ",[23,230,231],{},"attribution",", where it came from, and its ",[23,234,235],{},"response",", how the team has responded to it across conversations and calls. A new message changes the response, not the lead. See ",[41,238,240],{"href":239},"\u002Fdevelopers\u002Freference-leads#leads.get",[36,241,242],{},"GET \u002Fv1\u002Fleads\u002F{id}",[12,244,245,248,249,180,252,52],{},[23,246,247],{},"Call."," The metadata of a phone call with a lead, such as its direction, duration and outcome. Never a recording or a transcript. Call ids start with ",[36,250,251],{},"call_",[41,253,255],{"href":254},"\u002Fdevelopers\u002Freference-calls","Calls reference",[12,257,258,261,262,180,265,52],{},[23,259,260],{},"Conversation."," The metadata of a conversation with a lead on one channel, such as its status and when the last messages came and went, without the messages themselves. Conversation ids start with ",[36,263,264],{},"conv_",[41,266,268],{"href":267},"\u002Fdevelopers\u002Freference-conversations","Conversations reference",[12,270,271,274,275,180,278,52],{},[23,272,273],{},"Booking."," An appointment on the team's calendar: booked for a bookable service, an event from the connected calendar, or an import from an external booking system. Booking ids start with ",[36,276,277],{},"bkg_",[41,279,281],{"href":280},"\u002Fdevelopers\u002Freference-bookings","Bookings reference",[12,283,284,287,288,146,291,52],{},[23,285,286],{},"Bookable service."," Something people can book with the team, such as a first consultation, held online, in person or by phone. Its id starts with ",[36,289,290],{},"svc_",[41,292,294],{"href":293},"\u002Fdevelopers\u002Freference-bookings#booking_services.list",[36,295,296],{},"GET \u002Fv1\u002Fbooking_services",[16,298,300],{"id":299},"sync","Sync",[12,302,303,306,307,313,314,317,318,52],{},[23,304,305],{},"Changes feed."," ",[41,308,310],{"href":309},"\u002Fdevelopers\u002Freference-sync#sync.changes",[36,311,312],{},"GET \u002Fv1\u002Fsync\u002Fchanges",": every change to one team's records, in order, page by page. Each item is a record of one ",[36,315,316],{},"kind",", or a removal. See ",[41,319,321],{"href":320},"\u002Fdevelopers\u002Fsync","Keep a copy in sync",[12,323,324,327,328,332,333,101,337,52],{},[23,325,326],{},"Cursor."," An opaque string that marks your place in a list or in the changes feed. Store it as you received it, and never build or edit one. A changes-feed cursor belongs to one team, and stops working ",[329,330],"api-const",{"name":331},"CURSOR_MAX_AGE_DAYS"," days after the point in the feed it reached or, while an initial sync is still running, that many days after the sync started. See ",[41,334,336],{"href":335},"\u002Fdevelopers\u002Fpagination","Lists and pagination",[41,338,340],{"href":339},"\u002Fdevelopers\u002Fsync#save-the-cursor","Save the cursor",[12,342,343,346,347,52],{},[23,344,345],{},"Version."," An integer on every record the changes feed delivers, which grows each time the record changes. Apply an item only when its version is greater than the one you hold. See ",[41,348,350],{"href":349},"\u002Fdevelopers\u002Fconventions","Conventions",[12,352,353,356,357,52],{},[23,354,355],{},"Initial sync."," The first pass through the changes feed, without a cursor. It delivers every record of the team, then catches up with the changes made meanwhile. See ",[41,358,360],{"href":359},"\u002Fdevelopers\u002Fsync#run-the-initial-sync","Run the initial sync",[12,362,363,366,367,370,371,374,375,378,379,52],{},[23,364,365],{},"Full resync."," A new initial sync that rebuilds your copy of a team, after ",[36,368,369],{},"410 sync_cursor_expired"," or ",[36,372,373],{},"409 resync_required",". It works by ",[23,376,377],{},"mark and sweep",": forget the versions you stored, mark every record the feed delivers and, once it has caught up, delete every record of that team you did not mark. See ",[41,380,382],{"href":381},"\u002Fdevelopers\u002Fsync#full-resync","Full resync",[12,384,385,388,389,392,393,396,397,400,401,370,404,146,407,52],{},[23,386,387],{},"Removal."," A changes-feed item with ",[36,390,391],{},"removed"," instead of ",[36,394,395],{},"object",". Delete your copy of that record, everywhere you copied it. Its ",[36,398,399],{},"reason"," says why: ",[36,402,403],{},"deleted",[36,405,406],{},"erased",[41,408,410],{"href":409},"\u002Fdevelopers\u002Fsync#removals","Removals",[12,412,413,416,417,420,421,52],{},[23,414,415],{},"Deletion."," A removal with ",[36,418,419],{},"reason: \"deleted\"",": the record went away in Totem without being erased. See ",[41,422,410],{"href":409},[12,424,425,416,428,431,432,436],{},[23,426,427],{},"Erasure.",[36,429,430],{},"reason: \"erased\"",": the record was erased for privacy reasons, for example because the person exercised the right to erasure (GDPR Article 17), or because someone permanently deleted a lead, a call or a conversation in Totem, which always erases it. See ",[41,433,435],{"href":434},"\u002Fdevelopers\u002Ffaq#how-do-i-honor-erasure-requests","How do I honor erasure requests?"," in the FAQ.",[12,438,439,442,443,445,446,101,449,452,453,52],{},[23,440,441],{},"Tombstone."," What you keep after you apply a removal: the record's ",[36,444,316],{},", ",[36,447,448],{},"id",[36,450,451],{},"version",", without its data. It stops an older copy of the record, delivered again later, from bringing it back. See ",[41,454,456],{"href":455},"\u002Fdevelopers\u002Fsync#apply-a-page","Apply a page",[12,458,459,462,463,466,467,52],{},[23,460,461],{},"Merge."," Two leads for the same person, combined into one. The merged lead is not removed: it stays as an archived lead whose ",[36,464,465],{},"merged_into"," names the lead that carries on. See ",[41,468,470],{"href":469},"\u002Fdevelopers\u002Fsync#merges","Merges",[12,472,473,476,477,480,481,484,485,488,489,52],{},[23,474,475],{},"Transfer."," A lead moved to another team of the same organization. The original stays as an archived lead whose ",[36,478,479],{},"transferred_to"," names the destination ",[36,482,483],{},"team",", and the destination ",[36,486,487],{},"lead"," when Totem can name it. The destination team may be one your key does not read. See ",[41,490,492],{"href":491},"\u002Fdevelopers\u002Fsync#transfers","Transfers",[16,494,496],{"id":495},"limits-and-errors","Limits and errors",[12,498,499,502,503,506,507,510,511,514,515,146,518,52],{},[23,500,501],{},"Rate limit."," How fast a key may read: up to ",[329,504],{"name":505},"SYNC_VELOCITY.perMinute"," items a minute, with bursts of up to ",[329,508],{"name":509},"SYNC_VELOCITY.burst",". Past it, the API answers ",[36,512,513],{},"429 rate_limited"," with ",[36,516,517],{},"Retry-After",[41,519,521],{"href":520},"\u002Fdevelopers\u002Frate-limits#rate-limit","Rate limits",[12,523,524,527,528,531,532,535,536,538,539,542,543,52],{},[23,525,526],{},"Daily quota."," How many items a key may read in one UTC day from the changes feed and every list, including teams, members, bookable services and a lead's activities: ",[329,529],{"name":530},"SYNC_DAILY_BUDGET.floor"," items, or ",[329,533],{"name":534},"SYNC_DAILY_BUDGET.recordsMultiplier"," times the number of records in its teams if that is more. Single-record lookups, search and ",[36,537,46],{}," do not count. Past it, those endpoints answer ",[36,540,541],{},"429 quota_exceeded"," until 00:00 UTC. See ",[41,544,546],{"href":545},"\u002Fdevelopers\u002Frate-limits#daily-quota","Daily quota",[12,548,549,552,553,556,557,560,561,146,564,52],{},[23,550,551],{},"livemode."," A field on every resource. It is ",[36,554,555],{},"true"," on everything the API returns, and ",[36,558,559],{},"false"," on the example data of these docs and of the kit's ",[36,562,563],{},"fixtures.json",[41,565,350],{"href":349},[12,567,568,571,572,575,576,579,580,52],{},[23,569,570],{},"Request id."," The ",[36,573,574],{},"Totem-Request-Id"," header of every response the API itself sends, repeated as ",[36,577,578],{},"request_id"," in an error body. Quote it when you ask for help. See ",[41,581,583],{"href":582},"\u002Fdevelopers\u002Fsupport","Support",[12,585,586,571,589,591,592,595,596,600],{},[23,587,588],{},"Error code.",[36,590,36],{}," of an error body, such as ",[36,593,594],{},"team_required",". Branch on it, and look it up on the ",[41,597,599],{"href":598},"\u002Fdevelopers\u002Ferrors","Errors"," page.",{"title":602,"searchDepth":603,"depth":603,"links":604},"",3,[605,607,608,609],{"id":18,"depth":606,"text":19},2,{"id":135,"depth":606,"text":136},{"id":299,"depth":606,"text":300},{"id":495,"depth":606,"text":496},"The terms these docs use, defined in one place, each with a link to the page that explains it.",false,"md","en",{},true,"3","\u002Fdevelopers\u002Fglossary","---\ntitle: Glossary\ndescription: The terms these docs use, defined in one place, each with a link to the page that explains it.\nsection: resources\norder: 3\ntranslationKey: glossary\nlang: en\ndraft: false\n---\n\nThe words these docs use, in one place. Each entry links to the page that explains it in full.\n\n## Account\n\n**Integration.** The connection to the Totem API that an administrator creates in **Settings → Developers**: a name and the teams it reads, with an optional description and IP allowlist. The interface calls this **Create API key**. Its id starts with `prn_`, and [`GET \u002Fv1\u002Fme`](\u002Fdevelopers\u002Freference-account#me.get) describes it. See [Authentication](\u002Fdevelopers\u002Fauthentication).\n\n**Key.** The secret, starting with `tsk_live_`, that your server sends in the `Authorization` header. It belongs to one integration. Totem shows it once; you can roll it or revoke it at any time. See [Authentication](\u002Fdevelopers\u002Fauthentication).\n\n**Team.** A workspace in Totem, with its own boards, members, leads, calls, conversations and bookings. Its id starts with `team_`. A key reads one team or several, and requests for one team's collections name it in the `Totem-Team` header when the key has several. See [Authentication](\u002Fdevelopers\u002Fauthentication).\n\n**Organization.** A billing account and its sub-teams. One integration can cover several teams, as long as they belong to the same organization. In **Settings → Developers**, an integration that covers several of its teams has the access scope **Selected family teams**, and API names such as `family_transfer` and `family_origin` refer to it. See [Authentication](\u002Fdevelopers\u002Fauthentication).\n\n**Family administrator.** An administrator of an organization's billing account who is also listed on it as a family administrator. Only a family administrator can create or change an integration that covers several teams. See [Authentication](\u002Fdevelopers\u002Fauthentication#teams-and-the-totem-team-header).\n\n**Member.** A person in a team, known by display name only. Member ids start with `mem_` and belong to one team: the same person has a different id in each team. See [`GET \u002Fv1\u002Fmembers`](\u002Fdevelopers\u002Freference-account#members.list).\n\n## CRM records\n\n**Board.** A pipeline that a team uses to organize its leads, with its stages in order. Board ids start with `brd_`. See [`GET \u002Fv1\u002Fboards`](\u002Fdevelopers\u002Freference-leads#boards.list).\n\n**Stage.** One step of a board, such as \"Contacted\". Stage ids start with `stg_`. A lead's `stage` names the step it is on, and stages travel inside their board. See [`GET \u002Fv1\u002Fboards`](\u002Fdevelopers\u002Freference-leads#boards.list).\n\n**Lead.** A person or company a team works with, with their place in the pipeline, their origin and their contact permissions. Lead ids start with `lead_`. See the [Leads reference](\u002Fdevelopers\u002Freference-leads).\n\n**Client.** A record of the leads endpoints with `record_kind: \"client\"`. It has no pipeline status, so its `status` is `null`. See [`GET \u002Fv1\u002Fleads`](\u002Fdevelopers\u002Freference-leads#leads.list).\n\n**Activity.** One stage, status or assignee change of a lead. An activity never changes once written. Activity ids start with `act_`. See [`GET \u002Fv1\u002Fleads\u002F{id}\u002Factivities`](\u002Fdevelopers\u002Freference-leads#leads.activities).\n\n**Facet.** A part of a lead that the API delivers as an object of its own, with the lead's id and a version of its own. A lead has two: its **attribution**, where it came from, and its **response**, how the team has responded to it across conversations and calls. A new message changes the response, not the lead. See [`GET \u002Fv1\u002Fleads\u002F{id}`](\u002Fdevelopers\u002Freference-leads#leads.get).\n\n**Call.** The metadata of a phone call with a lead, such as its direction, duration and outcome. Never a recording or a transcript. Call ids start with `call_`. See the [Calls reference](\u002Fdevelopers\u002Freference-calls).\n\n**Conversation.** The metadata of a conversation with a lead on one channel, such as its status and when the last messages came and went, without the messages themselves. Conversation ids start with `conv_`. See the [Conversations reference](\u002Fdevelopers\u002Freference-conversations).\n\n**Booking.** An appointment on the team's calendar: booked for a bookable service, an event from the connected calendar, or an import from an external booking system. Booking ids start with `bkg_`. See the [Bookings reference](\u002Fdevelopers\u002Freference-bookings).\n\n**Bookable service.** Something people can book with the team, such as a first consultation, held online, in person or by phone. Its id starts with `svc_`. See [`GET \u002Fv1\u002Fbooking_services`](\u002Fdevelopers\u002Freference-bookings#booking_services.list).\n\n## Sync\n\n**Changes feed.** [`GET \u002Fv1\u002Fsync\u002Fchanges`](\u002Fdevelopers\u002Freference-sync#sync.changes): every change to one team's records, in order, page by page. Each item is a record of one `kind`, or a removal. See [Keep a copy in sync](\u002Fdevelopers\u002Fsync).\n\n**Cursor.** An opaque string that marks your place in a list or in the changes feed. Store it as you received it, and never build or edit one. A changes-feed cursor belongs to one team, and stops working :api-const{name=\"CURSOR_MAX_AGE_DAYS\"} days after the point in the feed it reached or, while an initial sync is still running, that many days after the sync started. See [Lists and pagination](\u002Fdevelopers\u002Fpagination) and [Save the cursor](\u002Fdevelopers\u002Fsync#save-the-cursor).\n\n**Version.** An integer on every record the changes feed delivers, which grows each time the record changes. Apply an item only when its version is greater than the one you hold. See [Conventions](\u002Fdevelopers\u002Fconventions).\n\n**Initial sync.** The first pass through the changes feed, without a cursor. It delivers every record of the team, then catches up with the changes made meanwhile. See [Run the initial sync](\u002Fdevelopers\u002Fsync#run-the-initial-sync).\n\n**Full resync.** A new initial sync that rebuilds your copy of a team, after `410 sync_cursor_expired` or `409 resync_required`. It works by **mark and sweep**: forget the versions you stored, mark every record the feed delivers and, once it has caught up, delete every record of that team you did not mark. See [Full resync](\u002Fdevelopers\u002Fsync#full-resync).\n\n**Removal.** A changes-feed item with `removed` instead of `object`. Delete your copy of that record, everywhere you copied it. Its `reason` says why: `deleted` or `erased`. See [Removals](\u002Fdevelopers\u002Fsync#removals).\n\n**Deletion.** A removal with `reason: \"deleted\"`: the record went away in Totem without being erased. See [Removals](\u002Fdevelopers\u002Fsync#removals).\n\n**Erasure.** A removal with `reason: \"erased\"`: the record was erased for privacy reasons, for example because the person exercised the right to erasure (GDPR Article 17), or because someone permanently deleted a lead, a call or a conversation in Totem, which always erases it. See [How do I honor erasure requests?](\u002Fdevelopers\u002Ffaq#how-do-i-honor-erasure-requests) in the FAQ.\n\n**Tombstone.** What you keep after you apply a removal: the record's `kind`, `id` and `version`, without its data. It stops an older copy of the record, delivered again later, from bringing it back. See [Apply a page](\u002Fdevelopers\u002Fsync#apply-a-page).\n\n**Merge.** Two leads for the same person, combined into one. The merged lead is not removed: it stays as an archived lead whose `merged_into` names the lead that carries on. See [Merges](\u002Fdevelopers\u002Fsync#merges).\n\n**Transfer.** A lead moved to another team of the same organization. The original stays as an archived lead whose `transferred_to` names the destination `team`, and the destination `lead` when Totem can name it. The destination team may be one your key does not read. See [Transfers](\u002Fdevelopers\u002Fsync#transfers).\n\n## Limits and errors\n\n**Rate limit.** How fast a key may read: up to :api-const{name=\"SYNC_VELOCITY.perMinute\"} items a minute, with bursts of up to :api-const{name=\"SYNC_VELOCITY.burst\"}. Past it, the API answers `429 rate_limited` with `Retry-After`. See [Rate limits](\u002Fdevelopers\u002Frate-limits#rate-limit).\n\n**Daily quota.** How many items a key may read in one UTC day from the changes feed and every list, including teams, members, bookable services and a lead's activities: :api-const{name=\"SYNC_DAILY_BUDGET.floor\"} items, or :api-const{name=\"SYNC_DAILY_BUDGET.recordsMultiplier\"} times the number of records in its teams if that is more. Single-record lookups, search and `GET \u002Fv1\u002Fme` do not count. Past it, those endpoints answer `429 quota_exceeded` until 00:00 UTC. See [Daily quota](\u002Fdevelopers\u002Frate-limits#daily-quota).\n\n**livemode.** A field on every resource. It is `true` on everything the API returns, and `false` on the example data of these docs and of the kit's `fixtures.json`. See [Conventions](\u002Fdevelopers\u002Fconventions).\n\n**Request id.** The `Totem-Request-Id` header of every response the API itself sends, repeated as `request_id` in an error body. Quote it when you ask for help. See [Support](\u002Fdevelopers\u002Fsupport).\n\n**Error code.** The `code` of an error body, such as `team_required`. Branch on it, and look it up on the [Errors](\u002Fdevelopers\u002Ferrors) page.\n","resources",{"title":6,"description":610},"developers\u002Fglossary","glossary","3DC22yPiFygMfa2AzP5b5tq9AsJaRBSs83ZrFSQQWMk",[625,638,661,699],{"section":626,"items":627},"start",[628,632,636],{"path":629,"title":630,"description":631},"\u002Fdevelopers","Overview","Read the leads, calls, conversations and bookings of your Totem teams from your own systems, and keep a copy in sync.",{"path":633,"title":634,"description":635},"\u002Fdevelopers\u002Fquickstart","Quickstart","Make your first requests to the Totem API in a few minutes. Check your key, find your team, list leads and start a sync.",{"path":50,"title":51,"description":637},"Secret keys and where they may live, the Totem-Team header for keys with several teams, IP allowlists, and how to roll or revoke a key.",{"section":639,"items":640},"guides",[641,645,647,649,653,657],{"path":642,"title":643,"description":644},"\u002Fdevelopers\u002Ftypescript","TypeScript SDK","Use the official TypeScript client to read your Totem data, paginate lists and handle API errors from your server.",{"path":320,"title":321,"description":646},"Copy a team with the changes feed and keep the copy current. Apply pages safely, recover from errors, and start from a reference client that Totem tests.",{"path":335,"title":336,"description":648},"How list endpoints return records a page at a time, how to read every page, and what order and filters a list supports.",{"path":650,"title":651,"description":652},"\u002Fdevelopers\u002Fcoverage","Data coverage","What Totem records, since when, and how to tell an empty value from a fact that was never recorded.",{"path":654,"title":655,"description":656},"\u002Fdevelopers\u002Ftesting","Testing and go-live","How to build and test an integration safely while the API has no test environment, and what to check before you go live.",{"path":658,"title":659,"description":660},"\u002Fdevelopers\u002Fsecurity","Security and personal data","How Totem protects API keys and the data the API serves, what it records about each key, where the API runs, and what to do with the personal data you copy.",{"section":662,"items":663},"reference",[664,666,668,671,675,679,683,687,691,695],{"path":349,"title":350,"description":665},"The notation these docs use, and the rules every response follows: ids, timestamps, empty values, amounts, enums, versions, stability, errors and untrusted text.",{"path":598,"title":599,"description":667},"The error format, how your integration should handle each kind of error, and every error code with when it happens and what to do.",{"path":669,"title":521,"description":670},"\u002Fdevelopers\u002Frate-limits","How much a key can read per minute and per day, what counts toward each limit, how to retry after a 429, and how long an initial sync takes.",{"path":672,"title":673,"description":674,"apiTag":18},"\u002Fdevelopers\u002Freference-account","Account, teams and members","Check that a key works and what it can read, list its teams with their time zones, list each team's members, and check that the API is up.",{"path":183,"title":676,"description":677,"apiTag":678},"Leads, boards and activities","List, fetch and search a team's leads and clients, read each lead's activities, and list the boards and stages they move through.","leads",{"path":254,"title":680,"description":681,"apiTag":682},"Calls","List and fetch a team's calls, with their direction, timing and a normalized outcome. No recordings or transcripts.","calls",{"path":267,"title":684,"description":685,"apiTag":686},"Conversations","List and fetch a team's conversations on every channel, with their status, assignee, whether a person has taken them over and when the last messages came and went. Never message content.","conversations",{"path":280,"title":688,"description":689,"apiTag":690},"Bookings and services","List and fetch a team's bookings, and list the services its customers can book.","bookings",{"path":692,"title":693,"description":694,"apiTag":299},"\u002Fdevelopers\u002Freference-sync","Changes feed","One endpoint that copies a team and then returns every change, page by page.",{"path":696,"title":697,"description":698},"\u002Fdevelopers\u002Fobjects","All objects","Every object the API returns, field by field, with an example of each.",{"section":619,"items":700},[701,705,707,708],{"path":702,"title":703,"description":704},"\u002Fdevelopers\u002Fchangelog","Changelog","Changes to the Totem API, newest first, each under the date it shipped.",{"path":582,"title":583,"description":706},"How to get help with the Totem API, what to include in a request, and what to do if a key leaks.",{"path":617,"title":6,"description":610},{"path":709,"title":710,"description":711},"\u002Fdevelopers\u002Ffaq","FAQ","Short answers to the questions developers ask most about the Totem API, with links to the details.","\u002Fdevelopers\u002Fes\u002Fglossary",{"ACTIVATION_MARGIN_MS":714,"ADMIN_ACCESS_DISCLOSURE_VERSION":715,"AUDIT_RETENTION_DAYS":716,"AUTH_FAILURE_LIMITS":717,"CAPTURE_LAG_FLOOR_MS":721,"CAPTURE_LAG_P99_MS":7,"CURSOR_MAX_AGE_DAYS":722,"DIRTY_TTL_DAYS":722,"FAMILY_TEAM_SCOPE":723,"FAMILY_TEAM_SCOPE_OPTIONS":724,"FEED_SETTLE_LAG_MS":726,"GATE_REFRESH_MS":714,"INTEGRATION_NAME_LENGTH":727,"INTEGRATION_PURPOSE_LENGTH":729,"KEY_CACHE_TTL_MS":732,"KEY_STATS_RETENTION_DAYS":733,"LEAD_RESPONSE_READ_BUDGET":734,"LIST_SCAN_MAX":737,"MAX_FAMILY_INTEGRATION_TEAMS":722,"MAX_INTEGRATIONS_PER_FAMILY":738,"MAX_IP_ALLOWLIST":719,"PAGE_LIMIT":739,"PLATFORM_CONFIG_TTL_MS":742,"REMOVAL_RETENTION_DAYS":743,"REQUEST_BODY_MAX_BYTES":744,"ROLL_GRACE_DEFAULT_HOURS":745,"ROLL_GRACE_HOURS":746,"SEARCH_MAX_RESULTS":738,"SENSITIVE_SECTOR_POLICY":749,"SENSITIVE_SECTOR_POLICY_OPTIONS":750,"SYNC_DAILY_BUDGET":752,"SYNC_VELOCITY":754,"TEAM_CACHE_TTL_MS":756},60000,"2026-10-17",365,{"perIpPerMinute":718,"perLookupIdPerMinute":719,"banMs":720},60,20,600000,300000,30,"explicit_list",[723,725],"all_family_teams",10000,{"min":606,"max":728},80,{"min":730,"max":731},1,280,5000,90,{"conversations":719,"messageReads":735,"calls":736},200,50,1000,10,{"default":740,"max":741},25,100,15000,45,16384,24,[747,730,745,748],0,168,"exclude",[749,751],"allow",{"floor":753,"recordsMultiplier":603},250000,{"perMinute":755,"burst":726},2000,30000,"1.0a","guide",[760,761,762,763],{"id":18,"text":19,"depth":606},{"id":135,"text":136,"depth":606},{"id":299,"text":300,"depth":606},{"id":495,"text":496,"depth":606},{"path":582,"title":583,"section":619},{"path":709,"title":710,"section":619},[],1792502789101]