What This Actually Automates #
In Seller Central there is a Request a Review button on each order. Clicking it makes Amazon send the buyer a templated review request — Amazon writes it, Amazon translates it, you cannot change a word of it.
The Solicitations API is that button, callable. Which makes it the only compliant way to ask for reviews at volume, because it does not let you do any of the things that get sellers suspended.
In one line
Two operations: ask whether an order is eligible, and send the request. Eligibility is not something you calculate — you ask Amazon, and its answer is ground truth. One request per order, ever.
Check the Role Before You Write Any Code #
Step zero, and the one that decides whether this project is a week or a quarter.
Solicitations requires the Buyer Solicitation role, or Product Listing. If your app has Buyer Communication — which sounds like the right one and is not — you do not have access. The probe is free and read-only:
GET /solicitations/v1/orders/{amazonOrderId}?marketplaceIds=ATVPDKIKX0DER
A 403 means the role is missing. And adding a role is not a checkbox:
- You request the role on the application
Which triggers an Amazon re-review of the app.
- Every connected seller must re-authorise
Existing refresh tokens do not gain the new scope. Each account goes through consent again to mint a token that carries it.
Bundle your role requests. Since a re-auth round is disruptive, ask for every role you expect to need in the next year at the same time — Product Listing for catalogue writes, Buyer Solicitation for this. One painful round instead of two.
The Two Operations #
Ask what you can do:
GET /solicitations/v1/orders/{orderId}?marketplaceIds={one}
Eligible means productReviewAndSellerFeedback appears in _links.actions. Ineligible is a 200 with an empty actions list, not an error — so a naive "did it throw?" check will treat every ineligible order as eligible.
Send it:
POST /solicitations/v1/orders/{orderId}/solicitations/
productReviewAndSellerFeedback?marketplaceIds={one}
201 on success, with no body.
| Response | Meaning | What to do |
|---|---|---|
| 201 | Sent | Record it; never retry this order |
| 200 with empty actions | Not eligible right now | Try again later, if still inside the window |
| 403 on the POST | Already solicited | Mark done permanently — this is not a failure |
| 403 on the GET | Missing role | Stop; fix access first |
That third row causes real damage if you get it wrong. A 403 on create means the order has already had its one request. Treat it as a retryable error and you will hammer that endpoint forever on orders that are permanently done.
Also: marketplaceIds takes exactly one marketplace per call. Not a list.
The Window, and Why You Can't Detect Delivery #
Requests are only valid in a window: from 5 days after the earliest delivery date, to 30 days after the latest delivery date. Call outside it and you get an error.
Which raises the obvious question — how do you know when it was delivered? And here is the part that catches people:
Amazon order status never says Delivered. It tops out at Shipped. There is no status transition to trigger from. If you fulfil through FBA you have no carrier tracking of your own either.
So the design Amazon's own documentation points at: compute a candidate window from the promised delivery dates on the order, then call the eligibility endpoint and believe it. Your window narrows the candidates; the API makes the decision.
Rate Limits and the Multi-Account Case #
1 request per second, burst 5 — per seller account. That last part is the useful bit: twenty accounts are twenty independent buckets, not one shared one.
Practically, that means a per-account throttle rather than a global one, and it means a backlog on one account cannot starve the others. If you already have a throttling wrapper for other SP-API calls, reuse it; this needs nothing special beyond correct scoping.
Two more constraints worth designing around:
- One solicitation per order, for its lifetime — and that allowance is shared with the Messaging API's proactive message. You get one or the other, never both. If you also send proactive messages, they compete for the same slot.
- API sends do not grey out the Seller Central button. Someone clicking it later just gets "already requested", which is harmless but confusing. Worth telling your ops team once.
The Compliance Line #
The reason this API is safe to automate is precisely that it takes the dangerous choices away from you.
- You cannot write the message. Amazon composes and translates it.
- You cannot select happy buyers. Filtering to customers you think will leave five stars is review manipulation, and building that filter is the risk, not the API.
- You cannot ask twice. One per order, enforced server-side.
So the only real decision your code makes is which orders to attempt and when — and the honest answer is "all eligible ones, once, inside the window".
Default your send flag to off. This feature messages real buyers. A dry-run mode that logs intended sends, enabled deliberately after you have watched it choose orders for a few days, costs nothing and prevents an embarrassing first run.
Related: if you are checking which roles your app has, every cause of an SP-API 403 covers the role model in detail.
FAQ #
What does the Amazon Solicitations API do?
It is the API behind the Request a Review button in Seller Central. It sends a templated, Amazon-composed review and seller-feedback request to the buyer for a given order. The content is not customisable.
Which role does the Solicitations API need?
Buyer Solicitation, or Product Listing. Buyer Communication is a different role and does not grant access. Adding a role triggers an Amazon re-review of your application and requires every connected seller account to re-authorise.
Why does the create call return 403?
On the POST, a 403 normally means the order has already been solicited. That is a terminal state, not a transient error — mark the order done and never retry it. A 403 on the GET eligibility call means your app lacks the required role.
When can I send a review request?
Between 5 days after the order's earliest delivery date and 30 days after its latest delivery date. Calling outside that window errors.
How do I know an Amazon order was delivered?
You generally cannot from the order alone — Amazon order status tops out at Shipped and never reports Delivered. Compute a candidate window from the promised delivery dates and use getSolicitationActionsForOrder as the authority on eligibility.
Can I send review requests only to happy customers?
No. Selecting buyers by expected sentiment is review manipulation under Amazon's policies. The API deliberately gives you no way to do it — you choose which eligible orders to request, not what the message says or who is likely to be positive.
Related guides
Amazon SP-API
The SP-API Reports Pattern Everyone Gets Wrong (Async, Step by Step)
The SP-API Reports API is asynchronous — request, poll, download, decompress — and most broken integrations either treat it like a synchronous call or poll it straight into a throttle. Here's the correct four-step flow, the status states that trip people up, and the gzip gotcha at the end.
Read guide →Amazon SP-API
Amazon Vendor Central API: What 1P Vendors Can Actually Automate
Vendor Central (1P) has a real API surface through the SP-API vendor family — retail analytics, purchase orders, shipments, invoices, and direct fulfillment. Here's what's genuinely automatable, what still isn't, and where the fastest wins are for a 1P vendor.
Read guide →Amazon SP-API
Amazon SP-API 403 Unauthorized: Every Cause and How to Fix It
A 403 "Access to requested resource is denied" from the SP-API almost never means your credentials are wrong — it usually means a role, a token, a region, or an authorization is mismatched. Here are the eight causes that produce a 403, in the order worth checking them, with the exact fix for each.
Read guide →Don't want to build this yourself?
I set this up for sellers and agencies every week. Book a free 30-minute audit of your Amazon data & PPC setup — you'll leave with a plan either way, whether we work together or not.