@epilot/sdk 2.18.31 → 2.18.32

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 (122) hide show
  1. package/definitions/integration-toolkit-runtime.json +1 -1
  2. package/definitions/integration-toolkit.json +942 -45
  3. package/dist/apis/access-token.cjs +6 -6
  4. package/dist/apis/access-token.js +1 -1
  5. package/dist/apis/address-suggestions.cjs +6 -6
  6. package/dist/apis/address-suggestions.js +1 -1
  7. package/dist/apis/address.cjs +6 -6
  8. package/dist/apis/address.js +1 -1
  9. package/dist/apis/ai-agents.cjs +6 -6
  10. package/dist/apis/ai-agents.js +1 -1
  11. package/dist/apis/app.cjs +6 -6
  12. package/dist/apis/app.js +1 -1
  13. package/dist/apis/audit-logs.cjs +6 -6
  14. package/dist/apis/audit-logs.js +1 -1
  15. package/dist/apis/automation.cjs +6 -6
  16. package/dist/apis/automation.js +1 -1
  17. package/dist/apis/billing.cjs +6 -6
  18. package/dist/apis/billing.js +1 -1
  19. package/dist/apis/blueprint-manifest.cjs +6 -6
  20. package/dist/apis/blueprint-manifest.js +1 -1
  21. package/dist/apis/calendar.cjs +6 -6
  22. package/dist/apis/calendar.js +1 -1
  23. package/dist/apis/configuration-hub.cjs +6 -6
  24. package/dist/apis/configuration-hub.js +1 -1
  25. package/dist/apis/consent.cjs +6 -6
  26. package/dist/apis/consent.js +1 -1
  27. package/dist/apis/customer-portal.cjs +6 -6
  28. package/dist/apis/customer-portal.js +1 -1
  29. package/dist/apis/dashboard.cjs +6 -6
  30. package/dist/apis/dashboard.js +1 -1
  31. package/dist/apis/data-governance.cjs +6 -6
  32. package/dist/apis/data-governance.js +1 -1
  33. package/dist/apis/deduplication.cjs +6 -6
  34. package/dist/apis/deduplication.js +1 -1
  35. package/dist/apis/design.cjs +6 -6
  36. package/dist/apis/design.js +1 -1
  37. package/dist/apis/document.cjs +6 -6
  38. package/dist/apis/document.js +1 -1
  39. package/dist/apis/email-settings.cjs +6 -6
  40. package/dist/apis/email-settings.js +1 -1
  41. package/dist/apis/email-template.cjs +6 -6
  42. package/dist/apis/email-template.js +1 -1
  43. package/dist/apis/entity-mapping.cjs +6 -6
  44. package/dist/apis/entity-mapping.js +1 -1
  45. package/dist/apis/entity.cjs +6 -6
  46. package/dist/apis/entity.js +1 -1
  47. package/dist/apis/environments.cjs +6 -6
  48. package/dist/apis/environments.js +1 -1
  49. package/dist/apis/event-catalog.cjs +6 -6
  50. package/dist/apis/event-catalog.js +1 -1
  51. package/dist/apis/file.cjs +6 -6
  52. package/dist/apis/file.js +1 -1
  53. package/dist/apis/iban.cjs +6 -6
  54. package/dist/apis/iban.js +1 -1
  55. package/dist/apis/integration-toolkit.cjs +8 -8
  56. package/dist/apis/integration-toolkit.js +2 -2
  57. package/dist/apis/journey.cjs +6 -6
  58. package/dist/apis/journey.js +1 -1
  59. package/dist/apis/kanban.cjs +6 -6
  60. package/dist/apis/kanban.js +1 -1
  61. package/dist/apis/message.cjs +6 -6
  62. package/dist/apis/message.js +1 -1
  63. package/dist/apis/metering.cjs +6 -6
  64. package/dist/apis/metering.js +1 -1
  65. package/dist/apis/notes.cjs +6 -6
  66. package/dist/apis/notes.js +1 -1
  67. package/dist/apis/notification.cjs +6 -6
  68. package/dist/apis/notification.js +1 -1
  69. package/dist/apis/organization.cjs +6 -6
  70. package/dist/apis/organization.js +1 -1
  71. package/dist/apis/partner-directory.cjs +6 -6
  72. package/dist/apis/partner-directory.js +1 -1
  73. package/dist/apis/permissions.cjs +6 -6
  74. package/dist/apis/permissions.js +1 -1
  75. package/dist/apis/pricing-tier.cjs +6 -6
  76. package/dist/apis/pricing-tier.js +1 -1
  77. package/dist/apis/pricing.cjs +6 -6
  78. package/dist/apis/pricing.js +1 -1
  79. package/dist/apis/purpose.cjs +6 -6
  80. package/dist/apis/purpose.js +1 -1
  81. package/dist/apis/query.cjs +6 -6
  82. package/dist/apis/query.js +1 -1
  83. package/dist/apis/sandbox.cjs +6 -6
  84. package/dist/apis/sandbox.js +1 -1
  85. package/dist/apis/sharing.cjs +6 -6
  86. package/dist/apis/sharing.js +1 -1
  87. package/dist/apis/snapshot.cjs +6 -6
  88. package/dist/apis/snapshot.js +1 -1
  89. package/dist/apis/submission.cjs +6 -6
  90. package/dist/apis/submission.js +1 -1
  91. package/dist/apis/target.cjs +6 -6
  92. package/dist/apis/target.js +1 -1
  93. package/dist/apis/targeting.cjs +6 -6
  94. package/dist/apis/targeting.js +1 -1
  95. package/dist/apis/template-variables.cjs +6 -6
  96. package/dist/apis/template-variables.js +1 -1
  97. package/dist/apis/user.cjs +6 -6
  98. package/dist/apis/user.js +1 -1
  99. package/dist/apis/validation-rules.cjs +6 -6
  100. package/dist/apis/validation-rules.js +1 -1
  101. package/dist/apis/webhooks.cjs +6 -6
  102. package/dist/apis/webhooks.js +1 -1
  103. package/dist/apis/workflow-definition.cjs +6 -6
  104. package/dist/apis/workflow-definition.js +1 -1
  105. package/dist/apis/workflow.cjs +6 -6
  106. package/dist/apis/workflow.js +1 -1
  107. package/dist/chunk-2WGN6U22.cjs +14 -0
  108. package/dist/{chunk-JZBUH4RD.cjs → chunk-5A6KKQEZ.cjs} +2 -2
  109. package/dist/chunk-ECZ337CC.js +14 -0
  110. package/dist/{chunk-RKEGU6OW.js → chunk-Z3EVGVBQ.js} +2 -2
  111. package/dist/index.cjs +10 -10
  112. package/dist/index.js +2 -2
  113. package/dist/integration-toolkit-RVVT6BCK.cjs +7 -0
  114. package/dist/integration-toolkit-X64BK3WX.js +7 -0
  115. package/dist/{integration-toolkit-runtime-ZWS4WRKI.cjs → integration-toolkit-runtime-AL7GHT6B.cjs} +2 -2
  116. package/dist/{integration-toolkit-runtime-3RZRSZCW.js → integration-toolkit-runtime-M3GLLRLF.js} +1 -1
  117. package/docs/integration-toolkit.md +545 -19
  118. package/package.json +1 -1
  119. package/dist/chunk-ILRZHW2E.cjs +0 -14
  120. package/dist/chunk-VA34RFFR.js +0 -14
  121. package/dist/integration-toolkit-2WF2P4OX.cjs +0 -7
  122. package/dist/integration-toolkit-RDFELVKR.js +0 -7
@@ -29,6 +29,7 @@ const { data } = await integrationToolkitClient.acknowledgeTracking(...)
29
29
  - [`triggerErp`](#triggererp)
30
30
  - [`processErpUpdatesEventsV3`](#processerpupdateseventsv3)
31
31
  - [`simulateMappingV2`](#simulatemappingv2)
32
+ - [`simulateDirect`](#simulatedirect)
32
33
  - [`simulateMapping`](#simulatemapping)
33
34
 
34
35
  **integrations**
@@ -63,6 +64,7 @@ const { data } = await integrationToolkitClient.acknowledgeTracking(...)
63
64
  - [`setIntegrationAppMapping`](#setintegrationappmapping)
64
65
  - [`deleteIntegrationAppMapping`](#deleteintegrationappmapping)
65
66
  - [`getOutboundStatus`](#getoutboundstatus)
67
+ - [`getEntitySyncStatus`](#getentitysyncstatus)
66
68
  - [`pollOutboundMessages`](#polloutboundmessages)
67
69
  - [`ackOutboundMessages`](#ackoutboundmessages)
68
70
  - [`listOutboundDlqMessages`](#listoutbounddlqmessages)
@@ -233,6 +235,16 @@ const { data } = await integrationToolkitClient.acknowledgeTracking(...)
233
235
  - [`MappingSimulationV2Request`](#mappingsimulationv2request)
234
236
  - [`MappingSimulationResponse`](#mappingsimulationresponse)
235
237
  - [`MappingSimulationWarning`](#mappingsimulationwarning)
238
+ - [`DirectPayload`](#directpayload)
239
+ - [`DirectEntityOperation`](#directentityoperation)
240
+ - [`DirectMeterReadingOperation`](#directmeterreadingoperation)
241
+ - [`DirectRelationValue`](#directrelationvalue)
242
+ - [`DirectRelationItem`](#directrelationitem)
243
+ - [`DirectRelationRefValue`](#directrelationrefvalue)
244
+ - [`DirectRelationRefItem`](#directrelationrefitem)
245
+ - [`DirectSimulationRequest`](#directsimulationrequest)
246
+ - [`DirectSimulationResponse`](#directsimulationresponse)
247
+ - [`DirectSimulationError`](#directsimulationerror)
236
248
  - [`EntityUpdate`](#entityupdate)
237
249
  - [`MeterReadingUpdate`](#meterreadingupdate)
238
250
  - [`EntityPruneScopeUpdate`](#entityprunescopeupdate)
@@ -246,6 +258,8 @@ const { data } = await integrationToolkitClient.acknowledgeTracking(...)
246
258
  - [`WebhookDeliveryConfig`](#webhookdeliveryconfig)
247
259
  - [`PollDeliveryConfig`](#polldeliveryconfig)
248
260
  - [`FileProxyDeliveryConfig`](#fileproxydeliveryconfig)
261
+ - [`EntitySyncStatusResponse`](#entitysyncstatusresponse)
262
+ - [`EntitySyncState`](#entitysyncstate)
249
263
  - [`OutboundStatusResponse`](#outboundstatusresponse)
250
264
  - [`OutboundUseCaseStatus`](#outboundusecasestatus)
251
265
  - [`OutboundFileProxyTargetStatus`](#outboundfileproxytargetstatus)
@@ -424,6 +438,7 @@ const { data } = await client.simulateMappingV2(
424
438
  null,
425
439
  {
426
440
  event_configuration: {
441
+ direct: true,
427
442
  entities: [
428
443
  { /* ... */ }
429
444
  ],
@@ -509,6 +524,89 @@ const { data } = await client.simulateMappingV2(
509
524
 
510
525
  ---
511
526
 
527
+ ### `simulateDirect`
528
+
529
+ Dry run for direct-mode payloads: validates a `DirectPayload` against a `direct: true`
530
+ use case configuration and previews the internal entity and meter reading updates the
531
+ pipeline would apply — with
532
+
533
+ `POST /v1/erp/updates/direct_simulation`
534
+
535
+ ```ts
536
+ const { data } = await client.simulateDirect(
537
+ null,
538
+ {
539
+ event_configuration: {
540
+ direct: true,
541
+ entities: [
542
+ { /* ... */ }
543
+ ],
544
+ meter_readings: [
545
+ { /* ... */ }
546
+ ]
547
+ },
548
+ payload: 'string'
549
+ },
550
+ )
551
+ ```
552
+
553
+ <details>
554
+ <summary>Response</summary>
555
+
556
+ ```json
557
+ {
558
+ "valid": true,
559
+ "errors": [
560
+ {
561
+ "code": "DIRECT_PAYLOAD_INVALID",
562
+ "message": "string",
563
+ "operation_index": 0
564
+ }
565
+ ],
566
+ "warnings": [
567
+ {
568
+ "entity_schema": "string",
569
+ "field": "string",
570
+ "message": "string"
571
+ }
572
+ ],
573
+ "entity_updates": [
574
+ {
575
+ "entity_slug": "string",
576
+ "unique_identifiers": {},
577
+ "attributes": {},
578
+ "pricing": {
579
+ "config": {},
580
+ "data": [
581
+ {}
582
+ ]
583
+ },
584
+ "mode": "upsert",
585
+ "unique_identifiers_metadata": {}
586
+ }
587
+ ],
588
+ "meter_reading_updates": [
589
+ {
590
+ "meter": {
591
+ "$entity_unique_ids": {}
592
+ },
593
+ "meter_counter": {
594
+ "$entity_unique_ids": {}
595
+ },
596
+ "attributes": {},
597
+ "mode": "upsert",
598
+ "_config": {
599
+ "reading_matching": "external_id"
600
+ }
601
+ }
602
+ ]
603
+ }
604
+ ```
605
+
606
+ </details>
607
+
608
+ ---
609
+
512
610
  ### `simulateMapping`
513
611
 
514
612
  Test mapping configuration by transforming a payload using the provided mapping rules without persisting data.
@@ -1133,6 +1231,7 @@ const { data } = await client.createUseCase(
1133
1231
  enabled: true,
1134
1232
  type: 'inbound',
1135
1233
  configuration: {
1234
+ direct: true,
1136
1235
  entities: [
1137
1236
  { /* ... */ }
1138
1237
  ],
@@ -1160,6 +1259,7 @@ const { data } = await client.createUseCase(
1160
1259
  "created_at": "1970-01-01T00:00:00.000Z",
1161
1260
  "updated_at": "1970-01-01T00:00:00.000Z",
1162
1261
  "configuration": {
1262
+ "direct": true,
1163
1263
  "entities": [
1164
1264
  {}
1165
1265
  ],
@@ -1203,6 +1303,7 @@ const { data } = await client.getUseCase({
1203
1303
  "created_at": "1970-01-01T00:00:00.000Z",
1204
1304
  "updated_at": "1970-01-01T00:00:00.000Z",
1205
1305
  "configuration": {
1306
+ "direct": true,
1206
1307
  "entities": [
1207
1308
  {}
1208
1309
  ],
@@ -1236,6 +1337,7 @@ const { data } = await client.updateUseCase(
1236
1337
  change_description: 'string',
1237
1338
  type: 'inbound',
1238
1339
  configuration: {
1340
+ direct: true,
1239
1341
  entities: [
1240
1342
  { /* ... */ }
1241
1343
  ],
@@ -1263,6 +1365,7 @@ const { data } = await client.updateUseCase(
1263
1365
  "created_at": "1970-01-01T00:00:00.000Z",
1264
1366
  "updated_at": "1970-01-01T00:00:00.000Z",
1265
1367
  "configuration": {
1368
+ "direct": true,
1266
1369
  "entities": [
1267
1370
  {}
1268
1371
  ],
@@ -2551,6 +2654,46 @@ const { data } = await client.getOutboundStatus({
2551
2654
 
2552
2655
  ---
2553
2656
 
2657
+ ### `getEntitySyncStatus`
2658
+
2659
+ Get the inbound ERP sync status of an entity: when each integration last
2660
+ synchronized (checked) the entity against the ERP, and when it last
2661
+ actually changed it. `last_synced_at` also advances on no-o
2662
+
2663
+ `GET /v1/entities/{entityId}/sync-status`
2664
+
2665
+ ```ts
2666
+ const { data } = await client.getEntitySyncStatus({
2667
+ entityId: 'example',
2668
+ integration_id: 'example',
2669
+ })
2670
+ ```
2671
+
2672
+ <details>
2673
+ <summary>Response</summary>
2674
+
2675
+ ```json
2676
+ {
2677
+ "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
2678
+ "sync_states": [
2679
+ {
2680
+ "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
2681
+ "integration_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
2682
+ "entity_slug": "contract",
2683
+ "use_case_id": "string",
2684
+ "last_synced_at": "1970-01-01T00:00:00.000Z",
2685
+ "last_changed_at": "1970-01-01T00:00:00.000Z",
2686
+ "last_operation": "create",
2687
+ "last_event_id": "string"
2688
+ }
2689
+ ]
2690
+ }
2691
+ ```
2692
+
2693
+ </details>
2694
+
2695
+ ---
2696
+
2554
2697
  ### `pollOutboundMessages`
2555
2698
 
2556
2699
  Poll outbound messages for an integration's poll-mode use cases.
@@ -4753,6 +4896,7 @@ type IntegrationWithUseCases = {
4753
4896
  created_at: string // date-time
4754
4897
  updated_at: string // date-time
4755
4898
  configuration?: {
4899
+ direct?: { ... }
4756
4900
  entities?: { ... }
4757
4901
  meter_readings?: { ... }
4758
4902
  }
@@ -4908,6 +5052,7 @@ type UpsertIntegrationWithUseCasesRequest = {
4908
5052
  change_description?: string
4909
5053
  type: "inbound"
4910
5054
  configuration?: {
5055
+ direct?: { ... }
4911
5056
  entities?: { ... }
4912
5057
  meter_readings?: { ... }
4913
5058
  }
@@ -4940,7 +5085,6 @@ type UpsertIntegrationWithUseCasesRequest = {
4940
5085
  params?: { ... }
4941
5086
  allowed_origins?: { ... }
4942
5087
  steps: { ... }
4943
- response?: { ... }
4944
5088
  // ...
4945
5089
  }
4946
5090
  ```
@@ -4951,6 +5095,7 @@ Configuration for inbound use cases (ERP to epilot)
4951
5095
 
4952
5096
  ```ts
4953
5097
  type InboundIntegrationEventConfiguration = {
5098
+ direct?: boolean
4954
5099
  entities?: Array<{
4955
5100
  entity_schema: string
4956
5101
  unique_ids: string[]
@@ -4963,7 +5108,7 @@ type InboundIntegrationEventConfiguration = {
4963
5108
  unique_ids?: { ... }
4964
5109
  query?: { ... }
4965
5110
  }
4966
- fields: Array<{
5111
+ fields?: Array<{
4967
5112
  attribute: { ... }
4968
5113
  field?: { ... }
4969
5114
  jsonataExpression?: { ... }
@@ -5068,7 +5213,7 @@ type IntegrationEntity = {
5068
5213
  constant?: { ... }
5069
5214
  }>
5070
5215
  }
5071
- fields: Array<{
5216
+ fields?: Array<{
5072
5217
  attribute: string
5073
5218
  field?: string
5074
5219
  jsonataExpression?: string
@@ -5469,6 +5614,7 @@ type EmbeddedUseCaseRequest = {
5469
5614
  change_description?: string
5470
5615
  type: "inbound"
5471
5616
  configuration?: {
5617
+ direct?: boolean
5472
5618
  entities?: Array<{
5473
5619
  entity_schema: { ... }
5474
5620
  unique_ids: { ... }
@@ -5476,7 +5622,7 @@ type EmbeddedUseCaseRequest = {
5476
5622
  enabled?: { ... }
5477
5623
  mode?: { ... }
5478
5624
  scope?: { ... }
5479
- fields: { ... }
5625
+ fields?: { ... }
5480
5626
  }>
5481
5627
  meter_readings?: Array<{
5482
5628
  jsonataExpression?: { ... }
@@ -5560,7 +5706,6 @@ type EmbeddedUseCaseRequest = {
5560
5706
  }>
5561
5707
  response?: {
5562
5708
  body: { ... }
5563
- encoding: { ... }
5564
5709
  // ...
5565
5710
  }
5566
5711
  ```
@@ -5588,6 +5733,7 @@ type EmbeddedInboundUseCaseRequest = {
5588
5733
  change_description?: string
5589
5734
  type: "inbound"
5590
5735
  configuration?: {
5736
+ direct?: boolean
5591
5737
  entities?: Array<{
5592
5738
  entity_schema: { ... }
5593
5739
  unique_ids: { ... }
@@ -5595,7 +5741,7 @@ type EmbeddedInboundUseCaseRequest = {
5595
5741
  enabled?: { ... }
5596
5742
  mode?: { ... }
5597
5743
  scope?: { ... }
5598
- fields: { ... }
5744
+ fields?: { ... }
5599
5745
  }>
5600
5746
  meter_readings?: Array<{
5601
5747
  jsonataExpression?: { ... }
@@ -5774,6 +5920,7 @@ type InboundUseCase = {
5774
5920
  created_at: string // date-time
5775
5921
  updated_at: string // date-time
5776
5922
  configuration?: {
5923
+ direct?: boolean
5777
5924
  entities?: Array<{
5778
5925
  entity_schema: { ... }
5779
5926
  unique_ids: { ... }
@@ -5781,7 +5928,7 @@ type InboundUseCase = {
5781
5928
  enabled?: { ... }
5782
5929
  mode?: { ... }
5783
5930
  scope?: { ... }
5784
- fields: { ... }
5931
+ fields?: { ... }
5785
5932
  }>
5786
5933
  meter_readings?: Array<{
5787
5934
  jsonataExpression?: { ... }
@@ -5964,6 +6111,7 @@ type UseCase = {
5964
6111
  created_at: string // date-time
5965
6112
  updated_at: string // date-time
5966
6113
  configuration?: {
6114
+ direct?: boolean
5967
6115
  entities?: Array<{
5968
6116
  entity_schema: { ... }
5969
6117
  unique_ids: { ... }
@@ -5971,7 +6119,7 @@ type UseCase = {
5971
6119
  enabled?: { ... }
5972
6120
  mode?: { ... }
5973
6121
  scope?: { ... }
5974
- fields: { ... }
6122
+ fields?: { ... }
5975
6123
  }>
5976
6124
  meter_readings?: Array<{
5977
6125
  jsonataExpression?: { ... }
@@ -6051,7 +6199,6 @@ type UseCase = {
6051
6199
  required: { ... }
6052
6200
  description?: { ... }
6053
6201
  }>
6054
- allowed_origins?: string // uri[]
6055
6202
  // ...
6056
6203
  }
6057
6204
  ```
@@ -6065,6 +6212,7 @@ type CreateUseCaseRequest = {
6065
6212
  enabled: boolean
6066
6213
  type: "inbound"
6067
6214
  configuration?: {
6215
+ direct?: boolean
6068
6216
  entities?: Array<{
6069
6217
  entity_schema: { ... }
6070
6218
  unique_ids: { ... }
@@ -6072,7 +6220,7 @@ type CreateUseCaseRequest = {
6072
6220
  enabled?: { ... }
6073
6221
  mode?: { ... }
6074
6222
  scope?: { ... }
6075
- fields: { ... }
6223
+ fields?: { ... }
6076
6224
  }>
6077
6225
  meter_readings?: Array<{
6078
6226
  jsonataExpression?: { ... }
@@ -6158,7 +6306,6 @@ type CreateUseCaseRequest = {
6158
6306
  }
6159
6307
  prevent_indirect_serving?: boolean
6160
6308
  }
6161
- } | {
6162
6309
  // ...
6163
6310
  }
6164
6311
  ```
@@ -6182,6 +6329,7 @@ type CreateInboundUseCaseRequest = {
6182
6329
  enabled: boolean
6183
6330
  type: "inbound"
6184
6331
  configuration?: {
6332
+ direct?: boolean
6185
6333
  entities?: Array<{
6186
6334
  entity_schema: { ... }
6187
6335
  unique_ids: { ... }
@@ -6189,7 +6337,7 @@ type CreateInboundUseCaseRequest = {
6189
6337
  enabled?: { ... }
6190
6338
  mode?: { ... }
6191
6339
  scope?: { ... }
6192
- fields: { ... }
6340
+ fields?: { ... }
6193
6341
  }>
6194
6342
  meter_readings?: Array<{
6195
6343
  jsonataExpression?: { ... }
@@ -6338,6 +6486,7 @@ type UpdateUseCaseRequest = {
6338
6486
  change_description?: string
6339
6487
  type?: "inbound"
6340
6488
  configuration?: {
6489
+ direct?: boolean
6341
6490
  entities?: Array<{
6342
6491
  entity_schema: { ... }
6343
6492
  unique_ids: { ... }
@@ -6345,7 +6494,7 @@ type UpdateUseCaseRequest = {
6345
6494
  enabled?: { ... }
6346
6495
  mode?: { ... }
6347
6496
  scope?: { ... }
6348
- fields: { ... }
6497
+ fields?: { ... }
6349
6498
  }>
6350
6499
  meter_readings?: Array<{
6351
6500
  jsonataExpression?: { ... }
@@ -6430,7 +6579,6 @@ type UpdateUseCaseRequest = {
6430
6579
  encoding: { ... }
6431
6580
  filename?: { ... }
6432
6581
  content_type?: { ... }
6433
- }
6434
6582
  // ...
6435
6583
  }
6436
6584
  ```
@@ -6456,6 +6604,7 @@ type UpdateInboundUseCaseRequest = {
6456
6604
  change_description?: string
6457
6605
  type?: "inbound"
6458
6606
  configuration?: {
6607
+ direct?: boolean
6459
6608
  entities?: Array<{
6460
6609
  entity_schema: { ... }
6461
6610
  unique_ids: { ... }
@@ -6463,7 +6612,7 @@ type UpdateInboundUseCaseRequest = {
6463
6612
  enabled?: { ... }
6464
6613
  mode?: { ... }
6465
6614
  scope?: { ... }
6466
- fields: { ... }
6615
+ fields?: { ... }
6467
6616
  }>
6468
6617
  meter_readings?: Array<{
6469
6618
  jsonataExpression?: { ... }
@@ -6627,6 +6776,7 @@ type UseCaseHistoryEntry = {
6627
6776
  history_created_at: string // date-time
6628
6777
  type: "inbound"
6629
6778
  configuration?: {
6779
+ direct?: boolean
6630
6780
  entities?: Array<{
6631
6781
  entity_schema: { ... }
6632
6782
  unique_ids: { ... }
@@ -6634,7 +6784,7 @@ type UseCaseHistoryEntry = {
6634
6784
  enabled?: { ... }
6635
6785
  mode?: { ... }
6636
6786
  scope?: { ... }
6637
- fields: { ... }
6787
+ fields?: { ... }
6638
6788
  }>
6639
6789
  meter_readings?: Array<{
6640
6790
  jsonataExpression?: { ... }
@@ -6712,7 +6862,6 @@ type UseCaseHistoryEntry = {
6712
6862
  body_params?: { ... }
6713
6863
  headers?: { ... }
6714
6864
  query_params?: { ... }
6715
- }
6716
6865
  // ...
6717
6866
  }
6718
6867
  ```
@@ -6752,6 +6901,7 @@ type InboundUseCaseHistoryEntry = {
6752
6901
  history_created_at: string // date-time
6753
6902
  type: "inbound"
6754
6903
  configuration?: {
6904
+ direct?: boolean
6755
6905
  entities?: Array<{
6756
6906
  entity_schema: { ... }
6757
6907
  unique_ids: { ... }
@@ -6759,7 +6909,7 @@ type InboundUseCaseHistoryEntry = {
6759
6909
  enabled?: { ... }
6760
6910
  mode?: { ... }
6761
6911
  scope?: { ... }
6762
- fields: { ... }
6912
+ fields?: { ... }
6763
6913
  }>
6764
6914
  meter_readings?: Array<{
6765
6915
  jsonataExpression?: { ... }
@@ -7534,6 +7684,7 @@ making it easier to test configurations before saving them.
7534
7684
  ```ts
7535
7685
  type MappingSimulationV2Request = {
7536
7686
  event_configuration: {
7687
+ direct?: boolean
7537
7688
  entities?: Array<{
7538
7689
  entity_schema: { ... }
7539
7690
  unique_ids: { ... }
@@ -7541,7 +7692,7 @@ type MappingSimulationV2Request = {
7541
7692
  enabled?: { ... }
7542
7693
  mode?: { ... }
7543
7694
  scope?: { ... }
7544
- fields: { ... }
7695
+ fields?: { ... }
7545
7696
  }>
7546
7697
  meter_readings?: Array<{
7547
7698
  jsonataExpression?: { ... }
@@ -7621,6 +7772,347 @@ type MappingSimulationWarning = {
7621
7772
  }
7622
7773
  ```
7623
7774
 
7775
+ ### `DirectPayload`
7776
+
7777
+ The payload of an ERP event routed to a `direct: true` use case: a versioned envelope of
7778
+ pre-mapped operations that skip the mapping engine. Sent as the `payload` of an
7779
+ `ErpEventV3` - either as a JSON object or as a JSON string (`format` must be `json`;
7780
+ XML is rejected for direct use cases).
7781
+
7782
+ The sc
7783
+
7784
+ ```ts
7785
+ type DirectPayload = {
7786
+ version: "1"
7787
+ operations: Array<{
7788
+ type?: "entity"
7789
+ entity_slug: string
7790
+ unique_ids: Record<string, string | number>
7791
+ unique_id_types?: Record<string, "email" | "phone">
7792
+ mode?: "upsert" | "delete" | "purge"
7793
+ attributes?: Record<string, {
7794
+ $relation: { ... }
7795
+ } | {
7796
+ $relation_ref: { ... }
7797
+ } | unknown>
7798
+ } | {
7799
+ type: "meter_reading"
7800
+ meter: {
7801
+ unique_ids: { ... }
7802
+ }
7803
+ counter?: {
7804
+ unique_ids: { ... }
7805
+ }
7806
+ mode?: "upsert" | "delete"
7807
+ reading_matching?: "external_id" | "strict-date"
7808
+ attributes: {
7809
+ external_id: { ... }
7810
+ timestamp: { ... }
7811
+ source: { ... }
7812
+ value: { ... }
7813
+ }
7814
+ }>
7815
+ }
7816
+ ```
7817
+
7818
+ ### `DirectEntityOperation`
7819
+
7820
+ A single pre-mapped entity operation: upserts, soft-deletes, or purges one entity,
7821
+ identified by its unique ids. Produces the same internal update as a mapped-mode entity
7822
+ configuration, so create-vs-update resolution, relation resolution, ordering, and
7823
+ monitoring behave identically.
7824
+
7825
+
7826
+ ```ts
7827
+ type DirectEntityOperation = {
7828
+ type?: "entity"
7829
+ entity_slug: string
7830
+ unique_ids: Record<string, string | number>
7831
+ unique_id_types?: Record<string, "email" | "phone">
7832
+ mode?: "upsert" | "delete" | "purge"
7833
+ attributes?: Record<string, {
7834
+ $relation: Array<{
7835
+ entity_id?: { ... }
7836
+ schema?: { ... }
7837
+ unique_ids?: { ... }
7838
+ unique_id_types?: { ... }
7839
+ tags?: { ... }
7840
+ }> | {
7841
+ _set?: { ... }
7842
+ _append?: { ... }
7843
+ _append_all?: { ... }
7844
+ }
7845
+ } | {
7846
+ $relation_ref: Array<{
7847
+ schema: { ... }
7848
+ unique_ids: { ... }
7849
+ unique_id_types?: { ... }
7850
+ path: { ... }
7851
+ value: { ... }
7852
+ }> | {
7853
+ _set?: { ... }
7854
+ _append?: { ... }
7855
+ _append_all?: { ... }
7856
+ }
7857
+ } | unknown>
7858
+ }
7859
+ ```
7860
+
7861
+ ### `DirectMeterReadingOperation`
7862
+
7863
+ A single pre-mapped meter reading operation: upserts or deletes one reading on a meter
7864
+ (and optionally a specific counter), identified by their unique ids. Produces the same
7865
+ internal update as a mapped-mode meter reading configuration.
7866
+
7867
+
7868
+ ```ts
7869
+ type DirectMeterReadingOperation = {
7870
+ type: "meter_reading"
7871
+ meter: {
7872
+ unique_ids: Record<string, string | number>
7873
+ }
7874
+ counter?: {
7875
+ unique_ids: Record<string, string | number>
7876
+ }
7877
+ mode?: "upsert" | "delete"
7878
+ reading_matching?: "external_id" | "strict-date"
7879
+ attributes: {
7880
+ external_id: string | number
7881
+ timestamp: string
7882
+ source: "ECP" | "ERP" | "360" | "journey-submission"
7883
+ value: number | string
7884
+ }
7885
+ }
7886
+ ```
7887
+
7888
+ ### `DirectRelationValue`
7889
+
7890
+ An entity attribute value that establishes relations to other entities. Written on any
7891
+ attribute inside a direct entity operation's `attributes`.
7892
+
7893
+ Two forms are accepted: a bare array of items (shorthand for `_set`, i.e. replace), or
7894
+ an object with EXACTLY ONE of the operations `_set` (replace), `_a
7895
+
7896
+ ```ts
7897
+ type DirectRelationValue = {
7898
+ $relation: Array<{
7899
+ entity_id?: string
7900
+ schema?: string
7901
+ unique_ids?: Record<string, string | number>
7902
+ unique_id_types?: Record<string, "email" | "phone">
7903
+ tags?: string[]
7904
+ }> | {
7905
+ _set?: Array<{
7906
+ entity_id?: { ... }
7907
+ schema?: { ... }
7908
+ unique_ids?: { ... }
7909
+ unique_id_types?: { ... }
7910
+ tags?: { ... }
7911
+ }>
7912
+ _append?: Array<{
7913
+ entity_id?: { ... }
7914
+ schema?: { ... }
7915
+ unique_ids?: { ... }
7916
+ unique_id_types?: { ... }
7917
+ tags?: { ... }
7918
+ }>
7919
+ _append_all?: Array<{
7920
+ entity_id?: { ... }
7921
+ schema?: { ... }
7922
+ unique_ids?: { ... }
7923
+ unique_id_types?: { ... }
7924
+ tags?: { ... }
7925
+ }>
7926
+ }
7927
+ }
7928
+ ```
7929
+
7930
+ ### `DirectRelationItem`
7931
+
7932
+ One relation target: either an already-resolved reference (`entity_id`), or a lookup by
7933
+ unique ids (`schema` + `unique_ids`, resolved by the pipeline like any other unique-id
7934
+ lookup, including stub creation and retry when the target does not exist yet). The two
7935
+ forms are mutually exclusive. Use `_id
7936
+
7937
+ ```ts
7938
+ type DirectRelationItem = {
7939
+ entity_id?: string
7940
+ schema?: string
7941
+ unique_ids?: Record<string, string | number>
7942
+ unique_id_types?: Record<string, "email" | "phone">
7943
+ tags?: string[]
7944
+ }
7945
+ ```
7946
+
7947
+ ### `DirectRelationRefValue`
7948
+
7949
+ An entity attribute value that references an ITEM INSIDE a repeatable attribute of
7950
+ another entity - for example one address out of a contact's `address` list. The target
7951
+ entity is looked up by unique ids, then the item at `path` matching `value` is
7952
+ referenced (creating it when missing).
7953
+
7954
+ The same op
7955
+
7956
+ ```ts
7957
+ type DirectRelationRefValue = {
7958
+ $relation_ref: Array<{
7959
+ schema: string
7960
+ unique_ids: Record<string, string | number>
7961
+ unique_id_types?: Record<string, "email" | "phone">
7962
+ path: string
7963
+ value: unknown
7964
+ }> | {
7965
+ _set?: Array<{
7966
+ schema: { ... }
7967
+ unique_ids: { ... }
7968
+ unique_id_types?: { ... }
7969
+ path: { ... }
7970
+ value: { ... }
7971
+ }>
7972
+ _append?: Array<{
7973
+ schema: { ... }
7974
+ unique_ids: { ... }
7975
+ unique_id_types?: { ... }
7976
+ path: { ... }
7977
+ value: { ... }
7978
+ }>
7979
+ _append_all?: Array<{
7980
+ schema: { ... }
7981
+ unique_ids: { ... }
7982
+ unique_id_types?: { ... }
7983
+ path: { ... }
7984
+ value: { ... }
7985
+ }>
7986
+ }
7987
+ }
7988
+ ```
7989
+
7990
+ ### `DirectRelationRefItem`
7991
+
7992
+ One relation-ref target - the entity to look up, and the repeatable item to reference on it.
7993
+
7994
+ ```ts
7995
+ type DirectRelationRefItem = {
7996
+ schema: string
7997
+ unique_ids: Record<string, string | number>
7998
+ unique_id_types?: Record<string, "email" | "phone">
7999
+ path: string
8000
+ value: unknown
8001
+ }
8002
+ ```
8003
+
8004
+ ### `DirectSimulationRequest`
8005
+
8006
+ Request for a direct-mode dry run: the `direct: true` use case configuration to test
8007
+ against, and the payload to validate and translate.
8008
+
8009
+
8010
+ ```ts
8011
+ type DirectSimulationRequest = {
8012
+ event_configuration: {
8013
+ direct?: boolean
8014
+ entities?: Array<{
8015
+ entity_schema: { ... }
8016
+ unique_ids: { ... }
8017
+ jsonataExpression?: { ... }
8018
+ enabled?: { ... }
8019
+ mode?: { ... }
8020
+ scope?: { ... }
8021
+ fields?: { ... }
8022
+ }>
8023
+ meter_readings?: Array<{
8024
+ jsonataExpression?: { ... }
8025
+ reading_matching?: { ... }
8026
+ mode?: { ... }
8027
+ scope?: { ... }
8028
+ meter: { ... }
8029
+ meter_counter?: { ... }
8030
+ fields: { ... }
8031
+ }>
8032
+ }
8033
+ payload: string | {
8034
+ version: "1"
8035
+ operations: Array<{
8036
+ type?: { ... }
8037
+ entity_slug: { ... }
8038
+ unique_ids: { ... }
8039
+ unique_id_types?: { ... }
8040
+ mode?: { ... }
8041
+ attributes?: { ... }
8042
+ } | {
8043
+ type: { ... }
8044
+ meter: { ... }
8045
+ counter?: { ... }
8046
+ mode?: { ... }
8047
+ reading_matching?: { ... }
8048
+ attributes: { ... }
8049
+ }>
8050
+ }
8051
+ }
8052
+ ```
8053
+
8054
+ ### `DirectSimulationResponse`
8055
+
8056
+ Result of a direct-mode dry run. `valid: false` responses list EVERY violation found
8057
+ across all operations in `errors`. `valid: true` responses preview the internal updates
8058
+ the pipeline would apply, plus non-blocking `warnings`.
8059
+
8060
+
8061
+ ```ts
8062
+ type DirectSimulationResponse = {
8063
+ valid: boolean
8064
+ errors: Array<{
8065
+ code: "DIRECT_PAYLOAD_INVALID" | "DIRECT_VERSION_UNSUPPORTED" | "DIRECT_ENTITY_NOT_ALLOWED"
8066
+ message: string
8067
+ operation_index?: number
8068
+ }>
8069
+ warnings?: Array<{
8070
+ entity_schema: string
8071
+ field: string
8072
+ message: string
8073
+ }>
8074
+ entity_updates?: Array<{
8075
+ entity_slug: string
8076
+ unique_identifiers: Record<string, unknown>
8077
+ attributes: Record<string, unknown>
8078
+ pricing?: {
8079
+ config: { ... }
8080
+ data: { ... }
8081
+ }
8082
+ mode: "upsert" | "delete" | "purge"
8083
+ unique_identifiers_metadata?: Record<string, {
8084
+ fieldType?: { ... }
8085
+ index?: { ... }
8086
+ }>
8087
+ }>
8088
+ meter_reading_updates?: Array<{
8089
+ meter: {
8090
+ $entity_unique_ids: { ... }
8091
+ }
8092
+ meter_counter?: {
8093
+ $entity_unique_ids?: { ... }
8094
+ }
8095
+ attributes: Record<string, unknown>
8096
+ mode: "upsert" | "delete"
8097
+ _config?: {
8098
+ reading_matching?: { ... }
8099
+ }
8100
+ }>
8101
+ }
8102
+ ```
8103
+
8104
+ ### `DirectSimulationError`
8105
+
8106
+ One validation error found during a direct-mode dry run.
8107
+
8108
+ ```ts
8109
+ type DirectSimulationError = {
8110
+ code: "DIRECT_PAYLOAD_INVALID" | "DIRECT_VERSION_UNSUPPORTED" | "DIRECT_ENTITY_NOT_ALLOWED"
8111
+ message: string
8112
+ operation_index?: number
8113
+ }
8114
+ ```
8115
+
7624
8116
  ### `EntityUpdate`
7625
8117
 
7626
8118
  ```ts
@@ -7732,6 +8224,7 @@ type IntegrationConfigurationV2 = {
7732
8224
  version: "2.0"
7733
8225
  mapping: {
7734
8226
  events: Record<string, {
8227
+ direct?: { ... }
7735
8228
  entities?: { ... }
7736
8229
  meter_readings?: { ... }
7737
8230
  }>
@@ -7830,6 +8323,39 @@ type FileProxyDeliveryConfig = {
7830
8323
  }
7831
8324
  ```
7832
8325
 
8326
+ ### `EntitySyncStatusResponse`
8327
+
8328
+ ```ts
8329
+ type EntitySyncStatusResponse = {
8330
+ entity_id: string // uuid
8331
+ sync_states: Array<{
8332
+ entity_id: string // uuid
8333
+ integration_id: string // uuid
8334
+ entity_slug: string
8335
+ use_case_id?: string
8336
+ last_synced_at: string // date-time
8337
+ last_changed_at?: string // date-time
8338
+ last_operation: "create" | "patch" | "delete" | "no-op"
8339
+ last_event_id?: string
8340
+ }>
8341
+ }
8342
+ ```
8343
+
8344
+ ### `EntitySyncState`
8345
+
8346
+ ```ts
8347
+ type EntitySyncState = {
8348
+ entity_id: string // uuid
8349
+ integration_id: string // uuid
8350
+ entity_slug: string
8351
+ use_case_id?: string
8352
+ last_synced_at: string // date-time
8353
+ last_changed_at?: string // date-time
8354
+ last_operation: "create" | "patch" | "delete" | "no-op"
8355
+ last_event_id?: string
8356
+ }
8357
+ ```
8358
+
7833
8359
  ### `OutboundStatusResponse`
7834
8360
 
7835
8361
  ```ts