-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathamazon-hub-counter-openapi.yaml
2018 lines (1829 loc) · 96.2 KB
/
amazon-hub-counter-openapi.yaml
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
openapi: 3.0.0
info:
title: 'Amazon Store Feed API'
description: |
Amazon's API for creating and updating Amazon Access Points.
This guide is intended for Amazon Store Feed partners who wish to integrate with the Access Points Onboarding API. This API enables partners to programmatically create, update and disable locations in Amazon systems.
Throughout this guide, partner developers can learn how to:
1. Create a developer account and security profile to access relevant API environments.
2. Request and use an authentication token to access the API.
3. Create, update and disable locations through the API.
In the scope of this document we will refer to partner locations also as Access Point locations.
# Integration guide steps
The Amazon API Store Feed is how Amazon is able to surface our PARP partner locations for our customers to select. The data must be transmitted on a daily basis to Amazon in order to maintain accurate information on our site.
The information pushed to Amazon through this integration will be immediately surfaced to our customers through the Location Selector, therefore ensuring alignment on naming conventions and correct use of fields is vital to launching
a new pickup point service with Amazon.
See below an example of the Location Selector for Belgium and what the customer sees:
> ![Security Profile Management](assets/security_profiles_5.png)
> *Figure 1 - Example Location Selector for Belgium*
<br><br>
### What are we going to find in there?
The following steps is showing what we expect from this integration in order to cover the differents requirement to ensure the operational ability between both systems.
## Step 1: API requirements
The Amazon Partner Integration Manager (PIM) team will guide the partner through the integration requirement and steps to enable the partner to scope the level of effort to complete the ask.
The documents are as follows:
1. [Amazon Store Feed API](https://amzn.github.io/amazon-hub-counter-api-docs/) online technical documentation (this document). This technical documentation provides a comprehensive list of the requirements, limitations and formats we expect the partner to follow during the API Store feed integrate.
2. Amazon Store Feed Business cases (in annex below on this document): Operational documentation for the partner tech team to understand the actions that they should be able to cover once the Store Feed API integration is completed
in order to maintain and expand the network, whilst preserving and continuously improving the CX and quality.
## Step 2: Technical documentation review
Once the partner tech team has fully read the documentation provided by the PIM team, Amazon and partner tech team will align through a dedicated session to answer initial questions prior to the partner tech team finalizing their scoping.
## Step 3: Connection information sharing
The partner will send the PIM 2 items in order to proceed with the integration:
1. Client ID: Generated on the developer portal as outlined on the link for [Developper Account Registration Process](https://amzn.github.io/amazon-hub-counter-api-docs/#section/Developer-Account-Registration-Process) within the online technical documentation (non personal e-mail).
2. The administrative email used for the partner ops team which must have been registered in the [Amazon portal](https://www.amazon.com/ap/register?showRememberMe=true&openid.pape.max_auth_age=0&pageId=usflex&ignoreAuthState=1&mobileBrowserWeblabTreatment=C&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fap%2Fsignin%3Fopenid.pape.max_auth_age%3D900%26openid.return_to%3Dhttps%253A%252F%252Fwww.amazon.com%252Fgp%252Fyourstore%252Fhome%253Fpath%253D%25252Fgp%25252Fyourstore%25252Fhome%2526signIn%253D1%2526useRedirectOnSuccess%253D1%2526action%253Dsign-out%2526ref_%253Dnav_AccountFlyout_signout%26openid.assoc_handle%3Dusflex%26openid.mode%3Dcheckid_setup%26openid.ns%3Dhttp%253A%252F%252Fspecs.openid.net%252Fauth%252F2.0&prevRID=ZXD0GCBBKPXS6E0T4CTQ&openid.assoc_handle=usflex&openid.mode=checkid_setup&desktopBrowserWeblabTreatment=C&prepopulatedLoginId=&failedSignInCount=0&ref_=ap_sw_aa&disableLoginPrepopulate=1&switch_account=signin&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0) (non personal e-mail).
Note that there is a differentiation between the Tech Accounts and the administrative e-mail accounts,
which require different emails for security reasons. These accounts must be created through
generic admin emails (not personal emails) to avoid future credential issues. They each require
an unique phone number for verification purposes. We propose that the partner procures SIM
cards for each of their tech accounts and administrative accounts. Note that if you are launching a
locker and counter network, you will need to create two separate Client Ids but can use the
same Tech Account, see below illustration.
<br><br>
> ![Security Profile Management](assets/security_profiles_6.png)
<br><br>
> *Figure 2 - 3P Tech Account - Administrative Accounts mapping*
<br><br>
> ![Security Profile Management](assets/security_profiles_7.png)
<br><br>
> *Figure 3 - 1P Tech Account - Administrative Account mapping*
## Step 4: Connection tests
Once the integration is complete, the partner will send an API call to verify the connectivity
with the Amazon Store Feed system. The partner will complete the following:
1. Send authentication call to fetch the API token
2. Send a basic feed information to the Store Feed API - example provided on 'Create a Feed Section'.
3. Retrieve the feed id
4. Retrieve the output document
## Step 5: Business cases
Once the partner confirms the connection is completed and the calls above are covered, the partner tech team will review the business cases document to have clear the scenarios to be tested on the implementation done.
If there is any additional business tests required for your marketplace, this will be communicated to you by the PIM. The partner tech team will complete the business cases (see [APPENDIX III - Business cases to be covered](https://amzn.github.io/amazon-hub-counter-api-docs/#section/Appendices/APPENDIX-III-Business-cases-to-be-covered) ) and share information following this format to provide
Amazon the evidence needed that the integration has been successfully completed following the requirements:
<table>
<thead>
<tr>
<th>Business case</th>
<th>Feed Id</th>
<th>Output</th>
</tr>
</thead>
<tbody>
<tr>
<td>Create a single store using an API call</td>
<td>30cd3ea3-5a37-4f4f-8eff-df319caf3433</td>
<td>\"noOfAccessPointsProcessed\" : 1,\n \"noOfAccessPointsSuccessfullyProcessed\" : 1,\n \"noOfAccessPointsFailedToProcess\" : 0,\n</td>
</tr>
<tr>
<td>Create a bulk of stores using an API call</td>
<td>30cd3ea3-5a37-4f4f-8eff-df319caf3433</td>
<td>\"noOfAccessPointsProcessed\" : 3000,\n \"noOfAccessPointsSuccessfullyProcessed\" : 3000,\n \"noOfAccessPointsFailedToProcess\" : 0,\n</td>
</tr>
In case the tests are accomplishing the quality bar in terms of data and functionality, the PIM
will provide green light to the production migration, otherwise partner tech team will have to
iterate until the tests are green.
> *Figure 4 - Table format expected with two examples of the business cases requested*
## Step 6: Partner production enabling
On the last integration phase, the PIM will perform the production configuration to allow the
partner to make calls on the production environment, note that this does not mean that the
locations are yet discoverable by the customers. Prior to moving towards a full daily push of
stores, we will ask the partner to send a controlled number of stores (ideally less than 10% of
network) to ensure that the data is flowing as expected on production environment. Once this
is complete, the partner will then start sending daily pushes throughout the UAT process to
ensure that the calls are following Amazon’s expectations. The PIM will monitor this closely
throughout UAT.
# Developer Account Registration Process
A security profile must be created to access the Access Points API: Register as an Amazon developer on https://developer.amazon.com/ to create a security profile.
> **NOTE**: The email used for this account should be one dedicated for this purpose (e.g. [email protected]).
> **NOTE**: Use a dedicated security profile for Access Points Partner Onboarding API. Do not use the same security profile for other use cases.
## Setting up a new Security Profile
Access https://developer.amazon.com/ using an existing Amazon Account or a new Amazon Developer Account to create a security profile.
Upon completion of the account registration process, access the Security Profile Management section from:
`Developer Console > Settings > Security Profiles` *(Figure 1)*.
> ![Security Profile Management](assets/security_profiles_1.png)
> *Figure 1 - Security Profile Management*
Then create a new Security Profile by providing following information *(Figure 2)*:
1. **Security Profile Name**: A name for this security profile. For example: _AccessPointsYourCompanyName-Production-Profile_.
2. **Security Profile Description**: A brief description of this security profile.
> ![Create a new Security Profile](assets/security_profiles_2.png)
> *Figure 2 - Create a new Security Profile*
Create security profile by clicking the ***Save*** button. This gives access to the Web Settings tab containing the following information *(Figure 3)*:
1. **Client ID**: A client identifier used for application to receive the OAuth token. This identifier must be input into Partner Central in order to enable access the API.
2. **Client Secret**: Client secret or password (do not share secret with Amazon representatives or anyone else).
The Client ID and Client Secret that have been created allows secure identification with Amazon Access Points Onboarding API. Both are needed of these in order to receive access tokens and authenticate with the API.
> ![Security Profile Web Settings](assets/security_profiles_3.png)
> *Figure 3 - Security Profile Web Settings*
> **NOTE**: Client ID is different to the Security Profile ID available from the General tab of the security profile. There is no need to share the Security Profile ID with Amazon.
### Submitting Client IDs to Amazon
If the Partner is located in North America or Europe, they should submit their Client ID to Partner Central as soon as possible.
If the Partner is located in Asia Pacific, Australia or Mexico, they should submit the Client ID to their Amazon representative as soon as possible.
In case of 3P Partners in any marketplace, they should submit the Client ID to their Amazon representative as soon as possible.
This will allow Amazon to enable the Client ID which will, in turn, allow the partner to access the Access Point Onboarding API and progress to the next step.
> ![Locating the Security Profile Client ID](assets/security_profiles_4.gif)
Partners can send a maximum number of 15 API calls per day. If there is a specific business case for the Partner to perform more than 15 calls a day, please contact your Amazon representative to approve a temporary limit increase.
# Endpoints
## Authentication
| Region | Endpoint |
|--------|--------------------------------------|
| All | https://api.amazon.com/auth/o2/token |
> **NOTE**: When obtaining the access token, the endpoint is the same for all regions and environments.
## Sandbox
| Region | Endpoint |
|--------|------------------------------------------------|
| NA | https://accesspoints-api-sandbox-na.amazon.com |
| EU | https://accesspoints-api-sandbox-eu.amazon.com |
| FE | https://accesspoints-api-sandbox-fe.amazon.com |
## Production
| Region | Endpoint |
|--------|------------------------------------------------|
| NA | https://accesspoints-api-na.amazon.com |
| EU | https://accesspoints-api-eu.amazon.com |
| FE | https://accesspoints-api-fe.amazon.com |
# FAQ
#### How do I submit regular store closures (e.g. a location close on Sundays)?
You can skip entries for regular closure days in the standardHours array (e.g. skip SUNDAY if the location is closed on Sundays).
#### How do I manage exceptional changes in opening hours? (e.g. different opening hours during Easter and Christmas holidays)
We don't support yet exceptional changes in opening hours.
#### How exceptional closures are reflected in the Amazon website?
Exceptional closures submitted in the exceptionalClosures array are used to delay the Amazon customer promise, the customer will be able to see the location in the search results and on the address book. To temporarily remove a location from the website you can deactivate the location by setting the *isActive* parameter to 'false'.
#### How do I create an exceptional closure starting from now and finishing some time in the future?
You cannot use the current date for the exceptionalClosure startDateTime property as it will fail the validation, it has to be some time in the future. Consider if deactivating the location is not a best option for your use case.
#### When should we use exceptional closures and when to deactivate a store?
When the store needs to be closed for more than 7 days, the store should be deactivated. For less than 7 days, temporary closures should be used.
#### Is there a limit on the exceptional closures I can submit?
Yes, there is a buffer limit to ensure the good practice and usage of the functionality. If you send in total more than 30 active exceptional closure, the APi will report a message alerting it and the store will be reported as an error.
#### Are there any requirements for the format of the latitude and longitude properties?
We support positive and negative digits and `.` (dot) as the decimal separator. The values must always be to 6 decimal places, ranging from -90 to 90 for latitude and -180 to 180 for longitude. The combination of 0,0 for both latitude and longitude will throw an error.
#### Why am I not able to get the LWA token while invoking api.amazon.com?
Please validate following:
1. Validate Header `Content-Type`. The value should be `application/json`.
2. Validate clientId, clientSecret, grantType (should be `client_credentials`) and scope (should be `accesspoints::accesspoint:readwrite`).
3. Validate URI (should be https://api.amazon.com/auth/o2/token) and HTTP VERB (should be `POST`).
#### Why is the API endpoint submit Feed (/v1/feeds POST) returning 4XX code?
Please validate following:
1. Token is valid and issued within one hour of API invocation.
2. Token passed in `Authorization` header while invoking Access Points API. Authorization header value should be formatted as `Bearer <Token granted from api.amazon.com>`. There must be a space in between `Bearer` and token.
3. Validate the DNS name and overall URI
#### Why is the API endpoint get Feed (/v1/feeds GET) returning 4XX code?
Please validate following:
1. Token is valid and issued within one hour of API invocation.
2. Token passed in `Authorization` header while invoking Access Points API. Authorization header value should be formed as `Bearer <Token granted from api.amazon.com>`. There should be a space in between `Bearer` and token.
3. Validate that the variable feedId and documentId are correct in URL.
4. Validate the DNS name and overall URI.
#### Which checks need to be done before start invoking Access Points API?
Please validate following:
1. Check that your email server allows mails from amazon.com. If not please whitelist the amazon.com domain.
2. `Content-Type` should be `application/json` for all POST calls.
3. `Content-Length` should not exceed 6MB.
#### I cannot set the closingTime to 00:00:00, how do I represent a location that is open 24hrs?
Set the standardHours openingTime to 00:00:00 and the closingTime to 23:59:00, this will be shown as *Open 24hs* on Amazon website.
#### How do I hide/remove a location from Amazon website?
Send a feed updating that store and set the *isActive* flag to `false`.
#### Can't I just send the JSON properties for the Access Point I want to update?
No, the logic behind the update overwrites every property of the Access Point that matches the accessPointId on your request, if you omit properties they will be set to null/empty.
#### How do I get a list of the Access Points I have submitted?
This is not possible currently via the API. Upon request, we can generate a csv file with the list of your stores in the production environment.
#### Can you send the entire list of locations?
If the number of stores is less than 3000, you can send all of them together in one single feed. Or else, please divide the list in different feeds with no more than 3000 stores per feed.
#### Should we send one store per feed or all stores can be sent in a single feed?
As mentioned above, no more than 3000 stores should be sent in a single feed. For less than 3000 stores, only one feed should used to create/update stores.
#### Do we need a developer email address only used for this specific purpose?
We strongly suggest to use an specific email for this to avoid access problems in the future with personal emails.
#### Can stores be created with the same address but with a different store name?
Yes, but they need to have different store name. It is taken into account for identifying the store.
#### Can we select Null values?
For the fields which aren’t marked required, those can be skipped from the JSON schema in the feed. Although, if they are being provided, they can’t be null or empty.
#### Which timezone should we select for country that have 2 timezones?
For this particular scenario, input hours provided in the feed should be local for opening hours although different timezone should be specified via “timezone” field in the feed.
#### Which fields are mandatory? `Applicable only for feedType=3P`
For a 3P feed type, the mandatory fields are “accessPointId", "accessPointName", "isActive", "timeZone", "address", "standardHours", "capabilities", "capacity".
# Appendices
## APPENDIX I - API HTTP response status codes
<table>
<thead>
<tr>
<th>Response status code</th>
<th>Meaning</th>
<th>When this response will be returned</th>
<th>Sample body</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>OK</td>
<td>Success API calls in case of GET APIs | Payload will depend on specific APIs.</td>
<td></td>
</tr>
<tr>
<td>201</td>
<td>Created/Updated</td>
<td>Success API calls in case of POST APIs | Payload will depend on specific APIs.</td>
<td></td>
</tr>
<tr>
<td>400</td>
<td>Bad Request</td>
<td>When mandatory field not filled. For example if feedType is empty, 400 response given.</td>
<td>
<code>
{ <br/>
"message": "FeedType is not present in request", <br/>
"retryable": "false" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>403</td>
<td>Access to resource is denied</td>
<td>Response when attempt to access restricted API is made or token is invalid.</td>
<td>
<code>
{ <br/>
"message": "Auth with LWA failed: INVALID_TOKEN: invalid checksum", <br/>
"retryable": "false" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>404</td>
<td>Requested resource doesn't exists</td>
<td>Response received with attempted access to invalid resource.</td>
<td>
<code>
{ <br/>
"message": "Requested resource does not exists.", <br/>
"retryable": "false" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>429</td>
<td>Call exceeded the maximum number of default allowed calls.</td>
<td>Response received when the partner reach the maximum number of allowed calls to the API.</td>
<td>
<code>
{ <br/>
"message": "Daily limit of feed submission exceeded for clientId, please try again after 24 hours", <br/>
"retryable": "false" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>40X</td>
<td>Invalid input feed</td>
<td>This error will be thrown when there is an error in parsing the input JSON document.</td>
<td>
<code>
{ <br/>
"message": "Input Feed is not valid. Please read the API specification document."<br/>
"retryable": "true" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>500</td>
<td>Access Point API internal server error</td>
<td>This error will be thrown when there is a server-side issue.</td>
<td>
<code>
{ <br/>
"message": "An error occurred, please try again later."<br/>
"retryable": "true" <br/>
} <br/>
</code>
</td>
</tr>
<tr>
<td>50X</td>
<td>Data configuration error</td>
<td>This error will be thrown when there is an incorrect configuration of clientId to partnerId mapping in downstream service APUMS.</td>
<td>
<code>
{ <br/>
"message": "[DATA_CONFIGURATION_ERROR] There is some configuration issue. Please contact Amazon representative." <br/>
"retryable": "false" <br/>
} <br/>
</code>
</td>
</tr>
</tbody>
</table>
## APPENDIX II - Supported Time Zones
| Time Zone | Time Zone Code |
|---------|---------------|
| -12:00 | Etc/GMT+12 |
| -11:00 | Etc/GMT+11 |
| -11:00 | Pacific/Midway |
| -11:00 | Pacific/Niue |
| -11:00 | Pacific/Pago_Pago, Pacific/Samoa, US/Samoa |
| -10:00 | America/Adak, America/Atka, US/Aleutian |
| -10:00 | Etc/GMT+10 |
| -10:00 | Pacific/Honolulu, Pacific/Johnston, US/Hawaii |
| -10:00 | Pacific/Rarotonga |
| -10:00 | Pacific/Tahiti |
| -09:30 | Pacific/Marquesas |
| -09:00 | America/Anchorage, US/Alaska |
| -09:00 | America/Juneau |
| -09:00 | America/Metlakatla |
| -09:00 | America/Nome |
| -09:00 | America/Sitka |
| -09:00 | America/Yakutat |
| -09:00 | Etc/GMT+9 |
| -09:00 | Pacific/Gambier |
| -08:00 | America/Dawson |
| -08:00 | America/Los_Angeles, US/Pacific, US/Pacific-New |
| -08:00 | America/Tijuana, America/Ensenada, America/Santa_Isabel, Mexico/BajaNorte |
| -08:00 | America/Vancouver, Canada/Pacific |
| -08:00 | America/Whitehorse, Canada/Yukon |
| -08:00 | Etc/GMT+8 |
| -08:00 | PST8PDT |
| -08:00 | Pacific/Pitcairn |
| -07:00 | America/Boise |
| -07:00 | America/Cambridge_Bay |
| -07:00 | America/Chihuahua |
| -07:00 | America/Creston |
| -07:00 | America/Dawson_Creek |
| -07:00 | America/Denver, America/Shiprock, Navajo, US/Mountain |
| -07:00 | America/Edmonton, Canada/Mountain |
| -07:00 | America/Fort_Nelson |
| -07:00 | America/Hermosillo |
| -07:00 | America/Inuvik |
| -07:00 | America/Mazatlan, Mexico/BajaSur |
| -07:00 | America/Ojinaga |
| -07:00 | America/Phoenix, US/Arizona |
| -07:00 | America/Yellowknife |
| -07:00 | Etc/GMT+7 |
| -07:00 | MST7MDT |
| -06:00 | America/Bahia_Banderas |
| -06:00 | America/Belize |
| -06:00 | America/Chicago, US/Central |
| -06:00 | America/Costa_Rica |
| -06:00 | America/El_Salvador |
| -06:00 | America/Guatemala |
| -06:00 | America/Indiana/Knox, America/Knox_IN, US/Indiana-Starke |
| -06:00 | America/Indiana/Tell_City |
| -06:00 | America/Managua |
| -06:00 | America/Matamoros |
| -06:00 | America/Menominee |
| -06:00 | America/Merida |
| -06:00 | America/Mexico_City, Mexico/General |
| -06:00 | America/Monterrey |
| -06:00 | America/North_Dakota/Beulah |
| -06:00 | America/North_Dakota/Center |
| -06:00 | America/North_Dakota/New_Salem |
| -06:00 | America/Rainy_River |
| -06:00 | America/Rankin_Inlet |
| -06:00 | America/Regina, Canada/Saskatchewan |
| -06:00 | America/Resolute |
| -06:00 | America/Swift_Current |
| -06:00 | America/Tegucigalpa |
| -06:00 | America/Winnipeg, Canada/Central |
| -06:00 | CST6CDT |
| -06:00 | Etc/GMT+6 |
| -06:00 | Pacific/Easter, Chile/EasterIsland |
| -06:00 | Pacific/Galapagos |
| -05:00 | America/Atikokan, America/Coral_Harbour |
| -05:00 | America/Bogota |
| -05:00 | America/Cancun |
| -05:00 | America/Cayman |
| -05:00 | America/Detroit, US/Michigan |
| -05:00 | America/Eirunepe |
| -05:00 | America/Grand_Turk |
| -05:00 | America/Guayaquil |
| -05:00 | America/Havana, Cuba |
| -05:00 | America/Indiana/Indianapolis, America/Fort_Wayne, America/Indianapolis, US/East-Indiana |
| -05:00 | America/Indiana/Marengo |
| -05:00 | America/Indiana/Petersburg |
| -05:00 | America/Indiana/Vevay |
| -05:00 | America/Indiana/Vincennes |
| -05:00 | America/Indiana/Winamac |
| -05:00 | America/Iqaluit |
| -05:00 | America/Jamaica, Jamaica |
| -05:00 | America/Kentucky/Louisville, America/Louisville |
| -05:00 | America/Kentucky/Monticello |
| -05:00 | America/Lima |
| -05:00 | America/Nassau |
| -05:00 | America/New_York, US/Eastern |
| -05:00 | America/Nipigon |
| -05:00 | America/Panama |
| -05:00 | America/Pangnirtung |
| -05:00 | America/Port-au-Prince |
| -05:00 | America/Rio_Branco, America/Porto_Acre, Brazil/Acre |
| -05:00 | America/Thunder_Bay |
| -05:00 | America/Toronto, America/Montreal, Canada/Eastern |
| -05:00 | EST5EDT |
| -05:00 | Etc/GMT+5 |
| -04:00 | America/Anguilla |
| -04:00 | America/Antigua |
| -04:00 | America/Aruba |
| -04:00 | America/Asuncion |
| -04:00 | America/Barbados |
| -04:00 | America/Blanc-Sablon |
| -04:00 | America/Boa_Vista |
| -04:00 | America/Campo_Grande |
| -04:00 | America/Caracas |
| -04:00 | America/Cuiaba |
| -04:00 | America/Curacao |
| -04:00 | America/Dominica |
| -04:00 | America/Glace_Bay |
| -04:00 | America/Goose_Bay |
| -04:00 | America/Grenada |
| -04:00 | America/Guadeloupe |
| -04:00 | America/Guyana |
| -04:00 | America/Halifax, Canada/Atlantic |
| -04:00 | America/Kralendijk |
| -04:00 | America/La_Paz |
| -04:00 | America/Lower_Princes |
| -04:00 | America/Manaus, Brazil/West |
| -04:00 | America/Marigot |
| -04:00 | America/Martinique |
| -04:00 | America/Moncton |
| -04:00 | America/Montserrat |
| -04:00 | America/Port_of_Spain, America/Virgin |
| -04:00 | America/Porto_Velho |
| -04:00 | America/Puerto_Rico |
| -04:00 | America/Santiago, Chile/Continental |
| -04:00 | America/Santo_Domingo |
| -04:00 | America/St_Barthelemy |
| -04:00 | America/St_Kitts |
| -04:00 | America/St_Lucia |
| -04:00 | America/St_Thomas |
| -04:00 | America/St_Vincent |
| -04:00 | America/Thule |
| -04:00 | America/Tortola |
| -04:00 | Atlantic/Bermuda |
| -04:00 | Etc/GMT+4 |
| -03:30 | America/St_Johns, Canada/Newfoundland |
| -03:00 | America/Araguaina |
| -03:00 | America/Argentina/Buenos_Aires, America/Buenos_Aires |
| -03:00 | America/Argentina/Catamarca, America/Argentina/ComodRivadavia, America/Catamarca |
| -03:00 | America/Argentina/Cordoba, America/Cordoba, America/Rosario |
| -03:00 | America/Argentina/Jujuy, America/Jujuy |
| -03:00 | America/Argentina/La_Rioja |
| -03:00 | America/Argentina/Mendoza, America/Mendoza |
| -03:00 | America/Argentina/Rio_Gallegos |
| -03:00 | America/Argentina/Salta |
| -03:00 | America/Argentina/San_Juan |
| -03:00 | America/Argentina/San_Luis |
| -03:00 | America/Argentina/Tucuman |
| -03:00 | America/Argentina/Ushuaia |
| -03:00 | America/Bahia |
| -03:00 | America/Belem |
| -03:00 | America/Cayenne |
| -03:00 | America/Fortaleza |
| -03:00 | America/Godthab |
| -03:00 | America/Maceio |
| -03:00 | America/Miquelon |
| -03:00 | America/Montevideo |
| -03:00 | America/Paramaribo |
| -03:00 | America/Punta_Arenas |
| -03:00 | America/Recife |
| -03:00 | America/Santarem |
| -03:00 | America/Sao_Paulo, Brazil/East |
| -03:00 | Antarctica/Palmer |
| -03:00 | Antarctica/Rothera |
| -03:00 | Atlantic/Stanley |
| -03:00 | Etc/GMT+3 |
| -02:00 | America/Noronha, Brazil/DeNoronha |
| -02:00 | Atlantic/South_Georgia |
| -02:00 | Etc/GMT+2 |
| -01:00 | America/Scoresbysund |
| -01:00 | Atlantic/Azores |
| -01:00 | Atlantic/Cape_Verde |
| -01:00 | Etc/GMT+1 |
| +00:00 | Africa/Abidjan, Africa/Timbuktu |
| +00:00 | Africa/Accra |
| +00:00 | Africa/Bamako |
| +00:00 | Africa/Banjul |
| +00:00 | Africa/Bissau |
| +00:00 | Africa/Casablanca |
| +00:00 | Africa/Conakry |
| +00:00 | Africa/Dakar |
| +00:00 | Africa/El_Aaiun |
| +00:00 | Africa/Freetown |
| +00:00 | Africa/Lome |
| +00:00 | Africa/Monrovia |
| +00:00 | Africa/Nouakchott |
| +00:00 | Africa/Ouagadougou |
| +00:00 | America/Danmarkshavn |
| +00:00 | Antarctica/Troll |
| +00:00 | Atlantic/Canary |
| +00:00 | Atlantic/Faroe, Atlantic/Faeroe |
| +00:00 | Atlantic/Madeira |
| +00:00 | Atlantic/Reykjavik, Iceland |
| +00:00 | Atlantic/St_Helena |
| +00:00 | Etc/GMT, Etc/GMT+0, Etc/GMT-0, Etc/GMT0, Etc/Greenwich, GMT, GMT+0, GMT-0, GMT0, Greenwich |
| +00:00 | Etc/UCT, UCT |
| +00:00 | Etc/UTC, Etc/Universal, Etc/Zulu, Universal, Zulu |
| +00:00 | Europe/Dublin, Eire |
| +00:00 | Europe/Guernsey |
| +00:00 | Europe/Isle_of_Man |
| +00:00 | Europe/Jersey |
| +00:00 | Europe/Lisbon, Portugal |
| +00:00 | Europe/London, Europe/Belfast, GB, GB-Eire |
| +00:00 | UTC |
| +00:00 | WET |
| +01:00 | Africa/Algiers |
| +01:00 | Africa/Bangui |
| +01:00 | Africa/Brazzaville |
| +01:00 | Africa/Ceuta |
| +01:00 | Africa/Douala |
| +01:00 | Africa/Kinshasa |
| +01:00 | Africa/Lagos |
| +01:00 | Africa/Libreville |
| +01:00 | Africa/Luanda |
| +01:00 | Africa/Malabo |
| +01:00 | Africa/Ndjamena |
| +01:00 | Africa/Niamey |
| +01:00 | Africa/Porto-Novo |
| +01:00 | Africa/Sao_Tome |
| +01:00 | Africa/Tunis |
| +02:00 | Africa/Windhoek |
| +01:00 | Arctic/Longyearbyen |
| +01:00 | CET |
| +01:00 | Etc/GMT-1 |
| +01:00 | Europe/Amsterdam |
| +01:00 | Europe/Andorra |
| +01:00 | Europe/Belgrade |
| +01:00 | Europe/Berlin |
| +01:00 | Europe/Bratislava |
| +01:00 | Europe/Brussels |
| +01:00 | Europe/Budapest |
| +01:00 | Europe/Busingen |
| +01:00 | Europe/Copenhagen |
| +01:00 | Europe/Gibraltar |
| +01:00 | Europe/Ljubljana |
| +01:00 | Europe/Luxembourg |
| +01:00 | Europe/Madrid |
| +01:00 | Europe/Malta |
| +01:00 | Europe/Monaco |
| +01:00 | Europe/Oslo, Atlantic/Jan_Mayen |
| +01:00 | Europe/Paris |
| +01:00 | Europe/Podgorica |
| +01:00 | Europe/Prague |
| +01:00 | Europe/Rome |
| +01:00 | Europe/San_Marino |
| +01:00 | Europe/Sarajevo |
| +01:00 | Europe/Skopje |
| +01:00 | Europe/Stockholm |
| +01:00 | Europe/Tirane |
| +01:00 | Europe/Vaduz |
| +01:00 | Europe/Vatican |
| +01:00 | Europe/Vienna |
| +01:00 | Europe/Warsaw, Poland |
| +01:00 | Europe/Zagreb |
| +01:00 | Europe/Zurich |
| +01:00 | MET |
| +02:00 | Africa/Blantyre |
| +02:00 | Africa/Bujumbura |
| +02:00 | Africa/Cairo, Egypt |
| +02:00 | Africa/Gaborone |
| +02:00 | Africa/Harare |
| +02:00 | Africa/Johannesburg |
| +02:00 | Africa/Khartoum |
| +02:00 | Africa/Kigali |
| +02:00 | Africa/Lubumbashi |
| +02:00 | Africa/Lusaka |
| +02:00 | Africa/Maputo |
| +02:00 | Africa/Maseru |
| +02:00 | Africa/Mbabane |
| +02:00 | Africa/Tripoli, Libya |
| +02:00 | Asia/Amman |
| +02:00 | Asia/Beirut |
| +02:00 | Asia/Damascus |
| +02:00 | Asia/Famagusta |
| +02:00 | Asia/Gaza |
| +02:00 | Asia/Hebron |
| +02:00 | Asia/Jerusalem, Asia/Tel_Aviv, Israel |
| +02:00 | Asia/Nicosia |
| +02:00 | EET |
| +02:00 | Etc/GMT-2 |
| +02:00 | Europe/Athens |
| +02:00 | Europe/Bucharest |
| +02:00 | Europe/Chisinau, Europe/Tiraspol |
| +02:00 | Europe/Helsinki |
| +02:00 | Europe/Kaliningrad |
| +02:00 | Europe/Kiev |
| +02:00 | Europe/Mariehamn |
| +02:00 | Europe/Nicosia |
| +02:00 | Europe/Riga |
| +02:00 | Europe/Sofia |
| +02:00 | Europe/Tallinn |
| +02:00 | Europe/Uzhgorod |
| +02:00 | Europe/Vilnius |
| +02:00 | Europe/Zaporozhye |
| +03:00 | Africa/Addis_Ababa |
| +03:00 | Africa/Asmara |
| +03:00 | Africa/Dar_es_Salaam |
| +03:00 | Africa/Djibouti |
| +03:00 | Africa/Juba |
| +03:00 | Africa/Kampala |
| +03:00 | Africa/Mogadishu |
| +03:00 | Africa/Nairobi, Africa/Asmera |
| +03:00 | Antarctica/Syowa |
| +03:00 | Asia/Aden |
| +03:00 | Asia/Baghdad |
| +03:00 | Asia/Bahrain |
| +03:00 | Asia/Istanbul |
| +03:00 | Asia/Kuwait |
| +03:00 | Asia/Qatar |
| +03:00 | Asia/Riyadh |
| +03:00 | Etc/GMT-3 |
| +03:00 | Europe/Istanbul, Turkey |
| +03:00 | Europe/Kirov |
| +03:00 | Europe/Minsk |
| +03:00 | Europe/Moscow, W-SU |
| +03:00 | Europe/Simferopol |
| +03:00 | Indian/Antananarivo |
| +03:00 | Indian/Comoro |
| +03:00 | Indian/Mayotte |
| +03:30 | Asia/Tehran, Iran |
| +04:00 | Asia/Baku |
| +04:00 | Asia/Dubai |
| +04:00 | Asia/Muscat |
| +04:00 | Asia/Tbilisi |
| +04:00 | Asia/Yerevan |
| +04:00 | Etc/GMT-4 |
| +04:00 | Europe/Astrakhan |
| +04:00 | Europe/Samara |
| +04:00 | Europe/Saratov |
| +04:00 | Europe/Ulyanovsk |
| +04:00 | Europe/Volgograd |
| +04:00 | Indian/Mahe |
| +04:00 | Indian/Mauritius |
| +04:00 | Indian/Reunion |
| +04:30 | Asia/Kabul |
| +05:00 | Antarctica/Mawson |
| +05:00 | Asia/Aqtau |
| +05:00 | Asia/Aqtobe |
| +05:00 | Asia/Ashgabat, Asia/Ashkhabad |
| +05:00 | Asia/Atyrau |
| +05:00 | Asia/Dushanbe |
| +05:00 | Asia/Karachi |
| +05:00 | Asia/Oral |
| +05:00 | Asia/Samarkand |
| +05:00 | Asia/Tashkent |
| +05:00 | Asia/Yekaterinburg |
| +05:00 | Etc/GMT-5 |
| +05:00 | Indian/Kerguelen |
| +05:00 | Indian/Maldives |
| +05:30 | Asia/Colombo |
| +05:30 | Asia/Kolkata, Asia/Calcutta |
| +05:45 | Asia/Kathmandu, Asia/Katmandu |
| +06:00 | Antarctica/Vostok |
| +06:00 | Asia/Almaty |
| +06:00 | Asia/Bishkek |
| +06:00 | Asia/Dhaka, Asia/Dacca |
| +06:00 | Asia/Omsk |
| +06:00 | Asia/Qyzylorda |
| +06:00 | Asia/Thimphu, Asia/Thimbu |
| +06:00 | Asia/Urumqi, Asia/Kashgar |
| +06:00 | Etc/GMT-6 |
| +06:00 | Indian/Chagos |
| +06:30 | Asia/Yangon, Asia/Rangoon |
| +06:30 | Indian/Cocos |
| +07:00 | Antarctica/Davis |
| +07:00 | Asia/Bangkok |
| +07:00 | Asia/Barnaul |
| +07:00 | Asia/Ho_Chi_Minh, Asia/Saigon |
| +07:00 | Asia/Hovd |
| +07:00 | Asia/Jakarta |
| +07:00 | Asia/Krasnoyarsk |
| +07:00 | Asia/Novokuznetsk |
| +07:00 | Asia/Novosibirsk |
| +07:00 | Asia/Phnom_Penh |
| +07:00 | Asia/Pontianak |
| +07:00 | Asia/Tomsk |
| +07:00 | Asia/Vientiane |
| +07:00 | Etc/GMT-7 |
| +07:00 | Indian/Christmas |
| +08:00 | Antarctica/Casey |
| +08:00 | Asia/Brunei |
| +08:00 | Asia/Choibalsan |
| +08:00 | Asia/Hong_Kong, Hongkong |
| +08:00 | Asia/Irkutsk |
| +08:00 | Asia/Kuala_Lumpur |
| +08:00 | Asia/Kuching |
| +08:00 | Asia/Macau, Asia/Macao |
| +08:00 | Asia/Makassar, Asia/Ujung_Pandang |
| +08:00 | Asia/Manila |
| +08:00 | Asia/Shanghai, Asia/Chongqing, Asia/Chungking, Asia/Harbin, PRC |
| +08:00 | Asia/Singapore, Singapore |
| +08:00 | Asia/Taipei, ROC |
| +08:00 | Asia/Ulaanbaatar, Asia/Ulan_Bator |
| +08:00 | Australia/Perth, Australia/West |
| +08:00 | Etc/GMT-8 |
| +08:45 | Australia/Eucla |
| +09:00 | Asia/Chita |
| +09:00 | Asia/Dili |
| +09:00 | Asia/Jayapura |
| +09:00 | Asia/Khandyga |
| +09:00 | Asia/Pyongyang |
| +09:00 | Asia/Seoul, ROK |
| +09:00 | Asia/Tokyo, Japan |
| +09:00 | Asia/Yakutsk |
| +09:00 | Etc/GMT-9 |
| +09:00 | Pacific/Palau |
| +09:30 | Australia/Adelaide, Australia/South |
| +09:30 | Australia/Broken_Hill, Australia/Yancowinna |
| +09:30 | Australia/Darwin, Australia/North |
| +10:00 | Antarctica/DumontDUrville |
| +10:00 | Asia/Ust-Nera |
| +10:00 | Asia/Vladivostok |
| +10:00 | Australia/Brisbane, Australia/Queensland |
| +10:00 | Australia/Currie |
| +10:00 | Australia/Hobart, Australia/Tasmania |
| +10:00 | Australia/Lindeman |
| +10:00 | Australia/Melbourne, Australia/Victoria |
| +10:00 | Australia/Sydney, Australia/ACT, Australia/Canberra, Australia/NSW |
| +10:00 | Etc/GMT-10 |
| +10:00 | Pacific/Chuuk, Pacific/Truk, Pacific/Yap |
| +10:00 | Pacific/Guam |
| +10:00 | Pacific/Port_Moresby |
| +10:00 | Pacific/Saipan |
| +10:30 | Australia/Lord_Howe, Australia/LHI |
| +11:00 | Antarctica/Macquarie |
| +11:00 | Asia/Magadan |
| +11:00 | Asia/Sakhalin |
| +11:00 | Asia/Srednekolymsk |
| +11:00 | Etc/GMT-11 |
| +11:00 | Pacific/Bougainville |
| +11:00 | Pacific/Efate |
| +11:00 | Pacific/Guadalcanal |
| +11:00 | Pacific/Kosrae |
| +11:00 | Pacific/Norfolk |
| +11:00 | Pacific/Noumea |
| +11:00 | Pacific/Pohnpei, Pacific/Ponape |
| +12:00 | Antarctica/McMurdo |
| +12:00 | Asia/Anadyr |
| +12:00 | Asia/Kamchatka |
| +12:00 | Etc/GMT-12 |
| +12:00 | Pacific/Auckland, Antarctica/South_Pole, NZ |
| +12:00 | Pacific/Fiji |
| +12:00 | Pacific/Funafuti |
| +12:00 | Pacific/Kwajalein, Kwajalein |
| +12:00 | Pacific/Majuro |
| +12:00 | Pacific/Nauru |
| +12:00 | Pacific/Tarawa |
| +12:00 | Pacific/Wake |
| +12:00 | Pacific/Wallis |
| +12:45 | Pacific/Chatham, NZ-CHAT |
| +13:00 | Etc/GMT-13 |
| +13:00 | Pacific/Apia |
| +13:00 | Pacific/Enderbury |
| +13:00 | Pacific/Fakaofo |
| +13:00 | Pacific/Tongatapu |
| +14:00 | Etc/GMT-14 |
| +14:00 | Pacific/Kiritimati |
## APPENDIX III - Business cases to be covered
### Authentication:
Generating tokens with the production Client id provided under the developer portal profile in
combination with the secret.
### Single store:
- Create a single store using an API call
- Inactivate / activate a single store using an API call
- Update a single store information using an API call:
- Store name
- Store address fields
- Store opening and closing hours
- Store capacity
- Store capability
- Add exceptional closures for a single store using an API call
### Bulk of stores:
- Read carefully the following steps upfront the integration to ensure you are sending the expected data:
- Feed_type = STORE_FEED → SENDING ONLY DELTAS of the total store network which have a change in any of the parameters.
- Feed_type = 3P → SENDING THE ENTIRE (bulk) network of pick up points
- Create a bulk of stores using an API call
- Inactivate / activate a bulk of stores using an API call
- Update a bulk of stores with different information combined using an API call:
- Store name
- Store address fields
- Store opening and closing hours
- Store capacity
- Store capability
- Add exceptional closures for a bulk of stores using an API call
## APPENDIX IV - Tests to be completed on sandbox
### Successful responses:
The following test must be performed for both business cases, single and bulk store before proceeding with the moving to production environment:
- Store creation, expected result: Store processed and visible on Amazon back-end.
- Store update, expected result: Store update changes visible on Amazon back-end.
- Store inactivation, expected result: Store status updated and visible on Amazon back-end.
- Store temporary closed, expected result: Store status updated and visible on Amazon back-end.
All these responses are available and must be checked on partner side with the API function of retrieve an output document which contains the call response.
### Error control:
The following test must be performed for both business cases, single and bulk store before proceeding with the moving to production environment.
All the errors reported on the API online documentation shared with the partner provides visibility on what is wrong with the feed or with a specific location.
The integration must be able to read the output of the call and provide the operator the ability to fix the location to re-submit the call with the data fixed.
- Store creation with wrong flag status
- Store update with wrong standard hours:
- Sending less than two opening days on a week
- Store update with wrong opening hours:
- Data and time format
- Store update with wrong exceptional closure hours:
- Date in the past
- Overlapping date ranges
- Data truncation due to allowed length exceeded (e.g. accessPointName > 50 characters)
- Timezone and Country Code ISO values validation
For all the cases above mentioned, there is an error code and error description published on the output document.
Those errors are collected and mentioned on the API Online Documentation under _Return a document call_
version: '1.2.0'
servers:
- url: https://accesspoints-api-sandbox-na.amazon.com/v1
description: 'NA staging server for testing'
- url: https://accesspoints-api-na.amazon.com/v1
description: 'NA production server'
- url: https://accesspoints-api-sandbox-eu.amazon.com/v1
description: 'EU staging server for testing'
- url: https://accesspoints-api-eu.amazon.com/v1
description: 'EU production server'
- url: https://accesspoints-api-sandbox-fe.amazon.com/v1
description: 'FE staging server for testing'
- url: https://accesspoints-api-fe.amazon.com/v1
description: 'FE production server'
paths:
/token:
servers: [{
"url": "https://api.amazon.com/auth/o2"
}]
post:
summary: 'Return an access token'
description: |
Once Client ID has been whitelisted by Amazon, please request a Login with Amazon access token to access the API.
### Access Token Expiration
Access tokens expire after 1 hour. If token expires, create a new token to use in all future requests.
Attempted access to the API with an expired token will give 403 HTTP errors (forbidden).
requestBody:
description: Partner credentials need to be set in the request body.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AccessTokenRequest'
responses:
'200':
description: 'Return a valid access token.'
content:
application/json:
schema:
$ref: '#/components/schemas/AccessTokenResponse'
'401':
description: 'Authentication failed.'
content:
application/json:
schema:
$ref: '#/components/schemas/AccessTokenResponseError'
/feeds:
post:
summary: 'Create a feed'
description: 'Creates a feed containing information for a list Access Points to be created or updated which is always processed asynchronously.'
security:
- BearerAuth: []
parameters:
- in: header
name: 'Content-Type'
description: |
`Content-Type` header is required for this method and must be `application/json`.
schema:
type: string
default: 'application/json'