> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tracklysms.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Business Profiles

> Retrieve your account's business/brand profiles and their verification status.

Returns all non-archived business profiles on your account, newest first. A Business Profile owns business-verification identity and status. Any active verified-equivalent profile satisfies the account eligibility gate for [Create Number Request](/api-reference/v2/number-requests/create-request); the Number Request separately accepts request-owned identity inline and rejects `businessProfileId`.

<Note>
  This endpoint is read-only. Create and verify Business Profiles through the Business Profile flow before submitting a number request. Number Request submission does not auto-create a profile.
</Note>

## Query Parameters

<ParamField query="page" type="integer" optional default="1">
  Page number.
</ParamField>

<ParamField query="per_page" type="integer" optional default="50">
  Items per page (max 100).
</ParamField>

## Response Fields

<ResponseField name="pagination" type="object">
  `page`, `per_page`, `total`, and `total_pages`.
</ResponseField>

<ResponseField name="businessProfiles" type="array">
  Array of business profile objects.

  <Expandable title="Business profile object properties">
    <ResponseField name="id" type="string">
      Unique identifier for Business Profile operations. It is not accepted by Number Request endpoints.
    </ResponseField>

    <ResponseField name="name" type="string">
      User-assigned profile label.
    </ResponseField>

    <ResponseField name="brandName" type="string">
      Brand name.
    </ResponseField>

    <ResponseField name="companyLegalName" type="string">
      Registered legal entity name.
    </ResponseField>

    <ResponseField name="verificationStatus" type="string">
      KYB verification state. Common values: `unverified`, `pending`, `verified`, `admin_review`, `rejected`, `locked`, `admin_override`, `legacy_grandfathered`. The account needs an active verified-equivalent profile before it can submit or provision a Number Request.
    </ResponseField>

    <ResponseField name="taxIdLast4" type="string">
      Last 4 digits of the EIN/TIN, to disambiguate profiles. The full tax id is never returned by the API.
    </ResponseField>

    <ResponseField name="websiteUrl" type="string">
      Business website.
    </ResponseField>

    <ResponseField name="contactEmail" type="string">
      Brand contact email.
    </ResponseField>

    <ResponseField name="businessContactFirstName" type="string">
      Authorized brand contact first name.
    </ResponseField>

    <ResponseField name="businessContactLastName" type="string">
      Authorized brand contact last name.
    </ResponseField>

    <ResponseField name="addressStreet" type="string">
      Street address. (Also `addressCity`, `addressState`, `addressPostalCode`, `addressCountry`.)
    </ResponseField>

    <ResponseField name="createdAt" type="datetime">
      ISO 8601 timestamp of creation.
    </ResponseField>
  </Expandable>
</ResponseField>

## Examples

<RequestExample>
  <CodeGroup>
    ```bash cURL theme={null}
    curl -X GET "https://api.tracklysms.com/api/v2/business-profiles" \
      -H "X-Api-Key: trk_your_api_key_here"
    ```

    ```python Python theme={null}
    import requests

    resp = requests.get(
        "https://api.tracklysms.com/api/v2/business-profiles",
        headers={"X-Api-Key": "trk_your_api_key_here"},
    )
    for bp in resp.json()["businessProfiles"]:
        print(bp["id"], bp["brandName"], bp["verificationStatus"])
    ```
  </CodeGroup>
</RequestExample>

<ResponseExample>
  ```json 200 — Success theme={null}
  {
    "businessProfiles": [
      {
        "id": "664a1b2c3d4e5f6071829300",
        "name": "Acme Retail Profile",
        "brandName": "Acme Co",
        "companyLegalName": "Acme Incorporated",
        "verificationStatus": "verified",
        "taxIdLast4": "6789",
        "websiteUrl": "https://acme.com",
        "contactEmail": "support@acme.com",
        "addressCountry": "US",
        "createdAt": "2026-05-01T12:00:00Z"
      }
    ],
    "pagination": { "page": 1, "per_page": 50, "total": 1, "total_pages": 1 }
  }
  ```

  ```json 401 — Unauthorized theme={null}
  {
    "error": "Invalid credentials",
    "code": "invalid_credentials"
  }
  ```
</ResponseExample>

## Error Codes

| HTTP Status | Error Code            | Description                                                                |
| ----------- | --------------------- | -------------------------------------------------------------------------- |
| 401         | `invalid_credentials` | API key is missing or invalid.                                             |
| 403         | `account_suspended`   | Your account is suspended. Resolve outstanding billing or contact support. |
| 429         | `rate_limited`        | Request throttled; retry with exponential backoff after the window resets. |

## Next Steps

<CardGroup cols={2}>
  <Card title="Get Business Profile" icon="magnifying-glass" href="/api-reference/v2/business-profiles/get-profile">
    Fetch a single profile by id
  </Card>

  <Card title="Create Number Request" icon="plus" href="/api-reference/v2/number-requests/create-request">
    Submit request-owned identity inline after the account gate passes
  </Card>
</CardGroup>
