Profiles

Create a new profile

Changed on

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.

post/v3/profiles

Request

  • Base URL
    https://api.sent.dm
  • URL
    https://api.sent.dm/v3/profiles
  • Auth
    • API key in header x-api-key
    • or HTTP bearer

Headers

Idempotency-Keystring

Unique key to ensure idempotent request processing. Must be 1-255 alphanumeric characters, hyphens, or underscores. Responses are cached for 24 hours per key per customer.

x-profile-idstring uuid

Profile UUID to scope the request to a child profile. Only organization API keys can use this header. The profile must belong to the calling organization.

Request body

sandboxboolean

Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution

namestring required

Profile name (required)

iconstring nullable

Profile icon URL (optional)

descriptionstring nullable

Profile description (optional)

short_namestring nullable

Profile short name/abbreviation (optional). Must be 3–11 characters, contain only letters, numbers, and spaces, and include at least one letter. Example: "SALES", "Mkt 2", "Support1".

inherit_tcr_brandboolean nullable

Whether this profile inherits TCR brand from organization (default: false)

inherit_tcr_campaignboolean nullable

Whether this profile inherits TCR campaign from organization (default: false)

billing_modelstring nullable

Billing model: profile, organization, or profile_and_organization (default: profile).

  • "organization": the organization's billing details are used; no profile-level billing info needed.
  • "profile": the profile is billed independently; billing_contact is required.
  • "profile_and_organization": the profile is billed first with the organization as fallback; billing_contact is required.
allow_contact_sharingboolean nullable

Deprecated. Accepted and ignored. Contact and template sharing between sender profiles is gone — a profile sees only what it owns, and the organization still sees all of its profiles' contacts and templates through read-time widening. The four columns behind these flags were dropped by M260720120000.

Bound rather than dropped so the properties survive on the wire and in a generated client: an SDK that assigns them keeps compiling, which is the compatibility this exists for. Deliberately not refused either — a 400 would break an integration that is otherwise working, and the capability they ask for is gone either way. Same rule as SendingPhoneNumberProfileId.

The read is what makes this survivable: every profile reports all four as false, so a caller that checks its own write can see it did not take. Requests carrying one are logged, so we can tell when nobody sends them any more and the fields can go for real.

allow_template_sharingboolean nullable
inherit_contactsboolean nullable
inherit_templatesboolean nullable

Example request

{
  "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
}

Response

Profile created successfully

successboolean

Indicates whether the request was successful

Changes

    • breaking

      added subschema #2: SentDmServicesEndpointsCustomerAPIv3ProfilesRequestsCreateProfileRequest_Properties to the request body allOf list

    • breaking

      added to the response property oneOf list for the response status

    • breaking

      added to the response property oneOf list for the response status

    • breaking

      added to the response property oneOf list for the response status

    • breaking

      added to the response property oneOf list for the response status

    • warning

      removed subschema #2: SentDmServicesEndpointsCustomerAPIv3RequestsCreateProfileRequest_Properties from the request body allOf list

    • info

      the endpoint scheme security BearerAuth was added to the API

    • info

      endpoint deprecated

    • info

      removed the non-success response with the status

    • info

      added to the response property allOf list for the response status

    • info

      added to the response property allOf list for the response status

    • info

      added to the response property allOf list for the response status

    • info

      added to the response property allOf list for the response status

    • info

      added to the response property allOf list for the response status

    • info

      removed from the response property allOf list for the response status

    • info

      removed from the response property allOf list for the response status

    • info

      removed from the response property allOf list for the response status

    • info

      removed from the response property allOf list for the response status

    • info

      removed from the response property allOf list for the response status

    • info

      removed from the response property oneOf list for the response status

    • info

      removed from the response property oneOf list for the response status

    • info

      removed from the response property oneOf list for the response status

    • info

      removed from the response property oneOf list for the response status