Repository navigation
Expand file tree
/
Copy pathCAMARA_common.yaml
More file actions
1463 lines (1401 loc) · 60.3 KB
/
Copy pathCAMARA_common.yaml
File metadata and controls
1463 lines (1401 loc) · 60.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
info:
title: CAMARA common data types
description: |
Common data types for CAMARA APIs.
This file contains Commonalities-owned schemas that are identical across all
CAMARA APIs, including error responses, common parameters, headers, and
reusable data types.
API repositories place this file in `code/common/` and reference schemas
via `$ref: "../common/CAMARA_common.yaml#/components/schemas/<SchemaName>"`,
and error responses and examples via the corresponding
`#/components/responses/...` and `#/components/examples/...` pointers.
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
version: wip
x-camara-commonalities: wip
components:
securitySchemes:
openId:
type: openIdConnect
openIdConnectUrl: https://example.com/.well-known/openid-configuration
description: OpenID Connect authentication via discovery metadata.
headers:
x-correlator:
description: Correlation id for the different services
schema:
$ref: "#/components/schemas/XCorrelator"
x-total-count:
description: Total number of items. Mirrors `pagination.totalCount` in the response body.
required: false
schema:
$ref: "#/components/schemas/TotalCount"
x-total-pages:
description: Total number of pages. Mirrors `pagination.totalPages` in the response body.
required: false
schema:
$ref: "#/components/schemas/TotalPages"
link:
description: |
Navigation links for paginated results following
[RFC 8288](https://www.rfc-editor.org/rfc/rfc8288).
Includes only the rels applicable to the current position
(`first`, `prev`, `next`, `last`). All original query parameters
are preserved in Link URLs.
Example:
Link: <https://api.example.com/v1/resources?page=1&perPage=20>; rel="first",
<https://api.example.com/v1/resources?page=2&perPage=20>; rel="prev",
<https://api.example.com/v1/resources?page=4&perPage=20>; rel="next",
<https://api.example.com/v1/resources?page=5&perPage=20>; rel="last"
required: false
schema:
type: string
maxLength: 8192
parameters:
x-correlator:
name: x-correlator
in: header
description: Correlation id for the different services
schema:
$ref: "#/components/schemas/XCorrelator"
page:
name: page
in: query
description: >
Requested page number. Pages are 1-indexed.
Values below 1 are rejected with `400 INVALID_ARGUMENT`.
required: false
schema:
$ref: "#/components/schemas/Page"
perPage:
name: perPage
in: query
description: >
Number of resources to return per page.
Values outside the allowed range are rejected with `400 INVALID_ARGUMENT`.
required: false
schema:
$ref: "#/components/schemas/PerPage"
schemas:
XCorrelator:
type: string
description: Correlator string, UUID format recommended but any string matching the pattern can be used
pattern: ^[a-zA-Z0-9-_:;.\/<>{}]{0,256}$
maxLength: 256
example: "b4333c46-49c0-4f62-80d7-f0ef930f1c46"
Date:
type: string
description: The date, using [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) full-date format "YYYY-MM-DD"
format: date
minLength: 10
maxLength: 10
example: "2023-07-03"
DateTime:
type: string
format: date-time
maxLength: 64
description: Timestamp. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.
example: "2018-04-05T17:31:00Z"
TimePeriod:
type: object
description: A period of time defined by a start date and an optional end date. If `endDate` is not included, then the period has no ending date.
properties:
startDate:
$ref: "#/components/schemas/DateTime"
endDate:
$ref: "#/components/schemas/DateTime"
required:
- startDate
ErrorInfo:
type: object
description: A structured error response providing details about a failed request, including the HTTP status code, an error code, and a human-readable message
required:
- status
- code
- message
properties:
status:
type: integer
format: int32
minimum: 100
maximum: 599
description: HTTP response status code
code:
type: string
maxLength: 96
description: A human-readable code to describe the error
message:
type: string
maxLength: 512
description: A human-readable description of what the event represents
Device:
description: |
End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.
The developer can choose to provide the below specified device identifiers:
* `ipv4Address`
* `ipv6Address`
* `phoneNumber`
* `networkAccessIdentifier`
NOTE1: the network operator might support only a subset of these options. The API Consumer can provide multiple identifiers to ensure compatibility across different network operators. In this case, the API Provider will use one of the identifiers for the API logic without performing any matching checks among the provided identifiers.
NOTE2: as for this Commonalities release, we are enforcing that the networkAccessIdentifier is only part of the schema for future-proofing, and CAMARA does not currently allow its use. After the CAMARA meta-release work is concluded and the relevant issues are resolved, its use will need to be explicitly documented in the guidelines.
type: object
properties:
phoneNumber:
$ref: "#/components/schemas/PhoneNumber"
networkAccessIdentifier:
$ref: "#/components/schemas/NetworkAccessIdentifier"
ipv4Address:
$ref: "#/components/schemas/DeviceIpv4Address"
ipv6Address:
$ref: "#/components/schemas/DeviceIpv6Address"
minProperties: 1
DeviceResponse:
description: |
An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.
If the API consumer provides more than one device identifier in their request, and this schema is included in the response definition, the API provider MUST use it to return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.
allOf:
- $ref: "#/components/schemas/Device"
- maxProperties: 1
PhoneNumber:
description: A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with '+'.
type: string
pattern: '^\+[1-9][0-9]{4,14}$'
maxLength: 16
example: "+123456789"
NetworkAccessIdentifier:
description: A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator.
type: string
maxLength: 2048
example: "123456789@example.com"
DeviceIpv4Address:
type: object
description: |
The device should be identified by either the public (observed) IP address and port as seen by the application server, or the private (local) and any public (observed) IP addresses in use by the device (this information can be obtained by various means, for example from some DNS servers).
If the allocated and observed IP addresses are the same (i.e. NAT is not in use) then the same address should be specified for both publicAddress and privateAddress.
If NAT64 is in use, the device should be identified by its publicAddress and publicPort, or separately by its allocated IPv6 address (field ipv6Address of the Device object)
In all cases, publicAddress must be specified, along with at least one of either privateAddress or publicPort, dependent upon which is known. In general, mobile devices cannot be identified by their public IPv4 address alone.
properties:
publicAddress:
$ref: "#/components/schemas/SingleIpv4Address"
privateAddress:
$ref: "#/components/schemas/SingleIpv4Address"
publicPort:
$ref: "#/components/schemas/Port"
anyOf:
- required: [publicAddress, privateAddress]
- required: [publicAddress, publicPort]
example:
publicAddress: "84.125.93.10"
publicPort: 59765
SingleIpv4Address:
description: A single IPv4 address with no subnet mask
type: string
format: ipv4
maxLength: 15
example: "84.125.93.10"
SingleIpv6Address:
description: A single IPv6 address with no subnet mask
type: string
format: ipv6
maxLength: 45
example: "2001:db8:85a3:8d3:1319:8a2e:370:7344"
Port:
description: TCP or UDP port number
type: integer
format: int32
minimum: 1
maximum: 65535
DeviceIpv6Address:
description: |
The device should be identified by the observed IPv6 address, or by any single IPv6 address from within the subnet allocated to the device (e.g. adding ::0 to the /64 prefix).
allOf:
- $ref: "#/components/schemas/SingleIpv6Address"
Area:
description: Base schema for all areas
type: object
properties:
areaType:
$ref: "#/components/schemas/AreaType"
required:
- areaType
discriminator:
propertyName: areaType
mapping:
CIRCLE: "#/components/schemas/Circle"
POLYGON: "#/components/schemas/Polygon"
AreaType:
type: string
description: |
Type of this area.
CIRCLE - The area is defined as a circle.
POLYGON - The area is defined as a polygon.
enum:
- CIRCLE
- POLYGON
Circle:
description: Circular area
allOf:
- $ref: "#/components/schemas/Area"
- type: object
required:
- center
- radius
properties:
center:
$ref: "#/components/schemas/Point"
radius:
type: number
description: Distance from the center in meters
minimum: 1
Polygon:
description: Polygonal area. The Polygon should be a simple polygon, i.e. should not intersect itself.
allOf:
- $ref: "#/components/schemas/Area"
- type: object
required:
- boundary
properties:
boundary:
$ref: "#/components/schemas/PointList"
PointList:
description: List of points defining a polygon
type: array
items:
$ref: "#/components/schemas/Point"
minItems: 3
maxItems: 15
Point:
type: object
description: Coordinates (latitude, longitude) defining a location in a map
required:
- latitude
- longitude
properties:
latitude:
$ref: "#/components/schemas/Latitude"
longitude:
$ref: "#/components/schemas/Longitude"
example:
latitude: 50.735851
longitude: 7.10066
Latitude:
description: Latitude component of a location
type: number
format: double
minimum: -90
maximum: 90
Longitude:
description: Longitude component of location
type: number
format: double
minimum: -180
maximum: 180
# ─────────────────────────────────────────────────────────────────────────
# Pagination
# ─────────────────────────────────────────────────────────────────────────
Pagination:
description: Pagination details helping to navigate through paged results efficiently.
type: object
properties:
page:
$ref: "#/components/schemas/Page"
perPage:
$ref: "#/components/schemas/PerPage"
totalCount:
$ref: "#/components/schemas/TotalCount"
totalPages:
$ref: "#/components/schemas/TotalPages"
Page:
type: integer
format: int32
minimum: 1
maximum: 2147483647
default: 1
description: Current page number (1-indexed).
example: 1
PerPage:
type: integer
format: int32
minimum: 1
maximum: 100
default: 20
description: Number of items per page.
example: 20
TotalCount:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: Total number of items matching the query, after filters applied. MAY be omitted where a full count query is prohibitively expensive.
example: 87
TotalPages:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: Total number of pages. Equals ceil(totalCount / perPage). MAY be omitted where totalCount is omitted.
example: 5
responses:
# ─────────────────────────────────────────────────────────────────────────
# CAMARA error responses — catalogue
#
# Minimal, directly referenceable error responses. Each response contains
# only error codes that every referencing API can return. Subscription and
# notification specific error responses are defined in
# CAMARA_event_common.yaml.
#
# For each HTTP status, an intro block in `components/examples` (at the
# end of this file) lists the referenceable response(s) and all example
# ingredients available for local response definitions.
#
# APIs that return API-specific error codes, or a code combination not
# covered by this catalogue, define the error response locally — combining
# the ErrorInfo schema with a local restriction of `status` and `code` to
# exactly the codes the API can return — and reference the shared examples:
# $ref: "../common/CAMARA_common.yaml#/components/examples/<EXAMPLE_NAME>"
# A complete, copy-ready locally defined response is demonstrated in the
# API templates (artifacts/api-templates/sample-service.yaml) — use it as
# the skeleton for codes or combinations this catalogue does not cover.
#
# Statuses that are not documented by default (405, 406, 412, 415, 5xx —
# see the CAMARA API Design Guide) have no referenceable response; their
# canonical examples remain available for APIs with a justified use case.
# ─────────────────────────────────────────────────────────────────────────
BadRequest400:
description: Bad Request
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 400
code:
enum:
- INVALID_ARGUMENT
examples:
GENERIC_400_INVALID_ARGUMENT:
$ref: "#/components/examples/GENERIC_400_INVALID_ARGUMENT"
# 400 variant for APIs with range-restricted fields or filter criteria
BadRequestWithRange400:
description: Bad Request
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 400
code:
enum:
- INVALID_ARGUMENT
- OUT_OF_RANGE
examples:
GENERIC_400_INVALID_ARGUMENT:
$ref: "#/components/examples/GENERIC_400_INVALID_ARGUMENT"
GENERIC_400_OUT_OF_RANGE:
$ref: "#/components/examples/GENERIC_400_OUT_OF_RANGE"
Unauthenticated401:
description: Unauthorized
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 401
code:
enum:
- UNAUTHENTICATED
examples:
GENERIC_401_UNAUTHENTICATED:
$ref: "#/components/examples/GENERIC_401_UNAUTHENTICATED"
PermissionDenied403:
description: Forbidden
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 403
code:
enum:
- PERMISSION_DENIED
examples:
GENERIC_403_PERMISSION_DENIED:
$ref: "#/components/examples/GENERIC_403_PERMISSION_DENIED"
# 404 for resource-oriented operations (resource addressed by path or query)
NotFound404:
description: Not found
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 404
code:
enum:
- NOT_FOUND
examples:
GENERIC_404_NOT_FOUND:
$ref: "#/components/examples/GENERIC_404_NOT_FOUND"
# 404 for APIs identifying their subject by device or phone number
IdentifierNotFound404:
description: Not found
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 404
code:
enum:
- IDENTIFIER_NOT_FOUND
examples:
GENERIC_404_IDENTIFIER_NOT_FOUND:
$ref: "#/components/examples/GENERIC_404_IDENTIFIER_NOT_FOUND"
# 409 for resource-creating operations; for subscription creation see
# CreateSubscriptionConflict409 in CAMARA_event_common.yaml
AlreadyExists409:
description: Conflict
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 409
code:
enum:
- ALREADY_EXISTS
examples:
GENERIC_409_ALREADY_EXISTS:
$ref: "#/components/examples/GENERIC_409_ALREADY_EXISTS"
# 422 for APIs identifying their subject with the Device object
DeviceIdentifier422:
description: Unprocessable Content
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 422
code:
enum:
- SERVICE_NOT_APPLICABLE
- MISSING_IDENTIFIER
- UNSUPPORTED_IDENTIFIER
- UNNECESSARY_IDENTIFIER
examples:
GENERIC_422_SERVICE_NOT_APPLICABLE:
$ref: "#/components/examples/GENERIC_422_SERVICE_NOT_APPLICABLE"
GENERIC_422_MISSING_IDENTIFIER_DEVICE:
$ref: "#/components/examples/GENERIC_422_MISSING_IDENTIFIER_DEVICE"
GENERIC_422_UNSUPPORTED_IDENTIFIER_DEVICE:
$ref: "#/components/examples/GENERIC_422_UNSUPPORTED_IDENTIFIER_DEVICE"
GENERIC_422_UNNECESSARY_IDENTIFIER_DEVICE:
$ref: "#/components/examples/GENERIC_422_UNNECESSARY_IDENTIFIER_DEVICE"
# 422 for APIs identifying their subject with a phoneNumber field
PhoneNumberIdentifier422:
description: Unprocessable Content
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 422
code:
enum:
- SERVICE_NOT_APPLICABLE
- MISSING_IDENTIFIER
- UNNECESSARY_IDENTIFIER
examples:
GENERIC_422_SERVICE_NOT_APPLICABLE:
$ref: "#/components/examples/GENERIC_422_SERVICE_NOT_APPLICABLE"
GENERIC_422_MISSING_IDENTIFIER_PHONE_NUMBER:
$ref: "#/components/examples/GENERIC_422_MISSING_IDENTIFIER_PHONE_NUMBER"
GENERIC_422_UNNECESSARY_IDENTIFIER_PHONE_NUMBER:
$ref: "#/components/examples/GENERIC_422_UNNECESSARY_IDENTIFIER_PHONE_NUMBER"
TooManyRequests429:
description: Too Many Requests
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 429
code:
enum:
- TOO_MANY_REQUESTS
examples:
GENERIC_429_TOO_MANY_REQUESTS:
$ref: "#/components/examples/GENERIC_429_TOO_MANY_REQUESTS"
# ─────────────────────────────────────────────────────────────────────────
# DEPRECATED error responses
#
# The Generic* responses below are DEPRECATED as of Commonalities 0.9.0
# and are planned for removal — or downgrade to a commented-out reference —
# in the next meta-release cycle. They bundle error codes that do not apply
# to every referencing API; new and realigning API versions use the
# catalogue responses above, or define error responses locally from the
# shared examples.
#
# Replacements:
# Generic400 → BadRequestWithRange400 (or BadRequest400)
# Generic401 → Unauthenticated401
# Generic403 → PermissionDenied403
# Generic404 → NotFound404 and/or IdentifierNotFound404
# Generic409 → AlreadyExists409; CreateSubscriptionConflict409
# (CAMARA_event_common.yaml) for subscription creation;
# local definition from the ABORTED / INCOMPATIBLE_STATE
# examples otherwise
# Generic410 → SinkGone410 (CAMARA_event_common.yaml) in notification
# callbacks; local definition from GENERIC_410_GONE otherwise
# Generic422 → DeviceIdentifier422 or PhoneNumberIdentifier422
# Generic429 → TooManyRequests429
# Generic405, Generic406, Generic412, Generic415, Generic5xx →
# local definition from the corresponding examples
# (statuses not documented by default)
#
# Content below is frozen apart from two bug fixes:
# - INVALID_TOKEN_CONTEXT removed from Generic403
# (https://github.com/camaraproject/Commonalities/issues/662)
# - deprecated code CONFLICT removed from Generic409
# ─────────────────────────────────────────────────────────────────────────
# DEPRECATED — use BadRequestWithRange400 (or BadRequest400) instead
Generic400:
description: Bad Request
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 400
code:
enum:
- INVALID_ARGUMENT
- OUT_OF_RANGE
# - "{{SPECIFIC_CODE}}" - API-specific codes added if needed
examples:
GENERIC_400_INVALID_ARGUMENT:
description: Invalid Argument. Generic Syntax Exception
value:
status: 400
code: INVALID_ARGUMENT
message: Client specified an invalid argument, request body or query param.
GENERIC_400_OUT_OF_RANGE:
description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested
value:
status: 400
code: OUT_OF_RANGE
message: Client specified an invalid range.
# GENERIC_400_{{SPECIFIC_CODE}}:
# description: Specific Syntax Exception regarding a field that is relevant in the context of the API
# value:
# status: 400
# code: "{{SPECIFIC_CODE}}"
# message: Message for specific code
# DEPRECATED — use Unauthenticated401 instead
Generic401:
description: Unauthorized
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 401
code:
enum:
- UNAUTHENTICATED
examples:
GENERIC_401_UNAUTHENTICATED:
description: Request cannot be authenticated and a new authentication is required
value:
status: 401
code: UNAUTHENTICATED
message: Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required.
# DEPRECATED — use PermissionDenied403 instead
Generic403:
description: Forbidden
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 403
code:
enum:
- PERMISSION_DENIED
# INVALID_TOKEN_CONTEXT removed: it applies only to the few
# APIs whose scope allows confirming the match between a
# supplied identity and the access token; those APIs define
# the code and its example locally.
# - INVALID_TOKEN_CONTEXT
# - "{{SPECIFIC_CODE}}" - API-specific codes added if needed
examples:
GENERIC_403_PERMISSION_DENIED:
description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security
value:
status: 403
code: PERMISSION_DENIED
message: Client does not have sufficient permissions to perform this action.
# GENERIC_403_INVALID_TOKEN_CONTEXT removed together with the
# INVALID_TOKEN_CONTEXT code
# GENERIC_403_{{SPECIFIC_CODE}}:
# description: Indicate a Business Logic condition that forbids a process not attached to a specific field in the context of the API
# value:
# status: 403
# code: "{{SPECIFIC_CODE}}"
# message: Message for specific code
# DEPRECATED — use NotFound404 and/or IdentifierNotFound404 instead
Generic404:
description: Not found
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 404
code:
enum:
- NOT_FOUND
- IDENTIFIER_NOT_FOUND
# - "{{SPECIFIC_CODE}}" - API-specific codes added if needed
examples:
GENERIC_404_NOT_FOUND:
description: Resource is not found
value:
status: 404
code: NOT_FOUND
message: The specified resource is not found.
GENERIC_404_IDENTIFIER_NOT_FOUND:
description: Some identifier cannot be matched to a device
value:
status: 404
code: IDENTIFIER_NOT_FOUND
message: Device identifier not found.
# GENERIC_404_{{SPECIFIC_CODE}}:
# description: Specific situation to highlight the resource/concept not found
# value:
# status: 404
# code: "{{SPECIFIC_CODE}}"
# message: Message for specific code
# DEPRECATED — define locally from GENERIC_405_METHOD_NOT_ALLOWED if needed
Generic405:
description: Method Not Allowed
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 405
code:
enum:
- METHOD_NOT_ALLOWED
examples:
GENERIC_405_METHOD_NOT_ALLOWED:
description: Invalid HTTP verb used with a given endpoint
value:
status: 405
code: METHOD_NOT_ALLOWED
message: The requested method is not allowed/supported on the target resource.
# DEPRECATED — define locally from GENERIC_406_NOT_ACCEPTABLE if needed
Generic406:
description: Not Acceptable
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 406
code:
enum:
- NOT_ACCEPTABLE
examples:
GENERIC_406_NOT_ACCEPTABLE:
description: API Server does not accept the media type (`Accept-*` header) indicated by API client
value:
status: 406
code: NOT_ACCEPTABLE
message: The server cannot produce a response matching the content requested by the client through `Accept-*` headers.
# DEPRECATED — use AlreadyExists409 or a local definition; for subscription
# creation see CreateSubscriptionConflict409 in CAMARA_event_common.yaml
Generic409:
description: Conflict
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 409
code:
enum:
- ABORTED
- ALREADY_EXISTS
# deprecated code CONFLICT removed
- INCOMPATIBLE_STATE
# - "{{SPECIFIC_CODE}}" - API-specific codes added if needed
examples:
GENERIC_409_ABORTED:
description: The resource is undergoing modification by another process
value:
status: 409
code: ABORTED
message: Resource is being modified by another operation. Please wait, and retry if appropriate.
GENERIC_409_ALREADY_EXISTS:
description: Trying to create an existing resource
value:
status: 409
code: ALREADY_EXISTS
message: The resource that a client tried to create already exists.
GENERIC_409_INCOMPATIBLE_STATE:
description: |
The status of the referenced resource is not compatible.
value:
status: 409
code: INCOMPATIBLE_STATE
message: Resource must be in AVAILABLE state to extend. Current state is UNAVAILABLE.
# GENERIC_409_{{SPECIFIC_CODE}}:
# description: Specific conflict situation that is relevant in the context of the API
# value:
# status: 409
# code: "{{SPECIFIC_CODE}}"
# message: Message for specific code
# DEPRECATED — use SinkGone410 (CAMARA_event_common.yaml) or a local
# definition instead
Generic410:
description: Gone
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 410
code:
enum:
- GONE
examples:
GENERIC_410_GONE:
description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available
value:
status: 410
code: GONE
message: Access to the target resource is no longer available.
# DEPRECATED — define locally from GENERIC_412_FAILED_PRECONDITION if needed
Generic412:
description: Failed precondition
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 412
code:
enum:
- FAILED_PRECONDITION
examples:
GENERIC_412_FAILED_PRECONDITION:
description: Indication by the API Server that the request cannot be processed in current system state
value:
status: 412
code: FAILED_PRECONDITION
message: Request cannot be executed in the current system state.
# DEPRECATED — define locally from GENERIC_415_UNSUPPORTED_MEDIA_TYPE if needed
Generic415:
description: Unsupported Media Type
headers:
x-correlator:
$ref: "#/components/headers/x-correlator"
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/ErrorInfo"
- type: object
properties:
status:
enum:
- 415
code:
enum:
- UNSUPPORTED_MEDIA_TYPE
examples:
GENERIC_415_UNSUPPORTED_MEDIA_TYPE: