Skip to main content
Before a user can participate in an offer, they have to satisfy its requirements: identity verification, a signed tax document, a connected wallet, a jurisdiction check. Which ones apply is decided per offer option, by CoinList. RequirementsChecklistContainer renders the whole checklist and resolves every requirement type in-app. It is the highest rung (L3, components) and the one to start from.

Prerequisites

Render it

That is the whole integration. The container is self-scoped: it renders fully styled with no style provider in the tree. When the user is not authenticated it renders a sign-in card instead of the checklist, without fetching anything.

What it does for you

Clicking a requirement’s action button does the right thing per type, with no wiring from you: The fallback for everything is coinlist.requirements.handle, which opens the corresponding CoinList page in a new tab where the type has one.
Omit onRequirementActionOverride and rely on the defaults. Pass your own handler only if you need custom navigation, or null to disable the action button entirely. The same applies to onContactSupportOverride, which defaults to coinlist.support.contact.

Resolving wallet requirements in-app

Pass a wallet and the checklist resolves external_wallet and whitelisted_wallet requirements without leaving your app. It only needs signing capability, so an EvmSigner is enough - no gas, no transaction.
When wallet is omitted entirely - or is null with no onRequestConnect to act on - wallet requirements fall back to opening CoinList in a new tab.

Props

data skips the requirements fetch, but connected-wallet addresses are not part of RequirementsData and are always fetched client-side.

The individual containers

The checklist mounts these for you. Render one directly only if you are building your own checklist:
  • IdentityVerificationContainer - the inline Sumsub flow. Takes levelName, reset, locale, onSubmitted.
  • TaxDocumentModalContainer - the tax document form. Takes isOpen, onClose, onSubmitted.
  • ConnectWalletModalContainer - wallet ownership proof and binding. Takes isOpen, onClose, offerId, optionId, wallet, onRequestConnect, onConnected.
useRequirementsChecklistViewModel backs the container and returns { state, onEvent }. Below it are the data hooks it composes, each usable on its own:
See SDK structure for the conventions they share.
coinlist.requirements is a plain namespace with no React. It is available on both the browser client and CoinListServer, except handle, which needs a browser.
A requirement type is one of kyc_approved, external_wallet, whitelisted_wallet, jurisdiction, accreditation, document - the six the API reference declares. A status is not_started, in_progress, action_needed, completed, or rejected.Every method requires a logged-in user and throws NotAuthenticatedError otherwise.Wallet ownership proof lives on coinlist.wallets rather than here, because it is provider-agnostic. See Wallets.

Next step

Building the Checkout flow

Once requirements are satisfied, render CheckoutContainer and let it pick the provider.