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

# Quickstart: Send Your First Sinjapp Message

> Open a tenant workspace, create a Sinjapp API key, add and verify a sender number, then send your first text message in seven steps.

## 1. Open Your Tenant Workspace

Sign in to your tenant dashboard. Your tenant URL looks like:

```text theme={null}
https://{tenant}.sinjapp.org
```

Use the exact tenant URL shown in the dashboard for all API calls. If the subdomain is mistyped, the API returns `404 Tenant could not be identified for this domain.`

## 2. Manage Subscription And Payment

Choose or review your plan from inside the tenant dashboard. Payment and subscription management happen there.

## 3. Create An API Key

From the tenant dashboard:

```text theme={null}
Access > API Keys > New API key
```

Copy the full key and use it in the `X-Api-Key` header:

```http theme={null}
X-Api-Key: {tenant_api_key}
```

## 4. Download The Postman Collection

Use the collection if you want to test requests directly in Postman.

<Card title="Download Postman Collection" href="/postman/sinjapp-business-api.postman_collection.json">
  Import the collection, then fill `tenant_base_url` and `tenant_api_key`.
</Card>

## 5. Add A Sender Number

From the tenant dashboard:

```text theme={null}
Messaging > Sender Numbers > New sender number
```

The sender number owner receives an OTP inside Sinjapp.

## 6. Verify The Sender Number

After the OTP is accepted, the sender number is confirmed as owned by the tenant. If the Sinjapp account is not verified yet, the sender number may stay in:

```text theme={null}
pending_account_verification
```

The owner must complete Sinjapp account verification before customer messaging can start.

## 7. Send A Message

Use `messages.send` scope for this request.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://{tenant}.sinjapp.org/api/v1/messages" \
    -H "X-Api-Key: {tenant_api_key}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{
      "sender_phone": "{sender_phone}",
      "to_phone": "{recipient_phone}",
      "type": "text",
      "content": "Hello from Sinjapp Business"
    }'
  ```

  ```js JavaScript theme={null}
  const response = await fetch('https://{tenant}.sinjapp.org/api/v1/messages', {
    method: 'POST',
    headers: {
      'X-Api-Key': tenantApiKey,
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      sender_phone: senderPhone,
      to_phone: recipientPhone,
      type: 'text',
      content: 'Hello from Sinjapp Business',
    }),
  })

  const message = await response.json()
  ```

  ```php PHP theme={null}
  <?php

  $response = file_get_contents('https://{tenant}.sinjapp.org/api/v1/messages', false, stream_context_create([
      'http' => [
          'method' => 'POST',
          'header' => [
              'X-Api-Key: ' . $tenantApiKey,
              'Accept: application/json',
              'Content-Type: application/json',
          ],
          'content' => json_encode([
              'sender_phone' => $senderPhone,
              'to_phone' => $recipientPhone,
              'type' => 'text',
              'content' => 'Hello from Sinjapp Business',
          ]),
          'timeout' => 30,
      ],
  ]));

  $message = json_decode($response, true);
  ```

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

  response = requests.post(
      "https://{tenant}.sinjapp.org/api/v1/messages",
      headers={
          "X-Api-Key": tenant_api_key,
          "Accept": "application/json",
          "Content-Type": "application/json",
      },
      json={
          "sender_phone": sender_phone,
          "to_phone": recipient_phone,
          "type": "text",
          "content": "Hello from Sinjapp Business",
      },
      timeout=30,
  )

  message = response.json()
  ```
</CodeGroup>
