Create a new profile
Deprecated. This endpoint is replaced by /v3/sender-profiles and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use /v3/sender-profiles, which models a profile's markets, compliance, brand, campaigns and billing explicitly.
Creates a new sender profile within an organization. Profiles represent different brands, departments, or use cases, each with their own messaging configuration and settings. Requires admin role in the organization.
WhatsApp Business Account
Every profile owns its own WhatsApp Business Account — accounts are never shared between profiles or inherited from the organization. Provide a whatsapp_business_account object with waba_id, phone_number_id, and access_token. Obtain these from Meta Business Manager by creating a System User with whatsapp_business_messaging and whatsapp_business_management permissions.
Omit the field and the profile is created without WhatsApp, staying incomplete until it has an account of its own.
Brand
Include the optional brand field to create the brand for this profile at the same time. Cannot be used when inherit_tcr_brand is true.
Payment Details
When billing_model is "profile" or "profile_and_organization" you may include a payment_details object containing the card number, expiry (MM/YY), CVC, and billing ZIP code. Payment details are never stored on our servers and are forwarded directly to the payment processor. Providing payment_details when billing_model is "organization" is not allowed.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v3/profiles" \ -H "Idempotency-Key: req_abc123_retry1" \ -H "Content-Type: application/json" \ -d '{ "name": "Sales Team", "icon": "https://example.com/sales-icon.png", "description": "Sales department sender profile", "short_name": "SALES", "inherit_tcr_brand": false, "inherit_tcr_campaign": false, "billing_model": "profile", "billing_contact": { "name": "Acme Corp", "email": "billing@acmecorp.com", "phone": "+12025551234", "address": "123 Main Street, New York, NY 10001, US" }, "whatsapp_business_account": { "waba_id": "123456789012345", "phone_number_id": "987654321098765", "access_token": "EAAxxxxxxxxxxxxxxx" }, "brand": { "contact": { "name": "John Smith", "businessName": "Acme Corp", "role": "CEO", "phone": "+12025551234", "email": "john@acmecorp.com", "phoneCountryCode": "1" }, "business": { "legalName": "Acme Corporation LLC", "taxId": "12-3456789", "taxIdType": "us_ein", "entityType": "PRIVATE_PROFIT", "street": "123 Main Street", "city": "New York", "state": "NY", "postalCode": "10001", "country": "US", "url": "https://acmecorp.com", "countryOfRegistration": "US" }, "compliance": { "vertical": "PROFESSIONAL", "brandRelationship": "SMALL_ACCOUNT", "isTcrApplication": true, "phoneNumberPrefix": "+1", "destinationCountries": [ { "id": "US", "isMain": false } ] } }, "payment_details": { "card_number": "4111111111111111", "expiry": "09/27", "cvc": "123", "zip_code": "10001" }, "sandbox": false }'{
"success": true,
"data": {
"id": "770e8400-e29b-41d4-a716-446655440002",
"organization_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Sales Team",
"email": "team@acme.com",
"icon": "https://example.com/sales-icon.png",
"description": "Sales department sender profile",
"short_name": "SALES",
"status": "incomplete",
"created_at": "2026-09-17T16:01:15.0124208+00:00",
"updated_at": "2026-09-17T16:01:15.0124284+00:00",
"allow_contact_sharing": false,
"allow_template_sharing": false,
"inherit_contacts": false,
"inherit_templates": false,
"inherit_tcr_brand": false,
"inherit_tcr_campaign": false,
"billing_model": "profile",
"sending_phone_number_profile_id": null,
"sending_whatsapp_number_profile_id": null,
"sending_phone_number": null,
"whatsapp_phone_number": null,
"allow_number_change_during_onboarding": null,
"waba_id": "123456789012345",
"billing_contact": {
"name": "Acme Corp",
"email": "billing@acmecorp.com",
"phone": "+12025551234",
"address": "123 Main Street, New York, NY 10001, US"
},
"brand": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tcr_brand_id": null,
"status": null,
"identity_status": null,
"universal_ein": null,
"csp_id": null,
"submitted_to_tcr": false,
"submitted_at": null,
"is_inherited": false,
"created_at": "2026-09-17T16:01:15.0125448+00:00",
"updated_at": null,
"contact": {
"name": "John Smith",
"business_name": "Acme Corp",
"role": null,
"phone": null,
"email": "john@acmecorp.com",
"phone_country_code": null
},
"business": {
"legal_name": "Acme Corporation LLC",
"tax_id": null,
"tax_id_type": null,
"entity_type": null,
"street": null,
"city": null,
"state": null,
"postal_code": null,
"country": "US",
"url": null,
"country_of_registration": null
},
"compliance": {
"vertical": "PROFESSIONAL",
"brand_relationship": "SMALL_ACCOUNT",
"is_tcr_application": true,
"phone_number_prefix": null,
"destination_countries": [
{
"id": "US",
"isMain": false
}
],
"notes": null,
"primary_use_case": null
}
}
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-17T16:01:15.0127014+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_001",
"message": "Request validation failed",
"details": {
"name": [
"Profile name is required"
],
"short_name": [
"short_name must be 3–11 characters, contain only letters, numbers, and spaces, and include at least one letter"
],
"payment_details.expiry": [
"payment_details.expiry must be in MM/YY format (e.g. '09/27')"
],
"whatsapp_business_account": [
"Organization does not have a WhatsApp Business Account configured. Complete WhatsApp Embedded Signup for your organization first, or provide direct credentials in the 'whatsapp_business_account' field."
]
},
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-17T16:01:15.0127108+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "RESOURCE_005",
"message": "Organization not found",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-17T16:01:15.0127115+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "Failed to create profile. Please contact support with request ID: req_7X9zKp2jDw",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-09-17T16:01:15.012712+00:00",
"version": "v3"
}
}Get profile by ID GET
**Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use `/v3/sender-profiles`, which models a profile's markets, compliance, brand, campaigns and billing explicitly. Retrieves detailed information about a specific sender profile within an organization, including brand and KYC information if a brand has been configured.
Update profile settings PATCH
**Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be removed in a future release. It still behaves exactly as before, so nothing needs to change today — but new integrations should use `/v3/sender-profiles`, which models a profile's markets, compliance, brand, campaigns and billing explicitly. Updates a profile's configuration and settings. Requires admin role in the organization. Only provided fields will be updated (partial update). ## Brand Management Include the optional `brand` field to create or update the brand associated with this profile. The brand holds KYC and TCR compliance data (legal business info, contact details, messaging vertical). Once a brand has been submitted to TCR it cannot be modified. Setting `inherit_tcr_brand: true` and providing `brand` in the same request is not allowed. ## Payment Details When `billing_model` is `"profile"` or `"profile_and_organization"` you may include a `payment_details` object containing the card number, expiry (MM/YY), CVC, and billing ZIP code. Payment details are **never stored** on our servers and are forwarded directly to the payment processor. Providing `payment_details` when `billing_model` is `"organization"` is not allowed. ## Deprecated fields `sending_phone_number_profile_id` and `sending_whatsapp_number_profile_id` are **accepted and ignored**. Sender borrowing is gone: a profile cannot send from another profile's number, because two profiles behind one sender makes an inbound reply and a delivery receipt ambiguous about whose they are. Sending either **changes nothing and still returns `200`** — they are kept on the contract so an existing integration keeps working. Reads carry both keys too and always answer `null`, which is how you can confirm the value did not take. Give the profile a sender of its own instead — `POST /v3/channels/sms` or `POST /v3/channels/whatsapp`, sent with the `x-profile-id` header naming it.