A2P SDK
Flows

ISV Standard Flow

ISV Standard Flow

For ISVs (Independent Software Vendors) registering customers who have a business Tax ID.

Overview

Steps: 4
Timeline: Profile (72hrs) → Trust Product (hours) → Brand (days) → Campaign (10-15 days)
Prerequisites: Your ISV Primary Customer Profile must be approved first

Who This Is For

  • Software companies sending messages on behalf of customers
  • Customers have a Tax ID (EIN, CBN, etc.)
  • Need to scale to many customers

ISV Prerequisites

Before using this flow, you must:

  1. Create an ISV Primary Customer Profile via Twilio Console
  2. Set business_identity to isv_reseller_or_partner
  3. Wait for approval (twilio-approved or in-review status)

The SDK automatically checks for an eligible Primary Profile in Step 1 and throws if none exists.

Step-by-Step

Step 1: Create Customer Profile (per customer)

Create a Secondary Customer Profile for each customer:

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

const step1 = await flows.isvStandard.step1_createCustomerProfile(client, {
  email: 'customer@example.com',
  businessName: 'Customer Corp',
  businessAttributes: {
    business_name: 'Customer Corp',
    business_type: 'Corporation',
    business_industry: 'RETAIL',
    business_registration_identifier: 'EIN',
    business_registration_number: '98-7654321',
    website_url: 'https://customer.com',
    business_identity: 'direct_customer',
    business_regions_of_operation: 'USA_AND_CANADA',
  },
  authorizedRep: {
    first_name: 'Alice',
    last_name: 'Smith',
    phone_number: '+15555559999',
    email: 'alice@customer.com',
    job_position: 'CEO',
    business_title: 'Chief Executive Officer',
  },
  address: {
    city: 'Boston',
    customerName: 'Customer Corp',
    isoCountry: 'US',
    postalCode: '02101',
    region: 'MA',
    street: '789 Main St',
  },
});

What happens: Secondary Customer Profile submitted for review. The SDK automatically attaches your ISV Primary Profile.

Step 2: Create Trust Product

const step2 = await flows.isvStandard.step2_createTrustProduct(client, {
  businessName: 'Customer Corp',
  email: 'customer@example.com',
  customerProfileSid: step1.state.customerProfileSid!,
  a2pMessagingProfile: {
    company_type: 'private',
  },
});

What happens: A2P Trust Product created and submitted for evaluation.

Step 3: Register Brand

const step3 = await flows.isvStandard.step3_registerBrand(client, {
  customerProfileSid: step1.state.customerProfileSid!,
  trustProductSid: step2.state.trustProductSid!,
  skipAutomaticSecVet: false, // Optional: skip automatic secondary vetting
});

What happens: Brand registered with The Campaign Registry (minutes to 7+ days).

Step 4: Create Campaign

const step4 = await flows.isvStandard.step4_createCampaign(client, {
  brandRegistrationSid: step3.state.brandSid!,
  messagingServiceName: 'Customer Notifications',
  campaign: {
    description: 'Customer notifications for Customer Corp',
    messageFlow: 'Users receive order and account updates',
    messageSamples: [
      'Your order has shipped!',
      'Your account was updated.',
    ],
    usAppToPersonUsecase: 'ACCOUNT_NOTIFICATION',
    hasEmbeddedLinks: true,
    hasEmbeddedPhone: false,
  },
  phoneNumberSid: '+15555558888', // Optional
});

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

Gotchas

  • Primary Profile prerequisite — SDK checks for an approved ISV Primary Profile and throws if missing
  • 4-step flow — More steps than Direct flows but necessary for ISV architecture
  • Optional second authorized rep — Step 1 accepts authorizedRep2 for additional representative
  • skipAutomaticSecVet — Optional in Step 3 (defaults to false)

Next Steps

On this page