Skip to main content
Merchant Provisioning is in private beta. Requires an approved Platform Partner account.

Overview

When a new seller joins your platform, you provision them as a merchant sub-account through the Provisioning API. Pandabase creates a store on their behalf and handles all KYC/KYB verification through the Pandabase.js Verification SDK. Once verification passes, payment capabilities are activated based on the onboarding tier you select. Each merchant maps to an isolated Pandabase store with its own balance, transaction history, and compliance status. Your platform maintains full control over merchant lifecycle events through the API.

Creating a merchant

POST /v2/platforms/merchants
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}
X-Idempotency-Key: merchant_create_abc123

{
  "externalId": "your_internal_merchant_id",
  "businessName": "Coffee Shop Co",
  "email": "owner@coffeeshop.co",
  "country": "US",
  "category": "DIGITAL_PRODUCTS",
  "onboardingTier": "STANDARD",
  "capabilities": {
    "payments": true,
    "subscriptions": false,
    "payouts": true
  },
  "riskProfile": {
    "expectedMonthlyVolume": "FROM_1K_TO_10K",
    "averageTransactionSize": 1500,
    "businessModel": "B2C"
  },
  "metadata": {
    "planId": "pro",
    "signupSource": "website"
  }
}
Response:
{
  "ok": true,
  "data": {
    "merchantId": "shp_provisioned_xxx",
    "platformId": "plt_xxx",
    "externalId": "your_internal_merchant_id",
    "status": "PENDING_REVIEW",
    "onboardingTier": "STANDARD",
    "capabilities": {
      "payments": "PENDING",
      "subscriptions": "DISABLED",
      "payouts": "PENDING"
    },
    "limits": {
      "maxTransactionAmount": 50000,
      "dailyVolumeCap": 500000,
      "monthlyVolumeCap": 5000000
    },
    "createdAt": "2026-03-20T10:00:00.000Z"
  }
}

Required fields

FieldTypeDescription
externalIdstringYour internal identifier for this merchant. Must be unique per platform. Max 128 characters.
businessNamestringDisplay name of the merchant’s business. Max 256 characters.
emailstringPrimary contact email. Must be a valid, deliverable address.
countrystringISO 3166-1 alpha-2 country code. Must be a supported country.
categorystringBusiness category. See categories below.
onboardingTierstringThe review tier for this merchant. See onboarding tiers.

Optional fields

FieldTypeDescription
capabilitiesobjectCapabilities to request. Defaults to { payments: true }.
riskProfileobjectExpected volume and transaction patterns. Helps accelerate compliance review.
metadataobjectArbitrary key-value pairs. Max 20 keys, key max 40 characters, value max 500 characters.
notificationEmailstringSeparate email for operational notifications. Defaults to email.
webhookUrlstringMerchant-specific webhook endpoint. If not set, all events go to your platform webhook.
Always include an X-Idempotency-Key header when creating merchants. If a request is retried with the same key, Pandabase returns the existing merchant instead of creating a duplicate.

Onboarding tiers

Tiers control the level of compliance review and the volume limits applied to a merchant.
TierReview timeMonthly volume capTransaction capRequirements
EXPRESSInstant$5,000$500Email verification only
STANDARDUnder 24 hours$50,000$5,000Basic KYB review
ENHANCED2 to 5 business days$500,000$50,000Full KYB with document verification
ENTERPRISECustomUnlimitedUnlimitedDedicated compliance review
EXPRESS is designed for fast onboarding with strict limits. Merchants can be upgraded to a higher tier at any time by submitting a tier change request.

Upgrading a merchant’s tier

POST /v2/platforms/merchants/{merchantId}/tier
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

{
  "tier": "ENHANCED",
  "documents": {
    "businessRegistration": "doc_upload_xxx",
    "governmentId": "doc_upload_yyy"
  }
}
Tier upgrades trigger a new compliance review. The merchant retains their current capabilities and limits until the upgrade is approved or rejected. You will receive a MERCHANT_TIER_UPDATED webhook on resolution.

Merchant categories

CategoryDescription
DIGITAL_PRODUCTSSoftware, e-books, digital downloads
SAASSoftware as a service, subscriptions
EDUCATIONCourses, tutorials, educational content
MEDIAMusic, video, streaming, digital media
GAMINGGames, in-game items, game keys
SERVICESConsulting, freelance, professional services
COMMUNITYMemberships, communities, forums
OTHERAnything that does not fit the above categories
The category influences the risk scoring applied during compliance review. Selecting the correct category speeds up the review process.

Merchant lifecycle

Statuses

StatusDescriptionCan process paymentsCan receive payouts
PENDING_REVIEWAwaiting compliance reviewNoNo
ACTIVEFully operationalYesYes
RESTRICTEDLimited due to risk signals or compliance issuesLimitedHeld
SUSPENDEDSuspended pending investigationNoHeld
REJECTEDFailed compliance review. Cannot be reactivated.NoNo
TERMINATEDPermanently removed from the platformNoNo
When a merchant enters RESTRICTED status, existing payment intents in REQUIRES_PAYMENT are paused and new intents cannot be created. Completed settlements may be held during the restriction period.

Capabilities

Each merchant has granular capabilities that your platform controls. Capabilities go through a review process before activation.
CapabilityDescriptionMinimum tier
paymentsAccept one-time paymentsEXPRESS
subscriptionsAccept recurring paymentsSTANDARD
payoutsReceive bank payoutsSTANDARD
disputesSelf-manage dispute evidenceSTANDARD

Capability statuses

StatusDescription
PENDINGUnder review by the compliance team
ACTIVELive and usable
RESTRICTEDTemporarily limited due to risk signals
SUSPENDEDSuspended pending investigation
DISABLEDNot enabled for this merchant

Requesting additional capabilities

POST /v2/platforms/merchants/{merchantId}/capabilities
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

{
  "capabilities": ["subscriptions", "payouts"]
}
Response:
{
  "ok": true,
  "data": {
    "merchantId": "shp_provisioned_xxx",
    "capabilities": {
      "payments": "ACTIVE",
      "subscriptions": "PENDING",
      "payouts": "PENDING",
      "disputes": "DISABLED"
    },
    "updatedAt": "2026-03-20T10:30:00.000Z"
  }
}
New capabilities go through review before activation. You will receive a MERCHANT_CAPABILITY_UPDATED webhook when the status changes.

Retrieving a merchant

GET /v2/platforms/merchants/{merchantId}
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}
Response:
{
  "ok": true,
  "data": {
    "merchantId": "shp_provisioned_xxx",
    "platformId": "plt_xxx",
    "externalId": "your_internal_merchant_id",
    "businessName": "Coffee Shop Co",
    "email": "owner@coffeeshop.co",
    "country": "US",
    "category": "DIGITAL_PRODUCTS",
    "status": "ACTIVE",
    "onboardingTier": "STANDARD",
    "capabilities": {
      "payments": "ACTIVE",
      "subscriptions": "DISABLED",
      "payouts": "ACTIVE",
      "disputes": "DISABLED"
    },
    "limits": {
      "maxTransactionAmount": 50000,
      "dailyVolumeCap": 500000,
      "monthlyVolumeCap": 5000000
    },
    "volume": {
      "currentMonth": 12500,
      "currentDay": 2500
    },
    "metadata": {
      "planId": "pro",
      "signupSource": "website"
    },
    "createdAt": "2026-03-20T10:00:00.000Z",
    "activatedAt": "2026-03-20T14:00:00.000Z"
  }
}

Listing merchants

GET /v2/platforms/merchants?status=ACTIVE&page=1&limit=25
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

Query parameters

ParameterTypeDefaultDescription
statusstringAllFilter by status: PENDING_REVIEW, ACTIVE, RESTRICTED, SUSPENDED, REJECTED, TERMINATED
searchstringSearch by business name or email
countrystringFilter by ISO 3166-1 alpha-2 country code
categorystringFilter by merchant category
tierstringFilter by onboarding tier
pageinteger1Page number
limitinteger25Items per page (max 100)
Response:
{
  "ok": true,
  "data": {
    "items": [
      {
        "merchantId": "shp_provisioned_xxx",
        "externalId": "your_internal_merchant_id",
        "businessName": "Coffee Shop Co",
        "status": "ACTIVE",
        "onboardingTier": "STANDARD",
        "country": "US",
        "createdAt": "2026-03-20T10:00:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 25,
      "total": 48,
      "totalPages": 2
    }
  }
}

Updating a merchant

PATCH /v2/platforms/merchants/{merchantId}
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

{
  "businessName": "Coffee Shop Co (Updated)",
  "metadata": {
    "planId": "enterprise"
  }
}

Updatable fields

FieldRe-review required
businessNameNo
emailNo
notificationEmailNo
webhookUrlNo
metadataNo
countryYes
categoryYes
Changing a merchant’s country or category triggers a compliance re-review. The merchant’s capabilities may be temporarily restricted until the review completes.

Suspending a merchant

POST /v2/platforms/merchants/{merchantId}/suspend
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

{
  "reason": "Terms of service violation",
  "holdSettlements": true
}
Suspended merchants cannot process new payments. The holdSettlements flag controls whether pending settlements are also frozen during the suspension. To reinstate a suspended merchant:
POST /v2/platforms/merchants/{merchantId}/reinstate
Authorization: Platform plt_xxx
X-Platform-Signature: {signature}

{
  "reason": "Issue resolved after investigation"
}
Reinstatement restores the merchant to ACTIVE status and releases any held settlements. Merchants in TERMINATED status cannot be reinstated.

Merchant webhooks

EventDescription
MERCHANT_CREATEDMerchant sub-account provisioned
MERCHANT_ACTIVATEDCompliance review passed, merchant is live
MERCHANT_REJECTEDCompliance review failed
MERCHANT_RESTRICTEDMerchant capabilities restricted due to risk signals
MERCHANT_SUSPENDEDMerchant suspended by platform or Pandabase
MERCHANT_REINSTATEDMerchant reinstated after suspension
MERCHANT_TERMINATEDMerchant permanently removed
MERCHANT_CAPABILITY_UPDATEDA capability status changed
MERCHANT_TIER_UPDATEDOnboarding tier upgrade approved or rejected

Example webhook payload

{
  "event": "MERCHANT_ACTIVATED",
  "platformId": "plt_xxx",
  "merchantId": "shp_provisioned_xxx",
  "timestamp": "2026-03-20T14:00:00.000Z",
  "data": {
    "externalId": "your_internal_merchant_id",
    "status": "ACTIVE",
    "capabilities": {
      "payments": "ACTIVE",
      "subscriptions": "DISABLED",
      "payouts": "ACTIVE",
      "disputes": "DISABLED"
    },
    "limits": {
      "maxTransactionAmount": 50000,
      "dailyVolumeCap": 500000,
      "monthlyVolumeCap": 5000000
    }
  }
}

Error codes

CodeStatusDescription
MERCHANT_ALREADY_EXISTS409A merchant with this externalId already exists on your platform
INVALID_COUNTRY400The country code is not supported for merchant provisioning
INVALID_CATEGORY400The merchant category is not recognized
TIER_UPGRADE_IN_PROGRESS409A tier upgrade is already pending for this merchant
MERCHANT_NOT_FOUND404No merchant found with the given ID
CAPABILITY_NOT_AVAILABLE400The requested capability is not available for this tier
MERCHANT_TERMINATED403Cannot perform actions on a terminated merchant