Quick Start
Use this guide to get a Sandbox integration working end to end. Most partners begin with Payments. If you are focused on submitting merchant applications, follow the Onboarding path and then continue in the Onboarding section.
Pick a path
Accept a payment (most partners start here)
Submit a merchant application (onboarding integrators)
Before you begin
1) Get Sandbox credentials for your team
For the Payments path you will need:
terminal API key (apiKey)
merchantId
terminalId
For the Onboarding path you will need:
integrator username and password (OAuth)
client_id for the integrator client
If you are missing any of the above, contact your Bead representative.
2) Confirm your environment base URLs and identity realm
Sandbox base URL for Payments:
https://api.test.devs.beadpay.io
OAuth token URLs (used for Onboarding, Entity Management, and legacy Payments integrations):
Test / Non prod:
https://identity.beadpay.io/realms/nonprod/protocol/openid-connect/tokenProduction:
https://identity.beadpay.io/realms/prod/protocol/openid-connect/token
3) Choose an HTTP client
Use curl, Postman, or your SDK. For most partners, curl is the fastest way to confirm connectivity and authentication.
Payments path
This path creates a hosted payment page, presents it to a customer, and confirms the result in Sandbox.
1) Authenticate (preferred)
Payments use header based authentication with a terminal API key.
Important notes:
apiKey is the secret credential
maskedApiKey is not usable
send apiKey via the
X-Api-Keyheader on every Payments request
Required headers:
X-Api-Key: {apiKey}Content-Type: application/json
2) Create a hosted payment
Endpoint:
POST https://api.test.devs.beadpay.io/payments/crypto
Example curl:
Response fields to save:
trackingIdpaymentPageIdpaymentUrls
3) Present the hosted page
Open the first URL in paymentUrls in a browser. The hosted page guides the customer through tender selection and payment completion.
Common patterns:
Web checkout: open the URL in a new tab or embed it in an iframe
Operations or in person demo: display the hosted page and have the customer scan the QR code with their wallet
4) Confirm payment status
You should confirm the final status before delivering goods or granting access.
Option A: Poll by trackingId
Endpoint:
GET https://api.test.devs.beadpay.io/payments/tracking/{trackingId}
Example curl:
Watch statusCode until it reaches a terminal state such as completed, expired, cancelled, underpaid, or overpaid.
Option B: Webhooks (recommended for production)
You can configure a terminal default webhook and optionally include additional webhookUrls per payment. Use webhooks to receive status changes automatically and reduce polling.
Troubleshooting (Payments)
401 Unauthorized The API key is missing, invalid, or sent using the wrong header name. The header must be exactly
X-Api-Key.OAuth errors when calling Payments If you attempt OAuth client_credentials or other OAuth flows, you may see errors such as “Public client not allowed to retrieve service account”. Payments
POST /payments/cryptousesX-Api-Key. Ignore the OAuth path for this endpoint.Hosted page does not load Confirm you are using a URL from the
paymentUrlsarray returned by the API call.
Onboarding path
This path is for integrators that submit merchant applications through the API and track status through approval.
1) Authenticate (OAuth)
Onboarding and Entity Management use OAuth 2.0 (OpenID Connect token endpoint).
Token URLs:
Test / Non prod:
https://identity.beadpay.io/realms/nonprod/protocol/openid-connect/tokenProduction:
https://identity.beadpay.io/realms/prod/protocol/openid-connect/token
Use the integrator client and your assigned username and password to request an access token. Then send that token as:
Authorization: Bearer {access_token}
Next steps:
Continue in the Onboarding section to submit an application and generate a hosted signer link
Use Entity Management after approval to create and maintain merchants, locations, and terminals
Legacy Payments authentication (supported for existing integrators)
Some existing Payments integrations authenticate using OAuth password grant with a terminal username and password, then send:
Authorization: Bearer {access_token}
New Payments integrations should use the terminal API key method described in the Payments path above.
Last updated