@epilot/erp-integration-client 0.28.0 → 0.30.0-rc1

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.
package/dist/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.0.3",
3
3
  "info": {
4
4
  "title": "ERP Integration API",
5
- "version": "0.49.0",
5
+ "version": "0.51.0",
6
6
  "description": "API for integrating with ERP systems, handling tracking acknowledgments, triggering ERP processes, and processing ERP updates."
7
7
  },
8
8
  "tags": [
@@ -21,6 +21,14 @@
21
21
  {
22
22
  "name": "monitoring",
23
23
  "description": "Monitoring and analytics endpoints"
24
+ },
25
+ {
26
+ "name": "managed-call",
27
+ "description": "Managed call endpoints for synchronous external API calls"
28
+ },
29
+ {
30
+ "name": "proxy",
31
+ "description": "Secure proxy endpoints"
24
32
  }
25
33
  ],
26
34
  "servers": [
@@ -2249,6 +2257,156 @@
2249
2257
  }
2250
2258
  }
2251
2259
  },
2260
+ "/v2/integrations/{integrationId}/monitoring/events": {
2261
+ "post": {
2262
+ "operationId": "queryMonitoringEventsV2",
2263
+ "summary": "queryMonitoringEventsV2",
2264
+ "description": "Query monitoring events from the unified erp_monitoring_v2 table.\nReturns all event types (inbound, outbound, file_proxy, etc.) in a single list.\nReplaces the separate v1 inbound-events and outbound-events endpoints.\n",
2265
+ "tags": [
2266
+ "monitoring",
2267
+ "integrations"
2268
+ ],
2269
+ "parameters": [
2270
+ {
2271
+ "name": "integrationId",
2272
+ "in": "path",
2273
+ "required": true,
2274
+ "description": "The integration ID",
2275
+ "schema": {
2276
+ "type": "string",
2277
+ "format": "uuid"
2278
+ }
2279
+ }
2280
+ ],
2281
+ "requestBody": {
2282
+ "required": true,
2283
+ "content": {
2284
+ "application/json": {
2285
+ "schema": {
2286
+ "$ref": "#/components/schemas/QueryMonitoringEventsV2Request"
2287
+ }
2288
+ }
2289
+ }
2290
+ },
2291
+ "responses": {
2292
+ "200": {
2293
+ "$ref": "#/components/responses/QueryMonitoringEventsV2Response"
2294
+ },
2295
+ "400": {
2296
+ "$ref": "#/components/responses/BadRequest"
2297
+ },
2298
+ "401": {
2299
+ "$ref": "#/components/responses/Unauthorized"
2300
+ },
2301
+ "404": {
2302
+ "$ref": "#/components/responses/NotFound"
2303
+ },
2304
+ "500": {
2305
+ "$ref": "#/components/responses/InternalServerError"
2306
+ }
2307
+ }
2308
+ }
2309
+ },
2310
+ "/v2/integrations/{integrationId}/monitoring/stats": {
2311
+ "post": {
2312
+ "operationId": "getMonitoringStatsV2",
2313
+ "summary": "getMonitoringStatsV2",
2314
+ "description": "Get aggregated statistics from the unified erp_monitoring_v2 table.\nReturns combined metrics for all event types with optional breakdowns.\n",
2315
+ "tags": [
2316
+ "monitoring",
2317
+ "integrations"
2318
+ ],
2319
+ "parameters": [
2320
+ {
2321
+ "name": "integrationId",
2322
+ "in": "path",
2323
+ "required": true,
2324
+ "description": "The integration ID",
2325
+ "schema": {
2326
+ "type": "string",
2327
+ "format": "uuid"
2328
+ }
2329
+ }
2330
+ ],
2331
+ "requestBody": {
2332
+ "required": true,
2333
+ "content": {
2334
+ "application/json": {
2335
+ "schema": {
2336
+ "$ref": "#/components/schemas/GetMonitoringStatsV2Request"
2337
+ }
2338
+ }
2339
+ }
2340
+ },
2341
+ "responses": {
2342
+ "200": {
2343
+ "$ref": "#/components/responses/GetMonitoringStatsV2Response"
2344
+ },
2345
+ "400": {
2346
+ "$ref": "#/components/responses/BadRequest"
2347
+ },
2348
+ "401": {
2349
+ "$ref": "#/components/responses/Unauthorized"
2350
+ },
2351
+ "404": {
2352
+ "$ref": "#/components/responses/NotFound"
2353
+ },
2354
+ "500": {
2355
+ "$ref": "#/components/responses/InternalServerError"
2356
+ }
2357
+ }
2358
+ }
2359
+ },
2360
+ "/v2/integrations/{integrationId}/monitoring/time-series": {
2361
+ "post": {
2362
+ "operationId": "getMonitoringTimeSeriesV2",
2363
+ "summary": "getMonitoringTimeSeriesV2",
2364
+ "description": "Get time-series aggregated event counts from the unified erp_monitoring_v2 table.\nReturns bucketed counts for chart rendering.\n",
2365
+ "tags": [
2366
+ "monitoring",
2367
+ "integrations"
2368
+ ],
2369
+ "parameters": [
2370
+ {
2371
+ "name": "integrationId",
2372
+ "in": "path",
2373
+ "required": true,
2374
+ "description": "The integration ID",
2375
+ "schema": {
2376
+ "type": "string",
2377
+ "format": "uuid"
2378
+ }
2379
+ }
2380
+ ],
2381
+ "requestBody": {
2382
+ "required": true,
2383
+ "content": {
2384
+ "application/json": {
2385
+ "schema": {
2386
+ "$ref": "#/components/schemas/GetMonitoringTimeSeriesV2Request"
2387
+ }
2388
+ }
2389
+ }
2390
+ },
2391
+ "responses": {
2392
+ "200": {
2393
+ "$ref": "#/components/responses/GetMonitoringTimeSeriesV2Response"
2394
+ },
2395
+ "400": {
2396
+ "$ref": "#/components/responses/BadRequest"
2397
+ },
2398
+ "401": {
2399
+ "$ref": "#/components/responses/Unauthorized"
2400
+ },
2401
+ "404": {
2402
+ "$ref": "#/components/responses/NotFound"
2403
+ },
2404
+ "500": {
2405
+ "$ref": "#/components/responses/InternalServerError"
2406
+ }
2407
+ }
2408
+ }
2409
+ },
2252
2410
  "/v1/integrations/secure-proxies": {
2253
2411
  "get": {
2254
2412
  "operationId": "listSecureProxies",
@@ -2375,6 +2533,95 @@
2375
2533
  }
2376
2534
  }
2377
2535
  }
2536
+ },
2537
+ "/v1/managed-call/{slug}/execute": {
2538
+ "post": {
2539
+ "operationId": "managedCallExecute",
2540
+ "summary": "Execute a managed call operation",
2541
+ "description": "Execute a managed call operation synchronously. The slug in the path acts as the RPC method name.\nCalls an external partner API with JSONata mapping on both request and response.\n",
2542
+ "tags": [
2543
+ "managed-call"
2544
+ ],
2545
+ "security": [
2546
+ {
2547
+ "EpilotAuth": []
2548
+ }
2549
+ ],
2550
+ "parameters": [
2551
+ {
2552
+ "name": "slug",
2553
+ "in": "path",
2554
+ "required": true,
2555
+ "schema": {
2556
+ "type": "string",
2557
+ "pattern": "^[a-z0-9][a-z0-9_-]*$"
2558
+ },
2559
+ "description": "Use case slug (acts as the RPC method name)"
2560
+ }
2561
+ ],
2562
+ "requestBody": {
2563
+ "required": true,
2564
+ "content": {
2565
+ "application/json": {
2566
+ "schema": {
2567
+ "$ref": "#/components/schemas/ManagedCallExecuteRequest"
2568
+ }
2569
+ }
2570
+ }
2571
+ },
2572
+ "responses": {
2573
+ "200": {
2574
+ "description": "Managed call executed successfully.\nThe response body is the JSONata-mapped result (or raw external API response if no mapping).\nIf inbound routing is configured, check X-Inbound-Event-Id header for tracking.\n",
2575
+ "headers": {
2576
+ "X-Inbound-Event-Id": {
2577
+ "description": "Event ID for tracking inbound pipeline processing (only present when inbound routing is configured)",
2578
+ "schema": {
2579
+ "type": "string"
2580
+ }
2581
+ }
2582
+ },
2583
+ "content": {
2584
+ "application/json": {
2585
+ "schema": {
2586
+ "$ref": "#/components/schemas/ManagedCallExecuteResponse"
2587
+ }
2588
+ }
2589
+ }
2590
+ },
2591
+ "400": {
2592
+ "description": "Bad request (e.g., invalid URL blocked by SSRF protection)",
2593
+ "content": {
2594
+ "application/json": {
2595
+ "schema": {
2596
+ "$ref": "#/components/schemas/ManagedCallErrorResponse"
2597
+ }
2598
+ }
2599
+ }
2600
+ },
2601
+ "401": {
2602
+ "$ref": "#/components/responses/Unauthorized"
2603
+ },
2604
+ "403": {
2605
+ "$ref": "#/components/responses/Forbidden"
2606
+ },
2607
+ "404": {
2608
+ "$ref": "#/components/responses/NotFound"
2609
+ },
2610
+ "500": {
2611
+ "$ref": "#/components/responses/InternalServerError"
2612
+ },
2613
+ "502": {
2614
+ "description": "External API error (upstream service returned an error)",
2615
+ "content": {
2616
+ "application/json": {
2617
+ "schema": {
2618
+ "$ref": "#/components/schemas/ManagedCallErrorResponse"
2619
+ }
2620
+ }
2621
+ }
2622
+ }
2623
+ }
2624
+ }
2378
2625
  }
2379
2626
  },
2380
2627
  "components": {
@@ -2510,12 +2757,14 @@
2510
2757
  "properties": {
2511
2758
  "event_name": {
2512
2759
  "type": "string",
2513
- "description": "Event name from integration mapping (e.g., business_partner, contract_account). Required when use_case_slug is not provided.\n"
2760
+ "description": "Event name from integration mapping (e.g., business_partner, contract_account). Required when use_case_slug is not provided.\n",
2761
+ "example": "business_partner"
2514
2762
  },
2515
2763
  "timestamp": {
2516
2764
  "type": "string",
2517
2765
  "format": "date-time",
2518
- "description": "Timestamp when the event occurred"
2766
+ "description": "Timestamp when the event occurred",
2767
+ "example": "2025-05-01T08:30:00Z"
2519
2768
  },
2520
2769
  "format": {
2521
2770
  "type": "string",
@@ -2524,7 +2773,8 @@
2524
2773
  "xml"
2525
2774
  ],
2526
2775
  "default": "json",
2527
- "description": "Format of the payload data"
2776
+ "description": "Format of the payload data",
2777
+ "example": "json"
2528
2778
  },
2529
2779
  "payload": {
2530
2780
  "oneOf": [
@@ -2540,14 +2790,16 @@
2540
2790
  "additionalProperties": true
2541
2791
  }
2542
2792
  ],
2543
- "description": "The object data payload - can be either a serialized string or a direct JSON object"
2793
+ "description": "The object data payload - can be either a serialized string or a direct JSON object",
2794
+ "example": "{\"id\":\"BP10001\",\"name\":\"Acme Corporation\",\"type\":\"organization\",\"tax_id\":\"DE123456789\",\"status\":\"active\"}"
2544
2795
  },
2545
2796
  "use_case_slug": {
2546
2797
  "type": "string",
2547
2798
  "pattern": "^[a-z0-9][a-z0-9_-]*$",
2548
2799
  "minLength": 1,
2549
2800
  "maxLength": 255,
2550
- "description": "Recommended. Use case slug for routing this event to the correct use case configuration. If provided, takes precedence over event_name for use case lookup. Preferred over event_name-based routing as slugs are portable across environments.\n"
2801
+ "description": "Recommended. Use case slug for routing this event to the correct use case configuration. If provided, takes precedence over event_name for use case lookup. Preferred over event_name-based routing as slugs are portable across environments.\n",
2802
+ "example": "business_partner"
2551
2803
  },
2552
2804
  "deduplication_id": {
2553
2805
  "type": "string",
@@ -2712,52 +2964,153 @@
2712
2964
  },
2713
2965
  "settings": {
2714
2966
  "$ref": "#/components/schemas/IntegrationSettings"
2715
- }
2716
- }
2717
- },
2718
- "Integration": {
2719
- "allOf": [
2720
- {
2721
- "type": "object",
2722
- "required": [
2723
- "id",
2724
- "orgId",
2725
- "name",
2726
- "created_at",
2727
- "updated_at"
2967
+ },
2968
+ "integration_type": {
2969
+ "type": "string",
2970
+ "enum": [
2971
+ "erp",
2972
+ "connector"
2728
2973
  ],
2729
- "properties": {
2730
- "id": {
2731
- "type": "string",
2732
- "format": "uuid",
2733
- "readOnly": true,
2734
- "description": "Unique identifier for the integration"
2735
- },
2736
- "orgId": {
2737
- "type": "string",
2738
- "readOnly": true,
2739
- "description": "Organization ID"
2740
- },
2741
- "created_at": {
2742
- "type": "string",
2743
- "format": "date-time",
2744
- "readOnly": true,
2745
- "description": "ISO-8601 timestamp when the integration was created"
2746
- },
2747
- "updated_at": {
2748
- "type": "string",
2749
- "format": "date-time",
2750
- "readOnly": true,
2751
- "description": "ISO-8601 timestamp when the integration was last updated"
2752
- }
2753
- }
2974
+ "default": "erp",
2975
+ "description": "Type of integration. \"erp\" is the ERP integration with inbound/outbound use cases. \"connector\" is for complex proxy integrations with external APIs.\n"
2754
2976
  },
2755
- {
2756
- "$ref": "#/components/schemas/IntegrationEditableFields"
2977
+ "connector_config": {
2978
+ "$ref": "#/components/schemas/ConnectorConfig"
2979
+ },
2980
+ "protected": {
2981
+ "type": "boolean",
2982
+ "description": "If true, integration is displayed in read-only mode in the UI to discourage changes"
2757
2983
  }
2758
- ]
2984
+ }
2759
2985
  },
2760
- "CreateIntegrationRequest": {
2986
+ "ConnectorConfig": {
2987
+ "type": "object",
2988
+ "description": "Shared configuration for connector-type integrations",
2989
+ "properties": {
2990
+ "base_url": {
2991
+ "type": "string",
2992
+ "description": "Base URL for the partner API"
2993
+ },
2994
+ "auth": {
2995
+ "$ref": "#/components/schemas/ManagedCallAuth"
2996
+ }
2997
+ }
2998
+ },
2999
+ "ManagedCallAuth": {
3000
+ "type": "object",
3001
+ "description": "Authentication configuration for managed call requests",
3002
+ "properties": {
3003
+ "type": {
3004
+ "type": "string",
3005
+ "enum": [
3006
+ "oauth2_client_credentials",
3007
+ "api_key",
3008
+ "bearer"
3009
+ ],
3010
+ "description": "Authentication type"
3011
+ },
3012
+ "token_url": {
3013
+ "type": "string",
3014
+ "description": "OAuth2 token URL. Can be plain text or {{env.key}} reference."
3015
+ },
3016
+ "client_id": {
3017
+ "type": "string",
3018
+ "description": "OAuth2 client ID. Can be plain text or {{env.key}} reference."
3019
+ },
3020
+ "client_secret": {
3021
+ "type": "string",
3022
+ "description": "OAuth2 client secret. Must be an {{env.key}} reference (secret)."
3023
+ },
3024
+ "scope": {
3025
+ "type": "string",
3026
+ "description": "OAuth2 scope"
3027
+ },
3028
+ "audience": {
3029
+ "type": "string",
3030
+ "description": "OAuth2 audience parameter (e.g. for Auth0, Azure AD). Can be plain text or {{env.key}} reference."
3031
+ },
3032
+ "resource": {
3033
+ "type": "string",
3034
+ "description": "OAuth2 resource parameter (e.g. for Azure AD). Can be plain text or {{env.key}} reference."
3035
+ },
3036
+ "body_params": {
3037
+ "type": "object",
3038
+ "additionalProperties": {
3039
+ "type": "string"
3040
+ },
3041
+ "description": "Additional key-value pairs for the OAuth2 token request body. Values can be {{env.key}} references."
3042
+ },
3043
+ "headers": {
3044
+ "type": "object",
3045
+ "additionalProperties": {
3046
+ "type": "string"
3047
+ },
3048
+ "description": "Additional headers for the OAuth2 token request. Values can be {{env.key}} references."
3049
+ },
3050
+ "query_params": {
3051
+ "type": "object",
3052
+ "additionalProperties": {
3053
+ "type": "string"
3054
+ },
3055
+ "description": "Additional query parameters for the OAuth2 token URL. Values can be {{env.key}} references."
3056
+ },
3057
+ "api_key_header": {
3058
+ "type": "string",
3059
+ "description": "Header name for API key auth (default X-API-Key)"
3060
+ },
3061
+ "api_key": {
3062
+ "type": "string",
3063
+ "description": "API key value. Must be an {{env.key}} reference (secret)."
3064
+ },
3065
+ "token": {
3066
+ "type": "string",
3067
+ "description": "Bearer token value. Must be an {{env.key}} reference (secret)."
3068
+ }
3069
+ }
3070
+ },
3071
+ "Integration": {
3072
+ "allOf": [
3073
+ {
3074
+ "type": "object",
3075
+ "required": [
3076
+ "id",
3077
+ "orgId",
3078
+ "name",
3079
+ "created_at",
3080
+ "updated_at"
3081
+ ],
3082
+ "properties": {
3083
+ "id": {
3084
+ "type": "string",
3085
+ "format": "uuid",
3086
+ "readOnly": true,
3087
+ "description": "Unique identifier for the integration"
3088
+ },
3089
+ "orgId": {
3090
+ "type": "string",
3091
+ "readOnly": true,
3092
+ "description": "Organization ID"
3093
+ },
3094
+ "created_at": {
3095
+ "type": "string",
3096
+ "format": "date-time",
3097
+ "readOnly": true,
3098
+ "description": "ISO-8601 timestamp when the integration was created"
3099
+ },
3100
+ "updated_at": {
3101
+ "type": "string",
3102
+ "format": "date-time",
3103
+ "readOnly": true,
3104
+ "description": "ISO-8601 timestamp when the integration was last updated"
3105
+ }
3106
+ }
3107
+ },
3108
+ {
3109
+ "$ref": "#/components/schemas/IntegrationEditableFields"
3110
+ }
3111
+ ]
3112
+ },
3113
+ "CreateIntegrationRequest": {
2761
3114
  "allOf": [
2762
3115
  {
2763
3116
  "$ref": "#/components/schemas/IntegrationEditableFields"
@@ -3294,6 +3647,9 @@
3294
3647
  {
3295
3648
  "$ref": "#/components/schemas/EmbeddedFileProxyUseCaseRequest"
3296
3649
  },
3650
+ {
3651
+ "$ref": "#/components/schemas/EmbeddedManagedCallUseCaseRequest"
3652
+ },
3297
3653
  {
3298
3654
  "$ref": "#/components/schemas/EmbeddedSecureProxyUseCaseRequest"
3299
3655
  }
@@ -3304,6 +3660,7 @@
3304
3660
  "inbound": "#/components/schemas/EmbeddedInboundUseCaseRequest",
3305
3661
  "outbound": "#/components/schemas/EmbeddedOutboundUseCaseRequest",
3306
3662
  "file_proxy": "#/components/schemas/EmbeddedFileProxyUseCaseRequest",
3663
+ "managed_call": "#/components/schemas/EmbeddedManagedCallUseCaseRequest",
3307
3664
  "secure_proxy": "#/components/schemas/EmbeddedSecureProxyUseCaseRequest"
3308
3665
  }
3309
3666
  }
@@ -3420,6 +3777,31 @@
3420
3777
  }
3421
3778
  ]
3422
3779
  },
3780
+ "EmbeddedManagedCallUseCaseRequest": {
3781
+ "allOf": [
3782
+ {
3783
+ "$ref": "#/components/schemas/EmbeddedUseCaseRequestBase"
3784
+ },
3785
+ {
3786
+ "type": "object",
3787
+ "required": [
3788
+ "type"
3789
+ ],
3790
+ "properties": {
3791
+ "type": {
3792
+ "type": "string",
3793
+ "enum": [
3794
+ "managed_call"
3795
+ ],
3796
+ "description": "Use case type for managed API calls"
3797
+ },
3798
+ "configuration": {
3799
+ "$ref": "#/components/schemas/ManagedCallOperationConfig"
3800
+ }
3801
+ }
3802
+ }
3803
+ ]
3804
+ },
3423
3805
  "EmbeddedSecureProxyUseCaseRequest": {
3424
3806
  "allOf": [
3425
3807
  {
@@ -3484,6 +3866,7 @@
3484
3866
  "inbound",
3485
3867
  "outbound",
3486
3868
  "file_proxy",
3869
+ "managed_call",
3487
3870
  "secure_proxy"
3488
3871
  ],
3489
3872
  "description": "Use case type"
@@ -3583,6 +3966,31 @@
3583
3966
  }
3584
3967
  ]
3585
3968
  },
3969
+ "ManagedCallUseCase": {
3970
+ "allOf": [
3971
+ {
3972
+ "$ref": "#/components/schemas/UseCaseBase"
3973
+ },
3974
+ {
3975
+ "type": "object",
3976
+ "required": [
3977
+ "type"
3978
+ ],
3979
+ "properties": {
3980
+ "type": {
3981
+ "type": "string",
3982
+ "enum": [
3983
+ "managed_call"
3984
+ ],
3985
+ "description": "Use case type for managed API calls"
3986
+ },
3987
+ "configuration": {
3988
+ "$ref": "#/components/schemas/ManagedCallOperationConfig"
3989
+ }
3990
+ }
3991
+ }
3992
+ ]
3993
+ },
3586
3994
  "SecureProxyUseCase": {
3587
3995
  "allOf": [
3588
3996
  {
@@ -3619,6 +4027,9 @@
3619
4027
  {
3620
4028
  "$ref": "#/components/schemas/FileProxyUseCase"
3621
4029
  },
4030
+ {
4031
+ "$ref": "#/components/schemas/ManagedCallUseCase"
4032
+ },
3622
4033
  {
3623
4034
  "$ref": "#/components/schemas/SecureProxyUseCase"
3624
4035
  }
@@ -3629,6 +4040,7 @@
3629
4040
  "inbound": "#/components/schemas/InboundUseCase",
3630
4041
  "outbound": "#/components/schemas/OutboundUseCase",
3631
4042
  "file_proxy": "#/components/schemas/FileProxyUseCase",
4043
+ "managed_call": "#/components/schemas/ManagedCallUseCase",
3632
4044
  "secure_proxy": "#/components/schemas/SecureProxyUseCase"
3633
4045
  }
3634
4046
  }
@@ -3644,6 +4056,9 @@
3644
4056
  {
3645
4057
  "$ref": "#/components/schemas/CreateFileProxyUseCaseRequest"
3646
4058
  },
4059
+ {
4060
+ "$ref": "#/components/schemas/CreateManagedCallUseCaseRequest"
4061
+ },
3647
4062
  {
3648
4063
  "$ref": "#/components/schemas/CreateSecureProxyUseCaseRequest"
3649
4064
  }
@@ -3654,6 +4069,7 @@
3654
4069
  "inbound": "#/components/schemas/CreateInboundUseCaseRequest",
3655
4070
  "outbound": "#/components/schemas/CreateOutboundUseCaseRequest",
3656
4071
  "file_proxy": "#/components/schemas/CreateFileProxyUseCaseRequest",
4072
+ "managed_call": "#/components/schemas/CreateManagedCallUseCaseRequest",
3657
4073
  "secure_proxy": "#/components/schemas/CreateSecureProxyUseCaseRequest"
3658
4074
  }
3659
4075
  }
@@ -3760,6 +4176,31 @@
3760
4176
  }
3761
4177
  ]
3762
4178
  },
4179
+ "CreateManagedCallUseCaseRequest": {
4180
+ "allOf": [
4181
+ {
4182
+ "$ref": "#/components/schemas/CreateUseCaseRequestBase"
4183
+ },
4184
+ {
4185
+ "type": "object",
4186
+ "required": [
4187
+ "type"
4188
+ ],
4189
+ "properties": {
4190
+ "type": {
4191
+ "type": "string",
4192
+ "enum": [
4193
+ "managed_call"
4194
+ ],
4195
+ "description": "Use case type for managed API calls"
4196
+ },
4197
+ "configuration": {
4198
+ "$ref": "#/components/schemas/ManagedCallOperationConfig"
4199
+ }
4200
+ }
4201
+ }
4202
+ ]
4203
+ },
3763
4204
  "CreateSecureProxyUseCaseRequest": {
3764
4205
  "allOf": [
3765
4206
  {
@@ -3796,6 +4237,9 @@
3796
4237
  {
3797
4238
  "$ref": "#/components/schemas/UpdateFileProxyUseCaseRequest"
3798
4239
  },
4240
+ {
4241
+ "$ref": "#/components/schemas/UpdateManagedCallUseCaseRequest"
4242
+ },
3799
4243
  {
3800
4244
  "$ref": "#/components/schemas/UpdateSecureProxyUseCaseRequest"
3801
4245
  }
@@ -3806,6 +4250,7 @@
3806
4250
  "inbound": "#/components/schemas/UpdateInboundUseCaseRequest",
3807
4251
  "outbound": "#/components/schemas/UpdateOutboundUseCaseRequest",
3808
4252
  "file_proxy": "#/components/schemas/UpdateFileProxyUseCaseRequest",
4253
+ "managed_call": "#/components/schemas/UpdateManagedCallUseCaseRequest",
3809
4254
  "secure_proxy": "#/components/schemas/UpdateSecureProxyUseCaseRequest"
3810
4255
  }
3811
4256
  }
@@ -3903,6 +4348,28 @@
3903
4348
  }
3904
4349
  ]
3905
4350
  },
4351
+ "UpdateManagedCallUseCaseRequest": {
4352
+ "allOf": [
4353
+ {
4354
+ "$ref": "#/components/schemas/UpdateUseCaseRequestBase"
4355
+ },
4356
+ {
4357
+ "type": "object",
4358
+ "properties": {
4359
+ "type": {
4360
+ "type": "string",
4361
+ "enum": [
4362
+ "managed_call"
4363
+ ],
4364
+ "description": "Use case type for managed API calls"
4365
+ },
4366
+ "configuration": {
4367
+ "$ref": "#/components/schemas/ManagedCallOperationConfig"
4368
+ }
4369
+ }
4370
+ }
4371
+ ]
4372
+ },
3906
4373
  "UpdateSecureProxyUseCaseRequest": {
3907
4374
  "allOf": [
3908
4375
  {
@@ -3936,6 +4403,9 @@
3936
4403
  {
3937
4404
  "$ref": "#/components/schemas/FileProxyUseCaseHistoryEntry"
3938
4405
  },
4406
+ {
4407
+ "$ref": "#/components/schemas/ManagedCallUseCaseHistoryEntry"
4408
+ },
3939
4409
  {
3940
4410
  "$ref": "#/components/schemas/SecureProxyUseCaseHistoryEntry"
3941
4411
  }
@@ -3946,6 +4416,7 @@
3946
4416
  "inbound": "#/components/schemas/InboundUseCaseHistoryEntry",
3947
4417
  "outbound": "#/components/schemas/OutboundUseCaseHistoryEntry",
3948
4418
  "file_proxy": "#/components/schemas/FileProxyUseCaseHistoryEntry",
4419
+ "managed_call": "#/components/schemas/ManagedCallUseCaseHistoryEntry",
3949
4420
  "secure_proxy": "#/components/schemas/SecureProxyUseCaseHistoryEntry"
3950
4421
  }
3951
4422
  }
@@ -4087,6 +4558,31 @@
4087
4558
  }
4088
4559
  ]
4089
4560
  },
4561
+ "ManagedCallUseCaseHistoryEntry": {
4562
+ "allOf": [
4563
+ {
4564
+ "$ref": "#/components/schemas/UseCaseHistoryEntryBase"
4565
+ },
4566
+ {
4567
+ "type": "object",
4568
+ "required": [
4569
+ "type"
4570
+ ],
4571
+ "properties": {
4572
+ "type": {
4573
+ "type": "string",
4574
+ "enum": [
4575
+ "managed_call"
4576
+ ],
4577
+ "description": "Use case type for managed API calls"
4578
+ },
4579
+ "configuration": {
4580
+ "$ref": "#/components/schemas/ManagedCallOperationConfig"
4581
+ }
4582
+ }
4583
+ }
4584
+ ]
4585
+ },
4090
4586
  "SecureProxyUseCaseHistoryEntry": {
4091
4587
  "allOf": [
4092
4588
  {
@@ -4135,6 +4631,14 @@
4135
4631
  },
4136
4632
  "readOnly": true,
4137
4633
  "description": "Domain whitelist for secure_link mode. Admin-only — can only be modified directly in DynamoDB via admin script.\nSupports exact match (e.g., \"api.wemag.com\") and wildcard prefix (e.g., \"*.wemag.com\").\n"
4634
+ },
4635
+ "allowed_ips": {
4636
+ "type": "array",
4637
+ "items": {
4638
+ "type": "string"
4639
+ },
4640
+ "readOnly": true,
4641
+ "description": "IP allowlist (CIDR notation) for secure_link mode. Admin-only — can only be modified directly in DynamoDB via admin script.\nRequired for secure_link mode. All DNS-resolved IPs must match at least one range.\nExample: [\"10.0.1.0/24\", \"192.168.1.0/24\"]\n"
4138
4642
  }
4139
4643
  }
4140
4644
  },
@@ -4175,6 +4679,12 @@
4175
4679
  "type": "string"
4176
4680
  }
4177
4681
  },
4682
+ "allowed_ips": {
4683
+ "type": "array",
4684
+ "items": {
4685
+ "type": "string"
4686
+ }
4687
+ },
4178
4688
  "integration_id": {
4179
4689
  "type": "string",
4180
4690
  "format": "uuid"
@@ -4262,42 +4772,162 @@
4262
4772
  }
4263
4773
  }
4264
4774
  },
4265
- "FileProxyUseCaseConfiguration": {
4775
+ "ManagedCallOperationConfig": {
4266
4776
  "type": "object",
4267
4777
  "required": [
4268
- "steps",
4269
- "response"
4778
+ "operation"
4270
4779
  ],
4271
- "description": "Configuration for file_proxy use cases. Defines how to authenticate and fetch files from external document systems.\n\nThe file proxy download URL always requires `orgId`, `integrationId`, and either `useCaseSlug` (recommended) or `useCaseId` (legacy UUID) as query parameters.\nThe `orgId` is included in the signed URL to establish organization context without requiring authentication.\nAdditional use-case-specific parameters are declared in the `params` array.\n",
4780
+ "description": "Configuration for managed_call use cases. Defines a single API operation with JSONata mapping.",
4272
4781
  "properties": {
4273
- "secure_proxy": {
4274
- "$ref": "#/components/schemas/FileProxySecureProxyAttachment",
4275
- "description": "Optional secure proxy attachment for routing all outbound file proxy requests.\nOnly `use_case_slug` is supported and the referenced secure_proxy use case\nmust belong to the same integration.\n"
4276
- },
4277
- "auth": {
4278
- "$ref": "#/components/schemas/FileProxyAuth"
4782
+ "operation": {
4783
+ "$ref": "#/components/schemas/ManagedCallOperation"
4279
4784
  },
4280
- "params": {
4281
- "type": "array",
4282
- "items": {
4283
- "$ref": "#/components/schemas/FileProxyParam"
4284
- },
4285
- "description": "Additional use-case-specific parameters expected in the download URL query string (beyond the required orgId, integrationId, and useCaseSlug or useCaseId)"
4785
+ "request_mapping": {
4786
+ "type": "string",
4787
+ "description": "JSONata expression for outbound body transformation"
4286
4788
  },
4287
- "steps": {
4288
- "type": "array",
4289
- "minItems": 1,
4290
- "items": {
4291
- "$ref": "#/components/schemas/FileProxyStep"
4292
- },
4293
- "description": "Ordered list of HTTP steps to execute to retrieve the file"
4789
+ "response_mapping": {
4790
+ "type": "string",
4791
+ "description": "JSONata expression for inbound response transformation"
4294
4792
  },
4295
- "response": {
4296
- "$ref": "#/components/schemas/FileProxyResponseConfig"
4793
+ "inbound_use_case_slug": {
4794
+ "type": "string",
4795
+ "description": "Slug of the inbound use case to route responses to for async entity processing.\nWhen set, the managed call response is queued to the inbound pipeline and processed\nusing the referenced inbound use case's mapping configuration.\n"
4297
4796
  }
4298
4797
  }
4299
4798
  },
4300
- "FileProxySecureProxyAttachment": {
4799
+ "ManagedCallOperation": {
4800
+ "type": "object",
4801
+ "required": [
4802
+ "method",
4803
+ "path"
4804
+ ],
4805
+ "description": "HTTP operation configuration for managed calls",
4806
+ "properties": {
4807
+ "method": {
4808
+ "type": "string",
4809
+ "enum": [
4810
+ "GET",
4811
+ "POST",
4812
+ "PUT",
4813
+ "PATCH",
4814
+ "DELETE"
4815
+ ]
4816
+ },
4817
+ "path": {
4818
+ "type": "string",
4819
+ "description": "URL path template with {{variable}} interpolation"
4820
+ },
4821
+ "headers": {
4822
+ "type": "object",
4823
+ "additionalProperties": {
4824
+ "type": "string"
4825
+ }
4826
+ },
4827
+ "query_params": {
4828
+ "type": "object",
4829
+ "additionalProperties": {
4830
+ "type": "string"
4831
+ }
4832
+ }
4833
+ }
4834
+ },
4835
+ "ManagedCallExecuteRequest": {
4836
+ "type": "object",
4837
+ "required": [
4838
+ "integration_id"
4839
+ ],
4840
+ "properties": {
4841
+ "integration_id": {
4842
+ "type": "string",
4843
+ "format": "uuid",
4844
+ "description": "Integration ID"
4845
+ },
4846
+ "payload": {
4847
+ "type": "object",
4848
+ "additionalProperties": true,
4849
+ "description": "Request payload for the managed call operation"
4850
+ },
4851
+ "correlation_id": {
4852
+ "type": "string",
4853
+ "description": "Correlation ID for tracing related events (auto-generated if not provided)"
4854
+ }
4855
+ }
4856
+ },
4857
+ "ManagedCallExecuteResponse": {
4858
+ "description": "The response from a managed call execution.\nOn success, returns the JSONata-mapped response data directly (no wrapper).\nThe shape is entirely defined by your response_mapping JSONata expression.\nIf no response_mapping is configured, returns the raw external API response.\nCheck the X-Inbound-Event-Id header for inbound pipeline tracking when inbound routing is configured.\n",
4859
+ "additionalProperties": true
4860
+ },
4861
+ "ManagedCallErrorResponse": {
4862
+ "type": "object",
4863
+ "required": [
4864
+ "error"
4865
+ ],
4866
+ "properties": {
4867
+ "error": {
4868
+ "type": "object",
4869
+ "required": [
4870
+ "code",
4871
+ "message"
4872
+ ],
4873
+ "properties": {
4874
+ "code": {
4875
+ "type": "string",
4876
+ "description": "Error code (e.g., EXTERNAL_API_ERROR, SSRF_BLOCKED, MANAGED_CALL_EXECUTION_ERROR)"
4877
+ },
4878
+ "message": {
4879
+ "type": "string",
4880
+ "description": "Human-readable error message"
4881
+ },
4882
+ "details": {
4883
+ "type": "object",
4884
+ "additionalProperties": true,
4885
+ "description": "Additional error details (e.g., status code and body for external API errors)"
4886
+ }
4887
+ }
4888
+ }
4889
+ }
4890
+ },
4891
+ "FileProxyUseCaseConfiguration": {
4892
+ "type": "object",
4893
+ "required": [
4894
+ "steps",
4895
+ "response"
4896
+ ],
4897
+ "description": "Configuration for file_proxy use cases. Defines how to authenticate and fetch files from external document systems.\n\nThe file proxy download URL always requires `orgId`, `integrationId`, and either `useCaseSlug` (recommended) or `useCaseId` (legacy UUID) as query parameters.\nThe `orgId` is included in the signed URL to establish organization context without requiring authentication.\nAdditional use-case-specific parameters are declared in the `params` array.\n",
4898
+ "properties": {
4899
+ "secure_proxy": {
4900
+ "description": "Optional secure proxy attachment for routing all outbound file proxy requests.\nOnly `use_case_slug` is supported and the referenced secure_proxy use case\nmust belong to the same integration.\n",
4901
+ "allOf": [
4902
+ {
4903
+ "$ref": "#/components/schemas/FileProxySecureProxyAttachment"
4904
+ }
4905
+ ]
4906
+ },
4907
+ "auth": {
4908
+ "$ref": "#/components/schemas/FileProxyAuth"
4909
+ },
4910
+ "params": {
4911
+ "type": "array",
4912
+ "items": {
4913
+ "$ref": "#/components/schemas/FileProxyParam"
4914
+ },
4915
+ "description": "Additional use-case-specific parameters expected in the download URL query string (beyond the required orgId, integrationId, and useCaseSlug or useCaseId)"
4916
+ },
4917
+ "steps": {
4918
+ "type": "array",
4919
+ "minItems": 1,
4920
+ "items": {
4921
+ "$ref": "#/components/schemas/FileProxyStep"
4922
+ },
4923
+ "description": "Ordered list of HTTP steps to execute to retrieve the file"
4924
+ },
4925
+ "response": {
4926
+ "$ref": "#/components/schemas/FileProxyResponseConfig"
4927
+ }
4928
+ }
4929
+ },
4930
+ "FileProxySecureProxyAttachment": {
4301
4931
  "type": "object",
4302
4932
  "required": [
4303
4933
  "use_case_slug"
@@ -5974,6 +6604,330 @@
5974
6604
  "description": "When processing completed"
5975
6605
  }
5976
6606
  }
6607
+ },
6608
+ "QueryMonitoringEventsV2Request": {
6609
+ "type": "object",
6610
+ "properties": {
6611
+ "use_case_id": {
6612
+ "type": "string",
6613
+ "description": "Filter by use case ID (UUID). Empty string matches \"General\" events."
6614
+ },
6615
+ "use_case_type": {
6616
+ "type": "string",
6617
+ "enum": [
6618
+ "inbound",
6619
+ "outbound",
6620
+ "file_proxy",
6621
+ "managed_call",
6622
+ "secure_proxy"
6623
+ ],
6624
+ "description": "Filter by use case type (replaces direction)"
6625
+ },
6626
+ "level": {
6627
+ "type": "string",
6628
+ "enum": [
6629
+ "success",
6630
+ "error",
6631
+ "skipped",
6632
+ "warning"
6633
+ ],
6634
+ "description": "Filter by event level"
6635
+ },
6636
+ "code": {
6637
+ "type": "string",
6638
+ "description": "Filter by taxonomy code (e.g. OAUTH2_TOKEN_FAILURE, HTTP_502)"
6639
+ },
6640
+ "event_id": {
6641
+ "type": "string",
6642
+ "description": "Filter by trigger/inbound event ID"
6643
+ },
6644
+ "correlation_id": {
6645
+ "type": "string",
6646
+ "description": "Filter by correlation ID for tracing"
6647
+ },
6648
+ "from_date": {
6649
+ "type": "string",
6650
+ "format": "date-time",
6651
+ "description": "Filter events from this date (inclusive)",
6652
+ "example": "2025-01-01T00:00:00Z"
6653
+ },
6654
+ "to_date": {
6655
+ "type": "string",
6656
+ "format": "date-time",
6657
+ "description": "Filter events until this date (inclusive)",
6658
+ "example": "2025-01-31T23:59:59Z"
6659
+ },
6660
+ "limit": {
6661
+ "type": "integer",
6662
+ "description": "Maximum number of results to return",
6663
+ "example": 50,
6664
+ "default": 50,
6665
+ "minimum": 1,
6666
+ "maximum": 100
6667
+ },
6668
+ "cursor": {
6669
+ "type": "object",
6670
+ "description": "Cursor for pagination (from previous response's next_cursor)",
6671
+ "properties": {
6672
+ "created_at": {
6673
+ "type": "string",
6674
+ "format": "date-time"
6675
+ },
6676
+ "id": {
6677
+ "type": "string",
6678
+ "format": "uuid"
6679
+ }
6680
+ }
6681
+ }
6682
+ }
6683
+ },
6684
+ "MonitoringEventV2": {
6685
+ "type": "object",
6686
+ "required": [
6687
+ "id",
6688
+ "org_id",
6689
+ "integration_id",
6690
+ "event_id",
6691
+ "use_case_type",
6692
+ "level",
6693
+ "created_at"
6694
+ ],
6695
+ "properties": {
6696
+ "id": {
6697
+ "type": "string",
6698
+ "format": "uuid",
6699
+ "description": "Unique monitoring event ID"
6700
+ },
6701
+ "org_id": {
6702
+ "type": "string",
6703
+ "description": "Organization ID"
6704
+ },
6705
+ "integration_id": {
6706
+ "type": "string",
6707
+ "description": "Integration ID"
6708
+ },
6709
+ "event_id": {
6710
+ "type": "string",
6711
+ "description": "Trigger/inbound event ID (groups related monitoring events)"
6712
+ },
6713
+ "correlation_id": {
6714
+ "type": "string",
6715
+ "description": "Correlation ID for tracing. Empty when unavailable."
6716
+ },
6717
+ "use_case_id": {
6718
+ "type": "string",
6719
+ "description": "Use case ID. Empty for system-level events (\"General\")."
6720
+ },
6721
+ "use_case_type": {
6722
+ "type": "string",
6723
+ "enum": [
6724
+ "inbound",
6725
+ "outbound",
6726
+ "file_proxy",
6727
+ "managed_call",
6728
+ "secure_proxy",
6729
+ ""
6730
+ ],
6731
+ "description": "Use case type. Empty for system-level events."
6732
+ },
6733
+ "level": {
6734
+ "type": "string",
6735
+ "enum": [
6736
+ "success",
6737
+ "error",
6738
+ "skipped",
6739
+ "warning"
6740
+ ],
6741
+ "description": "Event outcome level"
6742
+ },
6743
+ "code": {
6744
+ "type": "string",
6745
+ "description": "Taxonomy code (e.g. OAUTH2_TOKEN_FAILURE, HTTP_502). Empty for success."
6746
+ },
6747
+ "message": {
6748
+ "type": "string",
6749
+ "description": "Human-readable message. Empty when not applicable."
6750
+ },
6751
+ "detail": {
6752
+ "type": "object",
6753
+ "nullable": true,
6754
+ "additionalProperties": true,
6755
+ "description": "Event-specific JSON data. Structure determined by `code`."
6756
+ },
6757
+ "created_at": {
6758
+ "type": "string",
6759
+ "format": "date-time",
6760
+ "description": "When the monitoring event was created"
6761
+ }
6762
+ }
6763
+ },
6764
+ "GetMonitoringStatsV2Request": {
6765
+ "type": "object",
6766
+ "properties": {
6767
+ "from_date": {
6768
+ "type": "string",
6769
+ "format": "date-time",
6770
+ "description": "Start of the time range",
6771
+ "example": "2025-01-01T00:00:00Z"
6772
+ },
6773
+ "to_date": {
6774
+ "type": "string",
6775
+ "format": "date-time",
6776
+ "description": "End of the time range",
6777
+ "example": "2025-01-31T23:59:59Z"
6778
+ },
6779
+ "use_case_type": {
6780
+ "type": "string",
6781
+ "enum": [
6782
+ "inbound",
6783
+ "outbound",
6784
+ "file_proxy",
6785
+ "managed_call",
6786
+ "secure_proxy"
6787
+ ],
6788
+ "description": "Filter stats by use case type"
6789
+ },
6790
+ "group_by": {
6791
+ "type": "string",
6792
+ "enum": [
6793
+ "use_case_id",
6794
+ "use_case_type",
6795
+ "level",
6796
+ "code",
6797
+ "date"
6798
+ ],
6799
+ "description": "Field to group the breakdown by"
6800
+ }
6801
+ }
6802
+ },
6803
+ "MonitoringStatsV2": {
6804
+ "type": "object",
6805
+ "required": [
6806
+ "total_events",
6807
+ "success_count",
6808
+ "error_count",
6809
+ "warning_count",
6810
+ "skipped_count"
6811
+ ],
6812
+ "properties": {
6813
+ "total_events": {
6814
+ "type": "integer",
6815
+ "description": "Total number of events in the period"
6816
+ },
6817
+ "success_count": {
6818
+ "type": "integer",
6819
+ "description": "Number of successful events"
6820
+ },
6821
+ "error_count": {
6822
+ "type": "integer",
6823
+ "description": "Number of error events"
6824
+ },
6825
+ "warning_count": {
6826
+ "type": "integer",
6827
+ "description": "Number of warning events"
6828
+ },
6829
+ "skipped_count": {
6830
+ "type": "integer",
6831
+ "description": "Number of skipped events"
6832
+ },
6833
+ "success_rate": {
6834
+ "type": "number",
6835
+ "format": "float",
6836
+ "description": "Success rate as percentage (0-100)"
6837
+ },
6838
+ "last_error_at": {
6839
+ "type": "string",
6840
+ "format": "date-time",
6841
+ "nullable": true,
6842
+ "description": "Timestamp of the most recent error"
6843
+ },
6844
+ "breakdown": {
6845
+ "type": "array",
6846
+ "description": "Statistics breakdown by requested group_by field",
6847
+ "items": {
6848
+ "type": "object",
6849
+ "additionalProperties": true
6850
+ }
6851
+ }
6852
+ }
6853
+ },
6854
+ "GetMonitoringTimeSeriesV2Request": {
6855
+ "type": "object",
6856
+ "required": [
6857
+ "from_date",
6858
+ "interval"
6859
+ ],
6860
+ "properties": {
6861
+ "from_date": {
6862
+ "type": "string",
6863
+ "format": "date-time",
6864
+ "description": "Start of the time range (required)",
6865
+ "example": "2025-01-01T00:00:00Z"
6866
+ },
6867
+ "to_date": {
6868
+ "type": "string",
6869
+ "format": "date-time",
6870
+ "description": "End of the time range (defaults to now)",
6871
+ "example": "2025-01-31T23:59:59Z"
6872
+ },
6873
+ "interval": {
6874
+ "type": "string",
6875
+ "enum": [
6876
+ "5m",
6877
+ "10m",
6878
+ "30m",
6879
+ "1h",
6880
+ "3h",
6881
+ "1d"
6882
+ ],
6883
+ "description": "Time bucket interval"
6884
+ },
6885
+ "use_case_type": {
6886
+ "type": "string",
6887
+ "enum": [
6888
+ "inbound",
6889
+ "outbound",
6890
+ "file_proxy",
6891
+ "managed_call",
6892
+ "secure_proxy"
6893
+ ],
6894
+ "description": "Filter by use case type"
6895
+ }
6896
+ }
6897
+ },
6898
+ "TimeSeriesBucketV2": {
6899
+ "type": "object",
6900
+ "required": [
6901
+ "timestamp",
6902
+ "total_count"
6903
+ ],
6904
+ "properties": {
6905
+ "timestamp": {
6906
+ "type": "string",
6907
+ "format": "date-time",
6908
+ "description": "Bucket start timestamp"
6909
+ },
6910
+ "success_count": {
6911
+ "type": "integer",
6912
+ "description": "Number of successful events in the bucket"
6913
+ },
6914
+ "error_count": {
6915
+ "type": "integer",
6916
+ "description": "Number of error events in the bucket"
6917
+ },
6918
+ "warning_count": {
6919
+ "type": "integer",
6920
+ "description": "Number of warning events in the bucket"
6921
+ },
6922
+ "skipped_count": {
6923
+ "type": "integer",
6924
+ "description": "Number of skipped events in the bucket"
6925
+ },
6926
+ "total_count": {
6927
+ "type": "integer",
6928
+ "description": "Total events in the bucket"
6929
+ }
6930
+ }
5977
6931
  }
5978
6932
  },
5979
6933
  "responses": {
@@ -6007,6 +6961,16 @@
6007
6961
  }
6008
6962
  }
6009
6963
  },
6964
+ "Forbidden": {
6965
+ "description": "Forbidden - insufficient permissions",
6966
+ "content": {
6967
+ "application/json": {
6968
+ "schema": {
6969
+ "$ref": "#/components/schemas/ErrorResponseBase"
6970
+ }
6971
+ }
6972
+ }
6973
+ },
6010
6974
  "InternalServerError": {
6011
6975
  "description": "Internal Server Error",
6012
6976
  "content": {
@@ -6298,6 +7262,92 @@
6298
7262
  }
6299
7263
  }
6300
7264
  }
7265
+ },
7266
+ "QueryMonitoringEventsV2Response": {
7267
+ "description": "Monitoring events queried successfully",
7268
+ "content": {
7269
+ "application/json": {
7270
+ "schema": {
7271
+ "type": "object",
7272
+ "properties": {
7273
+ "data": {
7274
+ "type": "array",
7275
+ "items": {
7276
+ "$ref": "#/components/schemas/MonitoringEventV2"
7277
+ },
7278
+ "description": "List of monitoring events"
7279
+ },
7280
+ "next_cursor": {
7281
+ "type": "object",
7282
+ "nullable": true,
7283
+ "description": "Cursor to fetch the next page. Null if no more results.",
7284
+ "properties": {
7285
+ "created_at": {
7286
+ "type": "string",
7287
+ "format": "date-time"
7288
+ },
7289
+ "id": {
7290
+ "type": "string",
7291
+ "format": "uuid"
7292
+ }
7293
+ }
7294
+ },
7295
+ "has_more": {
7296
+ "type": "boolean",
7297
+ "description": "Indicates if more results are available"
7298
+ }
7299
+ }
7300
+ }
7301
+ }
7302
+ }
7303
+ },
7304
+ "GetMonitoringStatsV2Response": {
7305
+ "description": "Monitoring statistics retrieved successfully",
7306
+ "content": {
7307
+ "application/json": {
7308
+ "schema": {
7309
+ "$ref": "#/components/schemas/MonitoringStatsV2"
7310
+ }
7311
+ }
7312
+ }
7313
+ },
7314
+ "GetMonitoringTimeSeriesV2Response": {
7315
+ "description": "Time-series data retrieved successfully",
7316
+ "content": {
7317
+ "application/json": {
7318
+ "schema": {
7319
+ "type": "object",
7320
+ "properties": {
7321
+ "interval": {
7322
+ "type": "string",
7323
+ "enum": [
7324
+ "5m",
7325
+ "10m",
7326
+ "30m",
7327
+ "1h",
7328
+ "3h",
7329
+ "1d"
7330
+ ],
7331
+ "description": "The bucket interval"
7332
+ },
7333
+ "from_date": {
7334
+ "type": "string",
7335
+ "format": "date-time"
7336
+ },
7337
+ "to_date": {
7338
+ "type": "string",
7339
+ "format": "date-time"
7340
+ },
7341
+ "buckets": {
7342
+ "type": "array",
7343
+ "items": {
7344
+ "$ref": "#/components/schemas/TimeSeriesBucketV2"
7345
+ }
7346
+ }
7347
+ }
7348
+ }
7349
+ }
7350
+ }
6301
7351
  }
6302
7352
  }
6303
7353
  }