Commet
  • Pricing
Log InTry out
Introduction

Quickstart

Learn

Finance OverviewAccount VerificationSupported CountriesMerchant of RecordAcceptable Use Policy

Resources

SDK ReferenceAPI VersioningError HandlingTestingCLI

Plugins

Better Auth
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

Account Verification

How to get verified for payouts — KYC process with Stripe.

You can start accepting payments immediately, but you need to verify your account before you can withdraw money.

How it works

Click Verify Account in the finance section to start the one-time KYC process through Stripe. Provide your business information and bank account details, then wait for approval — usually a few days.

What you'll need

  • Business information: Company name, address, registration number
  • Personal information: For business owners and directors
  • Bank account details: Where you want payouts sent

Security

All verification happens through Stripe's secure environment. Stripe is SOC 2 certified, ISO 27001 certified, and PCI DSS compliant.

Approval can take several days. You'll be notified when your account is ready.

Manage payouts with the SDK

Verify your account, add destination bank accounts, and withdraw your balance programmatically.

Verify your account

Provision your payout account in a single call with the full KYC and bank payload. The account starts pending_verification and flips to verified once the provider's webhook arrives. This call is idempotent — it returns the existing account if your organization already has one.

const verification = await commet.payouts.completeVerification({
  email: 'founder@acme.com',
  businessType: 'individual',
  businessUrl: 'https://acme.com',
  documentUrl: 'https://files.acme.com/id.pdf',
  bank: {
    accountNumber: '000123456789',
    accountHolderName: 'Jane Doe',
    routingNumber: '110000000',
    accountType: 'checking',
  },
  individual: {
    firstName: 'Jane',
    lastName: 'Doe',
    phone: '+15555550100',
    dateOfBirth: '1990-01-15',
    address: {
      line1: '123 Market St',
      city: 'San Francisco',
      state: 'CA',
      postalCode: '94103',
      country: 'US',
    },
  },
})
from commet.types import (
    CompletePayoutVerificationParamsBank,
    CompletePayoutVerificationParamsIndividual,
    CompletePayoutVerificationParamsIndividualAddress,
)

verification = commet.payouts.complete_verification(
    email="founder@acme.com",
    business_type="individual",
    business_url="https://acme.com",
    document_url="https://files.acme.com/id.pdf",
    bank=CompletePayoutVerificationParamsBank(
        account_number="000123456789",
        account_holder_name="Jane Doe",
        routing_number="110000000",
        account_type="checking",
    ),
    individual=CompletePayoutVerificationParamsIndividual(
        first_name="Jane",
        last_name="Doe",
        phone="+15555550100",
        date_of_birth="1990-01-15",
        address=CompletePayoutVerificationParamsIndividualAddress(
            line1="123 Market St",
            city="San Francisco",
            state="CA",
            postal_code="94103",
            country="US",
        ),
    ),
)
verification, err := client.Payouts.CompleteVerification(ctx, &commet.CompletePayoutVerificationParams{
    Email:        "founder@acme.com",
    BusinessType: "individual",
    BusinessURL:  "https://acme.com",
    DocumentURL:  "https://files.acme.com/id.pdf",
    Bank: commet.CompletePayoutVerificationParamsBank{
        AccountNumber:     "000123456789",
        AccountHolderName: "Jane Doe",
    },
    Individual: &commet.CompletePayoutVerificationParamsIndividual{
        FirstName:   "Jane",
        LastName:    "Doe",
        Phone:       "+15555550100",
        DateOfBirth: "1990-01-15",
        Address: commet.CompletePayoutVerificationParamsIndividualAddress{
            Line1:      "123 Market St",
            City:       "San Francisco",
            PostalCode: "94103",
            Country:    "US",
        },
    },
})
var verification = commet.payouts().completeVerification(
    CompletePayoutVerificationParams.builder(
        "founder@acme.com",
        "individual",
        "https://acme.com",
        "https://files.acme.com/id.pdf",
        new CompletePayoutVerificationParamsBank(
            "000123456789", "Jane Doe", "110000000", "checking"
        )
    )
    .individual(new CompletePayoutVerificationParamsIndividual(
        "Jane", "Doe", "+15555550100", "1990-01-15", null, null,
        new CompletePayoutVerificationParamsIndividualAddress(
            "123 Market St", null, "San Francisco", "CA", "94103", "US"
        )
    ))
    .build()
);
$verification = $commet->payouts->completeVerification(
    email: 'founder@acme.com',
    businessType: 'individual',
    businessUrl: 'https://acme.com',
    documentUrl: 'https://files.acme.com/id.pdf',
    bank: [
        'accountNumber' => '000123456789',
        'accountHolderName' => 'Jane Doe',
        'routingNumber' => '110000000',
        'accountType' => 'checking',
    ],
    individual: [
        'firstName' => 'Jane',
        'lastName' => 'Doe',
        'phone' => '+15555550100',
        'dateOfBirth' => '1990-01-15',
        'address' => [
            'line1' => '123 Market St',
            'city' => 'San Francisco',
            'state' => 'CA',
            'postalCode' => '94103',
            'country' => 'US',
        ],
    ],
);
curl -X POST https://commet.co/api/payouts/verification \
  -H "x-api-key: $COMMET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "founder@acme.com",
    "businessType": "individual",
    "businessUrl": "https://acme.com",
    "documentUrl": "https://files.acme.com/id.pdf",
    "bank": {
      "accountNumber": "000123456789",
      "accountHolderName": "Jane Doe",
      "routingNumber": "110000000",
      "accountType": "checking"
    },
    "individual": {
      "firstName": "Jane",
      "lastName": "Doe",
      "phone": "+15555550100",
      "dateOfBirth": "1990-01-15",
      "address": {
        "line1": "123 Market St",
        "city": "San Francisco",
        "state": "CA",
        "postalCode": "94103",
        "country": "US"
      }
    }
  }'

Pass company instead of individual when businessType is company.

Add a bank account

Add an additional destination bank account to an existing payout account. Country and currency are resolved from your organization. The full account number is never returned — only last4.

const account = await commet.payouts.addBankAccount({
  accountNumber: '000123456789',
  accountHolderName: 'Jane Doe',
  routingNumber: '110000000',
  accountType: 'checking',
  setDefault: true,
})
account = commet.payouts.add_bank_account(
    account_number="000123456789",
    account_holder_name="Jane Doe",
    routing_number="110000000",
    account_type="checking",
    set_default=True,
)
account, err := client.Payouts.AddBankAccount(ctx, &commet.AddPayoutBankAccountParams{
    AccountNumber:     "000123456789",
    AccountHolderName: "Jane Doe",
})
var account = commet.payouts().addBankAccount(
    AddPayoutBankAccountParams.builder("000123456789", "Jane Doe")
        .routingNumber("110000000")
        .accountType("checking")
        .setDefault(true)
        .build()
);
$account = $commet->payouts->addBankAccount(
    accountNumber: '000123456789',
    accountHolderName: 'Jane Doe',
    routingNumber: '110000000',
    accountType: 'checking',
    setDefault: true,
);
curl -X POST https://commet.co/api/payouts/bank-accounts \
  -H "x-api-key: $COMMET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "accountNumber": "000123456789",
    "accountHolderName": "Jane Doe",
    "routingNumber": "110000000",
    "accountType": "checking",
    "setDefault": true
  }'

Request a payout

Withdraw available balance to your verified payout account. amount is in cents (USD, minimum 1000 = $10). The payout is created in pending and settles to paid asynchronously as provider webhooks arrive.

const payout = await commet.payouts.request({
  amount: 50000,
  description: 'March payout',
})
payout = commet.payouts.request(amount=50000, description="March payout")
description := "March payout"
payout, err := client.Payouts.Request(ctx, &commet.RequestPayoutParams{
    Amount:      50000,
    Description: &description,
})
var payout = commet.payouts().request(
    RequestPayoutParams.builder(50000).description("March payout").build()
);
$payout = $commet->payouts->request(amount: 50000, description: 'March payout');
curl -X POST https://commet.co/api/payouts \
  -H "x-api-key: $COMMET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 50000, "description": "March payout"}'

Related

  • Finance Overview — Balances, payouts, and transaction history
  • Merchant of Record — How Commet handles taxes and compliance

How is this guide?

Finance Overview

How money flows through Commet — balances, payouts, and transaction history.

Supported Countries

Countries where Commet supports payouts and business operations.

On this page

How it works
What you'll need
Security
Manage payouts with the SDK
Verify your account
Add a bank account
Request a payout
Related