A2P SDK
Flows

Direct Sole Prop Flow

Direct Sole Proprietor Flow

For individuals/hobbyists in US/Canada without a business Tax ID.

Overview

Steps: 3
Timeline: Profile review (up to 72hrs) → OTP verification (24hrs) → Campaign vetting (10-15 days)
Limits: 1 campaign per brand, 1 phone per campaign, ~3,000 messages/day

Who This Is For

  • Individuals or hobbyists in the US or Canada
  • No business Tax ID (EIN/CBN)
  • Low-volume messaging needs (~3,000 msgs/day)

Strict Limits

  • 1 campaign per brand (cannot create more)
  • 1 phone number per campaign
  • ~3,000 messages/day throughput cap
  • Mobile number 3-use limit — can only be used 3 times total for Sole Prop registrations across ALL vendors

Step-by-Step

Step 1: Create Starter Profile

import { flows } from '@warp-message/a2p-sdk';

const step1 = await flows.directSoleProp.step1_createStarterProfile(client, {
  email: 'john@example.com',
  profileName: 'John Doe Sole Prop',
  starterProfile: {
    first_name: 'John',
    last_name: 'Doe',
    email: 'john@example.com',
    phone_number: '+15555551234',
  },
  address: {
    city: 'Austin',
    customerName: 'John Doe',
    isoCountry: 'US', // Must be US or CA
    postalCode: '78701',
    region: 'TX',
    street: '456 Oak St',
  },
});

What happens: Starter Profile submitted for review (up to 72 hours).

Step 2: Register Brand (Triggers OTP)

const step2 = await flows.directSoleProp.step2_registerBrand(client, {
  email: 'john@example.com',
  customerProfileSid: step1.state.customerProfileSid!,
  solePropInfo: {
    first_name: 'John',
    last_name: 'Doe',
    email: 'john@example.com',
    phone_number: '+15555551234',
    mobile_phone_number: '+15555551234', // OTP sent here
    brand_name: 'John Doe Messaging',
    vertical: 'RETAIL', // Optional
  },
});

What happens:

  1. Trust Product and Brand Registration created
  2. OTP SMS sent to mobile_phone_number
  3. Customer must verify OTP within 24 hours
  4. Brand status becomes APPROVED after OTP verification

Critical: The mobile number can only be used 3 times total across ALL vendors.

Step 3: Create Campaign

const step3 = await flows.directSoleProp.step3_createCampaign(client, {
  brandRegistrationSid: step2.state.brandSid!,
  messagingServiceName: 'John Notifications',
  campaign: {
    description: 'Order confirmations and customer updates for my small business',
    messageFlow: 'Customers receive messages after placing orders',
    messageSamples: [
      'Your order is ready for pickup!',
      'Thanks for your purchase!',
    ],
    usAppToPersonUsecase: 'SOLE_PROPRIETOR', // Required
    hasEmbeddedLinks: false,
    hasEmbeddedPhone: false,
  },
  phoneNumberSid: '+15555556789', // Required (exactly 1)
});

What happens: Campaign submitted for manual vetting (10-15 business days).

Gotchas

  • OTP 24-hour window — Customer must verify OTP within 24 hours or re-trigger from Console
  • 3-use mobile number limit — Mobile number can only be used 3 times total across ALL vendors
  • 1 campaign limit — Cannot create a second campaign for the same brand
  • 1 phone limit — Cannot add a second phone number to the campaign
  • ~3,000 msg/day cap — Hard throughput limit
  • skipAutomaticSecVet always true — Sole Prop brands skip secondary vetting

Next Steps

On this page