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

# Brands

> Organize social media presence with brands — each with isolated accounts, scheduling defaults, and team permissions.

Brands are the top-level container for everything in Autoposting. Every post, clip, carousel, and AI agent belongs to a brand — isolating connected accounts, timezone defaults, and team access per client, product, or persona.

<Note>
  Choose your brand `slug` carefully — slugs are unique per organization and cannot be changed after creation.
</Note>

## Properties

| Field                  | Type      | Description                                                                  |
| ---------------------- | --------- | ---------------------------------------------------------------------------- |
| `name`                 | string    | Display name shown across the dashboard                                      |
| `slug`                 | string    | URL-safe identifier, unique per org (e.g. `acme-corp`)                       |
| `platforms`            | string\[] | Enabled platforms: `x`, `linkedin`, `youtube`, `instagram`, `threads`        |
| `timezone`             | string    | IANA timezone for scheduling defaults (e.g. `America/New_York`)              |
| `position`             | number    | Sort order in the brand list                                                 |
| `clipTemplateDefaults` | object    | Default caption preset, platform presets, and aspect ratios for clip renders |

## Create a Brand

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://app.autoposting.ai/api-proxy/brands \
    -H "Authorization: Bearer sk_your_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Acme Corp",
      "slug": "acme-corp",
      "timezone": "America/New_York",
      "platforms": ["x", "linkedin"]
    }'
  ```

  ```typescript TypeScript theme={null}
  const res = await fetch("https://app.autoposting.ai/api-proxy/brands", {
    method: "POST",
    headers: {
      Authorization: "Bearer sk_your_api_key",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      name: "Acme Corp",
      slug: "acme-corp",
      timezone: "America/New_York",
      platforms: ["x", "linkedin"],
    }),
  });
  const { data } = await res.json();
  ```
</CodeGroup>

## Connect Platforms

Each brand connects to one or more social accounts via OAuth. A single brand can hold multiple accounts on the same platform.

<Steps>
  <Step title="Open Connected Accounts">
    Navigate to the brand from the sidebar, then click **Connected Accounts**.
  </Step>

  <Step title="Select a platform">
    Click the platform tile — X, LinkedIn, Instagram, Threads, or YouTube.
  </Step>

  <Step title="Complete OAuth">
    Grant the requested scopes on the platform's authorization page. Tokens are encrypted at rest and refreshed automatically before expiry.
  </Step>
</Steps>

<Warning>
  Instagram requires a **Business or Creator account** linked to a Facebook Page. Personal Instagram accounts cannot be connected.
</Warning>

| Platform    | Auth Protocol               | Notes                                           |
| ----------- | --------------------------- | ----------------------------------------------- |
| X (Twitter) | OAuth 2.0 PKCE + OAuth 1.0a | Dual-flow for media uploads                     |
| LinkedIn    | OAuth 2.0                   | Separate credentials for personal vs. org pages |
| Instagram   | Business Login              | Requires Facebook Page link                     |
| Threads     | Graph API                   | Separate from Instagram auth                    |
| YouTube     | Google OAuth 2.0            | Requires channel with upload permissions        |

## Team Permissions

Members can hold different roles per brand — Editor on Brand A, Viewer on Brand B.

| Role        | Create Posts | Schedule | Publish | Connect Accounts | Brand Settings |
| ----------- | ------------ | -------- | ------- | ---------------- | -------------- |
| Owner       | Yes          | Yes      | Yes     | Yes              | Yes            |
| Admin       | Yes          | Yes      | Yes     | Yes              | Yes            |
| Editor      | Yes          | Yes      | Yes     | No               | No             |
| Contributor | Yes          | No       | No      | No               | No             |
| Viewer      | No           | No       | No      | No               | No             |

<Tip>
  Use **permission groups** to define reusable access sets and assign members to a group instead of configuring per-brand access manually.
</Tip>

<CardGroup cols={2}>
  <Card title="Posts" icon="paper-plane" href="/concepts/posts">
    Publish to every connected platform on a schedule.
  </Card>

  <Card title="Platforms" icon="link" href="/concepts/platforms">
    OAuth flows, token lifecycle, and platform capabilities.
  </Card>

  <Card title="AI Agents" icon="robot" href="/concepts/agents">
    Agents inherit brand timezone and connected accounts.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/overview">
    Full endpoint reference for brand management.
  </Card>
</CardGroup>
