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

# Quick start

> Send your first message in 5 minutes

You need an Inboxapp team with at least one linked account, and an [API token](/v2/configuration/authentication).

```bash theme={null}
export INBOX_API_TOKEN="your_token_here"
```

<Steps>
  <Step title="Pick the account to send from">
    ```bash theme={null}
    curl "https://inboxapp.com/api/v2/account-links?status=active" \
      -H "Authorization: Bearer $INBOX_API_TOKEN"
    ```

    ```json theme={null}
    {
      "data": [
        {
          "id": "df6jbw4h36qm5d9iu2sgn7kx",
          "platform": "twitter",
          "platformId": "1566123362161725440",
          "username": "acmecorp",
          "displayName": "Acme Corp",
          "avatarUrl": "https://pbs.twimg.com/profile_images/1566123362/acme.jpg",
          "status": "active",
          "pauseReasons": [],
          "capabilities": ["message:send", "message:edit", "message:react"],
          "syncedAt": "2026-09-14T10:30:00.000Z",
          "createdAt": "2026-01-12T09:45:00.000Z"
        }
      ],
      "nextCursor": null
    }
    ```

    Keep the `id` and the `platform`. An account can only send when `capabilities` includes `message:send`.
  </Step>

  <Step title="Send a message">
    Send to a platform user by their ID on that platform. Inboxapp finds the conversation or starts one.

    <CodeGroup>
      ```typescript send.ts theme={null}
      import { randomUUID } from "node:crypto";

      const response = await fetch("https://inboxapp.com/api/v2/messages", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.INBOX_API_TOKEN}`,
          "Content-Type": "application/json",
          "Idempotency-Key": randomUUID(),
        },
        body: JSON.stringify({
          target: {
            type: "profile",
            accountLinkId: "df6jbw4h36qm5d9iu2sgn7kx",
            platform: "twitter",
            platformId: "1876543210987654321",
          },
          content: "Thanks for reaching out! Happy to answer any questions.",
        }),
      });

      if (!response.ok) {
        const error = await response.json();
        throw new Error(`${error.code}: ${error.message} (${error.requestId})`);
      }

      const { message, thread } = await response.json();
      console.log("Sent", message.id, "in thread", thread.id);
      ```

      ```javascript send.js theme={null}
      const { randomUUID } = require("node:crypto");

      async function send() {
        const response = await fetch("https://inboxapp.com/api/v2/messages", {
          method: "POST",
          headers: {
            Authorization: `Bearer ${process.env.INBOX_API_TOKEN}`,
            "Content-Type": "application/json",
            "Idempotency-Key": randomUUID(),
          },
          body: JSON.stringify({
            target: {
              type: "profile",
              accountLinkId: "df6jbw4h36qm5d9iu2sgn7kx",
              platform: "twitter",
              platformId: "1876543210987654321",
            },
            content: "Thanks for reaching out! Happy to answer any questions.",
          }),
        });

        if (!response.ok) {
          const error = await response.json();
          throw new Error(`${error.code}: ${error.message} (${error.requestId})`);
        }

        const { message, thread } = await response.json();
        console.log("Sent", message.id, "in thread", thread.id);
      }

      send();
      ```

      ```bash cURL theme={null}
      curl -X POST "https://inboxapp.com/api/v2/messages" \
        -H "Authorization: Bearer $INBOX_API_TOKEN" \
        -H "Content-Type: application/json" \
        -H "Idempotency-Key: 7f3c1d52-9a41-4a6e-8a55-0c1d2f6b9e10" \
        -d '{
          "target": {
            "type": "profile",
            "accountLinkId": "df6jbw4h36qm5d9iu2sgn7kx",
            "platform": "twitter",
            "platformId": "1876543210987654321"
          },
          "content": "Thanks for reaching out! Happy to answer any questions."
        }'
      ```
    </CodeGroup>

    The response has the `message` and the `thread` it landed in. Store `thread.id` for the next step.

    <Note>
      Messaging someone who isn't one of your contacts yet needs the Advanced API
      add-on. Without it, the request fails with `403 planRequired`.
    </Note>
  </Step>

  <Step title="Read the conversation">
    ```bash theme={null}
    curl "https://inboxapp.com/api/v2/threads/l44e15irdq4db30i77cgphhx/messages?limit=20" \
      -H "Authorization: Bearer $INBOX_API_TOKEN"
    ```

    Messages come newest first. `direction` is `outbound` for messages your account sent and `inbound` for replies.
  </Step>

  <Step title="Reply in the same thread">
    ```bash theme={null}
    curl -X POST "https://inboxapp.com/api/v2/messages" \
      -H "Authorization: Bearer $INBOX_API_TOKEN" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: 2b9e6a10-4c1f-4f0e-9d7a-5a3c8e1f7b42" \
      -d '{
        "target": { "type": "thread", "threadId": "l44e15irdq4db30i77cgphhx" },
        "content": "Following up on my last message."
      }'
    ```
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="Core concepts" icon="book" href="/v2/concepts">
    Profiles, contacts, threads and capabilities
  </Card>

  <Card title="Working with messages" icon="message-circle" href="/v2/guides/messages">
    Targets, retries, edits and reactions
  </Card>

  <Card title="Webhooks" icon="webhook" href="/v2/webhooks/overview">
    Get replies as they arrive
  </Card>

  <Card title="Error codes" icon="triangle-alert" href="/v2/reference/errors">
    What each failure means
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.