@avallon-labs/sdk 0.0.0-0ca09b5e

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/openapi.yaml ADDED
@@ -0,0 +1,986 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Avallon API
4
+ version: 1.0.0
5
+ servers:
6
+ - url: https://api.avallon.ai
7
+ description: US Region (Virginia)
8
+ - url: https://api.eu.avallon.ai
9
+ description: EU Region (Frankfurt)
10
+ security:
11
+ - ApiKeyAuth: []
12
+ paths:
13
+ /v1/agents:
14
+ get:
15
+ summary: List agents
16
+ description: |-
17
+ List all agents for your tenant.
18
+
19
+ **Filtering:**
20
+
21
+ Filter agents by name using the `agent_name` query parameter (exact match).
22
+
23
+ **Response:**
24
+
25
+ Returns an array of all agents with their configurations and a total count.
26
+ operationId: listAgents
27
+ tags:
28
+ - Agents
29
+ parameters:
30
+ - in: query
31
+ name: agent_name
32
+ schema:
33
+ description: Filter by exact agent name
34
+ example: customer-support-agent
35
+ type: string
36
+ description: Filter by exact agent name
37
+ responses:
38
+ "200":
39
+ description: List of agents
40
+ content:
41
+ application/json:
42
+ schema:
43
+ $ref: "#/components/schemas/AgentList"
44
+ "400":
45
+ description: Bad request
46
+ content:
47
+ application/json:
48
+ schema:
49
+ $ref: "#/components/schemas/ErrorResponse"
50
+ "401":
51
+ description: Unauthorized
52
+ content:
53
+ application/json:
54
+ schema:
55
+ $ref: "#/components/schemas/ErrorResponse"
56
+ "409":
57
+ description: Conflict
58
+ content:
59
+ application/json:
60
+ schema:
61
+ $ref: "#/components/schemas/ErrorResponse"
62
+ "500":
63
+ description: Internal server error
64
+ content:
65
+ application/json:
66
+ schema:
67
+ $ref: "#/components/schemas/ErrorResponse"
68
+ post:
69
+ summary: Create agent
70
+ description: |-
71
+ Create a new voice agent with the specified configuration.
72
+
73
+ **Required fields:**
74
+
75
+ All fields in the request body are required except `phone_number_id` and `transfer_phone_number`.
76
+
77
+ **Response:**
78
+
79
+ Returns the created agent with its ID and configuration.
80
+ operationId: createAgent
81
+ tags:
82
+ - Agents
83
+ requestBody:
84
+ content:
85
+ application/json:
86
+ schema:
87
+ type: object
88
+ properties:
89
+ agent_name:
90
+ type: string
91
+ minLength: 1
92
+ description: Name for the agent
93
+ example: customer-support-agent
94
+ direction:
95
+ type: string
96
+ enum:
97
+ - OUTBOUND
98
+ - INBOUND
99
+ description: Call direction the agent handles
100
+ example: INBOUND
101
+ llm_model:
102
+ type: string
103
+ enum:
104
+ - GPT4.1
105
+ - AZURE-GPT4o
106
+ - AZURE-GPT4.1
107
+ - GPT-5
108
+ - GPT-5-low
109
+ - GPT-5-high
110
+ - GPT-5.1-chat-latest
111
+ - GPT-5.1-no-reasoning
112
+ - GEMINI-1.5-flash
113
+ - GEMINI-2.5-flash
114
+ - GEMINI-2.5-flash-lite
115
+ - GEMINI-3-flash
116
+ description: LLM model for conversation
117
+ example: GPT-5
118
+ tts_provider:
119
+ type: string
120
+ enum:
121
+ - elevenlabs
122
+ - cartesia
123
+ - google
124
+ description: Text-to-speech provider
125
+ example: elevenlabs
126
+ tts_model:
127
+ type: string
128
+ enum:
129
+ - eleven_flash_v2_5
130
+ - eleven_turbo_v2_5
131
+ - sonic-multilingual
132
+ - sonic-3
133
+ - chirp_3
134
+ description: Text-to-speech model
135
+ example: eleven_flash_v2_5
136
+ tts_voice_id:
137
+ anyOf:
138
+ - anyOf:
139
+ - type: string
140
+ enum:
141
+ - Achernar
142
+ - Achird
143
+ - type: string
144
+ enum:
145
+ - v3V1d2rk6528UrLKRuy8
146
+ - type: string
147
+ enum:
148
+ - 5c42302c-194b-4d0c-ba1a-8cb485c84ab9
149
+ - e8e5fffb-252c-436d-b842-8879b84445b6
150
+ - f786b574-daa5-4673-aa0c-cbe3e8534c02
151
+ - 8d8ce8c9-44a4-46c4-b10f-9a927b99a853
152
+ - 5ee9feff-1265-424a-9d7f-8e4d431a12c7
153
+ - b9de4a89-2257-424b-94c2-db18ba68c81a
154
+ description: Voice ID from the TTS provider
155
+ example: 21m00Tcm4TlvDq8ikWAM
156
+ stt_model:
157
+ type: string
158
+ enum:
159
+ - DEEPGRAM-NOVA-2-GENERAL
160
+ - DEEPGRAM-NOVA-3-GENERAL
161
+ - AWS-TRANSCRIBE
162
+ description: Speech-to-text model
163
+ example: DEEPGRAM-NOVA-3-GENERAL
164
+ transfer_phone_number:
165
+ anyOf:
166
+ - type: string
167
+ - type: "null"
168
+ description: Phone number to transfer calls to
169
+ example: null
170
+ phone_number_id:
171
+ description: ID of phone number to assign to agent
172
+ example: pn_123456
173
+ type: string
174
+ language:
175
+ type: string
176
+ enum:
177
+ - en-US
178
+ - de-DE
179
+ description: Language for the agent
180
+ example: en-US
181
+ dial_pad:
182
+ description: Whether the agent supports DTMF dial pad input
183
+ example: false
184
+ type: boolean
185
+ end_call:
186
+ description: Whether the agent can end the call
187
+ example: false
188
+ type: boolean
189
+ required:
190
+ - agent_name
191
+ - direction
192
+ - llm_model
193
+ - tts_provider
194
+ - tts_model
195
+ - tts_voice_id
196
+ - stt_model
197
+ - transfer_phone_number
198
+ - language
199
+ responses:
200
+ "201":
201
+ description: Created agent
202
+ content:
203
+ application/json:
204
+ schema:
205
+ $ref: "#/components/schemas/CreateAgentResponse"
206
+ "400":
207
+ description: Bad request
208
+ content:
209
+ application/json:
210
+ schema:
211
+ $ref: "#/components/schemas/ErrorResponse"
212
+ "401":
213
+ description: Unauthorized
214
+ content:
215
+ application/json:
216
+ schema:
217
+ $ref: "#/components/schemas/ErrorResponse"
218
+ "409":
219
+ description: Conflict
220
+ content:
221
+ application/json:
222
+ schema:
223
+ $ref: "#/components/schemas/ErrorResponse"
224
+ "500":
225
+ description: Internal server error
226
+ content:
227
+ application/json:
228
+ schema:
229
+ $ref: "#/components/schemas/ErrorResponse"
230
+ /v1/agents/{id}:
231
+ get:
232
+ summary: Get agent
233
+ description: Retrieve a single agent by ID.
234
+ operationId: getAgent
235
+ tags:
236
+ - Agents
237
+ parameters:
238
+ - in: path
239
+ name: id
240
+ schema:
241
+ type: string
242
+ minLength: 1
243
+ description: Agent ID
244
+ example: 550e8400-e29b-41d4-a716-446655440000
245
+ required: true
246
+ description: Agent ID
247
+ responses:
248
+ "200":
249
+ description: Agent details
250
+ content:
251
+ application/json:
252
+ schema:
253
+ $ref: "#/components/schemas/GetAgentResponse"
254
+ "400":
255
+ description: Bad request
256
+ content:
257
+ application/json:
258
+ schema:
259
+ $ref: "#/components/schemas/ErrorResponse"
260
+ "401":
261
+ description: Unauthorized
262
+ content:
263
+ application/json:
264
+ schema:
265
+ $ref: "#/components/schemas/ErrorResponse"
266
+ "404":
267
+ description: Not found
268
+ content:
269
+ application/json:
270
+ schema:
271
+ $ref: "#/components/schemas/ErrorResponse"
272
+ "409":
273
+ description: Conflict
274
+ content:
275
+ application/json:
276
+ schema:
277
+ $ref: "#/components/schemas/ErrorResponse"
278
+ "500":
279
+ description: Internal server error
280
+ content:
281
+ application/json:
282
+ schema:
283
+ $ref: "#/components/schemas/ErrorResponse"
284
+ /platform/api-keys:
285
+ get:
286
+ summary: List API keys
287
+ description: |-
288
+ List all API keys for your tenant.
289
+
290
+ By default, revoked keys are excluded. Set `include_revoked=true` to include them.
291
+
292
+ **Note:** The full API key value is never returned — only the key prefix is shown.
293
+ operationId: listApiKeys
294
+ tags:
295
+ - API Keys
296
+ parameters:
297
+ - in: query
298
+ name: include_revoked
299
+ schema:
300
+ description: Include revoked keys in the response
301
+ type: string
302
+ enum:
303
+ - "true"
304
+ - "false"
305
+ description: Include revoked keys in the response
306
+ responses:
307
+ "200":
308
+ description: List of API keys
309
+ content:
310
+ application/json:
311
+ schema:
312
+ $ref: "#/components/schemas/ApiKeyList"
313
+ "400":
314
+ description: Bad request
315
+ content:
316
+ application/json:
317
+ schema:
318
+ $ref: "#/components/schemas/ErrorResponse"
319
+ "401":
320
+ description: Unauthorized
321
+ content:
322
+ application/json:
323
+ schema:
324
+ $ref: "#/components/schemas/ErrorResponse"
325
+ "409":
326
+ description: Conflict
327
+ content:
328
+ application/json:
329
+ schema:
330
+ $ref: "#/components/schemas/ErrorResponse"
331
+ "500":
332
+ description: Internal server error
333
+ content:
334
+ application/json:
335
+ schema:
336
+ $ref: "#/components/schemas/ErrorResponse"
337
+ post:
338
+ summary: Create an API key
339
+ description: >-
340
+ Create a new API key for authenticating with the Avallon API.
341
+
342
+
343
+ **Important:** The full API key is only returned once in the response. Store it securely — it cannot be
344
+ retrieved again.
345
+
346
+
347
+ Keys are scoped to an environment (`test` or `live`) and optionally accept an expiration date.
348
+ operationId: createApiKey
349
+ tags:
350
+ - API Keys
351
+ requestBody:
352
+ content:
353
+ application/json:
354
+ schema:
355
+ type: object
356
+ properties:
357
+ name:
358
+ type: string
359
+ minLength: 1
360
+ maxLength: 100
361
+ description: Human-readable name for the API key
362
+ expires_at:
363
+ description: Optional expiration date (ISO 8601)
364
+ type: string
365
+ format: date-time
366
+ environment:
367
+ default: live
368
+ description: Target environment for the key
369
+ type: string
370
+ enum:
371
+ - test
372
+ - live
373
+ required:
374
+ - name
375
+ responses:
376
+ "201":
377
+ description: The created API key (includes the full key — only shown once)
378
+ content:
379
+ application/json:
380
+ schema:
381
+ $ref: "#/components/schemas/ApiKeyCreated"
382
+ "400":
383
+ description: Bad request
384
+ content:
385
+ application/json:
386
+ schema:
387
+ $ref: "#/components/schemas/ErrorResponse"
388
+ "401":
389
+ description: Unauthorized
390
+ content:
391
+ application/json:
392
+ schema:
393
+ $ref: "#/components/schemas/ErrorResponse"
394
+ "409":
395
+ description: Conflict
396
+ content:
397
+ application/json:
398
+ schema:
399
+ $ref: "#/components/schemas/ErrorResponse"
400
+ "500":
401
+ description: Internal server error
402
+ content:
403
+ application/json:
404
+ schema:
405
+ $ref: "#/components/schemas/ErrorResponse"
406
+ /platform/api-keys/{id}/revoke:
407
+ post:
408
+ summary: Revoke an API key
409
+ description: |-
410
+ Revoke an existing API key. Once revoked, the key can no longer be used for authentication.
411
+
412
+ This operation is irreversible — revoked keys cannot be re-enabled. Create a new key if needed.
413
+
414
+ Returns 409 if the key is already revoked, 404 if the key does not exist.
415
+ operationId: revokeApiKey
416
+ tags:
417
+ - API Keys
418
+ parameters:
419
+ - in: path
420
+ name: id
421
+ schema:
422
+ type: string
423
+ format: uuid
424
+ pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
425
+ description: The API key ID to revoke
426
+ required: true
427
+ description: The API key ID to revoke
428
+ responses:
429
+ "200":
430
+ description: Revocation confirmation
431
+ content:
432
+ application/json:
433
+ schema:
434
+ $ref: "#/components/schemas/ConfirmationResponse"
435
+ "400":
436
+ description: Bad request
437
+ content:
438
+ application/json:
439
+ schema:
440
+ $ref: "#/components/schemas/ErrorResponse"
441
+ "401":
442
+ description: Unauthorized
443
+ content:
444
+ application/json:
445
+ schema:
446
+ $ref: "#/components/schemas/ErrorResponse"
447
+ "404":
448
+ description: Not found
449
+ content:
450
+ application/json:
451
+ schema:
452
+ $ref: "#/components/schemas/ErrorResponse"
453
+ "409":
454
+ description: Conflict
455
+ content:
456
+ application/json:
457
+ schema:
458
+ $ref: "#/components/schemas/ErrorResponse"
459
+ "500":
460
+ description: Internal server error
461
+ content:
462
+ application/json:
463
+ schema:
464
+ $ref: "#/components/schemas/ErrorResponse"
465
+ /v1/auth/sign-up:
466
+ post:
467
+ tags:
468
+ - Auth
469
+ security: []
470
+ requestBody:
471
+ content:
472
+ application/json:
473
+ schema:
474
+ type: object
475
+ properties:
476
+ email:
477
+ type: string
478
+ format: email
479
+ pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
480
+ password:
481
+ type: string
482
+ required:
483
+ - email
484
+ - password
485
+ responses:
486
+ "200":
487
+ description: Success
488
+ content:
489
+ application/json:
490
+ schema:
491
+ $ref: "#/components/schemas/EmptyResponse"
492
+ "400":
493
+ description: Bad request
494
+ content:
495
+ application/json:
496
+ schema:
497
+ $ref: "#/components/schemas/ErrorResponse"
498
+ "401":
499
+ description: Unauthorized
500
+ content:
501
+ application/json:
502
+ schema:
503
+ $ref: "#/components/schemas/ErrorResponse"
504
+ "409":
505
+ description: Conflict
506
+ content:
507
+ application/json:
508
+ schema:
509
+ $ref: "#/components/schemas/ErrorResponse"
510
+ "500":
511
+ description: Internal server error
512
+ content:
513
+ application/json:
514
+ schema:
515
+ $ref: "#/components/schemas/ErrorResponse"
516
+ /v1/auth/sign-in:
517
+ post:
518
+ tags:
519
+ - Auth
520
+ security: []
521
+ requestBody:
522
+ content:
523
+ application/json:
524
+ schema:
525
+ oneOf:
526
+ - type: object
527
+ properties:
528
+ type:
529
+ type: string
530
+ const: password
531
+ email:
532
+ type: string
533
+ password:
534
+ type: string
535
+ required:
536
+ - type
537
+ - email
538
+ - password
539
+ - type: object
540
+ properties:
541
+ type:
542
+ type: string
543
+ const: oauth
544
+ code:
545
+ type: string
546
+ verifier:
547
+ type: string
548
+ required:
549
+ - type
550
+ - code
551
+ - verifier
552
+ - type: object
553
+ properties:
554
+ type:
555
+ type: string
556
+ const: email_otp
557
+ email:
558
+ type: string
559
+ format: email
560
+ pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
561
+ token:
562
+ type: string
563
+ minLength: 1
564
+ required:
565
+ - type
566
+ - email
567
+ - token
568
+ type: object
569
+ responses:
570
+ "200":
571
+ description: Success
572
+ content:
573
+ application/json:
574
+ schema:
575
+ $ref: "#/components/schemas/AuthTokens"
576
+ "400":
577
+ description: Bad request
578
+ content:
579
+ application/json:
580
+ schema:
581
+ $ref: "#/components/schemas/ErrorResponse"
582
+ "401":
583
+ description: Unauthorized
584
+ content:
585
+ application/json:
586
+ schema:
587
+ $ref: "#/components/schemas/ErrorResponse"
588
+ "409":
589
+ description: Conflict
590
+ content:
591
+ application/json:
592
+ schema:
593
+ $ref: "#/components/schemas/ErrorResponse"
594
+ "500":
595
+ description: Internal server error
596
+ content:
597
+ application/json:
598
+ schema:
599
+ $ref: "#/components/schemas/ErrorResponse"
600
+ /v1/auth/refresh-token:
601
+ post:
602
+ tags:
603
+ - Auth
604
+ security: []
605
+ requestBody:
606
+ content:
607
+ application/json:
608
+ schema:
609
+ type: object
610
+ properties:
611
+ access_token:
612
+ type: string
613
+ refresh_token:
614
+ type: string
615
+ required:
616
+ - access_token
617
+ - refresh_token
618
+ responses:
619
+ "200":
620
+ description: Success
621
+ content:
622
+ application/json:
623
+ schema:
624
+ $ref: "#/components/schemas/AuthTokens"
625
+ "400":
626
+ description: Bad request
627
+ content:
628
+ application/json:
629
+ schema:
630
+ $ref: "#/components/schemas/ErrorResponse"
631
+ "401":
632
+ description: Unauthorized
633
+ content:
634
+ application/json:
635
+ schema:
636
+ $ref: "#/components/schemas/ErrorResponse"
637
+ "409":
638
+ description: Conflict
639
+ content:
640
+ application/json:
641
+ schema:
642
+ $ref: "#/components/schemas/ErrorResponse"
643
+ "500":
644
+ description: Internal server error
645
+ content:
646
+ application/json:
647
+ schema:
648
+ $ref: "#/components/schemas/ErrorResponse"
649
+ /v1/auth/oauth-url:
650
+ get:
651
+ tags:
652
+ - Auth
653
+ security: []
654
+ parameters:
655
+ - in: query
656
+ name: provider
657
+ schema:
658
+ type: string
659
+ enum:
660
+ - google
661
+ - microsoft
662
+ required: true
663
+ - in: query
664
+ name: redirect_uri
665
+ schema:
666
+ type: string
667
+ format: uri
668
+ required: true
669
+ - in: query
670
+ name: code_challenge_method
671
+ schema:
672
+ type: string
673
+ enum:
674
+ - plain
675
+ - s256
676
+ required: true
677
+ - in: query
678
+ name: code_challenge
679
+ schema:
680
+ type: string
681
+ minLength: 1
682
+ required: true
683
+ responses:
684
+ "200":
685
+ description: Success
686
+ content:
687
+ application/json:
688
+ schema:
689
+ $ref: "#/components/schemas/OAuthUrl"
690
+ "400":
691
+ description: Bad request
692
+ content:
693
+ application/json:
694
+ schema:
695
+ $ref: "#/components/schemas/ErrorResponse"
696
+ "401":
697
+ description: Unauthorized
698
+ content:
699
+ application/json:
700
+ schema:
701
+ $ref: "#/components/schemas/ErrorResponse"
702
+ "409":
703
+ description: Conflict
704
+ content:
705
+ application/json:
706
+ schema:
707
+ $ref: "#/components/schemas/ErrorResponse"
708
+ "500":
709
+ description: Internal server error
710
+ content:
711
+ application/json:
712
+ schema:
713
+ $ref: "#/components/schemas/ErrorResponse"
714
+ components:
715
+ schemas:
716
+ AgentList:
717
+ type: object
718
+ properties:
719
+ agents:
720
+ type: array
721
+ items:
722
+ $ref: "#/components/schemas/Agent"
723
+ total:
724
+ type: integer
725
+ minimum: -9007199254740991
726
+ maximum: 9007199254740991
727
+ description: Total number of agents
728
+ example: 2
729
+ required:
730
+ - agents
731
+ - total
732
+ additionalProperties: false
733
+ Agent:
734
+ type: object
735
+ properties:
736
+ id:
737
+ type: string
738
+ tenant_id:
739
+ type: string
740
+ agent_name:
741
+ type: string
742
+ direction:
743
+ type: string
744
+ enum:
745
+ - INBOUND
746
+ - OUTBOUND
747
+ llm_model:
748
+ type: string
749
+ enum:
750
+ - GPT4.1
751
+ - AZURE-GPT4o
752
+ - AZURE-GPT4.1
753
+ - GPT-5
754
+ - GPT-5-low
755
+ - GPT-5-high
756
+ - GPT-5.1-chat-latest
757
+ - GPT-5.1-no-reasoning
758
+ - GEMINI-1.5-flash
759
+ - GEMINI-2.5-flash
760
+ - GEMINI-2.5-flash-lite
761
+ - GEMINI-3-flash
762
+ tts_provider:
763
+ type: string
764
+ enum:
765
+ - elevenlabs
766
+ - cartesia
767
+ - google
768
+ tts_model:
769
+ type: string
770
+ enum:
771
+ - eleven_flash_v2_5
772
+ - eleven_turbo_v2_5
773
+ - sonic-multilingual
774
+ - sonic-3
775
+ - chirp_3
776
+ language:
777
+ type: string
778
+ enum:
779
+ - en-US
780
+ - de-DE
781
+ tts_voice_id:
782
+ type: string
783
+ stt_model:
784
+ type: string
785
+ enum:
786
+ - DEEPGRAM-NOVA-2-GENERAL
787
+ - DEEPGRAM-NOVA-3-GENERAL
788
+ - AWS-TRANSCRIBE
789
+ transfer_phone_number:
790
+ anyOf:
791
+ - type: string
792
+ - type: "null"
793
+ background_sounds:
794
+ type: string
795
+ enum:
796
+ - enabled
797
+ - disabled
798
+ created_at:
799
+ type: string
800
+ format: date-time
801
+ updated_at:
802
+ type: string
803
+ format: date-time
804
+ phone_number:
805
+ anyOf:
806
+ - type: string
807
+ - type: "null"
808
+ dial_pad:
809
+ type: boolean
810
+ end_call:
811
+ type: boolean
812
+ required:
813
+ - id
814
+ - tenant_id
815
+ - agent_name
816
+ - direction
817
+ - llm_model
818
+ - tts_provider
819
+ - tts_model
820
+ - language
821
+ - tts_voice_id
822
+ - stt_model
823
+ - transfer_phone_number
824
+ - background_sounds
825
+ - created_at
826
+ - updated_at
827
+ - phone_number
828
+ - dial_pad
829
+ - end_call
830
+ additionalProperties: false
831
+ ErrorResponse:
832
+ type: object
833
+ properties:
834
+ data:
835
+ type: object
836
+ properties: {}
837
+ additionalProperties: false
838
+ message:
839
+ type: string
840
+ description: Human-readable error message
841
+ required:
842
+ - data
843
+ - message
844
+ additionalProperties: false
845
+ CreateAgentResponse:
846
+ type: object
847
+ properties:
848
+ agent:
849
+ $ref: "#/components/schemas/Agent"
850
+ required:
851
+ - agent
852
+ additionalProperties: false
853
+ GetAgentResponse:
854
+ type: object
855
+ properties:
856
+ agent:
857
+ $ref: "#/components/schemas/Agent"
858
+ required:
859
+ - agent
860
+ additionalProperties: false
861
+ ApiKeyList:
862
+ type: object
863
+ properties:
864
+ data:
865
+ type: array
866
+ items:
867
+ $ref: "#/components/schemas/ApiKey"
868
+ count:
869
+ type: number
870
+ description: Total number of keys returned
871
+ required:
872
+ - data
873
+ - count
874
+ additionalProperties: false
875
+ ApiKey:
876
+ type: object
877
+ properties:
878
+ id:
879
+ type: string
880
+ description: Unique identifier for the API key
881
+ name:
882
+ type: string
883
+ description: Human-readable name for the API key
884
+ key_prefix:
885
+ type: string
886
+ description: First 12 characters of the key (e.g. ak_live_abc1)
887
+ last_used_at:
888
+ description: Last usage timestamp, if ever used
889
+ type: string
890
+ format: date-time
891
+ expires_at:
892
+ description: Expiration date, if set
893
+ type: string
894
+ format: date-time
895
+ revoked_at:
896
+ description: Revocation timestamp, if revoked
897
+ type: string
898
+ format: date-time
899
+ created_at:
900
+ type: string
901
+ format: date-time
902
+ description: Creation timestamp
903
+ updated_at:
904
+ type: string
905
+ format: date-time
906
+ description: Last update timestamp
907
+ required:
908
+ - id
909
+ - name
910
+ - key_prefix
911
+ - created_at
912
+ - updated_at
913
+ additionalProperties: false
914
+ ApiKeyCreated:
915
+ type: object
916
+ properties:
917
+ id:
918
+ type: string
919
+ description: Unique identifier for the API key
920
+ name:
921
+ type: string
922
+ description: Human-readable name for the API key
923
+ key_prefix:
924
+ type: string
925
+ description: First 12 characters of the key (e.g. ak_live_abc1)
926
+ expires_at:
927
+ description: Expiration date, if set
928
+ type: string
929
+ format: date-time
930
+ created_at:
931
+ type: string
932
+ format: date-time
933
+ description: Creation timestamp
934
+ api_key:
935
+ type: string
936
+ description: The full API key — only returned once at creation
937
+ required:
938
+ - id
939
+ - name
940
+ - key_prefix
941
+ - created_at
942
+ - api_key
943
+ additionalProperties: false
944
+ ConfirmationResponse:
945
+ type: object
946
+ properties:
947
+ message:
948
+ type: string
949
+ description: Confirmation message
950
+ required:
951
+ - message
952
+ additionalProperties: false
953
+ EmptyResponse:
954
+ type: object
955
+ properties: {}
956
+ additionalProperties: false
957
+ AuthTokens:
958
+ type: object
959
+ properties:
960
+ access_token:
961
+ type: string
962
+ refresh_token:
963
+ type: string
964
+ expires_at:
965
+ type: string
966
+ format: date-time
967
+ required:
968
+ - access_token
969
+ - refresh_token
970
+ - expires_at
971
+ additionalProperties: false
972
+ OAuthUrl:
973
+ type: object
974
+ properties:
975
+ url:
976
+ type: string
977
+ format: uri
978
+ required:
979
+ - url
980
+ additionalProperties: false
981
+ securitySchemes:
982
+ ApiKeyAuth:
983
+ type: apiKey
984
+ in: header
985
+ name: x-api-key
986
+ description: API key for authentication