@epilot/sdk 2.20.81 → 2.20.83

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 (144) hide show
  1. package/definitions/phone-integration-runtime.json +1 -1
  2. package/definitions/phone-integration.json +117 -0
  3. package/definitions/targeting.json +77 -3
  4. package/dist/apis/access-token.cjs +6 -6
  5. package/dist/apis/access-token.js +1 -1
  6. package/dist/apis/address-suggestions.cjs +6 -6
  7. package/dist/apis/address-suggestions.js +1 -1
  8. package/dist/apis/address.cjs +6 -6
  9. package/dist/apis/address.js +1 -1
  10. package/dist/apis/ai-agents.cjs +6 -6
  11. package/dist/apis/ai-agents.js +1 -1
  12. package/dist/apis/app.cjs +6 -6
  13. package/dist/apis/app.js +1 -1
  14. package/dist/apis/audit-logs.cjs +6 -6
  15. package/dist/apis/audit-logs.js +1 -1
  16. package/dist/apis/automation.cjs +6 -6
  17. package/dist/apis/automation.js +1 -1
  18. package/dist/apis/billing.cjs +6 -6
  19. package/dist/apis/billing.js +1 -1
  20. package/dist/apis/blueprint-manifest.cjs +6 -6
  21. package/dist/apis/blueprint-manifest.js +1 -1
  22. package/dist/apis/calendar.cjs +6 -6
  23. package/dist/apis/calendar.js +1 -1
  24. package/dist/apis/chat.cjs +6 -6
  25. package/dist/apis/chat.js +1 -1
  26. package/dist/apis/configuration-hub.cjs +6 -6
  27. package/dist/apis/configuration-hub.js +1 -1
  28. package/dist/apis/consent.cjs +6 -6
  29. package/dist/apis/consent.js +1 -1
  30. package/dist/apis/customer-portal.cjs +6 -6
  31. package/dist/apis/customer-portal.js +1 -1
  32. package/dist/apis/dashboard.cjs +6 -6
  33. package/dist/apis/dashboard.js +1 -1
  34. package/dist/apis/data-governance.cjs +6 -6
  35. package/dist/apis/data-governance.js +1 -1
  36. package/dist/apis/deduplication.cjs +6 -6
  37. package/dist/apis/deduplication.js +1 -1
  38. package/dist/apis/design.cjs +6 -6
  39. package/dist/apis/design.js +1 -1
  40. package/dist/apis/document.cjs +6 -6
  41. package/dist/apis/document.js +1 -1
  42. package/dist/apis/email-settings.cjs +6 -6
  43. package/dist/apis/email-settings.js +1 -1
  44. package/dist/apis/email-template.cjs +6 -6
  45. package/dist/apis/email-template.js +1 -1
  46. package/dist/apis/entity-mapping.cjs +6 -6
  47. package/dist/apis/entity-mapping.js +1 -1
  48. package/dist/apis/entity.cjs +6 -6
  49. package/dist/apis/entity.js +1 -1
  50. package/dist/apis/environments.cjs +6 -6
  51. package/dist/apis/environments.js +1 -1
  52. package/dist/apis/event-catalog.cjs +6 -6
  53. package/dist/apis/event-catalog.js +1 -1
  54. package/dist/apis/external-values.cjs +6 -6
  55. package/dist/apis/external-values.js +1 -1
  56. package/dist/apis/file.cjs +6 -6
  57. package/dist/apis/file.js +1 -1
  58. package/dist/apis/iban.cjs +6 -6
  59. package/dist/apis/iban.js +1 -1
  60. package/dist/apis/identity.cjs +6 -6
  61. package/dist/apis/identity.js +1 -1
  62. package/dist/apis/integration-toolkit.cjs +6 -6
  63. package/dist/apis/integration-toolkit.js +1 -1
  64. package/dist/apis/journey.cjs +6 -6
  65. package/dist/apis/journey.js +1 -1
  66. package/dist/apis/kanban.cjs +6 -6
  67. package/dist/apis/kanban.js +1 -1
  68. package/dist/apis/message.cjs +6 -6
  69. package/dist/apis/message.js +1 -1
  70. package/dist/apis/metering.cjs +6 -6
  71. package/dist/apis/metering.js +1 -1
  72. package/dist/apis/notes.cjs +6 -6
  73. package/dist/apis/notes.js +1 -1
  74. package/dist/apis/notification.cjs +6 -6
  75. package/dist/apis/notification.js +1 -1
  76. package/dist/apis/organization.cjs +6 -6
  77. package/dist/apis/organization.js +1 -1
  78. package/dist/apis/partner-directory.cjs +6 -6
  79. package/dist/apis/partner-directory.js +1 -1
  80. package/dist/apis/permissions.cjs +6 -6
  81. package/dist/apis/permissions.js +1 -1
  82. package/dist/apis/phone-integration.cjs +8 -8
  83. package/dist/apis/phone-integration.d.cts +2 -2
  84. package/dist/apis/phone-integration.d.ts +2 -2
  85. package/dist/apis/phone-integration.js +2 -2
  86. package/dist/apis/pricing-tier.cjs +6 -6
  87. package/dist/apis/pricing-tier.js +1 -1
  88. package/dist/apis/pricing.cjs +6 -6
  89. package/dist/apis/pricing.js +1 -1
  90. package/dist/apis/purpose.cjs +6 -6
  91. package/dist/apis/purpose.js +1 -1
  92. package/dist/apis/query.cjs +6 -6
  93. package/dist/apis/query.js +1 -1
  94. package/dist/apis/sandbox.cjs +6 -6
  95. package/dist/apis/sandbox.js +1 -1
  96. package/dist/apis/sharing.cjs +6 -6
  97. package/dist/apis/sharing.js +1 -1
  98. package/dist/apis/snapshot.cjs +6 -6
  99. package/dist/apis/snapshot.js +1 -1
  100. package/dist/apis/submission.cjs +6 -6
  101. package/dist/apis/submission.js +1 -1
  102. package/dist/apis/target.cjs +6 -6
  103. package/dist/apis/target.js +1 -1
  104. package/dist/apis/targeting.cjs +6 -6
  105. package/dist/apis/targeting.d.cts +2 -2
  106. package/dist/apis/targeting.d.ts +2 -2
  107. package/dist/apis/targeting.js +1 -1
  108. package/dist/apis/template-variables.cjs +6 -6
  109. package/dist/apis/template-variables.js +1 -1
  110. package/dist/apis/user.cjs +6 -6
  111. package/dist/apis/user.js +1 -1
  112. package/dist/apis/validation-rules.cjs +6 -6
  113. package/dist/apis/validation-rules.js +1 -1
  114. package/dist/apis/webhooks.cjs +6 -6
  115. package/dist/apis/webhooks.js +1 -1
  116. package/dist/apis/workflow-definition.cjs +6 -6
  117. package/dist/apis/workflow-definition.js +1 -1
  118. package/dist/apis/workflow.cjs +6 -6
  119. package/dist/apis/workflow.js +1 -1
  120. package/dist/{chunk-2PFXDXXZ.js → chunk-HFBZFYTU.js} +3 -3
  121. package/dist/{chunk-3PQISQCY.cjs → chunk-KGIFSOWS.cjs} +3 -3
  122. package/dist/{chunk-XPQ7LBUE.cjs → chunk-NHA2IXWN.cjs} +1 -1
  123. package/dist/{chunk-JFRRQORA.js → chunk-QFTXKO2I.js} +1 -1
  124. package/dist/index.cjs +10 -10
  125. package/dist/index.d.cts +2 -2
  126. package/dist/index.d.ts +2 -2
  127. package/dist/index.js +2 -2
  128. package/dist/phone-integration-ARSGAHNJ.cjs +7 -0
  129. package/dist/phone-integration-MGH7LYID.js +7 -0
  130. package/dist/{phone-integration-runtime-JWF52VHF.js → phone-integration-runtime-5VAA6Q4L.js} +1 -1
  131. package/dist/{phone-integration-runtime-3QDC5IMK.cjs → phone-integration-runtime-7PWKKUBM.cjs} +2 -2
  132. package/dist/{phone-integration.d-DJrZ4xkA.d.cts → phone-integration.d-BNqwHuQ6.d.cts} +85 -1
  133. package/dist/{phone-integration.d-DJrZ4xkA.d.ts → phone-integration.d-BNqwHuQ6.d.ts} +85 -1
  134. package/dist/targeting-C4H6GCPJ.cjs +7 -0
  135. package/dist/targeting-PPD4TUSO.js +7 -0
  136. package/dist/{targeting.d-BYVSahmV.d.cts → targeting.d-ZvHqD3kC.d.cts} +85 -2
  137. package/dist/{targeting.d-BYVSahmV.d.ts → targeting.d-ZvHqD3kC.d.ts} +85 -2
  138. package/docs/phone-integration.md +63 -0
  139. package/docs/targeting.md +94 -3
  140. package/package.json +1 -1
  141. package/dist/phone-integration-5EHY236F.js +0 -7
  142. package/dist/phone-integration-C567S75X.cjs +0 -7
  143. package/dist/targeting-2JCGF4IR.cjs +0 -7
  144. package/dist/targeting-2NHAG7B5.js +0 -7
package/docs/targeting.md CHANGED
@@ -66,6 +66,8 @@ const { data } = await targetingClient.changeCampaignStatus(...)
66
66
  - [`JobStatus`](#jobstatus)
67
67
  - [`Campaign`](#campaign)
68
68
  - [`Target`](#target)
69
+ - [`TargetEntityFilters`](#targetentityfilters)
70
+ - [`TargetSortItem`](#targetsortitem)
69
71
  - [`MatchCampaignParams`](#matchcampaignparams)
70
72
  - [`NextBestAction`](#nextbestaction)
71
73
  - [`DiscoverCampaignsParams`](#discovercampaignsparams)
@@ -305,6 +307,27 @@ const { data } = await client.setupCampaign(
305
307
  email: {
306
308
  automation_id: 'b8c01433-5556-4e2b-aad4-6f5348d1df84',
307
309
  template_id: 'b8c01433-5556-4e2b-aad4-6f5348d1df84'
310
+ },
311
+ entity_ui: {
312
+ category: 'string',
313
+ icon: {
314
+ name: 'string',
315
+ color: 'string'
316
+ },
317
+ title: 'string',
318
+ body: 'string',
319
+ priority: 'medium',
320
+ is_dismissable: true,
321
+ cta: {
322
+ type: 'journey',
323
+ target: 'string',
324
+ context_params: [
325
+ {
326
+ key: 'string',
327
+ value: 'string'
328
+ }
329
+ ]
330
+ }
308
331
  }
309
332
  }
310
333
  },
@@ -537,7 +560,17 @@ const { data } = await client.matchTargets(
537
560
  "name": "string",
538
561
  "description": "string",
539
562
  "entity_schema": "string",
540
- "entity_filters": {}
563
+ "entity_filters": {
564
+ "filter": {},
565
+ "search": "string",
566
+ "sort": [
567
+ {
568
+ "key": "billing_address.postal_code",
569
+ "order": "asc"
570
+ }
571
+ ],
572
+ "limit": 1
573
+ }
541
574
  }
542
575
  }
543
576
  ]
@@ -552,6 +585,7 @@ const { data } = await client.matchTargets(
552
585
 
553
586
  Transform target filters into Lucene queries for the provided target IDs.
554
587
  Returns the transformed query string for each target along with any errors encountered.
588
+ If the target defines a sort order or
555
589
 
556
590
  `POST /v1/target/queries`
557
591
 
@@ -573,7 +607,9 @@ const { data } = await client.getTargetQueries(
573
607
  {
574
608
  "target_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",
575
609
  "query": "string",
576
- "error": "string"
610
+ "error": "string",
611
+ "sort": ["billing_date:desc", "_title.keyword:asc", "_id:desc"],
612
+ "limit": 1
577
613
  }
578
614
  ]
579
615
  }
@@ -1218,7 +1254,42 @@ type Target = {
1218
1254
  name?: string
1219
1255
  description?: string
1220
1256
  entity_schema?: string
1221
- entity_filters?: Record<string, unknown>
1257
+ entity_filters?: {
1258
+ filter?: Record<string, unknown>
1259
+ search?: string
1260
+ sort?: Array<{
1261
+ key: { ... }
1262
+ order: { ... }
1263
+ }>
1264
+ limit?: number
1265
+ }
1266
+ }
1267
+ ```
1268
+
1269
+ ### `TargetEntityFilters`
1270
+
1271
+ Search state of the target. `filter` and `search` use the same shape as the search state of entity views.
1272
+ Besides the filters, it optionally defines the order and maximum number of results.
1273
+
1274
+
1275
+ ```ts
1276
+ type TargetEntityFilters = {
1277
+ filter?: Record<string, unknown>
1278
+ search?: string
1279
+ sort?: Array<{
1280
+ key: string
1281
+ order: "asc" | "desc"
1282
+ }>
1283
+ limit?: number
1284
+ }
1285
+ ```
1286
+
1287
+ ### `TargetSortItem`
1288
+
1289
+ ```ts
1290
+ type TargetSortItem = {
1291
+ key: string
1292
+ order: "asc" | "desc"
1222
1293
  }
1223
1294
  ```
1224
1295
 
@@ -1327,6 +1398,8 @@ type TargetQueryResult = {
1327
1398
  target_id: string // uuid
1328
1399
  query: string
1329
1400
  error?: string
1401
+ sort?: string[]
1402
+ limit?: number
1330
1403
  }
1331
1404
  ```
1332
1405
 
@@ -1541,6 +1614,15 @@ type SetupCampaignRequest = {
1541
1614
  automation_id?: { ... }
1542
1615
  template_id?: { ... }
1543
1616
  }
1617
+ entity_ui?: {
1618
+ category?: { ... }
1619
+ icon?: { ... }
1620
+ title: { ... }
1621
+ body?: { ... }
1622
+ priority?: { ... }
1623
+ is_dismissable?: { ... }
1624
+ cta: { ... }
1625
+ }
1544
1626
  }
1545
1627
  }
1546
1628
  ```
@@ -1576,6 +1658,15 @@ type SetupTariffChangeCampaignRequest = {
1576
1658
  automation_id?: { ... }
1577
1659
  template_id?: { ... }
1578
1660
  }
1661
+ entity_ui?: {
1662
+ category?: { ... }
1663
+ icon?: { ... }
1664
+ title: { ... }
1665
+ body?: { ... }
1666
+ priority?: { ... }
1667
+ is_dismissable?: { ... }
1668
+ cta: { ... }
1669
+ }
1579
1670
  }
1580
1671
  }
1581
1672
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/sdk",
3
- "version": "2.20.81",
3
+ "version": "2.20.83",
4
4
  "description": "JavaScript/TypeScript SDK for epilot APIs",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1,7 +0,0 @@
1
- import "./chunk-YPSWSI3M.js";
2
-
3
- // src/docs/phone-integration.json
4
- var phone_integration_default = '# Phone Integration API\n\n- **Base URL:** `https://phone-integration-api.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/phone-integration](https://docs.epilot.io/api/phone-integration)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.phoneIntegration.batchSearchCustomers(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/phone-integration\'\n\nconst phoneIntegrationClient = getClient()\nauthorize(phoneIntegrationClient, () => \'<token>\')\nconst { data } = await phoneIntegrationClient.batchSearchCustomers(...)\n```\n\n## Operations\n\n**phone-integration**\n- [`batchSearchCustomers`](#batchsearchcustomers)\n\n**manager**\n- [`getManagerStatus`](#getmanagerstatus)\n- [`listPhoneAgents`](#listphoneagents)\n- [`assignPhoneAgent`](#assignphoneagent)\n- [`removePhoneAgent`](#removephoneagent)\n\n**operator**\n- [`getProviderSetup`](#getprovidersetup)\n- [`setupProvider`](#setupprovider)\n\n**Schemas**\n- [`ManagerStatus`](#managerstatus)\n- [`PhoneAgent`](#phoneagent)\n- [`AssignPhoneAgentRequest`](#assignphoneagentrequest)\n- [`ProviderSetup`](#providersetup)\n- [`ProviderSetupRequest`](#providersetuprequest)\n- [`CustomerBatchSearchResult`](#customerbatchsearchresult)\n- [`CustomerSearchResult`](#customersearchresult)\n- [`CustomerIdentifier`](#customeridentifier)\n- [`CustomerSummary`](#customersummary)\n- [`ErrorResponse`](#errorresponse)\n\n### `batchSearchCustomers`\n\nResolves up to 50 identifiers to epilot customers (Contacts) in one\nrequest \u2014 for example every number in an agent\'s call history.\n\n`GET /v1/customer:batchSearch`\n\n```ts\nconst { data } = await client.batchSearchCustomers({\n id: [\'...\'],\n customer_number: [\'...\'],\n external_id: [\'...\'],\n phone_number: [\'...\'],\n email: [\'...\'],\n x-trace-id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "identifier": {\n "type": "id",\n "value": "+4917012345678"\n },\n "status": "found",\n "customer": {\n "id": "dba8e5f9-8b3f-4608-b887-cd0798fce624",\n "name": "Max Mustermann",\n "customer_number": "4711"\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getManagerStatus`\n\nWhether the caller\'s organization is ready for phone agents: the telephony provider tenant\nexists and is configured. The control center shows a "not set up" state when `ready` is false.\nRequires `phon\n\n`GET /v1/manager/status`\n\n```ts\nconst { data } = await client.getManagerStatus()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "ready": true,\n "reasons": ["provider_tenant_missing"]\n}\n```\n\n</details>\n\n---\n\n### `listPhoneAgents`\n\nOrganization members who hold the phone (`phone:use`), each joined with the provider user behind\nthem. Requires `phone:manage`.\n\n`GET /v1/manager/agents`\n\n```ts\nconst { data } = await client.listPhoneAgents()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "user_id": "string",\n "email": "string",\n "display_name": "string",\n "status": "active",\n "provider_user_id": "string",\n "provider_roles": ["string"],\n "assigned_at": "1970-01-01T00:00:00.000Z",\n "assigned_by": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `assignPhoneAgent`\n\nGives an organization member the phone. In order: the member is verified with user-api, their\npairwise subject for the provider is read from identity-api, the provider user is created (or\nfound) bound\n\n`POST /v1/manager/agents`\n\n```ts\nconst { data } = await client.assignPhoneAgent(\n null,\n {\n user_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "user_id": "string",\n "email": "string",\n "display_name": "string",\n "status": "active",\n "provider_user_id": "string",\n "provider_roles": ["string"],\n "assigned_at": "1970-01-01T00:00:00.000Z",\n "assigned_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `removePhoneAgent`\n\nTakes the phone away from a member: the `phone_agent` role is removed first, then the provider\nuser is deactivated (never deleted: call history keeps referring to it). Requires `phone:manage`.\n\n`DELETE /v1/manager/agents/{user_id}`\n\n```ts\nconst { data } = await client.removePhoneAgent({\n user_id: \'example\',\n})\n```\n\n---\n\n### `getProviderSetup`\n\nWhat has been set up at the telephony provider for this organization.\n\n`GET /v1/operator/organizations/{org_id}/provider`\n\n```ts\nconst { data } = await client.getProviderSetup({\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "org_id": "string",\n "ready": true,\n "tenant": {\n "id": "string",\n "name": "string",\n "org_key": "string",\n "created_at": "1970-01-01T00:00:00.000Z"\n },\n "scim": {\n "configured": true,\n "roles_enabled": true\n },\n "sso": {\n "configured": true,\n "identity_client_id": "string",\n "configured_at": "1970-01-01T00:00:00.000Z"\n },\n "last_setup_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `setupProvider`\n\nPrepares the telephony provider for an organization, idempotently and in order: the provider\ntenant (Babelforce sub-account keyed by the organization id), its SCIM configuration with role\nmanagement o\n\n`POST /v1/operator/organizations/{org_id}/provider:setup`\n\n```ts\nconst { data } = await client.setupProvider(\n {\n org_id: \'example\',\n },\n {\n account_name: \'string\',\n identity_client_id: \'string\',\n identity_client_secret: \'stringstring\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "org_id": "string",\n "ready": true,\n "tenant": {\n "id": "string",\n "name": "string",\n "org_key": "string",\n "created_at": "1970-01-01T00:00:00.000Z"\n },\n "scim": {\n "configured": true,\n "roles_enabled": true\n },\n "sso": {\n "configured": true,\n "identity_client_id": "string",\n "configured_at": "1970-01-01T00:00:00.000Z"\n },\n "last_setup_by": "string"\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `ManagerStatus`\n\n```ts\ntype ManagerStatus = {\n provider: "babelforce"\n ready: boolean\n reasons: "provider_tenant_missing" | "sso_not_configured" | "scim_not_configured" | "identity_enablement_missing"[]\n}\n```\n\n### `PhoneAgent`\n\n```ts\ntype PhoneAgent = {\n user_id: string\n email: string\n display_name?: string\n status: "active" | "pending" | "disabled" | "missing_provider" | "missing_role"\n provider_user_id?: string\n provider_roles?: string[]\n assigned_at?: string // date-time\n assigned_by?: string\n}\n```\n\n### `AssignPhoneAgentRequest`\n\n```ts\ntype AssignPhoneAgentRequest = {\n user_id: string\n}\n```\n\n### `ProviderSetup`\n\n```ts\ntype ProviderSetup = {\n provider: "babelforce"\n org_id: string\n ready: boolean\n tenant: {\n id: string\n name: string\n org_key: string\n created_at?: string // date-time\n }\n scim: {\n configured: boolean\n roles_enabled: boolean\n }\n sso: {\n configured: boolean\n identity_client_id?: string\n configured_at?: string // date-time\n }\n last_setup_by?: string\n}\n```\n\n### `ProviderSetupRequest`\n\n```ts\ntype ProviderSetupRequest = {\n account_name?: string\n identity_client_id: string\n identity_client_secret: string\n}\n```\n\n### `CustomerBatchSearchResult`\n\n```ts\ntype CustomerBatchSearchResult = {\n results: Array<{\n identifier: {\n type: { ... }\n value: { ... }\n }\n status: "found" | "not_found" | "ambiguous" | "invalid" | "error"\n customer?: {\n id: { ... }\n name: { ... }\n customer_number?: { ... }\n }\n }>\n}\n```\n\n### `CustomerSearchResult`\n\n```ts\ntype CustomerSearchResult = {\n identifier: {\n type: "id" | "customer_number" | "external_id" | "phone_number" | "email"\n value: string\n }\n status: "found" | "not_found" | "ambiguous" | "invalid" | "error"\n customer?: {\n id: string\n name: string\n customer_number?: string\n }\n}\n```\n\n### `CustomerIdentifier`\n\n```ts\ntype CustomerIdentifier = {\n type: "id" | "customer_number" | "external_id" | "phone_number" | "email"\n value: string\n}\n```\n\n### `CustomerSummary`\n\nPresent when `status` is `found`\n\n```ts\ntype CustomerSummary = {\n id: string\n name: string\n customer_number?: string\n}\n```\n\n### `ErrorResponse`\n\n```ts\ntype ErrorResponse = {\n status: number\n error: string\n code?: string\n}\n```\n';
5
- export {
6
- phone_integration_default as default
7
- };
@@ -1,7 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
-
3
- // src/docs/phone-integration.json
4
- var phone_integration_default = '# Phone Integration API\n\n- **Base URL:** `https://phone-integration-api.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/phone-integration](https://docs.epilot.io/api/phone-integration)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.phoneIntegration.batchSearchCustomers(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/phone-integration\'\n\nconst phoneIntegrationClient = getClient()\nauthorize(phoneIntegrationClient, () => \'<token>\')\nconst { data } = await phoneIntegrationClient.batchSearchCustomers(...)\n```\n\n## Operations\n\n**phone-integration**\n- [`batchSearchCustomers`](#batchsearchcustomers)\n\n**manager**\n- [`getManagerStatus`](#getmanagerstatus)\n- [`listPhoneAgents`](#listphoneagents)\n- [`assignPhoneAgent`](#assignphoneagent)\n- [`removePhoneAgent`](#removephoneagent)\n\n**operator**\n- [`getProviderSetup`](#getprovidersetup)\n- [`setupProvider`](#setupprovider)\n\n**Schemas**\n- [`ManagerStatus`](#managerstatus)\n- [`PhoneAgent`](#phoneagent)\n- [`AssignPhoneAgentRequest`](#assignphoneagentrequest)\n- [`ProviderSetup`](#providersetup)\n- [`ProviderSetupRequest`](#providersetuprequest)\n- [`CustomerBatchSearchResult`](#customerbatchsearchresult)\n- [`CustomerSearchResult`](#customersearchresult)\n- [`CustomerIdentifier`](#customeridentifier)\n- [`CustomerSummary`](#customersummary)\n- [`ErrorResponse`](#errorresponse)\n\n### `batchSearchCustomers`\n\nResolves up to 50 identifiers to epilot customers (Contacts) in one\nrequest \u2014 for example every number in an agent\'s call history.\n\n`GET /v1/customer:batchSearch`\n\n```ts\nconst { data } = await client.batchSearchCustomers({\n id: [\'...\'],\n customer_number: [\'...\'],\n external_id: [\'...\'],\n phone_number: [\'...\'],\n email: [\'...\'],\n x-trace-id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "identifier": {\n "type": "id",\n "value": "+4917012345678"\n },\n "status": "found",\n "customer": {\n "id": "dba8e5f9-8b3f-4608-b887-cd0798fce624",\n "name": "Max Mustermann",\n "customer_number": "4711"\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getManagerStatus`\n\nWhether the caller\'s organization is ready for phone agents: the telephony provider tenant\nexists and is configured. The control center shows a "not set up" state when `ready` is false.\nRequires `phon\n\n`GET /v1/manager/status`\n\n```ts\nconst { data } = await client.getManagerStatus()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "ready": true,\n "reasons": ["provider_tenant_missing"]\n}\n```\n\n</details>\n\n---\n\n### `listPhoneAgents`\n\nOrganization members who hold the phone (`phone:use`), each joined with the provider user behind\nthem. Requires `phone:manage`.\n\n`GET /v1/manager/agents`\n\n```ts\nconst { data } = await client.listPhoneAgents()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "user_id": "string",\n "email": "string",\n "display_name": "string",\n "status": "active",\n "provider_user_id": "string",\n "provider_roles": ["string"],\n "assigned_at": "1970-01-01T00:00:00.000Z",\n "assigned_by": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `assignPhoneAgent`\n\nGives an organization member the phone. In order: the member is verified with user-api, their\npairwise subject for the provider is read from identity-api, the provider user is created (or\nfound) bound\n\n`POST /v1/manager/agents`\n\n```ts\nconst { data } = await client.assignPhoneAgent(\n null,\n {\n user_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "user_id": "string",\n "email": "string",\n "display_name": "string",\n "status": "active",\n "provider_user_id": "string",\n "provider_roles": ["string"],\n "assigned_at": "1970-01-01T00:00:00.000Z",\n "assigned_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `removePhoneAgent`\n\nTakes the phone away from a member: the `phone_agent` role is removed first, then the provider\nuser is deactivated (never deleted: call history keeps referring to it). Requires `phone:manage`.\n\n`DELETE /v1/manager/agents/{user_id}`\n\n```ts\nconst { data } = await client.removePhoneAgent({\n user_id: \'example\',\n})\n```\n\n---\n\n### `getProviderSetup`\n\nWhat has been set up at the telephony provider for this organization.\n\n`GET /v1/operator/organizations/{org_id}/provider`\n\n```ts\nconst { data } = await client.getProviderSetup({\n org_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "org_id": "string",\n "ready": true,\n "tenant": {\n "id": "string",\n "name": "string",\n "org_key": "string",\n "created_at": "1970-01-01T00:00:00.000Z"\n },\n "scim": {\n "configured": true,\n "roles_enabled": true\n },\n "sso": {\n "configured": true,\n "identity_client_id": "string",\n "configured_at": "1970-01-01T00:00:00.000Z"\n },\n "last_setup_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `setupProvider`\n\nPrepares the telephony provider for an organization, idempotently and in order: the provider\ntenant (Babelforce sub-account keyed by the organization id), its SCIM configuration with role\nmanagement o\n\n`POST /v1/operator/organizations/{org_id}/provider:setup`\n\n```ts\nconst { data } = await client.setupProvider(\n {\n org_id: \'example\',\n },\n {\n account_name: \'string\',\n identity_client_id: \'string\',\n identity_client_secret: \'stringstring\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "provider": "babelforce",\n "org_id": "string",\n "ready": true,\n "tenant": {\n "id": "string",\n "name": "string",\n "org_key": "string",\n "created_at": "1970-01-01T00:00:00.000Z"\n },\n "scim": {\n "configured": true,\n "roles_enabled": true\n },\n "sso": {\n "configured": true,\n "identity_client_id": "string",\n "configured_at": "1970-01-01T00:00:00.000Z"\n },\n "last_setup_by": "string"\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `ManagerStatus`\n\n```ts\ntype ManagerStatus = {\n provider: "babelforce"\n ready: boolean\n reasons: "provider_tenant_missing" | "sso_not_configured" | "scim_not_configured" | "identity_enablement_missing"[]\n}\n```\n\n### `PhoneAgent`\n\n```ts\ntype PhoneAgent = {\n user_id: string\n email: string\n display_name?: string\n status: "active" | "pending" | "disabled" | "missing_provider" | "missing_role"\n provider_user_id?: string\n provider_roles?: string[]\n assigned_at?: string // date-time\n assigned_by?: string\n}\n```\n\n### `AssignPhoneAgentRequest`\n\n```ts\ntype AssignPhoneAgentRequest = {\n user_id: string\n}\n```\n\n### `ProviderSetup`\n\n```ts\ntype ProviderSetup = {\n provider: "babelforce"\n org_id: string\n ready: boolean\n tenant: {\n id: string\n name: string\n org_key: string\n created_at?: string // date-time\n }\n scim: {\n configured: boolean\n roles_enabled: boolean\n }\n sso: {\n configured: boolean\n identity_client_id?: string\n configured_at?: string // date-time\n }\n last_setup_by?: string\n}\n```\n\n### `ProviderSetupRequest`\n\n```ts\ntype ProviderSetupRequest = {\n account_name?: string\n identity_client_id: string\n identity_client_secret: string\n}\n```\n\n### `CustomerBatchSearchResult`\n\n```ts\ntype CustomerBatchSearchResult = {\n results: Array<{\n identifier: {\n type: { ... }\n value: { ... }\n }\n status: "found" | "not_found" | "ambiguous" | "invalid" | "error"\n customer?: {\n id: { ... }\n name: { ... }\n customer_number?: { ... }\n }\n }>\n}\n```\n\n### `CustomerSearchResult`\n\n```ts\ntype CustomerSearchResult = {\n identifier: {\n type: "id" | "customer_number" | "external_id" | "phone_number" | "email"\n value: string\n }\n status: "found" | "not_found" | "ambiguous" | "invalid" | "error"\n customer?: {\n id: string\n name: string\n customer_number?: string\n }\n}\n```\n\n### `CustomerIdentifier`\n\n```ts\ntype CustomerIdentifier = {\n type: "id" | "customer_number" | "external_id" | "phone_number" | "email"\n value: string\n}\n```\n\n### `CustomerSummary`\n\nPresent when `status` is `found`\n\n```ts\ntype CustomerSummary = {\n id: string\n name: string\n customer_number?: string\n}\n```\n\n### `ErrorResponse`\n\n```ts\ntype ErrorResponse = {\n status: number\n error: string\n code?: string\n}\n```\n';
5
-
6
-
7
- exports.default = phone_integration_default;
@@ -1,7 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
-
3
- // src/docs/targeting.json
4
- var targeting_default = '# Targeting API\n\n- **Base URL:** `https://targeting.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/targeting](https://docs.epilot.io/api/targeting)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.targeting.changeCampaignStatus(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/targeting\'\n\nconst targetingClient = getClient()\nauthorize(targetingClient, () => \'<token>\')\nconst { data } = await targetingClient.changeCampaignStatus(...)\n```\n\n## Operations\n\n**Campaign**\n- [`changeCampaignStatus`](#changecampaignstatus)\n- [`getCampaignJobStatus`](#getcampaignjobstatus)\n- [`getCampaignPortals`](#getcampaignportals)\n- [`setupCampaign`](#setupcampaign)\n- [`matchCampaigns`](#matchcampaigns)\n- [`discoverCampaigns`](#discovercampaigns)\n\n**Campaign Delivery**\n- [`retriggerCampaignAutomations`](#retriggercampaignautomations)\n\n**Target**\n- [`matchTargets`](#matchtargets)\n- [`getTargetQueries`](#gettargetqueries)\n\n**Campaign Recipient**\n- [`createRecipient`](#createrecipient)\n- [`updateRecipient`](#updaterecipient)\n- [`updateRecipientPortalStatus`](#updaterecipientportalstatus)\n- [`updateRecipientEntityUiStatus`](#updaterecipiententityuistatus)\n- [`restoreRecipientEntityUiStatus`](#restorerecipiententityuistatus)\n- [`getRecipients`](#getrecipients)\n- [`getEmailStats`](#getemailstats)\n\n**Schemas**\n- [`BaseError`](#baseerror)\n- [`ServerError`](#servererror)\n- [`ClientError`](#clienterror)\n- [`BaseUUID`](#baseuuid)\n- [`BaseNanoID`](#basenanoid)\n- [`BaseTags`](#basetags)\n- [`BaseRelation`](#baserelation)\n- [`BaseSystemId`](#basesystemid)\n- [`BaseEntityOwner`](#baseentityowner)\n- [`BaseEntityAcl`](#baseentityacl)\n- [`BaseSystemFields`](#basesystemfields)\n- [`BaseSystemFieldsRequired`](#basesystemfieldsrequired)\n- [`CampaignStatus`](#campaignstatus)\n- [`ExecutionSummaryItem`](#executionsummaryitem)\n- [`JobStatus`](#jobstatus)\n- [`Campaign`](#campaign)\n- [`Target`](#target)\n- [`MatchCampaignParams`](#matchcampaignparams)\n- [`NextBestAction`](#nextbestaction)\n- [`DiscoverCampaignsParams`](#discovercampaignsparams)\n- [`DiscoverResult`](#discoverresult)\n- [`MatchTargetParams`](#matchtargetparams)\n- [`GetTargetQueriesParams`](#gettargetqueriesparams)\n- [`TargetQueryResult`](#targetqueryresult)\n- [`AutomationStatus`](#automationstatus)\n- [`PortalStatus`](#portalstatus)\n- [`EntityUiStatus`](#entityuistatus)\n- [`EmailStatus`](#emailstatus)\n- [`EmailBounceType`](#emailbouncetype)\n- [`Recipient`](#recipient)\n- [`BaseRecipientPayload`](#baserecipientpayload)\n- [`AutomationRecipientPayload`](#automationrecipientpayload)\n- [`PortalRecipientPayload`](#portalrecipientpayload)\n- [`CreateRecipientPayload`](#createrecipientpayload)\n- [`UpdateRecipientPayload`](#updaterecipientpayload)\n- [`RetriggerAutomationsRequest`](#retriggerautomationsrequest)\n- [`RetriggerAutomationsResult`](#retriggerautomationsresult)\n- [`UpdatePortalStatusRequest`](#updateportalstatusrequest)\n- [`UpdateEntityUiStatusRequest`](#updateentityuistatusrequest)\n- [`SetupCampaignRequest`](#setupcampaignrequest)\n- [`SetupTariffChangeCampaignRequest`](#setuptariffchangecampaignrequest)\n- [`SetupTariffChangeCampaignResponse`](#setuptariffchangecampaignresponse)\n\n### `changeCampaignStatus`\n\nChange the status of a campaign to a desired status.\n\n`POST /v1/campaign/{campaign_id}/status`\n\n```ts\nconst { data } = await client.changeCampaignStatus({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "campaign": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "goal": "string",\n "status": "draft",\n "start_date": "1970-01-01",\n "end_date": "1970-01-01",\n "flow_id": "string",\n "job_id": "string",\n "target": {\n "$relation": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_tags": ["string"]\n }\n ]\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `getCampaignJobStatus`\n\nGet the status of a campaign\'s automation job\n\n`GET /v1/campaign/{campaign_id}/job`\n\n```ts\nconst { data } = await client.getCampaignJobStatus({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "status": "queued",\n "execution_summary": [\n {\n "execution_id": "string",\n "execution_status": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getCampaignPortals`\n\nGet the list of portals and its widgets where the campaign is used.\n\n`GET /v1/campaign/{campaign_id}/portals`\n\n```ts\nconst { data } = await client.getCampaignPortals({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n[\n {\n "portal": {\n "origin": "string",\n "domain": "string",\n "name": "string"\n },\n "widgets": [\n {\n "id": "string",\n "headline": {\n "en": "string",\n "de": "string"\n }\n }\n ]\n }\n]\n```\n\n</details>\n\n---\n\n### `retriggerCampaignAutomations`\n\nRetrigger automation executions for specific campaign recipients that have failed.\n\n`POST /v1/campaign/{campaign_id}/automations:retrigger`\n\n```ts\nconst { data } = await client.retriggerCampaignAutomations(\n {\n campaign_id: \'example\',\n },\n {\n recipient_ids: [\'3fa85f64-5717-4562-b3fc-2c963f66afa6\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "message": "string",\n "results": [\n {\n "recipient_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "result": "success",\n "execution_id": "string",\n "error": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `setupCampaign`\n\nCreates a `campaign` entity together with its related entities and configurations in a single call.\nUsed by the campaign wizard UI, but not restricted to it.\n\n`POST /v1/campaign:setup`\n\n```ts\nconst { data } = await client.setupCampaign(\n null,\n {\n type: \'tariff_change\',\n product_recommendation: {\n name: \'string\',\n source_product_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n source_price_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n offers: [\n {\n target_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n items: [\n {\n product_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n price_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n highlight_config: {}\n }\n ]\n }\n ]\n },\n campaign: {\n name: \'string\',\n goal: \'string\',\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n journey: {\n journey_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n },\n channels: {\n portal_widget: {\n portal_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n block_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n },\n email: {\n automation_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n template_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n }\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "type": "tariff_change",\n "product_recommendation_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "journey_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "portal_widget_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84"\n}\n```\n\n</details>\n\n---\n\n### `matchCampaigns`\n\nMatch campaigns based on target entities.\n\n`POST /v1/campaign:match`\n\n```ts\nconst { data } = await client.matchCampaigns(\n null,\n {\n entity_refs: [\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n }\n ],\n campaign_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "campaign": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "goal": "string",\n "status": "draft",\n "start_date": "1970-01-01",\n "end_date": "1970-01-01",\n "flow_id": "string",\n "job_id": "string",\n "target": {\n "$relation": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_tags": ["string"]\n }\n ]\n }\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `discoverCampaigns`\n\nGiven an entity, returns the Next Best Actions it should see on the Entity-UI channel.\n\n`POST /v1/campaign:discover`\n\n```ts\nconst { data } = await client.discoverCampaigns(\n null,\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "nba": {\n "category": "string",\n "icon": {\n "name": "string",\n "color": "string"\n },\n "title": "string",\n "body": "string",\n "priority": "medium",\n "is_dismissable": true,\n "cta": {\n "type": "journey",\n "target": "string",\n "context_params": [\n {\n "key": "string",\n "value": "string"\n }\n ]\n }\n },\n "status": "seen",\n "status_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "dismissed": [\n {\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "nba": {\n "category": "string",\n "icon": {\n "name": "string",\n "color": "string"\n },\n "title": "string",\n "body": "string",\n "priority": "medium",\n "is_dismissable": true,\n "cta": {\n "type": "journey",\n "target": "string",\n "context_params": [\n {\n "key": "string",\n "value": "string"\n }\n ]\n }\n },\n "status": "seen",\n "status_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `matchTargets`\n\nFind targets from the provided list that include the provide entities.\n\n`POST /v1/target:match`\n\n```ts\nconst { data } = await client.matchTargets(\n null,\n {\n entity_refs: [\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n }\n ],\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "target": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "description": "string",\n "entity_schema": "string",\n "entity_filters": {}\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getTargetQueries`\n\nTransform target filters into Lucene queries for the provided target IDs.\nReturns the transformed query string for each target along with any errors encountered.\n\n`POST /v1/target/queries`\n\n```ts\nconst { data } = await client.getTargetQueries(\n null,\n {\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "target_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "query": "string",\n "error": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createRecipient`\n\nCreates a new recipient associated with a campaign.\n\n`POST /v1/campaign/{campaign_id}/recipient`\n\n```ts\nconst { data } = await client.createRecipient(\n {\n campaign_id: \'example\',\n },\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\',\n automation_status: \'pending\',\n automation_execution_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipient`\n\nUpdates a recipient\'s attributes.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}`\n\n```ts\nconst { data } = await client.updateRecipient(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n automation_status: \'pending\',\n automation_execution_id: \'string\',\n portal_status: \'sent\',\n portal_state: {}\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipientPortalStatus`\n\nUpdates the portal status for a specific campaign recipient.\nThe portal_status_updated_at timestamp is automatically set when the status changes.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}/portal:status`\n\n```ts\nconst { data } = await client.updateRecipientPortalStatus(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n status: \'sent\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipientEntityUiStatus`\n\nRecords a Next Best Action interaction for a recipient on the Entity-UI channel.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}/entity_ui:status`\n\n```ts\nconst { data } = await client.updateRecipientEntityUiStatus(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n status: \'seen\',\n entity_schema: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `restoreRecipientEntityUiStatus`\n\nUndo a dismissal on the Entity-UI (Next Best Action) channel\n\n`POST /v1/campaign/{campaign_id}/recipient/{recipient_id}/entity_ui:restore`\n\n```ts\nconst { data } = await client.restoreRecipientEntityUiStatus({\n campaign_id: \'example\',\n recipient_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `getRecipients`\n\nGet a paginated list of recipients for a campaign.\n\n`GET /v1/campaign/{campaign_id}/recipients`\n\n```ts\nconst { data } = await client.getRecipients({\n campaign_id: \'example\',\n limit: 1,\n next: \'example\',\n q: \'example\',\n automation_status: [\'...\'],\n portal_status: \'example\',\n email_status: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "next": "string",\n "total": 0\n}\n```\n\n</details>\n\n---\n\n### `getEmailStats`\n\nAggregate email delivery counts for a campaign, for the KPI summary on the campaign UI.\nCounts cover the email (automation) channel only; `total_emailed` is the number of\nrecipients with a recorded em\n\n`GET /v1/campaign/{campaign_id}/email-stats`\n\n```ts\nconst { data } = await client.getEmailStats({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "total_emailed": 0,\n "sent": 0,\n "delivered": 0,\n "bounced": 0,\n "bounced_hard": 0,\n "bounced_soft": 0,\n "complained": 0,\n "failed": 0,\n "unsubscribed": 0,\n "opened": 0,\n "clicked": 0,\n "total_opens": 0,\n "total_clicks": 0\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `BaseError`\n\n```ts\ntype BaseError = {\n status: number\n message: string\n}\n```\n\n### `ServerError`\n\n```ts\ntype ServerError = {\n status: number\n message: string\n}\n```\n\n### `ClientError`\n\nDescribes the structure of a client error response, which can be one of several types:\n1. `MessageError`: Contains a \'message\' field for general descriptive errors.\n2. `CodeError`: Contains a \'code\' field for specific, machine-readable error codes.\n3. `StatusedError`: Contains \'error\' and \'status\' f\n\n```ts\ntype ClientError = {\n message: string\n} | {\n code: "CAMPAIGN_NOT_FOUND" | "CAMPAIGN_HAS_NO_TARGET" | "CAMPAIGN_HAS_NO_DELIVERY_METHOD" | "INVALID_NEXT_BEST_ACTION" | "CAMPAIGN_HAS_JOB_IN_PROGRESS" | "CAMPAIGN_HAS_UNEXPECTED_STATUS" | "JOB_TOKEN_MISSING" | "TARGET_WITHOUT_FILTERS"\n} | {\n error: string\n status: number\n}\n```\n\n### `BaseUUID`\n\n```ts\ntype BaseUUID = string // uuid\n```\n\n### `BaseNanoID`\n\n```ts\ntype BaseNanoID = string\n```\n\n### `BaseTags`\n\n```ts\ntype BaseTags = string[]\n```\n\n### `BaseRelation`\n\n```ts\ntype BaseRelation = {\n $relation?: Array<{\n entity_id?: string // uuid\n _tags?: string[]\n }>\n}\n```\n\n### `BaseSystemId`\n\n```ts\ntype BaseSystemId = {\n _id: string // uuid\n}\n```\n\n### `BaseEntityOwner`\n\nThe user / organization owning this entity.\n\nNote: Owner implicitly has access to the entity regardless of ACLs.\n\n\n```ts\ntype BaseEntityOwner = {\n org_id: string\n user_id?: string\n}\n```\n\n### `BaseEntityAcl`\n\nAccess control list (ACL) for an entity. Defines sharing access to external orgs or users.\n\n```ts\ntype BaseEntityAcl = {\n view?: string[]\n edit?: string[]\n delete?: string[]\n}\n```\n\n### `BaseSystemFields`\n\n```ts\ntype BaseSystemFields = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n}\n```\n\n### `BaseSystemFieldsRequired`\n\n```ts\ntype BaseSystemFieldsRequired = object\n```\n\n### `CampaignStatus`\n\n```ts\ntype CampaignStatus = "draft" | "activating" | "active" | "inactive"\n```\n\n### `ExecutionSummaryItem`\n\n```ts\ntype ExecutionSummaryItem = {\n execution_id?: string\n execution_status?: string\n}\n```\n\n### `JobStatus`\n\n```ts\ntype JobStatus = {\n status?: "queued" | "processing" | "finished" | "failed" | "cancelled" | "send_report"\n execution_summary?: Array<{\n execution_id?: string\n execution_status?: string\n }>\n}\n```\n\n### `Campaign`\n\n```ts\ntype Campaign = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n name?: string\n goal?: string\n status?: "draft" | "activating" | "active" | "inactive"\n start_date?: string // date\n end_date?: string // date\n flow_id?: string\n job_id?: string\n target?: {\n $relation?: Array<{\n entity_id?: { ... }\n _tags?: { ... }\n }>\n }\n}\n```\n\n### `Target`\n\n```ts\ntype Target = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n name?: string\n description?: string\n entity_schema?: string\n entity_filters?: Record<string, unknown>\n}\n```\n\n### `MatchCampaignParams`\n\n```ts\ntype MatchCampaignParams = {\n entity_refs: Array<{\n entity_id: string // uuid\n entity_schema: string\n }>\n campaign_ids: string // uuid[]\n}\n```\n\n### `NextBestAction`\n\nA Next Best Action configured on a campaign\'s Entity-UI channel.\nThis is the canonical NBA contract shared by discovery (this API), authoring, and rendering.\nNBA content is single-language in v1; text fields may contain `{{placeholders}}` resolved at render time.\n\n\n```ts\ntype NextBestAction = {\n category?: string\n icon?: {\n name: string\n color?: string\n }\n title: string\n body?: string\n priority?: "low" | "medium" | "high"\n is_dismissable?: boolean\n cta: {\n type: "journey" | "workflow" | "flow"\n target: string\n context_params?: Array<{\n key: { ... }\n value: { ... }\n }>\n }\n}\n```\n\n### `DiscoverCampaignsParams`\n\n```ts\ntype DiscoverCampaignsParams = {\n entity_id: string // uuid\n entity_schema: string\n}\n```\n\n### `DiscoverResult`\n\nOne discovered Next Best Action, plus this entity\'s interaction state for it.\n\n```ts\ntype DiscoverResult = {\n campaign_id: string // uuid\n nba: {\n category?: string\n icon?: {\n name: { ... }\n color?: { ... }\n }\n title: string\n body?: string\n priority?: "low" | "medium" | "high"\n is_dismissable?: boolean\n cta: {\n type: { ... }\n target: { ... }\n context_params?: { ... }\n }\n }\n status?: "seen" | "dismissed" | "clicked"\n status_updated_at?: string // date-time\n}\n```\n\n### `MatchTargetParams`\n\n```ts\ntype MatchTargetParams = {\n entity_refs: Array<{\n entity_id: string // uuid\n entity_schema: string\n }>\n target_ids: string // uuid[]\n}\n```\n\n### `GetTargetQueriesParams`\n\n```ts\ntype GetTargetQueriesParams = {\n target_ids: string // uuid[]\n}\n```\n\n### `TargetQueryResult`\n\n```ts\ntype TargetQueryResult = {\n target_id: string // uuid\n query: string\n error?: string\n}\n```\n\n### `AutomationStatus`\n\n```ts\ntype AutomationStatus = "pending" | "in_progress" | "success" | "failed" | "cancelled"\n```\n\n### `PortalStatus`\n\n```ts\ntype PortalStatus = "sent" | "seen" | "dismissed" | "clicked"\n```\n\n### `EntityUiStatus`\n\nLifecycle status of a Next Best Action on the Entity-UI channel. Unlike the portal\nchannel there is no `sent` state: an NBA recipient is born at `seen`, the moment the\naction is first rendered to an agent.\n\n\n```ts\ntype EntityUiStatus = "seen" | "dismissed" | "clicked"\n```\n\n### `EmailStatus`\n\nDelivery status of the email a campaign\'s automation sends to a recipient. Set to `sent`\nonce the automation hands the email off, then updated asynchronously as SES notifications\narrive (`bounced` / `complained`; an SES Reject maps to `bounced`). `failed` is a send-time\nfailure (the automation execu\n\n```ts\ntype EmailStatus = "sent" | "delivered" | "bounced" | "complained" | "failed"\n```\n\n### `EmailBounceType`\n\nSES bounce classification: `permanent` (hard) or `transient` (soft).\n\n```ts\ntype EmailBounceType = "permanent" | "transient"\n```\n\n### `Recipient`\n\n```ts\ntype Recipient = {\n entity_id?: string // uuid\n entity_schema?: string\n title?: string\n automation_status?: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id?: string\n portal_status?: "sent" | "seen" | "dismissed" | "clicked"\n portal_status_updated_at?: string // date-time\n portal_state?: Record<string, unknown>\n entity_ui_status?: "seen" | "dismissed" | "clicked"\n entity_ui_status_updated_at?: string // date-time\n entity_ui_status_before_dismiss?: "seen" | "dismissed" | "clicked"\n message_entity_id?: string\n email_status?: "sent" | "delivered" | "bounced" | "complained" | "failed"\n email_status_updated_at?: string // date-time\n email_bounce_type?: "permanent" | "transient"\n email_bounce_subtype?: string\n email_complaint_type?: string\n email_bounce_reason?: string\n email_send_error?: Record<string, unknown>\n email_unsubscribed_at?: string // date-time\n email_open_count?: number\n email_first_opened_at?: string // date-time\n email_last_opened_at?: string // date-time\n email_click_count?: number\n email_first_clicked_at?: string // date-time\n email_clicked_links?: Array<{\n url: string\n clicked_at: string // date-time\n }>\n updated_at?: string // date-time\n}\n```\n\n### `BaseRecipientPayload`\n\n```ts\ntype BaseRecipientPayload = {\n entity_id: string // uuid\n entity_schema: string\n}\n```\n\n### `AutomationRecipientPayload`\n\n```ts\ntype AutomationRecipientPayload = {\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n}\n```\n\n### `PortalRecipientPayload`\n\n```ts\ntype PortalRecipientPayload = {\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `CreateRecipientPayload`\n\n```ts\ntype CreateRecipientPayload = {\n entity_id: string // uuid\n entity_schema: string\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n} | {\n entity_id: string // uuid\n entity_schema: string\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n} | {\n entity_id: string // uuid\n entity_schema: string\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `UpdateRecipientPayload`\n\n```ts\ntype UpdateRecipientPayload = {\n automation_status?: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id?: string\n portal_status?: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `RetriggerAutomationsRequest`\n\n```ts\ntype RetriggerAutomationsRequest = {\n recipient_ids: string // uuid[]\n}\n```\n\n### `RetriggerAutomationsResult`\n\n```ts\ntype RetriggerAutomationsResult = {\n recipient_id: string // uuid\n result: "success" | "failure" | "not_found" | "invalid_status"\n execution_id?: string\n error?: string\n}\n```\n\n### `UpdatePortalStatusRequest`\n\n```ts\ntype UpdatePortalStatusRequest = {\n status: "sent" | "seen" | "dismissed" | "clicked"\n}\n```\n\n### `UpdateEntityUiStatusRequest`\n\n```ts\ntype UpdateEntityUiStatusRequest = {\n status: "seen" | "dismissed" | "clicked"\n entity_schema?: string\n}\n```\n\n### `SetupCampaignRequest`\n\nDiscriminated by `type`. Each campaign variant has its own request shape;\nnew variants are added by introducing a new schema and extending the `oneOf` list.\n\n\n```ts\ntype SetupCampaignRequest = {\n type: "tariff_change"\n product_recommendation: {\n name?: string\n source_product_id?: string // uuid\n source_price_id?: string // uuid\n offers?: Array<{\n target_id?: { ... }\n items: { ... }\n }>\n }\n campaign: {\n name: string\n goal?: string\n target_ids: string // uuid[]\n }\n journey?: {\n journey_id: string // uuid\n }\n channels?: {\n portal_widget?: {\n portal_id: { ... }\n block_id: { ... }\n }\n email?: {\n automation_id?: { ... }\n template_id?: { ... }\n }\n }\n}\n```\n\n### `SetupTariffChangeCampaignRequest`\n\n```ts\ntype SetupTariffChangeCampaignRequest = {\n type: "tariff_change"\n product_recommendation: {\n name?: string\n source_product_id?: string // uuid\n source_price_id?: string // uuid\n offers?: Array<{\n target_id?: { ... }\n items: { ... }\n }>\n }\n campaign: {\n name: string\n goal?: string\n target_ids: string // uuid[]\n }\n journey?: {\n journey_id: string // uuid\n }\n channels?: {\n portal_widget?: {\n portal_id: { ... }\n block_id: { ... }\n }\n email?: {\n automation_id?: { ... }\n template_id?: { ... }\n }\n }\n}\n```\n\n### `SetupTariffChangeCampaignResponse`\n\n```ts\ntype SetupTariffChangeCampaignResponse = {\n type: "tariff_change"\n product_recommendation_id: string // uuid\n campaign_id: string // uuid\n journey_id?: string // uuid\n portal_widget_id?: string // uuid\n}\n```\n';
5
-
6
-
7
- exports.default = targeting_default;
@@ -1,7 +0,0 @@
1
- import "./chunk-YPSWSI3M.js";
2
-
3
- // src/docs/targeting.json
4
- var targeting_default = '# Targeting API\n\n- **Base URL:** `https://targeting.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/targeting](https://docs.epilot.io/api/targeting)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.targeting.changeCampaignStatus(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/targeting\'\n\nconst targetingClient = getClient()\nauthorize(targetingClient, () => \'<token>\')\nconst { data } = await targetingClient.changeCampaignStatus(...)\n```\n\n## Operations\n\n**Campaign**\n- [`changeCampaignStatus`](#changecampaignstatus)\n- [`getCampaignJobStatus`](#getcampaignjobstatus)\n- [`getCampaignPortals`](#getcampaignportals)\n- [`setupCampaign`](#setupcampaign)\n- [`matchCampaigns`](#matchcampaigns)\n- [`discoverCampaigns`](#discovercampaigns)\n\n**Campaign Delivery**\n- [`retriggerCampaignAutomations`](#retriggercampaignautomations)\n\n**Target**\n- [`matchTargets`](#matchtargets)\n- [`getTargetQueries`](#gettargetqueries)\n\n**Campaign Recipient**\n- [`createRecipient`](#createrecipient)\n- [`updateRecipient`](#updaterecipient)\n- [`updateRecipientPortalStatus`](#updaterecipientportalstatus)\n- [`updateRecipientEntityUiStatus`](#updaterecipiententityuistatus)\n- [`restoreRecipientEntityUiStatus`](#restorerecipiententityuistatus)\n- [`getRecipients`](#getrecipients)\n- [`getEmailStats`](#getemailstats)\n\n**Schemas**\n- [`BaseError`](#baseerror)\n- [`ServerError`](#servererror)\n- [`ClientError`](#clienterror)\n- [`BaseUUID`](#baseuuid)\n- [`BaseNanoID`](#basenanoid)\n- [`BaseTags`](#basetags)\n- [`BaseRelation`](#baserelation)\n- [`BaseSystemId`](#basesystemid)\n- [`BaseEntityOwner`](#baseentityowner)\n- [`BaseEntityAcl`](#baseentityacl)\n- [`BaseSystemFields`](#basesystemfields)\n- [`BaseSystemFieldsRequired`](#basesystemfieldsrequired)\n- [`CampaignStatus`](#campaignstatus)\n- [`ExecutionSummaryItem`](#executionsummaryitem)\n- [`JobStatus`](#jobstatus)\n- [`Campaign`](#campaign)\n- [`Target`](#target)\n- [`MatchCampaignParams`](#matchcampaignparams)\n- [`NextBestAction`](#nextbestaction)\n- [`DiscoverCampaignsParams`](#discovercampaignsparams)\n- [`DiscoverResult`](#discoverresult)\n- [`MatchTargetParams`](#matchtargetparams)\n- [`GetTargetQueriesParams`](#gettargetqueriesparams)\n- [`TargetQueryResult`](#targetqueryresult)\n- [`AutomationStatus`](#automationstatus)\n- [`PortalStatus`](#portalstatus)\n- [`EntityUiStatus`](#entityuistatus)\n- [`EmailStatus`](#emailstatus)\n- [`EmailBounceType`](#emailbouncetype)\n- [`Recipient`](#recipient)\n- [`BaseRecipientPayload`](#baserecipientpayload)\n- [`AutomationRecipientPayload`](#automationrecipientpayload)\n- [`PortalRecipientPayload`](#portalrecipientpayload)\n- [`CreateRecipientPayload`](#createrecipientpayload)\n- [`UpdateRecipientPayload`](#updaterecipientpayload)\n- [`RetriggerAutomationsRequest`](#retriggerautomationsrequest)\n- [`RetriggerAutomationsResult`](#retriggerautomationsresult)\n- [`UpdatePortalStatusRequest`](#updateportalstatusrequest)\n- [`UpdateEntityUiStatusRequest`](#updateentityuistatusrequest)\n- [`SetupCampaignRequest`](#setupcampaignrequest)\n- [`SetupTariffChangeCampaignRequest`](#setuptariffchangecampaignrequest)\n- [`SetupTariffChangeCampaignResponse`](#setuptariffchangecampaignresponse)\n\n### `changeCampaignStatus`\n\nChange the status of a campaign to a desired status.\n\n`POST /v1/campaign/{campaign_id}/status`\n\n```ts\nconst { data } = await client.changeCampaignStatus({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "campaign": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "goal": "string",\n "status": "draft",\n "start_date": "1970-01-01",\n "end_date": "1970-01-01",\n "flow_id": "string",\n "job_id": "string",\n "target": {\n "$relation": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_tags": ["string"]\n }\n ]\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `getCampaignJobStatus`\n\nGet the status of a campaign\'s automation job\n\n`GET /v1/campaign/{campaign_id}/job`\n\n```ts\nconst { data } = await client.getCampaignJobStatus({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "status": "queued",\n "execution_summary": [\n {\n "execution_id": "string",\n "execution_status": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getCampaignPortals`\n\nGet the list of portals and its widgets where the campaign is used.\n\n`GET /v1/campaign/{campaign_id}/portals`\n\n```ts\nconst { data } = await client.getCampaignPortals({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n[\n {\n "portal": {\n "origin": "string",\n "domain": "string",\n "name": "string"\n },\n "widgets": [\n {\n "id": "string",\n "headline": {\n "en": "string",\n "de": "string"\n }\n }\n ]\n }\n]\n```\n\n</details>\n\n---\n\n### `retriggerCampaignAutomations`\n\nRetrigger automation executions for specific campaign recipients that have failed.\n\n`POST /v1/campaign/{campaign_id}/automations:retrigger`\n\n```ts\nconst { data } = await client.retriggerCampaignAutomations(\n {\n campaign_id: \'example\',\n },\n {\n recipient_ids: [\'3fa85f64-5717-4562-b3fc-2c963f66afa6\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "message": "string",\n "results": [\n {\n "recipient_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",\n "result": "success",\n "execution_id": "string",\n "error": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `setupCampaign`\n\nCreates a `campaign` entity together with its related entities and configurations in a single call.\nUsed by the campaign wizard UI, but not restricted to it.\n\n`POST /v1/campaign:setup`\n\n```ts\nconst { data } = await client.setupCampaign(\n null,\n {\n type: \'tariff_change\',\n product_recommendation: {\n name: \'string\',\n source_product_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n source_price_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n offers: [\n {\n target_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n items: [\n {\n product_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n price_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n highlight_config: {}\n }\n ]\n }\n ]\n },\n campaign: {\n name: \'string\',\n goal: \'string\',\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n journey: {\n journey_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n },\n channels: {\n portal_widget: {\n portal_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n block_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n },\n email: {\n automation_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n template_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\'\n }\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "type": "tariff_change",\n "product_recommendation_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "journey_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "portal_widget_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84"\n}\n```\n\n</details>\n\n---\n\n### `matchCampaigns`\n\nMatch campaigns based on target entities.\n\n`POST /v1/campaign:match`\n\n```ts\nconst { data } = await client.matchCampaigns(\n null,\n {\n entity_refs: [\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n }\n ],\n campaign_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "campaign": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "goal": "string",\n "status": "draft",\n "start_date": "1970-01-01",\n "end_date": "1970-01-01",\n "flow_id": "string",\n "job_id": "string",\n "target": {\n "$relation": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_tags": ["string"]\n }\n ]\n }\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `discoverCampaigns`\n\nGiven an entity, returns the Next Best Actions it should see on the Entity-UI channel.\n\n`POST /v1/campaign:discover`\n\n```ts\nconst { data } = await client.discoverCampaigns(\n null,\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "nba": {\n "category": "string",\n "icon": {\n "name": "string",\n "color": "string"\n },\n "title": "string",\n "body": "string",\n "priority": "medium",\n "is_dismissable": true,\n "cta": {\n "type": "journey",\n "target": "string",\n "context_params": [\n {\n "key": "string",\n "value": "string"\n }\n ]\n }\n },\n "status": "seen",\n "status_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "dismissed": [\n {\n "campaign_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "nba": {\n "category": "string",\n "icon": {\n "name": "string",\n "color": "string"\n },\n "title": "string",\n "body": "string",\n "priority": "medium",\n "is_dismissable": true,\n "cta": {\n "type": "journey",\n "target": "string",\n "context_params": [\n {\n "key": "string",\n "value": "string"\n }\n ]\n }\n },\n "status": "seen",\n "status_updated_at": "1970-01-01T00:00:00.000Z"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `matchTargets`\n\nFind targets from the provided list that include the provide entities.\n\n`POST /v1/target:match`\n\n```ts\nconst { data } = await client.matchTargets(\n null,\n {\n entity_refs: [\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\'\n }\n ],\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "hits": 0,\n "results": [\n {\n "target": {\n "_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "_org": "string",\n "_owners": [\n {\n "org_id": "123",\n "user_id": "123"\n }\n ],\n "_schema": "string",\n "_title": "string",\n "_tags": ["string"],\n "_created_at": "1970-01-01T00:00:00.000Z",\n "_updated_at": "1970-01-01T00:00:00.000Z",\n "_acl": {\n "view": ["org:456"],\n "edit": ["org:456"],\n "delete": ["org:456"]\n },\n "name": "string",\n "description": "string",\n "entity_schema": "string",\n "entity_filters": {}\n }\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getTargetQueries`\n\nTransform target filters into Lucene queries for the provided target IDs.\nReturns the transformed query string for each target along with any errors encountered.\n\n`POST /v1/target/queries`\n\n```ts\nconst { data } = await client.getTargetQueries(\n null,\n {\n target_ids: [\'b8c01433-5556-4e2b-aad4-6f5348d1df84\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "target_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "query": "string",\n "error": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createRecipient`\n\nCreates a new recipient associated with a campaign.\n\n`POST /v1/campaign/{campaign_id}/recipient`\n\n```ts\nconst { data } = await client.createRecipient(\n {\n campaign_id: \'example\',\n },\n {\n entity_id: \'b8c01433-5556-4e2b-aad4-6f5348d1df84\',\n entity_schema: \'string\',\n automation_status: \'pending\',\n automation_execution_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipient`\n\nUpdates a recipient\'s attributes.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}`\n\n```ts\nconst { data } = await client.updateRecipient(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n automation_status: \'pending\',\n automation_execution_id: \'string\',\n portal_status: \'sent\',\n portal_state: {}\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipientPortalStatus`\n\nUpdates the portal status for a specific campaign recipient.\nThe portal_status_updated_at timestamp is automatically set when the status changes.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}/portal:status`\n\n```ts\nconst { data } = await client.updateRecipientPortalStatus(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n status: \'sent\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `updateRecipientEntityUiStatus`\n\nRecords a Next Best Action interaction for a recipient on the Entity-UI channel.\n\n`PATCH /v1/campaign/{campaign_id}/recipient/{recipient_id}/entity_ui:status`\n\n```ts\nconst { data } = await client.updateRecipientEntityUiStatus(\n {\n campaign_id: \'example\',\n recipient_id: \'example\',\n },\n {\n status: \'seen\',\n entity_schema: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `restoreRecipientEntityUiStatus`\n\nUndo a dismissal on the Entity-UI (Next Best Action) channel\n\n`POST /v1/campaign/{campaign_id}/recipient/{recipient_id}/entity_ui:restore`\n\n```ts\nconst { data } = await client.restoreRecipientEntityUiStatus({\n campaign_id: \'example\',\n recipient_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `getRecipients`\n\nGet a paginated list of recipients for a campaign.\n\n`GET /v1/campaign/{campaign_id}/recipients`\n\n```ts\nconst { data } = await client.getRecipients({\n campaign_id: \'example\',\n limit: 1,\n next: \'example\',\n q: \'example\',\n automation_status: [\'...\'],\n portal_status: \'example\',\n email_status: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "entity_id": "b8c01433-5556-4e2b-aad4-6f5348d1df84",\n "entity_schema": "string",\n "title": "string",\n "automation_status": "pending",\n "automation_execution_id": "string",\n "portal_status": "sent",\n "portal_status_updated_at": "1970-01-01T00:00:00.000Z",\n "portal_state": {},\n "entity_ui_status": "seen",\n "entity_ui_status_updated_at": "1970-01-01T00:00:00.000Z",\n "entity_ui_status_before_dismiss": "seen",\n "message_entity_id": "string",\n "email_status": "sent",\n "email_status_updated_at": "1970-01-01T00:00:00.000Z",\n "email_bounce_type": "permanent",\n "email_bounce_subtype": "string",\n "email_complaint_type": "string",\n "email_bounce_reason": "string",\n "email_send_error": {},\n "email_unsubscribed_at": "1970-01-01T00:00:00.000Z",\n "email_open_count": 0,\n "email_first_opened_at": "1970-01-01T00:00:00.000Z",\n "email_last_opened_at": "1970-01-01T00:00:00.000Z",\n "email_click_count": 0,\n "email_first_clicked_at": "1970-01-01T00:00:00.000Z",\n "email_clicked_links": [\n {\n "url": "string",\n "clicked_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "updated_at": "1970-01-01T00:00:00.000Z"\n }\n ],\n "next": "string",\n "total": 0\n}\n```\n\n</details>\n\n---\n\n### `getEmailStats`\n\nAggregate email delivery counts for a campaign, for the KPI summary on the campaign UI.\nCounts cover the email (automation) channel only; `total_emailed` is the number of\nrecipients with a recorded em\n\n`GET /v1/campaign/{campaign_id}/email-stats`\n\n```ts\nconst { data } = await client.getEmailStats({\n campaign_id: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "total_emailed": 0,\n "sent": 0,\n "delivered": 0,\n "bounced": 0,\n "bounced_hard": 0,\n "bounced_soft": 0,\n "complained": 0,\n "failed": 0,\n "unsubscribed": 0,\n "opened": 0,\n "clicked": 0,\n "total_opens": 0,\n "total_clicks": 0\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `BaseError`\n\n```ts\ntype BaseError = {\n status: number\n message: string\n}\n```\n\n### `ServerError`\n\n```ts\ntype ServerError = {\n status: number\n message: string\n}\n```\n\n### `ClientError`\n\nDescribes the structure of a client error response, which can be one of several types:\n1. `MessageError`: Contains a \'message\' field for general descriptive errors.\n2. `CodeError`: Contains a \'code\' field for specific, machine-readable error codes.\n3. `StatusedError`: Contains \'error\' and \'status\' f\n\n```ts\ntype ClientError = {\n message: string\n} | {\n code: "CAMPAIGN_NOT_FOUND" | "CAMPAIGN_HAS_NO_TARGET" | "CAMPAIGN_HAS_NO_DELIVERY_METHOD" | "INVALID_NEXT_BEST_ACTION" | "CAMPAIGN_HAS_JOB_IN_PROGRESS" | "CAMPAIGN_HAS_UNEXPECTED_STATUS" | "JOB_TOKEN_MISSING" | "TARGET_WITHOUT_FILTERS"\n} | {\n error: string\n status: number\n}\n```\n\n### `BaseUUID`\n\n```ts\ntype BaseUUID = string // uuid\n```\n\n### `BaseNanoID`\n\n```ts\ntype BaseNanoID = string\n```\n\n### `BaseTags`\n\n```ts\ntype BaseTags = string[]\n```\n\n### `BaseRelation`\n\n```ts\ntype BaseRelation = {\n $relation?: Array<{\n entity_id?: string // uuid\n _tags?: string[]\n }>\n}\n```\n\n### `BaseSystemId`\n\n```ts\ntype BaseSystemId = {\n _id: string // uuid\n}\n```\n\n### `BaseEntityOwner`\n\nThe user / organization owning this entity.\n\nNote: Owner implicitly has access to the entity regardless of ACLs.\n\n\n```ts\ntype BaseEntityOwner = {\n org_id: string\n user_id?: string\n}\n```\n\n### `BaseEntityAcl`\n\nAccess control list (ACL) for an entity. Defines sharing access to external orgs or users.\n\n```ts\ntype BaseEntityAcl = {\n view?: string[]\n edit?: string[]\n delete?: string[]\n}\n```\n\n### `BaseSystemFields`\n\n```ts\ntype BaseSystemFields = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n}\n```\n\n### `BaseSystemFieldsRequired`\n\n```ts\ntype BaseSystemFieldsRequired = object\n```\n\n### `CampaignStatus`\n\n```ts\ntype CampaignStatus = "draft" | "activating" | "active" | "inactive"\n```\n\n### `ExecutionSummaryItem`\n\n```ts\ntype ExecutionSummaryItem = {\n execution_id?: string\n execution_status?: string\n}\n```\n\n### `JobStatus`\n\n```ts\ntype JobStatus = {\n status?: "queued" | "processing" | "finished" | "failed" | "cancelled" | "send_report"\n execution_summary?: Array<{\n execution_id?: string\n execution_status?: string\n }>\n}\n```\n\n### `Campaign`\n\n```ts\ntype Campaign = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n name?: string\n goal?: string\n status?: "draft" | "activating" | "active" | "inactive"\n start_date?: string // date\n end_date?: string // date\n flow_id?: string\n job_id?: string\n target?: {\n $relation?: Array<{\n entity_id?: { ... }\n _tags?: { ... }\n }>\n }\n}\n```\n\n### `Target`\n\n```ts\ntype Target = {\n _id?: string // uuid\n _org?: string\n _owners?: Array<{\n org_id: string\n user_id?: string\n }>\n _schema?: string\n _title?: string\n _tags?: string[]\n _created_at?: string // date-time\n _updated_at?: string // date-time\n _acl?: {\n view?: string[]\n edit?: string[]\n delete?: string[]\n }\n name?: string\n description?: string\n entity_schema?: string\n entity_filters?: Record<string, unknown>\n}\n```\n\n### `MatchCampaignParams`\n\n```ts\ntype MatchCampaignParams = {\n entity_refs: Array<{\n entity_id: string // uuid\n entity_schema: string\n }>\n campaign_ids: string // uuid[]\n}\n```\n\n### `NextBestAction`\n\nA Next Best Action configured on a campaign\'s Entity-UI channel.\nThis is the canonical NBA contract shared by discovery (this API), authoring, and rendering.\nNBA content is single-language in v1; text fields may contain `{{placeholders}}` resolved at render time.\n\n\n```ts\ntype NextBestAction = {\n category?: string\n icon?: {\n name: string\n color?: string\n }\n title: string\n body?: string\n priority?: "low" | "medium" | "high"\n is_dismissable?: boolean\n cta: {\n type: "journey" | "workflow" | "flow"\n target: string\n context_params?: Array<{\n key: { ... }\n value: { ... }\n }>\n }\n}\n```\n\n### `DiscoverCampaignsParams`\n\n```ts\ntype DiscoverCampaignsParams = {\n entity_id: string // uuid\n entity_schema: string\n}\n```\n\n### `DiscoverResult`\n\nOne discovered Next Best Action, plus this entity\'s interaction state for it.\n\n```ts\ntype DiscoverResult = {\n campaign_id: string // uuid\n nba: {\n category?: string\n icon?: {\n name: { ... }\n color?: { ... }\n }\n title: string\n body?: string\n priority?: "low" | "medium" | "high"\n is_dismissable?: boolean\n cta: {\n type: { ... }\n target: { ... }\n context_params?: { ... }\n }\n }\n status?: "seen" | "dismissed" | "clicked"\n status_updated_at?: string // date-time\n}\n```\n\n### `MatchTargetParams`\n\n```ts\ntype MatchTargetParams = {\n entity_refs: Array<{\n entity_id: string // uuid\n entity_schema: string\n }>\n target_ids: string // uuid[]\n}\n```\n\n### `GetTargetQueriesParams`\n\n```ts\ntype GetTargetQueriesParams = {\n target_ids: string // uuid[]\n}\n```\n\n### `TargetQueryResult`\n\n```ts\ntype TargetQueryResult = {\n target_id: string // uuid\n query: string\n error?: string\n}\n```\n\n### `AutomationStatus`\n\n```ts\ntype AutomationStatus = "pending" | "in_progress" | "success" | "failed" | "cancelled"\n```\n\n### `PortalStatus`\n\n```ts\ntype PortalStatus = "sent" | "seen" | "dismissed" | "clicked"\n```\n\n### `EntityUiStatus`\n\nLifecycle status of a Next Best Action on the Entity-UI channel. Unlike the portal\nchannel there is no `sent` state: an NBA recipient is born at `seen`, the moment the\naction is first rendered to an agent.\n\n\n```ts\ntype EntityUiStatus = "seen" | "dismissed" | "clicked"\n```\n\n### `EmailStatus`\n\nDelivery status of the email a campaign\'s automation sends to a recipient. Set to `sent`\nonce the automation hands the email off, then updated asynchronously as SES notifications\narrive (`bounced` / `complained`; an SES Reject maps to `bounced`). `failed` is a send-time\nfailure (the automation execu\n\n```ts\ntype EmailStatus = "sent" | "delivered" | "bounced" | "complained" | "failed"\n```\n\n### `EmailBounceType`\n\nSES bounce classification: `permanent` (hard) or `transient` (soft).\n\n```ts\ntype EmailBounceType = "permanent" | "transient"\n```\n\n### `Recipient`\n\n```ts\ntype Recipient = {\n entity_id?: string // uuid\n entity_schema?: string\n title?: string\n automation_status?: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id?: string\n portal_status?: "sent" | "seen" | "dismissed" | "clicked"\n portal_status_updated_at?: string // date-time\n portal_state?: Record<string, unknown>\n entity_ui_status?: "seen" | "dismissed" | "clicked"\n entity_ui_status_updated_at?: string // date-time\n entity_ui_status_before_dismiss?: "seen" | "dismissed" | "clicked"\n message_entity_id?: string\n email_status?: "sent" | "delivered" | "bounced" | "complained" | "failed"\n email_status_updated_at?: string // date-time\n email_bounce_type?: "permanent" | "transient"\n email_bounce_subtype?: string\n email_complaint_type?: string\n email_bounce_reason?: string\n email_send_error?: Record<string, unknown>\n email_unsubscribed_at?: string // date-time\n email_open_count?: number\n email_first_opened_at?: string // date-time\n email_last_opened_at?: string // date-time\n email_click_count?: number\n email_first_clicked_at?: string // date-time\n email_clicked_links?: Array<{\n url: string\n clicked_at: string // date-time\n }>\n updated_at?: string // date-time\n}\n```\n\n### `BaseRecipientPayload`\n\n```ts\ntype BaseRecipientPayload = {\n entity_id: string // uuid\n entity_schema: string\n}\n```\n\n### `AutomationRecipientPayload`\n\n```ts\ntype AutomationRecipientPayload = {\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n}\n```\n\n### `PortalRecipientPayload`\n\n```ts\ntype PortalRecipientPayload = {\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `CreateRecipientPayload`\n\n```ts\ntype CreateRecipientPayload = {\n entity_id: string // uuid\n entity_schema: string\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n} | {\n entity_id: string // uuid\n entity_schema: string\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n} | {\n entity_id: string // uuid\n entity_schema: string\n automation_status: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id: string\n portal_status: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `UpdateRecipientPayload`\n\n```ts\ntype UpdateRecipientPayload = {\n automation_status?: "pending" | "in_progress" | "success" | "failed" | "cancelled"\n automation_execution_id?: string\n portal_status?: "sent" | "seen" | "dismissed" | "clicked"\n portal_state?: Record<string, unknown>\n}\n```\n\n### `RetriggerAutomationsRequest`\n\n```ts\ntype RetriggerAutomationsRequest = {\n recipient_ids: string // uuid[]\n}\n```\n\n### `RetriggerAutomationsResult`\n\n```ts\ntype RetriggerAutomationsResult = {\n recipient_id: string // uuid\n result: "success" | "failure" | "not_found" | "invalid_status"\n execution_id?: string\n error?: string\n}\n```\n\n### `UpdatePortalStatusRequest`\n\n```ts\ntype UpdatePortalStatusRequest = {\n status: "sent" | "seen" | "dismissed" | "clicked"\n}\n```\n\n### `UpdateEntityUiStatusRequest`\n\n```ts\ntype UpdateEntityUiStatusRequest = {\n status: "seen" | "dismissed" | "clicked"\n entity_schema?: string\n}\n```\n\n### `SetupCampaignRequest`\n\nDiscriminated by `type`. Each campaign variant has its own request shape;\nnew variants are added by introducing a new schema and extending the `oneOf` list.\n\n\n```ts\ntype SetupCampaignRequest = {\n type: "tariff_change"\n product_recommendation: {\n name?: string\n source_product_id?: string // uuid\n source_price_id?: string // uuid\n offers?: Array<{\n target_id?: { ... }\n items: { ... }\n }>\n }\n campaign: {\n name: string\n goal?: string\n target_ids: string // uuid[]\n }\n journey?: {\n journey_id: string // uuid\n }\n channels?: {\n portal_widget?: {\n portal_id: { ... }\n block_id: { ... }\n }\n email?: {\n automation_id?: { ... }\n template_id?: { ... }\n }\n }\n}\n```\n\n### `SetupTariffChangeCampaignRequest`\n\n```ts\ntype SetupTariffChangeCampaignRequest = {\n type: "tariff_change"\n product_recommendation: {\n name?: string\n source_product_id?: string // uuid\n source_price_id?: string // uuid\n offers?: Array<{\n target_id?: { ... }\n items: { ... }\n }>\n }\n campaign: {\n name: string\n goal?: string\n target_ids: string // uuid[]\n }\n journey?: {\n journey_id: string // uuid\n }\n channels?: {\n portal_widget?: {\n portal_id: { ... }\n block_id: { ... }\n }\n email?: {\n automation_id?: { ... }\n template_id?: { ... }\n }\n }\n}\n```\n\n### `SetupTariffChangeCampaignResponse`\n\n```ts\ntype SetupTariffChangeCampaignResponse = {\n type: "tariff_change"\n product_recommendation_id: string // uuid\n campaign_id: string // uuid\n journey_id?: string // uuid\n portal_widget_id?: string // uuid\n}\n```\n';
5
- export {
6
- targeting_default as default
7
- };