Amazon SP-API 9 min read

Automating Amazon's Request a Review Button with the Solicitations API

The Request a Review button in Seller Central has an API behind it, and it is the only compliant way to ask for reviews at scale. The catch is a role you almost certainly don't have, a delivery window you can't detect from the order status, and a 403 that actually means success. Here's the whole thing.

Updated Aug 2026
Automating Amazon's Request a Review Button with the Solicitations API

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.

Rating stars, representing product reviews and seller feedback
Amazon writes the message. You only choose which orders get one, and when.

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:

  1. You request the role on the application

    Which triggers an Amazon re-review of the app.

  2. 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.

ResponseMeaningWhat to do
201SentRecord it; never retry this order
200 with empty actionsNot eligible right nowTry again later, if still inside the window
403 on the POSTAlready solicitedMark done permanently — this is not a failure
403 on the GETMissing roleStop; 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.

The solicitation window runs from five days after the earliest delivery date to thirty days after the latest delivery date earliest delivery latest delivery +30d too early — errors eligible window too late Compute the window from the promise dates — then let the eligibility call decide. Order status never reaches "Delivered", so there is nothing else to trigger on.

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.

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.

Found this helpful? Share it:

WhatsApp