Skip to main content
Fetch full offer details - pricing options, legal terms, milestones, the tokens the offer settles in, and more - for a single offer the user can access.
OfferDetail.type tells you which checkout the offer needs: 'coinlist::token_sale', 'superstate::swap', 'ondo::swap', or 'centrifuge::vault'. Switch on it exhaustively, or hand the offer to CheckoutContainer and let the SDK dispatch. v0.13.0 added 'centrifuge::vault', so an exhaustive switch written for an earlier version needs a new case - see the changelog.

Prerequisites

  • Completed OAuth and a working PassageProvider
  • An offer id from Fetch offers (for example offer.id from OffersGridContainer onOfferClick)
The hook mirrors the SDK client method passage.offers.get: it waits until the provider is ready, then loads details and exposes offerDetailsState:
  • LOADING - provider not ready or request in flight. With enabled: false and no data, the hook also stays LOADING: it has no DISABLED state.
  • ERROR - reason is not-authenticated when no user is signed in (NotAuthenticatedError), and generic-error for any other failure
  • CONTENT - offerDetail is the OfferDetail
Pass data with an OfferDetail your server fetched with passage.offers.get(id) on PassageServer, and the hook uses it as-is and sends no request. The hook has no refetch(). When the user picks an offer from the grid, keep that offer in React state and pass offer.id - TypeScript then matches the branded id type the hook expects.

REST: GET /v1/offers/

Use the API directly when you are not in React or you need a one-off server fetch with a token you already hold.
See the API reference for the exact response schema.
Example response shape (values are illustrative - always rely on the live API and legal URLs from Passage):
Display the full terms and link to the sale agreement URL as provided - do not summarize or paraphrase legal terms.

Lower-level client

Equivalent to the hook, without the built-in state machine. Pass the same offer.id you get from OffersGridContainer:
Prefer useOfferDetails unless you need custom control flow.

Next step

Requirements

Show the user what they must satisfy before they can participate.