Quick start

Sign up for Moov, take your first test payment with a payment link, then onboard your first connected account.

Everything on this page runs in test mode, so no real money moves. Steps that differ have a Dashboard tab and an API tab; pick one and stay with it, or mix them. To compare the Dashboard, Drops, Moov.js, and the API, see integration options. The glossary defines terms like account, payment method, and transfer.

Sign up for Moov

Sign up in the Moov Dashboard. You need Moov administrator or developer permissions for the steps on this page. After you sign up, you can sign in with a passkey from your browser, password manager, phone, or a USB security key.

You start in test mode. Your test account comes with sample accounts and data, and every capability is already enabled, so you can take payments right away.

You're ready when the account switcher in the top left of the Dashboard shows your test account.

Toggle for test account in Moov Dashboard

Create an API key

Skip this step if you're only using the Dashboard.

In the Dashboard, go to Developers and click New API key. Test mode and production mode each have their own keys.

  1. Name the key after what it's for.
  2. Copy the public key and secret key and store them somewhere secure. You can't view the secret key again.
  3. Add the domains you'll call the API from. You can skip this for now; server-side calls with Basic authentication don't need it.

Make your first call. The API examples on this page use Basic authentication from your terminal (-u "{publicKey}:{secretKey}"). List the accounts connected to your test account with the list accounts endpoint:

curl -X GET "https://api.moov.io/accounts" \
  -u "{publicKey}:{secretKey}" \
  -H "X-Moov-Version: v2026.07.00"

You're ready when the response is a 200 with a list of sample accounts. A 401 means the key pair is wrong. Before you call the API from a browser or mobile app, read authenticate API requests to set up access tokens.

You also need your partner account ID for API calls. In the Dashboard, open Settings; the ID appears below your account name and logo.

A payment link is a Moov-hosted checkout page, so you can take a payment without building any UI. For this first payment, your own test account is the merchant and the funds land in its Moov wallet.

  1. Go to Payment links and click New payment link.
  2. On the Accept payment tab, enter an amount, title, and description.
  3. Leave Card payments selected and choose your wallet.
  4. Create the link.

You're ready when you have a link in the form https://moov.link/p/{code}. In the API response, it's the link field, and status is active.

Pay with a test card

Open the link in your browser and pay with a test card:

Field Value
Card number 4111111111111111 (Visa debit)
Expiration Any future date
CVV 111
Postal code 11111

You're ready when the checkout page confirms the payment. To test a decline, pay a new link with a declined test card. The test mode guide lists every test card and trigger amount.

Confirm the payment

Paying the link created a card transfer from the test card to your wallet.

Go to Transfers. The new transfer is at the top of the list; open it to see the card, the amount, and its status.

You're done when the transfer shows source.cardDetails.status confirmed, meaning the issuer approved the charge. The transfer status changes to completed when the funds settle to your wallet. In production, subscribe to webhooks such as transfer.updated instead of polling.

Onboard a connected account

Your platform takes payments on behalf of other businesses, so the next step is to onboard one. Hosted onboarding sends the account owner a link to a secure, branded page where they enter their own details, link a bank account, and accept Moov's platform agreement and your fee plan. Their personal information goes straight to Moov, so you don't store it.

Before you create the link, decide:

  • Capabilities: what the account can do, such as collect-funds.card-payments and wallet.balance to accept cards. Request only what the account needs, because each capability adds verification requirements. See capabilities.
  • Scopes: what you and the account can do on each other's behalf. See connected accounts.
  • Fee plan: the pricing the account agrees to. See plan options. With the API, list your plans with the list fee plans endpoint and pass the plan's planID in feePlanCodes.

Go to Accounts > Onboarding links and create a new onboarding link. Choose capabilities, select Edit scopes if you need scopes other than the preselected ones, and pick a fee plan. Then send the link by email or SMS.

Merchant onboarding flow

You're done when the new account's capabilities show status: enabled, in the account's page in the Dashboard or with the list capabilities endpoint. To take a payment for the new account, repeat steps 3 to 5 with its account ID and wallet.

To onboard accounts inside your own app instead of sending a link, use the onboarding Drop. See create accounts to compare every onboarding method.

Fix onboarding errors

If an account doesn't finish onboarding, or verification needs more information, the Dashboard shows a banner on the account's page. Send the account a resolution link, a temporary, secure link where they can correct or add the information needed to enable the capability.

Create a resolution link directly from the banner on the account's page.

Alert for due items in Dashboard

Troubleshoot

Problem Likely cause Fix
401 on any API call Wrong public or secret key, or a production key used with test data Check the key pair in Developers; see common authentication errors
Payment link creation fails merchantPaymentMethodID isn't a moov-wallet payment method List payment methods with paymentMethodType=moov-wallet and use that ID
A connected account's payment link or transfer fails Its capabilities aren't enabled yet Check its capabilities and send a resolution link for anything due
Account can't use wallets, send funds, or collect funds It hasn't accepted the platform agreement Have the account owner finish hosted onboarding, or collect acceptance with the terms of service Drop

Next steps