For the complete documentation index, see llms.txt. This page is also available as Markdown.

202 vs 301 vs 308

How Atlas errors 202, 301, and 308 differ, which step failed, and whether to refresh search, verify, or the full booking flow.

💬 Need help? If you're stuck, ask Eva in the Help Center for instant diagnostics.

Ask Eva

Use this page when booking fails and you need to know whether to refresh search.do, refresh verify.do, or restart the booking flow.

Short answer

202 means the routingIdentifier expired.

301 means the sessionId expired.

308 means the price changed before order creation.

They do not have the same recovery path.

FAQ

What does 202 mean?

It means the routingIdentifier from search.do is no longer valid.

Run search.do again.

What does 301 mean?

It means the sessionId from verify.do is no longer valid.

Run verify.do again if the search context is still usable.

What does 308 mean?

It means the booking price changed between verification and order creation.

Do not resubmit the same order blindly.

Refresh the booking context first.

Core difference

202 — expired routingIdentifier

Failed stage

verify.do

What expired

routingIdentifier

Typical reason

More than 6 hours passed after search.do.

Next action

Run search.do again.

Then continue to verify.do with the fresh routingIdentifier.

301 — expired sessionId

Failed stage

order.do

What expired

sessionId

Typical reason

More than 2 hours passed after verify.do.

Next action

Run verify.do again.

Then continue to order.do with the fresh sessionId.

308 — price changed

Failed stage

order.do

What changed

The current price or fare context

Typical reason

Inventory or fare changed after verification.

Next action

Refresh the booking context before creating the order again.

In most cases, restart from search.do and continue through verify.do.

Quick decision rule

Use this rule in production:

  • 202 — refresh search

  • 301 — refresh verify

  • 308 — refresh booking context and rebuild the order

How much of the flow must you restart?

For 202

Restart from search.do.

The old routingIdentifier cannot be reused.

For 301

Restart from verify.do.

If the original search context is still valid, you do not need a new search first.

For 308

Treat the previous booking context as stale.

If you are in the standard search flow, restart from search.do.

If you are in a Get Offer flow, refresh the offer first.

Common mistakes

Retrying verify.do after 202 with the same routingIdentifier

Do not do this.

The identifier already expired.

Retrying order.do after 301 with the same sessionId

Do not do this.

The session already expired.

Retrying order.do after 308 without rebuilding the order

Do not do this.

Price drift usually means the old booking assumptions are stale.

Best practice

Store these values together:

  • identifier type

  • identifier creation time

  • itinerary summary

  • passenger mix

  • flow type

This makes the next recovery step obvious.

Last updated

Was this helpful?