@magnetcustomer/sdk 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/README.md +20 -3
  2. package/dist/client.d.ts +6 -1
  3. package/dist/client.js +5 -0
  4. package/dist/generated/api/contacts-api.d.ts +24 -24
  5. package/dist/generated/api/contacts-api.js +24 -24
  6. package/dist/generated/api/custom-fields-api.d.ts +1 -43
  7. package/dist/generated/api/custom-fields-api.js +1 -67
  8. package/dist/generated/api/customers-api.d.ts +4 -4
  9. package/dist/generated/api/customers-api.js +4 -4
  10. package/dist/generated/api/deals-api.d.ts +27 -27
  11. package/dist/generated/api/deals-api.js +27 -27
  12. package/dist/generated/api/journeys-api.d.ts +232 -0
  13. package/dist/generated/api/journeys-api.js +315 -0
  14. package/dist/generated/api/leads-api.d.ts +4 -4
  15. package/dist/generated/api/leads-api.js +4 -4
  16. package/dist/generated/api/meetings-api.d.ts +123 -27
  17. package/dist/generated/api/meetings-api.js +169 -27
  18. package/dist/generated/api/observations-api.d.ts +8 -8
  19. package/dist/generated/api/observations-api.js +8 -8
  20. package/dist/generated/api/organizations-api.d.ts +24 -24
  21. package/dist/generated/api/organizations-api.js +24 -24
  22. package/dist/generated/api/pipelines-api.d.ts +49 -1
  23. package/dist/generated/api/pipelines-api.js +72 -1
  24. package/dist/generated/api/prospects-api.d.ts +4 -4
  25. package/dist/generated/api/prospects-api.js +4 -4
  26. package/dist/generated/api/staffs-api.d.ts +1 -1
  27. package/dist/generated/api/staffs-api.js +1 -1
  28. package/dist/generated/api/task-types-api.d.ts +5 -5
  29. package/dist/generated/api/task-types-api.js +5 -5
  30. package/dist/generated/api/tasks-api.d.ts +32 -32
  31. package/dist/generated/api/tasks-api.js +32 -32
  32. package/dist/generated/api/teams-api.d.ts +130 -0
  33. package/dist/generated/api/teams-api.js +199 -0
  34. package/dist/generated/api/tickets-api.d.ts +610 -0
  35. package/dist/generated/api/tickets-api.js +860 -0
  36. package/dist/generated/api/treatments-api.d.ts +379 -0
  37. package/dist/generated/api/treatments-api.js +539 -0
  38. package/dist/generated/api/webhooks-api.d.ts +63 -0
  39. package/dist/generated/api/webhooks-api.js +116 -0
  40. package/dist/generated/api.d.ts +6 -1
  41. package/dist/generated/api.js +6 -1
  42. package/dist/generated/base.d.ts +1 -1
  43. package/dist/generated/base.js +1 -1
  44. package/dist/generated/common.d.ts +1 -1
  45. package/dist/generated/common.js +1 -1
  46. package/dist/generated/configuration.d.ts +1 -1
  47. package/dist/generated/configuration.js +1 -1
  48. package/dist/generated/index.d.ts +1 -1
  49. package/dist/generated/index.js +1 -1
  50. package/dist/generated/models/close-deal-request.d.ts +2 -2
  51. package/dist/generated/models/close-deal-request.js +1 -1
  52. package/dist/generated/models/contact-input-phones-inner.d.ts +1 -1
  53. package/dist/generated/models/contact-input-phones-inner.js +1 -1
  54. package/dist/generated/models/contact-input.d.ts +1 -1
  55. package/dist/generated/models/contact-input.js +1 -1
  56. package/dist/generated/models/contact-summary.d.ts +1 -1
  57. package/dist/generated/models/contact-summary.js +1 -1
  58. package/dist/generated/models/contact.d.ts +1 -1
  59. package/dist/generated/models/contact.js +1 -1
  60. package/dist/generated/models/create-observation-request.d.ts +1 -1
  61. package/dist/generated/models/create-observation-request.js +1 -1
  62. package/dist/generated/models/create-task-type-request.d.ts +1 -1
  63. package/dist/generated/models/create-task-type-request.js +1 -1
  64. package/dist/generated/models/create-ticket-message-request.d.ts +29 -0
  65. package/dist/generated/models/create-ticket-message-request.js +19 -0
  66. package/dist/generated/models/custom-field-settings.d.ts +1 -1
  67. package/dist/generated/models/custom-field-settings.js +1 -1
  68. package/dist/generated/models/custom-field-value.d.ts +1 -1
  69. package/dist/generated/models/custom-field-value.js +1 -1
  70. package/dist/generated/models/custom-field.d.ts +1 -1
  71. package/dist/generated/models/custom-field.js +1 -1
  72. package/dist/generated/models/deal-create.d.ts +1 -1
  73. package/dist/generated/models/deal-create.js +1 -1
  74. package/dist/generated/models/deal-input.d.ts +1 -1
  75. package/dist/generated/models/deal-input.js +1 -1
  76. package/dist/generated/models/deal-labels-inner.d.ts +1 -1
  77. package/dist/generated/models/deal-labels-inner.js +1 -1
  78. package/dist/generated/models/deal-organization.d.ts +1 -1
  79. package/dist/generated/models/deal-organization.js +1 -1
  80. package/dist/generated/models/deal-pipeline-one-of.d.ts +1 -1
  81. package/dist/generated/models/deal-pipeline-one-of.js +1 -1
  82. package/dist/generated/models/deal-pipeline.d.ts +1 -1
  83. package/dist/generated/models/deal-pipeline.js +1 -1
  84. package/dist/generated/models/deal-stage.d.ts +1 -1
  85. package/dist/generated/models/deal-stage.js +1 -1
  86. package/dist/generated/models/deal.d.ts +1 -1
  87. package/dist/generated/models/deal.js +1 -1
  88. package/dist/generated/models/delete-meetings-request.d.ts +1 -1
  89. package/dist/generated/models/delete-meetings-request.js +1 -1
  90. package/dist/generated/models/delete-meetings200-response.d.ts +1 -1
  91. package/dist/generated/models/delete-meetings200-response.js +1 -1
  92. package/dist/generated/models/delete-observations-request.d.ts +1 -1
  93. package/dist/generated/models/delete-observations-request.js +1 -1
  94. package/dist/generated/models/error-errors-inner.d.ts +1 -1
  95. package/dist/generated/models/error-errors-inner.js +1 -1
  96. package/dist/generated/models/finish-meeting-request.d.ts +1 -1
  97. package/dist/generated/models/finish-meeting-request.js +1 -1
  98. package/dist/generated/models/finish-tasks-request.d.ts +1 -1
  99. package/dist/generated/models/finish-tasks-request.js +1 -1
  100. package/dist/generated/models/get-deal-stage-history200-response-history-inner-stage.d.ts +1 -1
  101. package/dist/generated/models/get-deal-stage-history200-response-history-inner-stage.js +1 -1
  102. package/dist/generated/models/get-deal-stage-history200-response-history-inner.d.ts +1 -1
  103. package/dist/generated/models/get-deal-stage-history200-response-history-inner.js +1 -1
  104. package/dist/generated/models/get-deal-stage-history200-response-totals.d.ts +1 -1
  105. package/dist/generated/models/get-deal-stage-history200-response-totals.js +1 -1
  106. package/dist/generated/models/get-deal-stage-history200-response.d.ts +1 -1
  107. package/dist/generated/models/get-deal-stage-history200-response.js +1 -1
  108. package/dist/generated/models/get-journey-health-score200-response.d.ts +34 -0
  109. package/dist/generated/models/get-journey-health-score200-response.js +20 -0
  110. package/dist/generated/models/index.d.ts +27 -0
  111. package/dist/generated/models/index.js +27 -0
  112. package/dist/generated/models/journey.d.ts +111 -0
  113. package/dist/generated/models/journey.js +32 -0
  114. package/dist/generated/models/list-contacts200-response.d.ts +1 -1
  115. package/dist/generated/models/list-contacts200-response.js +1 -1
  116. package/dist/generated/models/list-custom-fields200-response.d.ts +1 -1
  117. package/dist/generated/models/list-custom-fields200-response.js +1 -1
  118. package/dist/generated/models/list-deals200-response.d.ts +1 -1
  119. package/dist/generated/models/list-deals200-response.js +1 -1
  120. package/dist/generated/models/list-deals401-response.d.ts +1 -1
  121. package/dist/generated/models/list-deals401-response.js +1 -1
  122. package/dist/generated/models/list-deals403-response.d.ts +1 -1
  123. package/dist/generated/models/list-deals403-response.js +1 -1
  124. package/dist/generated/models/list-journeys200-response.d.ts +16 -0
  125. package/dist/generated/models/list-journeys200-response.js +15 -0
  126. package/dist/generated/models/list-lost-reasons200-response.d.ts +16 -0
  127. package/dist/generated/models/list-lost-reasons200-response.js +15 -0
  128. package/dist/generated/models/list-meeting-rooms200-response.d.ts +16 -0
  129. package/dist/generated/models/list-meeting-rooms200-response.js +15 -0
  130. package/dist/generated/models/list-meeting-types200-response.d.ts +16 -0
  131. package/dist/generated/models/list-meeting-types200-response.js +15 -0
  132. package/dist/generated/models/list-meetings200-response.d.ts +1 -1
  133. package/dist/generated/models/list-meetings200-response.js +1 -1
  134. package/dist/generated/models/list-observations200-response.d.ts +1 -1
  135. package/dist/generated/models/list-observations200-response.js +1 -1
  136. package/dist/generated/models/list-organizations200-response.d.ts +1 -1
  137. package/dist/generated/models/list-organizations200-response.js +1 -1
  138. package/dist/generated/models/list-pipelines200-response.d.ts +1 -1
  139. package/dist/generated/models/list-pipelines200-response.js +1 -1
  140. package/dist/generated/models/list-staffs200-response.d.ts +1 -1
  141. package/dist/generated/models/list-staffs200-response.js +1 -1
  142. package/dist/generated/models/list-task-types200-response-one-of.d.ts +1 -1
  143. package/dist/generated/models/list-task-types200-response-one-of.js +1 -1
  144. package/dist/generated/models/list-task-types200-response.d.ts +1 -1
  145. package/dist/generated/models/list-task-types200-response.js +1 -1
  146. package/dist/generated/models/list-tasks200-response.d.ts +1 -1
  147. package/dist/generated/models/list-tasks200-response.js +1 -1
  148. package/dist/generated/models/list-teams200-response.d.ts +16 -0
  149. package/dist/generated/models/list-teams200-response.js +15 -0
  150. package/dist/generated/models/list-ticket-statuses200-response.d.ts +16 -0
  151. package/dist/generated/models/list-ticket-statuses200-response.js +15 -0
  152. package/dist/generated/models/list-tickets200-response.d.ts +16 -0
  153. package/dist/generated/models/list-tickets200-response.js +15 -0
  154. package/dist/generated/models/list-treatment-types200-response.d.ts +16 -0
  155. package/dist/generated/models/list-treatment-types200-response.js +15 -0
  156. package/dist/generated/models/list-treatments200-response.d.ts +16 -0
  157. package/dist/generated/models/list-treatments200-response.js +15 -0
  158. package/dist/generated/models/list-workspaces200-response.d.ts +16 -0
  159. package/dist/generated/models/list-workspaces200-response.js +15 -0
  160. package/dist/generated/models/lost-reason.d.ts +32 -0
  161. package/dist/generated/models/lost-reason.js +15 -0
  162. package/dist/generated/models/meeting-create.d.ts +1 -1
  163. package/dist/generated/models/meeting-create.js +1 -1
  164. package/dist/generated/models/meeting-deal.d.ts +1 -1
  165. package/dist/generated/models/meeting-deal.js +1 -1
  166. package/dist/generated/models/meeting-input.d.ts +1 -1
  167. package/dist/generated/models/meeting-input.js +1 -1
  168. package/dist/generated/models/meeting-room.d.ts +1 -1
  169. package/dist/generated/models/meeting-room.js +1 -1
  170. package/dist/generated/models/meeting-type.d.ts +1 -1
  171. package/dist/generated/models/meeting-type.js +1 -1
  172. package/dist/generated/models/meeting.d.ts +1 -1
  173. package/dist/generated/models/meeting.js +1 -1
  174. package/dist/generated/models/model-error.d.ts +1 -1
  175. package/dist/generated/models/model-error.js +1 -1
  176. package/dist/generated/models/move-deal-stage-request.d.ts +1 -1
  177. package/dist/generated/models/move-deal-stage-request.js +1 -1
  178. package/dist/generated/models/move-deal-stage200-response.d.ts +1 -1
  179. package/dist/generated/models/move-deal-stage200-response.js +1 -1
  180. package/dist/generated/models/observation-deal.d.ts +1 -1
  181. package/dist/generated/models/observation-deal.js +1 -1
  182. package/dist/generated/models/observation-input.d.ts +1 -1
  183. package/dist/generated/models/observation-input.js +1 -1
  184. package/dist/generated/models/observation-organization.d.ts +1 -1
  185. package/dist/generated/models/observation-organization.js +1 -1
  186. package/dist/generated/models/observation.d.ts +1 -1
  187. package/dist/generated/models/observation.js +1 -1
  188. package/dist/generated/models/organization-input.d.ts +1 -1
  189. package/dist/generated/models/organization-input.js +1 -1
  190. package/dist/generated/models/organization.d.ts +1 -1
  191. package/dist/generated/models/organization.js +1 -1
  192. package/dist/generated/models/page.d.ts +1 -1
  193. package/dist/generated/models/page.js +1 -1
  194. package/dist/generated/models/pipeline.d.ts +1 -1
  195. package/dist/generated/models/pipeline.js +1 -1
  196. package/dist/generated/models/reopen-deal-request.d.ts +1 -1
  197. package/dist/generated/models/reopen-deal-request.js +1 -1
  198. package/dist/generated/models/staff-summary.d.ts +1 -1
  199. package/dist/generated/models/staff-summary.js +1 -1
  200. package/dist/generated/models/staff.d.ts +1 -1
  201. package/dist/generated/models/staff.js +1 -1
  202. package/dist/generated/models/stage.d.ts +1 -1
  203. package/dist/generated/models/stage.js +1 -1
  204. package/dist/generated/models/task-create.d.ts +1 -1
  205. package/dist/generated/models/task-create.js +1 -1
  206. package/dist/generated/models/task-deal.d.ts +1 -1
  207. package/dist/generated/models/task-deal.js +1 -1
  208. package/dist/generated/models/task-input.d.ts +1 -1
  209. package/dist/generated/models/task-input.js +1 -1
  210. package/dist/generated/models/task-type.d.ts +1 -1
  211. package/dist/generated/models/task-type.js +1 -1
  212. package/dist/generated/models/task.d.ts +1 -1
  213. package/dist/generated/models/task.js +1 -1
  214. package/dist/generated/models/team.d.ts +27 -0
  215. package/dist/generated/models/team.js +15 -0
  216. package/dist/generated/models/ticket-create.d.ts +16 -0
  217. package/dist/generated/models/ticket-create.js +15 -0
  218. package/dist/generated/models/ticket-input.d.ts +77 -0
  219. package/dist/generated/models/ticket-input.js +22 -0
  220. package/dist/generated/models/ticket-message.d.ts +33 -0
  221. package/dist/generated/models/ticket-message.js +15 -0
  222. package/dist/generated/models/ticket-status-workspace.d.ts +18 -0
  223. package/dist/generated/models/ticket-status-workspace.js +15 -0
  224. package/dist/generated/models/ticket-status.d.ts +37 -0
  225. package/dist/generated/models/ticket-status.js +15 -0
  226. package/dist/generated/models/ticket.d.ts +87 -0
  227. package/dist/generated/models/ticket.js +22 -0
  228. package/dist/generated/models/treatment-input.d.ts +58 -0
  229. package/dist/generated/models/treatment-input.js +15 -0
  230. package/dist/generated/models/treatment-type.d.ts +43 -0
  231. package/dist/generated/models/treatment-type.js +15 -0
  232. package/dist/generated/models/treatment.d.ts +64 -0
  233. package/dist/generated/models/treatment.js +15 -0
  234. package/dist/generated/models/update-task-type-request.d.ts +1 -1
  235. package/dist/generated/models/update-task-type-request.js +1 -1
  236. package/dist/generated/models/validate-deal200-response-required-actions-pending.d.ts +1 -1
  237. package/dist/generated/models/validate-deal200-response-required-actions-pending.js +1 -1
  238. package/dist/generated/models/validate-deal200-response-required-field-pending.d.ts +1 -1
  239. package/dist/generated/models/validate-deal200-response-required-field-pending.js +1 -1
  240. package/dist/generated/models/validate-deal200-response.d.ts +1 -1
  241. package/dist/generated/models/validate-deal200-response.js +1 -1
  242. package/dist/generated/models/webhook-trigger-group-triggers-inner.d.ts +29 -0
  243. package/dist/generated/models/webhook-trigger-group-triggers-inner.js +15 -0
  244. package/dist/generated/models/webhook-trigger-group.d.ts +22 -0
  245. package/dist/generated/models/webhook-trigger-group.js +15 -0
  246. package/dist/generated/models/workspace.d.ts +23 -0
  247. package/dist/generated/models/workspace.js +15 -0
  248. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
  /**
5
5
  * API da Magnet Customer
6
- * A API REST da Magnet Customer permite ler e gravar os registros do CRM a partir dos seus sistemas. # Comece aqui ## 1. Crie um Service Account No CRM, abra **Configurações › Service Accounts** (apenas administradores), clique em **Novo service account**, escolha a validade e as permissões, e copie o **Client ID** e o **Client Secret**. O secret aparece uma única vez. ## 2. Solicite um token ```bash curl -X POST https://magnetcustomer.net/realms/platform/protocol/openid-connect/token \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"grant_type=client_credentials\" \\ -d \"client_id=SEU_CLIENT_ID\" \\ -d \"client_secret=SEU_CLIENT_SECRET\" ``` ```json { \"access_token\": \"eyJhbGciOiJSUzI1NiIs...\", \"expires_in\": 900, \"token_type\": \"Bearer\" } ``` O token vale 15 minutos e este fluxo não tem refresh token: quando vencer, ou ao receber `401`, repita o pedido. ## 3. Chame a API Cada conta tem o seu endereço. Troque `sua-conta` pelo subdomínio que você usa para abrir o CRM: ```bash curl \"https://sua-conta.platform-api.magnetcustomer.com/api/deals?page=1&limit=15\" \\ -H \"Authorization: Bearer SEU_TOKEN\" ``` Requisições com corpo levam também `Content-Type: application/json`. # Convenções ## Paginação Envie sempre `page`. Com ele, toda listagem devolve o mesmo envelope: ```json { \"docs\": [], \"total\": 132, \"pages\": 9, \"page\": 1, \"limit\": 15 } ``` | Parâmetro | Padrão | Descrição | |---|---|---| | `page` | — | Página, a partir de 1. **Obrigatório na prática** | | `limit` | 15 | Registros por página. Máximo 100: acima disso a API usa 100 | | `sortBy` | varia por recurso | Campo de ordenação | | `sortType` | `desc` | `asc` ou `desc` | | `search` | — | Busca textual, quando o recurso aceita | Sem `page`, a maioria das listagens devolve uma lista simples (`[...]`), sem o envelope, e ignora `limit`. Para percorrer tudo, peça `page=1` e avance até `page` ser igual a `pages`. Uma página além do fim devolve `docs` vazio. O tamanho de página padrão é 15, com duas exceções: 25 em Leads, Prospects e Clientes, e 100 em Usuários. Um `limit` inválido cai no padrão. ## Identificadores e datas Todo ID é um texto de 24 caracteres hexadecimais, como `507f1f77bcf86cd799439011`. Ao gravar, envie a referência como **ID em texto** — nunca o objeto. Um ID fora desse formato hoje é respondido com `500`, não `400`: valide o formato antes de enviar. No corpo e nas respostas, datas são ISO 8601 em UTC, como `2026-05-15T10:00:00Z`. Nos filtros de data da URL (`minDate`, `dateOfExpires_minDate`...), o valor é um **timestamp em milissegundos**, como `1798761600000`; uma data ISO ali não filtra o que você espera. ## Campos ausentes Campo sem valor costuma vir **ausente** da resposta, não como `null`. Trate a falta da chave como vazio. ## Campos personalizados Os campos criados pelo administrador da conta vão na lista `customFields`: ```json { \"customFields\": [ { \"customField\": \"507f1f77bcf86cd799439014\", \"k\": \"segmento\", \"v\": \"Tecnologia\" } ] } ``` O valor vai em **`v`**. Um item com `value` é aceito sem erro, mas o campo fica vazio. Descubra os campos e os IDs com `GET /api/customfields?page=1&feature=deal` (troque `deal` por `meeting`, `task`, `contact`...). Com `&required=true` vêm só os obrigatórios da conta. ## Erros ```json { \"reason\": \"Missing required parameters\", \"message\": \"Missing required parameters\", \"code\": \"VALIDATION_ERROR\", \"errors\": [ { \"field\": \"title\", \"message\": \"must NOT have fewer than 1 characters\", \"keyword\": \"minLength\" } ] } ``` | Status | Quando | |---|---| | `400` | Corpo inválido: campo obrigatório ausente, tipo errado, valor fora da lista | | `401` | Token ausente, inválido ou vencido. Corpo: `{\"reason\": \"Access Denied\"}` | | `403` | O Service Account não tem a permissão da rota (`type: SA_PERMISSION_DENIED`, com `requiredPermission`) ou a rota exige administrador (`type: ADMIN_REQUIRED`) | | `404` | Registro não encontrado | | `409` | O registro não está no estado que a operação exige | | `429` | Limite de requisições excedido. Espere o tempo de `Retry-After` | ## Limite de requisições Os limites são aplicados por conta. Ao receber `429`, espere os segundos indicados em `Retry-After` e tente de novo com intervalo crescente. ## Área de trabalho Em contas com áreas de trabalho, a API define a área do registro pela credencial ou pelo registro pai. Não envie `workspace`. # Cobertura Esta referência cobre Contatos (leads, prospects e clientes), Empresas, Oportunidades, Pipelines e etapas, Reuniões, Tarefas, Observações, Usuários e Campos personalizados. Tickets, Atendimentos e Webhooks entram nas próximas revisões.
6
+ * A API REST da Magnet Customer permite ler e gravar os registros do CRM a partir dos seus sistemas. # Comece aqui ## 1. Crie um Service Account No CRM, abra **Configurações › Service Accounts** (apenas administradores), clique em **Novo service account**, escolha a validade e as permissões, e copie o **Client ID** e o **Client Secret**. O secret aparece uma única vez. ## 2. Solicite um token ```bash curl -X POST https://magnetcustomer.net/realms/platform/protocol/openid-connect/token \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"grant_type=client_credentials\" \\ -d \"client_id=SEU_CLIENT_ID\" \\ -d \"client_secret=SEU_CLIENT_SECRET\" ``` ```json { \"access_token\": \"eyJhbGciOiJSUzI1NiIs...\", \"expires_in\": 900, \"token_type\": \"Bearer\" } ``` O token vale 15 minutos e este fluxo não tem refresh token: quando vencer, ou ao receber `401`, repita o pedido. ## 3. Chame a API Cada conta tem o seu endereço. Troque `sua-conta` pelo subdomínio que você usa para abrir o CRM: ```bash curl \"https://sua-conta.platform-api.magnetcustomer.com/api/deals?page=1&limit=15\" \\ -H \"Authorization: Bearer SEU_TOKEN\" ``` Requisições com corpo levam também `Content-Type: application/json`. # Convenções ## Paginação Envie sempre `page`. Com ele, toda listagem devolve o mesmo envelope: ```json { \"docs\": [], \"total\": 132, \"pages\": 9, \"page\": 1, \"limit\": 15 } ``` | Parâmetro | Padrão | Descrição | |---|---|---| | `page` | — | Página, a partir de 1. **Obrigatório na prática** | | `limit` | 15 | Registros por página. Máximo 100: acima disso a API usa 100 | | `sortBy` | varia por recurso | Campo de ordenação | | `sortType` | `desc` | `asc` ou `desc` | | `search` | — | Busca textual, quando o recurso aceita | Sem `page`, algumas listagens (Contatos, Pipelines, Campos personalizados e os cadastros de apoio, como tipos e situações) devolvem uma lista simples (`[...]`), sem o envelope, e ignoram `limit`. Para percorrer tudo, peça `page=1` e avance até `page` ser igual a `pages`. Uma página além do fim devolve `docs` vazio. O tamanho de página padrão é 15, com duas exceções: 25 em Leads, Prospects e Clientes, e 100 em Usuários. Um `limit` inválido cai no padrão. ## Identificadores e datas Todo ID é um texto de 24 caracteres hexadecimais, como `507f1f77bcf86cd799439011`. Ao gravar, envie a referência como **ID em texto** — nunca o objeto. Um ID fora desse formato hoje é respondido com `500`, não `400`: valide o formato antes de enviar. No corpo e nas respostas, datas são ISO 8601 em UTC, como `2026-05-15T10:00:00Z`. Nos filtros de data da URL (`minDate`, `createdAt_minDate`, `dateOfExpires_minDate`...), envie um **timestamp em milissegundos**, como `1798761600000`. ## Listas na URL Filtros que aceitam vários valores levam colchetes no nome, mesmo quando o valor é um só: ``` /api/contacts?page=1&staffs[]=507f191e810c19729de860eb&staffs[]=507f191e810c19729de860ec ``` Sem colchetes, um valor único é recusado com erro em parte das listagens. ## Campos ausentes Campo sem valor costuma vir **ausente** da resposta, não como `null`. Trate a falta da chave como vazio. ## Campos personalizados Os campos criados pelo administrador da conta vão na lista `customFields`: ```json { \"customFields\": [ { \"customField\": \"507f1f77bcf86cd799439014\", \"k\": \"segmento\", \"v\": \"Tecnologia\" } ] } ``` O valor vai em **`v`**. Um item com `value` é aceito sem erro, mas o campo fica vazio. Descubra os campos e os IDs com `GET /api/customfields?page=1&feature=deal` (troque `deal` por `meeting`, `task`, `contact`...). Com `&required=true` vêm só os obrigatórios da conta. ## Erros ```json { \"reason\": \"Missing required parameters\", \"message\": \"Missing required parameters\", \"code\": \"VALIDATION_ERROR\", \"errors\": [ { \"field\": \"title\", \"message\": \"must NOT have fewer than 1 characters\", \"keyword\": \"minLength\" } ] } ``` | Status | Quando | |---|---| | `400` | Corpo inválido: campo obrigatório ausente, tipo errado, valor fora da lista | | `401` | Token ausente, inválido ou vencido. Corpo: `{\"reason\": \"Access Denied\"}` | | `403` | O Service Account não tem a permissão da rota (`type: SA_PERMISSION_DENIED`, com `requiredPermission`) | | `404` | Registro não encontrado | | `409` | O registro não está no estado que a operação exige | | `429` | Limite de requisições excedido. Espere o tempo de `Retry-After` | ## Permissões Um Service Account só chama as rotas que as permissões dele liberam. Cada operação desta referência informa a permissão exigida, quando há uma: marque-a ao criar o Service Account. Uma chamada sem a permissão devolve `403` com o nome dela em `requiredPermission`. Rotas de administração da conta (usuários, perfis, criação de webhooks, configurações) exigem um usuário administrador e não estão disponíveis para Service Accounts; por isso não aparecem aqui. ## Limite de requisições Os limites são aplicados por conta. Ao receber `429`, espere os segundos indicados em `Retry-After` e tente de novo com intervalo crescente. ## Área de trabalho Em contas com áreas de trabalho, a API define a área do registro pela credencial ou pelo registro pai. Não envie `workspace`. # Webhooks Para ser avisado quando algo muda no CRM, em vez de consultar a API de tempos em tempos, use webhooks. Um administrador cria o webhook no CRM, em **Integrações › Webhooks**, informando a URL do seu sistema e os eventos. A lista de eventos está em `GET /api/webhooks/triggers`; o formato da entrega, a assinatura e os reenvios estão na seção Webhooks do portal. # Cobertura Esta referência cobre Contatos (leads, prospects e clientes), Empresas, Oportunidades, Pipelines, etapas e motivos de perda, Jornadas, Reuniões, Tarefas, Observações, Tickets, Atendimentos, Usuários, Equipes, Áreas de trabalho, Campos personalizados e os eventos de webhook.
7
7
  *
8
8
  * The version of the OpenAPI document: 2026-11
9
9
  * Contact: suporte@magnetcustomer.com
@@ -67,7 +67,7 @@ const DealsApiAxiosParamCreator = function (configuration) {
67
67
  };
68
68
  },
69
69
  /**
70
- * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`.
70
+ * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`. **Permissão do Service Account:** `deals.create`
71
71
  * @summary Criar oportunidade
72
72
  * @param {DealCreate} dealCreate
73
73
  * @param {string} [idempotencyKey] Chave única da operação (UUID). Repita a mesma chave nas novas tentativas.
@@ -105,7 +105,7 @@ const DealsApiAxiosParamCreator = function (configuration) {
105
105
  };
106
106
  },
107
107
  /**
108
- * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas.
108
+ * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas. **Permissão do Service Account:** `deals.delete`
109
109
  * @summary Excluir oportunidade
110
110
  * @param {string} id ID do registro.
111
111
  * @param {*} [options] Override http request option.
@@ -138,7 +138,7 @@ const DealsApiAxiosParamCreator = function (configuration) {
138
138
  };
139
139
  },
140
140
  /**
141
- * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo.
141
+ * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo. **Permissão do Service Account:** `deals.read`
142
142
  * @summary Obter oportunidade
143
143
  * @param {string} id ID do registro.
144
144
  * @param {*} [options] Override http request option.
@@ -204,7 +204,7 @@ const DealsApiAxiosParamCreator = function (configuration) {
204
204
  };
205
205
  },
206
206
  /**
207
- * Ordenação padrão: `createdAt` decrescente.
207
+ * Ordenação padrão: `createdAt` decrescente. **Permissão do Service Account:** `deals.list`
208
208
  * @summary Listar oportunidades
209
209
  * @param {number} [page] Página, a partir de 1. **Envie sempre**: sem `page`, a resposta vem como lista simples, sem o envelope de paginação, e `limit` é ignorado.
210
210
  * @param {number} [limit] Registros por página. Padrão: 15, salvo indicação na operação. Máximo: 100 — acima disso a API usa 100.
@@ -214,8 +214,8 @@ const DealsApiAxiosParamCreator = function (configuration) {
214
214
  * @param {string} [stage] ID da etapa.
215
215
  * @param {string} [contact] ID do contato.
216
216
  * @param {string} [organization] ID da empresa.
217
- * @param {Array<string>} [staffs] Usuários: busca em responsável, participantes e observadores. Repita o parâmetro para enviar vários (&#x60;?staffs&#x3D;id1&amp;staffs&#x3D;id2&#x60;).
218
- * @param {Array<string>} [contacts] Vários contatos. Repita o parâmetro para enviar vários (&#x60;?contacts&#x3D;id1&amp;contacts&#x3D;id2&#x60;).
217
+ * @param {Array<string>} [staffs] Usuários: busca em responsável, participantes e observadores. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?staffs[]&#x3D;id1&amp;staffs[]&#x3D;id2&#x60;).
218
+ * @param {Array<string>} [contacts] Vários contatos. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?contacts[]&#x3D;id1&amp;contacts[]&#x3D;id2&#x60;).
219
219
  * @param {number} [minDate] Fechamento previsto (&#x60;expectedCloseDate&#x60;) a partir de. Timestamp em milissegundos, não data ISO.
220
220
  * @param {number} [maxDate] Fechamento previsto até. Timestamp em milissegundos.
221
221
  * @param {string} [search] Busca em título, nome e e-mail do contato.
@@ -261,10 +261,10 @@ const DealsApiAxiosParamCreator = function (configuration) {
261
261
  localVarQueryParameter['organization'] = organization;
262
262
  }
263
263
  if (staffs) {
264
- localVarQueryParameter['staffs'] = staffs;
264
+ localVarQueryParameter['staffs[]'] = staffs;
265
265
  }
266
266
  if (contacts) {
267
- localVarQueryParameter['contacts'] = contacts;
267
+ localVarQueryParameter['contacts[]'] = contacts;
268
268
  }
269
269
  if (minDate !== undefined) {
270
270
  localVarQueryParameter['minDate'] = minDate;
@@ -359,7 +359,7 @@ const DealsApiAxiosParamCreator = function (configuration) {
359
359
  };
360
360
  },
361
361
  /**
362
- * Envie só os campos que mudam.
362
+ * Envie só os campos que mudam. **Permissão do Service Account:** `deals.update`
363
363
  * @summary Atualizar oportunidade
364
364
  * @param {string} id ID do registro.
365
365
  * @param {DealInput} dealInput
@@ -453,7 +453,7 @@ const DealsApiFp = function (configuration) {
453
453
  return (axios, basePath) => (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
454
454
  },
455
455
  /**
456
- * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`.
456
+ * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`. **Permissão do Service Account:** `deals.create`
457
457
  * @summary Criar oportunidade
458
458
  * @param {DealCreate} dealCreate
459
459
  * @param {string} [idempotencyKey] Chave única da operação (UUID). Repita a mesma chave nas novas tentativas.
@@ -467,7 +467,7 @@ const DealsApiFp = function (configuration) {
467
467
  return (axios, basePath) => (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
468
468
  },
469
469
  /**
470
- * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas.
470
+ * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas. **Permissão do Service Account:** `deals.delete`
471
471
  * @summary Excluir oportunidade
472
472
  * @param {string} id ID do registro.
473
473
  * @param {*} [options] Override http request option.
@@ -480,7 +480,7 @@ const DealsApiFp = function (configuration) {
480
480
  return (axios, basePath) => (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
481
481
  },
482
482
  /**
483
- * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo.
483
+ * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo. **Permissão do Service Account:** `deals.read`
484
484
  * @summary Obter oportunidade
485
485
  * @param {string} id ID do registro.
486
486
  * @param {*} [options] Override http request option.
@@ -506,7 +506,7 @@ const DealsApiFp = function (configuration) {
506
506
  return (axios, basePath) => (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
507
507
  },
508
508
  /**
509
- * Ordenação padrão: `createdAt` decrescente.
509
+ * Ordenação padrão: `createdAt` decrescente. **Permissão do Service Account:** `deals.list`
510
510
  * @summary Listar oportunidades
511
511
  * @param {number} [page] Página, a partir de 1. **Envie sempre**: sem &#x60;page&#x60;, a resposta vem como lista simples, sem o envelope de paginação, e &#x60;limit&#x60; é ignorado.
512
512
  * @param {number} [limit] Registros por página. Padrão: 15, salvo indicação na operação. Máximo: 100 — acima disso a API usa 100.
@@ -516,8 +516,8 @@ const DealsApiFp = function (configuration) {
516
516
  * @param {string} [stage] ID da etapa.
517
517
  * @param {string} [contact] ID do contato.
518
518
  * @param {string} [organization] ID da empresa.
519
- * @param {Array<string>} [staffs] Usuários: busca em responsável, participantes e observadores. Repita o parâmetro para enviar vários (&#x60;?staffs&#x3D;id1&amp;staffs&#x3D;id2&#x60;).
520
- * @param {Array<string>} [contacts] Vários contatos. Repita o parâmetro para enviar vários (&#x60;?contacts&#x3D;id1&amp;contacts&#x3D;id2&#x60;).
519
+ * @param {Array<string>} [staffs] Usuários: busca em responsável, participantes e observadores. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?staffs[]&#x3D;id1&amp;staffs[]&#x3D;id2&#x60;).
520
+ * @param {Array<string>} [contacts] Vários contatos. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?contacts[]&#x3D;id1&amp;contacts[]&#x3D;id2&#x60;).
521
521
  * @param {number} [minDate] Fechamento previsto (&#x60;expectedCloseDate&#x60;) a partir de. Timestamp em milissegundos, não data ISO.
522
522
  * @param {number} [maxDate] Fechamento previsto até. Timestamp em milissegundos.
523
523
  * @param {string} [search] Busca em título, nome e e-mail do contato.
@@ -559,7 +559,7 @@ const DealsApiFp = function (configuration) {
559
559
  return (axios, basePath) => (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
560
560
  },
561
561
  /**
562
- * Envie só os campos que mudam.
562
+ * Envie só os campos que mudam. **Permissão do Service Account:** `deals.update`
563
563
  * @summary Atualizar oportunidade
564
564
  * @param {string} id ID do registro.
565
565
  * @param {DealInput} dealInput
@@ -605,7 +605,7 @@ const DealsApiFactory = function (configuration, basePath, axios) {
605
605
  return localVarFp.closeDeal(requestParameters.id, requestParameters.closeDealRequest, options).then((request) => request(axios, basePath));
606
606
  },
607
607
  /**
608
- * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`.
608
+ * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`. **Permissão do Service Account:** `deals.create`
609
609
  * @summary Criar oportunidade
610
610
  * @param {DealsApiCreateDealRequest} requestParameters Request parameters.
611
611
  * @param {*} [options] Override http request option.
@@ -615,7 +615,7 @@ const DealsApiFactory = function (configuration, basePath, axios) {
615
615
  return localVarFp.createDeal(requestParameters.dealCreate, requestParameters.idempotencyKey, options).then((request) => request(axios, basePath));
616
616
  },
617
617
  /**
618
- * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas.
618
+ * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas. **Permissão do Service Account:** `deals.delete`
619
619
  * @summary Excluir oportunidade
620
620
  * @param {DealsApiDeleteDealRequest} requestParameters Request parameters.
621
621
  * @param {*} [options] Override http request option.
@@ -625,7 +625,7 @@ const DealsApiFactory = function (configuration, basePath, axios) {
625
625
  return localVarFp.deleteDeal(requestParameters.id, options).then((request) => request(axios, basePath));
626
626
  },
627
627
  /**
628
- * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo.
628
+ * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo. **Permissão do Service Account:** `deals.read`
629
629
  * @summary Obter oportunidade
630
630
  * @param {DealsApiGetDealRequest} requestParameters Request parameters.
631
631
  * @param {*} [options] Override http request option.
@@ -645,7 +645,7 @@ const DealsApiFactory = function (configuration, basePath, axios) {
645
645
  return localVarFp.getDealStageHistory(requestParameters.id, options).then((request) => request(axios, basePath));
646
646
  },
647
647
  /**
648
- * Ordenação padrão: `createdAt` decrescente.
648
+ * Ordenação padrão: `createdAt` decrescente. **Permissão do Service Account:** `deals.list`
649
649
  * @summary Listar oportunidades
650
650
  * @param {DealsApiListDealsRequest} requestParameters Request parameters.
651
651
  * @param {*} [options] Override http request option.
@@ -675,7 +675,7 @@ const DealsApiFactory = function (configuration, basePath, axios) {
675
675
  return localVarFp.reopenDeal(requestParameters.id, requestParameters.reopenDealRequest, options).then((request) => request(axios, basePath));
676
676
  },
677
677
  /**
678
- * Envie só os campos que mudam.
678
+ * Envie só os campos que mudam. **Permissão do Service Account:** `deals.update`
679
679
  * @summary Atualizar oportunidade
680
680
  * @param {DealsApiUpdateDealRequest} requestParameters Request parameters.
681
681
  * @param {*} [options] Override http request option.
@@ -712,7 +712,7 @@ class DealsApi extends base_1.BaseAPI {
712
712
  return (0, exports.DealsApiFp)(this.configuration).closeDeal(requestParameters.id, requestParameters.closeDealRequest, options).then((request) => request(this.axios, this.basePath));
713
713
  }
714
714
  /**
715
- * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`.
715
+ * Se `staff` não for enviado, a API usa o usuário da credencial. A criação é idempotente por 5 minutos: reenviar o mesmo corpo não duplica o registro. Para controlar a chave, envie o cabeçalho `Idempotency-Key`. **Permissão do Service Account:** `deals.create`
716
716
  * @summary Criar oportunidade
717
717
  * @param {DealsApiCreateDealRequest} requestParameters Request parameters.
718
718
  * @param {*} [options] Override http request option.
@@ -722,7 +722,7 @@ class DealsApi extends base_1.BaseAPI {
722
722
  return (0, exports.DealsApiFp)(this.configuration).createDeal(requestParameters.dealCreate, requestParameters.idempotencyKey, options).then((request) => request(this.axios, this.basePath));
723
723
  }
724
724
  /**
725
- * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas.
725
+ * Exclusão lógica (`active: false`). Responde `400` com `code: DEAL_HAS_LINKED_JOURNEYS` se houver jornadas ativas vinculadas. **Permissão do Service Account:** `deals.delete`
726
726
  * @summary Excluir oportunidade
727
727
  * @param {DealsApiDeleteDealRequest} requestParameters Request parameters.
728
728
  * @param {*} [options] Override http request option.
@@ -732,7 +732,7 @@ class DealsApi extends base_1.BaseAPI {
732
732
  return (0, exports.DealsApiFp)(this.configuration).deleteDeal(requestParameters.id, options).then((request) => request(this.axios, this.basePath));
733
733
  }
734
734
  /**
735
- * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo.
735
+ * No detalhe, `pipeline` vem como objeto (`_id`, `title`) e `contact` vem com o cadastro completo. **Permissão do Service Account:** `deals.read`
736
736
  * @summary Obter oportunidade
737
737
  * @param {DealsApiGetDealRequest} requestParameters Request parameters.
738
738
  * @param {*} [options] Override http request option.
@@ -752,7 +752,7 @@ class DealsApi extends base_1.BaseAPI {
752
752
  return (0, exports.DealsApiFp)(this.configuration).getDealStageHistory(requestParameters.id, options).then((request) => request(this.axios, this.basePath));
753
753
  }
754
754
  /**
755
- * Ordenação padrão: `createdAt` decrescente.
755
+ * Ordenação padrão: `createdAt` decrescente. **Permissão do Service Account:** `deals.list`
756
756
  * @summary Listar oportunidades
757
757
  * @param {DealsApiListDealsRequest} requestParameters Request parameters.
758
758
  * @param {*} [options] Override http request option.
@@ -782,7 +782,7 @@ class DealsApi extends base_1.BaseAPI {
782
782
  return (0, exports.DealsApiFp)(this.configuration).reopenDeal(requestParameters.id, requestParameters.reopenDealRequest, options).then((request) => request(this.axios, this.basePath));
783
783
  }
784
784
  /**
785
- * Envie só os campos que mudam.
785
+ * Envie só os campos que mudam. **Permissão do Service Account:** `deals.update`
786
786
  * @summary Atualizar oportunidade
787
787
  * @param {DealsApiUpdateDealRequest} requestParameters Request parameters.
788
788
  * @param {*} [options] Override http request option.
@@ -0,0 +1,232 @@
1
+ /**
2
+ * API da Magnet Customer
3
+ * A API REST da Magnet Customer permite ler e gravar os registros do CRM a partir dos seus sistemas. # Comece aqui ## 1. Crie um Service Account No CRM, abra **Configurações › Service Accounts** (apenas administradores), clique em **Novo service account**, escolha a validade e as permissões, e copie o **Client ID** e o **Client Secret**. O secret aparece uma única vez. ## 2. Solicite um token ```bash curl -X POST https://magnetcustomer.net/realms/platform/protocol/openid-connect/token \\ -H \"Content-Type: application/x-www-form-urlencoded\" \\ -d \"grant_type=client_credentials\" \\ -d \"client_id=SEU_CLIENT_ID\" \\ -d \"client_secret=SEU_CLIENT_SECRET\" ``` ```json { \"access_token\": \"eyJhbGciOiJSUzI1NiIs...\", \"expires_in\": 900, \"token_type\": \"Bearer\" } ``` O token vale 15 minutos e este fluxo não tem refresh token: quando vencer, ou ao receber `401`, repita o pedido. ## 3. Chame a API Cada conta tem o seu endereço. Troque `sua-conta` pelo subdomínio que você usa para abrir o CRM: ```bash curl \"https://sua-conta.platform-api.magnetcustomer.com/api/deals?page=1&limit=15\" \\ -H \"Authorization: Bearer SEU_TOKEN\" ``` Requisições com corpo levam também `Content-Type: application/json`. # Convenções ## Paginação Envie sempre `page`. Com ele, toda listagem devolve o mesmo envelope: ```json { \"docs\": [], \"total\": 132, \"pages\": 9, \"page\": 1, \"limit\": 15 } ``` | Parâmetro | Padrão | Descrição | |---|---|---| | `page` | — | Página, a partir de 1. **Obrigatório na prática** | | `limit` | 15 | Registros por página. Máximo 100: acima disso a API usa 100 | | `sortBy` | varia por recurso | Campo de ordenação | | `sortType` | `desc` | `asc` ou `desc` | | `search` | — | Busca textual, quando o recurso aceita | Sem `page`, algumas listagens (Contatos, Pipelines, Campos personalizados e os cadastros de apoio, como tipos e situações) devolvem uma lista simples (`[...]`), sem o envelope, e ignoram `limit`. Para percorrer tudo, peça `page=1` e avance até `page` ser igual a `pages`. Uma página além do fim devolve `docs` vazio. O tamanho de página padrão é 15, com duas exceções: 25 em Leads, Prospects e Clientes, e 100 em Usuários. Um `limit` inválido cai no padrão. ## Identificadores e datas Todo ID é um texto de 24 caracteres hexadecimais, como `507f1f77bcf86cd799439011`. Ao gravar, envie a referência como **ID em texto** — nunca o objeto. Um ID fora desse formato hoje é respondido com `500`, não `400`: valide o formato antes de enviar. No corpo e nas respostas, datas são ISO 8601 em UTC, como `2026-05-15T10:00:00Z`. Nos filtros de data da URL (`minDate`, `createdAt_minDate`, `dateOfExpires_minDate`...), envie um **timestamp em milissegundos**, como `1798761600000`. ## Listas na URL Filtros que aceitam vários valores levam colchetes no nome, mesmo quando o valor é um só: ``` /api/contacts?page=1&staffs[]=507f191e810c19729de860eb&staffs[]=507f191e810c19729de860ec ``` Sem colchetes, um valor único é recusado com erro em parte das listagens. ## Campos ausentes Campo sem valor costuma vir **ausente** da resposta, não como `null`. Trate a falta da chave como vazio. ## Campos personalizados Os campos criados pelo administrador da conta vão na lista `customFields`: ```json { \"customFields\": [ { \"customField\": \"507f1f77bcf86cd799439014\", \"k\": \"segmento\", \"v\": \"Tecnologia\" } ] } ``` O valor vai em **`v`**. Um item com `value` é aceito sem erro, mas o campo fica vazio. Descubra os campos e os IDs com `GET /api/customfields?page=1&feature=deal` (troque `deal` por `meeting`, `task`, `contact`...). Com `&required=true` vêm só os obrigatórios da conta. ## Erros ```json { \"reason\": \"Missing required parameters\", \"message\": \"Missing required parameters\", \"code\": \"VALIDATION_ERROR\", \"errors\": [ { \"field\": \"title\", \"message\": \"must NOT have fewer than 1 characters\", \"keyword\": \"minLength\" } ] } ``` | Status | Quando | |---|---| | `400` | Corpo inválido: campo obrigatório ausente, tipo errado, valor fora da lista | | `401` | Token ausente, inválido ou vencido. Corpo: `{\"reason\": \"Access Denied\"}` | | `403` | O Service Account não tem a permissão da rota (`type: SA_PERMISSION_DENIED`, com `requiredPermission`) | | `404` | Registro não encontrado | | `409` | O registro não está no estado que a operação exige | | `429` | Limite de requisições excedido. Espere o tempo de `Retry-After` | ## Permissões Um Service Account só chama as rotas que as permissões dele liberam. Cada operação desta referência informa a permissão exigida, quando há uma: marque-a ao criar o Service Account. Uma chamada sem a permissão devolve `403` com o nome dela em `requiredPermission`. Rotas de administração da conta (usuários, perfis, criação de webhooks, configurações) exigem um usuário administrador e não estão disponíveis para Service Accounts; por isso não aparecem aqui. ## Limite de requisições Os limites são aplicados por conta. Ao receber `429`, espere os segundos indicados em `Retry-After` e tente de novo com intervalo crescente. ## Área de trabalho Em contas com áreas de trabalho, a API define a área do registro pela credencial ou pelo registro pai. Não envie `workspace`. # Webhooks Para ser avisado quando algo muda no CRM, em vez de consultar a API de tempos em tempos, use webhooks. Um administrador cria o webhook no CRM, em **Integrações › Webhooks**, informando a URL do seu sistema e os eventos. A lista de eventos está em `GET /api/webhooks/triggers`; o formato da entrega, a assinatura e os reenvios estão na seção Webhooks do portal. # Cobertura Esta referência cobre Contatos (leads, prospects e clientes), Empresas, Oportunidades, Pipelines, etapas e motivos de perda, Jornadas, Reuniões, Tarefas, Observações, Tickets, Atendimentos, Usuários, Equipes, Áreas de trabalho, Campos personalizados e os eventos de webhook.
4
+ *
5
+ * The version of the OpenAPI document: 2026-11
6
+ * Contact: suporte@magnetcustomer.com
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ import type { Configuration } from '../configuration';
13
+ import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
14
+ import { type RequestArgs, BaseAPI } from '../base';
15
+ import type { GetJourneyHealthScore200Response } from '../models';
16
+ import type { Journey } from '../models';
17
+ import type { ListJourneys200Response } from '../models';
18
+ /**
19
+ * JourneysApi - axios parameter creator
20
+ */
21
+ export declare const JourneysApiAxiosParamCreator: (configuration?: Configuration) => {
22
+ /**
23
+ * **Permissão do Service Account:** `journeys.read`
24
+ * @summary Obter jornada
25
+ * @param {string} id ID do registro.
26
+ * @param {*} [options] Override http request option.
27
+ * @throws {RequiredError}
28
+ */
29
+ getJourney: (id: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
30
+ /**
31
+ * Devolve o valor em vigor, o valor calculado e os componentes do cálculo.
32
+ * @summary Obter health score da jornada
33
+ * @param {string} id ID do registro.
34
+ * @param {*} [options] Override http request option.
35
+ * @throws {RequiredError}
36
+ */
37
+ getJourneyHealthScore: (id: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
38
+ /**
39
+ * **Permissão do Service Account:** `journeys.list`
40
+ * @summary Listar jornadas
41
+ * @param {number} [page] Página, a partir de 1. **Envie sempre**: sem &#x60;page&#x60;, a resposta vem como lista simples, sem o envelope de paginação, e &#x60;limit&#x60; é ignorado.
42
+ * @param {number} [limit] Registros por página. Padrão: 15, salvo indicação na operação. Máximo: 100 — acima disso a API usa 100.
43
+ * @param {ListJourneysStatusEnum} [status] Situação.
44
+ * @param {string} [journeyFlow] ID do fluxo de jornada.
45
+ * @param {string} [phase] ID da fase.
46
+ * @param {Array<string>} [staffs] Responsáveis. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?staffs[]&#x3D;id1&amp;staffs[]&#x3D;id2&#x60;).
47
+ * @param {string} [contact] ID do contato.
48
+ * @param {string} [organization] ID da empresa.
49
+ * @param {string} [sourceDeal] ID da oportunidade de origem.
50
+ * @param {number} [healthScoreMin] Health score mínimo.
51
+ * @param {number} [healthScoreMax] Health score máximo.
52
+ * @param {string} [search] Busca no título.
53
+ * @param {*} [options] Override http request option.
54
+ * @throws {RequiredError}
55
+ */
56
+ listJourneys: (page?: number, limit?: number, status?: ListJourneysStatusEnum, journeyFlow?: string, phase?: string, staffs?: Array<string>, contact?: string, organization?: string, sourceDeal?: string, healthScoreMin?: number, healthScoreMax?: number, search?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
57
+ };
58
+ /**
59
+ * JourneysApi - functional programming interface
60
+ */
61
+ export declare const JourneysApiFp: (configuration?: Configuration) => {
62
+ /**
63
+ * **Permissão do Service Account:** `journeys.read`
64
+ * @summary Obter jornada
65
+ * @param {string} id ID do registro.
66
+ * @param {*} [options] Override http request option.
67
+ * @throws {RequiredError}
68
+ */
69
+ getJourney(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Journey>>;
70
+ /**
71
+ * Devolve o valor em vigor, o valor calculado e os componentes do cálculo.
72
+ * @summary Obter health score da jornada
73
+ * @param {string} id ID do registro.
74
+ * @param {*} [options] Override http request option.
75
+ * @throws {RequiredError}
76
+ */
77
+ getJourneyHealthScore(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetJourneyHealthScore200Response>>;
78
+ /**
79
+ * **Permissão do Service Account:** `journeys.list`
80
+ * @summary Listar jornadas
81
+ * @param {number} [page] Página, a partir de 1. **Envie sempre**: sem &#x60;page&#x60;, a resposta vem como lista simples, sem o envelope de paginação, e &#x60;limit&#x60; é ignorado.
82
+ * @param {number} [limit] Registros por página. Padrão: 15, salvo indicação na operação. Máximo: 100 — acima disso a API usa 100.
83
+ * @param {ListJourneysStatusEnum} [status] Situação.
84
+ * @param {string} [journeyFlow] ID do fluxo de jornada.
85
+ * @param {string} [phase] ID da fase.
86
+ * @param {Array<string>} [staffs] Responsáveis. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?staffs[]&#x3D;id1&amp;staffs[]&#x3D;id2&#x60;).
87
+ * @param {string} [contact] ID do contato.
88
+ * @param {string} [organization] ID da empresa.
89
+ * @param {string} [sourceDeal] ID da oportunidade de origem.
90
+ * @param {number} [healthScoreMin] Health score mínimo.
91
+ * @param {number} [healthScoreMax] Health score máximo.
92
+ * @param {string} [search] Busca no título.
93
+ * @param {*} [options] Override http request option.
94
+ * @throws {RequiredError}
95
+ */
96
+ listJourneys(page?: number, limit?: number, status?: ListJourneysStatusEnum, journeyFlow?: string, phase?: string, staffs?: Array<string>, contact?: string, organization?: string, sourceDeal?: string, healthScoreMin?: number, healthScoreMax?: number, search?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListJourneys200Response>>;
97
+ };
98
+ /**
99
+ * JourneysApi - factory interface
100
+ */
101
+ export declare const JourneysApiFactory: (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) => {
102
+ /**
103
+ * **Permissão do Service Account:** `journeys.read`
104
+ * @summary Obter jornada
105
+ * @param {JourneysApiGetJourneyRequest} requestParameters Request parameters.
106
+ * @param {*} [options] Override http request option.
107
+ * @throws {RequiredError}
108
+ */
109
+ getJourney(requestParameters: JourneysApiGetJourneyRequest, options?: RawAxiosRequestConfig): AxiosPromise<Journey>;
110
+ /**
111
+ * Devolve o valor em vigor, o valor calculado e os componentes do cálculo.
112
+ * @summary Obter health score da jornada
113
+ * @param {JourneysApiGetJourneyHealthScoreRequest} requestParameters Request parameters.
114
+ * @param {*} [options] Override http request option.
115
+ * @throws {RequiredError}
116
+ */
117
+ getJourneyHealthScore(requestParameters: JourneysApiGetJourneyHealthScoreRequest, options?: RawAxiosRequestConfig): AxiosPromise<GetJourneyHealthScore200Response>;
118
+ /**
119
+ * **Permissão do Service Account:** `journeys.list`
120
+ * @summary Listar jornadas
121
+ * @param {JourneysApiListJourneysRequest} requestParameters Request parameters.
122
+ * @param {*} [options] Override http request option.
123
+ * @throws {RequiredError}
124
+ */
125
+ listJourneys(requestParameters?: JourneysApiListJourneysRequest, options?: RawAxiosRequestConfig): AxiosPromise<ListJourneys200Response>;
126
+ };
127
+ /**
128
+ * Request parameters for getJourney operation in JourneysApi.
129
+ */
130
+ export interface JourneysApiGetJourneyRequest {
131
+ /**
132
+ * ID do registro.
133
+ */
134
+ readonly id: string;
135
+ }
136
+ /**
137
+ * Request parameters for getJourneyHealthScore operation in JourneysApi.
138
+ */
139
+ export interface JourneysApiGetJourneyHealthScoreRequest {
140
+ /**
141
+ * ID do registro.
142
+ */
143
+ readonly id: string;
144
+ }
145
+ /**
146
+ * Request parameters for listJourneys operation in JourneysApi.
147
+ */
148
+ export interface JourneysApiListJourneysRequest {
149
+ /**
150
+ * Página, a partir de 1. **Envie sempre**: sem &#x60;page&#x60;, a resposta vem como lista simples, sem o envelope de paginação, e &#x60;limit&#x60; é ignorado.
151
+ */
152
+ readonly page?: number;
153
+ /**
154
+ * Registros por página. Padrão: 15, salvo indicação na operação. Máximo: 100 — acima disso a API usa 100.
155
+ */
156
+ readonly limit?: number;
157
+ /**
158
+ * Situação.
159
+ */
160
+ readonly status?: ListJourneysStatusEnum;
161
+ /**
162
+ * ID do fluxo de jornada.
163
+ */
164
+ readonly journeyFlow?: string;
165
+ /**
166
+ * ID da fase.
167
+ */
168
+ readonly phase?: string;
169
+ /**
170
+ * Responsáveis. Lista de IDs: envie com colchetes, mesmo para um só valor (&#x60;?staffs[]&#x3D;id1&amp;staffs[]&#x3D;id2&#x60;).
171
+ */
172
+ readonly staffs?: Array<string>;
173
+ /**
174
+ * ID do contato.
175
+ */
176
+ readonly contact?: string;
177
+ /**
178
+ * ID da empresa.
179
+ */
180
+ readonly organization?: string;
181
+ /**
182
+ * ID da oportunidade de origem.
183
+ */
184
+ readonly sourceDeal?: string;
185
+ /**
186
+ * Health score mínimo.
187
+ */
188
+ readonly healthScoreMin?: number;
189
+ /**
190
+ * Health score máximo.
191
+ */
192
+ readonly healthScoreMax?: number;
193
+ /**
194
+ * Busca no título.
195
+ */
196
+ readonly search?: string;
197
+ }
198
+ /**
199
+ * JourneysApi - object-oriented interface
200
+ */
201
+ export declare class JourneysApi extends BaseAPI {
202
+ /**
203
+ * **Permissão do Service Account:** `journeys.read`
204
+ * @summary Obter jornada
205
+ * @param {JourneysApiGetJourneyRequest} requestParameters Request parameters.
206
+ * @param {*} [options] Override http request option.
207
+ * @throws {RequiredError}
208
+ */
209
+ getJourney(requestParameters: JourneysApiGetJourneyRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<Journey, any, {}, any>>;
210
+ /**
211
+ * Devolve o valor em vigor, o valor calculado e os componentes do cálculo.
212
+ * @summary Obter health score da jornada
213
+ * @param {JourneysApiGetJourneyHealthScoreRequest} requestParameters Request parameters.
214
+ * @param {*} [options] Override http request option.
215
+ * @throws {RequiredError}
216
+ */
217
+ getJourneyHealthScore(requestParameters: JourneysApiGetJourneyHealthScoreRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetJourneyHealthScore200Response, any, {}, any>>;
218
+ /**
219
+ * **Permissão do Service Account:** `journeys.list`
220
+ * @summary Listar jornadas
221
+ * @param {JourneysApiListJourneysRequest} requestParameters Request parameters.
222
+ * @param {*} [options] Override http request option.
223
+ * @throws {RequiredError}
224
+ */
225
+ listJourneys(requestParameters?: JourneysApiListJourneysRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<import("../models").Page, any, {}, any>>;
226
+ }
227
+ export declare const ListJourneysStatusEnum: {
228
+ readonly active: "active";
229
+ readonly success: "success";
230
+ readonly churn: "churn";
231
+ };
232
+ export type ListJourneysStatusEnum = typeof ListJourneysStatusEnum[keyof typeof ListJourneysStatusEnum];