Process Auth
POST /auth/v2/processAuth
Once startAuth returns true and your device has completed its authentication flow, call processAuth to deliver your authentication decision to the JWO gate. This API must only be called after full authentication on your side is complete and the shopper has been identified (or denied).
Request Body Input
| Field |
Required |
Type |
Description |
authEventId |
Yes |
String |
The authEventId returned by the prior startAuth call. |
deviceId |
Yes |
String |
Your authentication device identifier. |
storeId |
Yes |
String |
Your store identifier, provided by Amazon during store onboarding. |
personId |
Conditional |
String (nullable) |
Your system's identifier for the authenticated person. Nullable when authResult is DENIED. |
personType |
Yes |
PERSON_TYPE |
SHOPPER (a person whose shopping activity will be tracked and a cart will be generated) or NON_SHOPPER (a person like a store associate for whom no cart is generated). |
timestamp |
Yes |
Long |
Unix timestamp in milliseconds. |
authResult |
Yes |
AUTH_RESULT |
Your authentication decision: ACCEPTED, DENIED, or PROCESSED. |
deniedReason |
Conditional |
DENIED_REASON (nullable) |
Reason why customer was denied. Used for reporting as well as potential customer CX changes. Nullable if the customer was accepted, or if there is no specific reason. |
AUTH_RESULT
| Value |
Gate Behavior |
Use Case |
ACCEPTED |
Success visual/audio cues on the gate, gate opens. |
Standard successful authentication. |
DENIED |
Failure visual/audio cues on the gate. Gate does not open. |
Authentication failed or was rejected. |
PROCESSED |
Amazon begins tracking the shopper's shopping journey. Gate is not opened, no cues are played. |
Reserved for future use; there is currently no supported use case. Use ACCEPTED or DENIED. |
DENIED_REASON
| Value |
Description |
BAD_DEBT |
Shopper has outstanding unpaid balance, and requires remediation. |
ACCOUNT_NOT_FOUND |
Shopper is not found/recognized in your systems. |
Response Body Output
| Field |
Type |
Description |
authProcessed |
Boolean |
Whether your auth decision was successfully applied. |
reason |
String (nullable) |
Set only when authProcessed is false. Values: AUTH_EVENT_MISMATCH, LOCK_EXPIRED, LANE_UNAVAILABLE, STALE_REQUEST. See Errors. |
timestamp |
Long |
Server-side timestamp. |
processAuthMetadata |
Array |
Reserved for future use. |
Response Example (Success)
{
"authProcessed": true,
"reason": null,
"timestamp": 1717545602200,
"processAuthMetadata": []
}
Important: After a successful processAuth with authResult ACCEPTED, wait 3 seconds before accepting the next scan to prevent double-entry for the same person.
Errors
When processAuth fails, authProcessed is false and reason is set to one of the following values:
| Reason |
Status |
Meaning |
Action |
AUTH_EVENT_MISMATCH |
409 |
The authEventId doesn't match the lane's active auth. |
Start over from startAuth. Investigate a possible bug in how you pass authEventId. |
LOCK_EXPIRED |
409 |
The gate reservation (authTimeout) elapsed before processAuth was received. |
Show "Timed out." and start over from startAuth. This usually indicates a bug: processAuth should never be called after authTimeout has elapsed. Increase authTimeout or update your logic to call processAuth earlier (e.g., call processAuth with DENIED when your auth budget runs out). |
LANE_UNAVAILABLE |
503 |
The gate went offline or cannot be reached. |
Show "Gate unavailable." Do NOT retry. |
STALE_REQUEST |
400 |
The timestamp is too far from Amazon's server time. |
Sync your device clock (e.g., via NTP) and start over from startAuth. |