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

> ## Agent Instructions
> PostQueen's hosted API is https://api.postqueen.ai. The public API base is https://api.postqueen.ai/public/v1 and takes the raw API key in the Authorization header, with no Bearer prefix.
> The MCP server for posting is https://api.postqueen.ai/mcp/YOUR_API_KEY (or /mcp with Authorization: Bearer YOUR_API_KEY). docs.postqueen.ai/mcp only searches these docs and cannot post.
> The API key is under Connections > API Keys in the app, and only workspace admins can see it.

# Farcaster posting settings

> The settings object a cast to Farcaster takes in the public API: the channels field, the channel search tool, what PostQueen checks, and complete examples.

export const ChannelStatus = ({status, children}) => {
  const look = ({
    available: {
      color: 'green',
      label: 'Available'
    },
    'in-review': {
      color: 'yellow',
      label: 'In review'
    },
    soon: {
      color: 'gray',
      label: 'Soon'
    }
  })[status] || ({
    color: 'gray',
    label: status
  });
  return <div className="pq-status not-prose" data-status={status}>
      <Badge color={look.color} shape="pill" size="md">{look.label}</Badge>
      {children ? <span className="pq-status-note">{children}</span> : null}
    </div>;
};

<ChannelStatus status="soon">Cannot be connected on PostQueen yet.</ChannelStatus>

Farcaster cannot be connected on PostQueen yet, so a post to it has no channel to go to. The settings below are the ones a Farcaster channel will take.

Every post to Farcaster carries a `settings` object with `"__type": "wrapcast"`, the API's name for Farcaster. Read the live schema for your channel with [Get a channel's settings](/public-api/integrations/settings).

## Fields

| Field       | Type   | Required | What it does                                                                                                                                                                                                                 |
| ----------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `__type`    | string | No       | Always `"wrapcast"`. PostQueen sets it from the channel you post to, so it can be left out.                                                                                                                                  |
| `subreddit` | array  | No       | The Farcaster channels to cast into, despite the field's name. Each item is `{ "value": { "id": "CHANNEL_ID" } }`, where the id is a Farcaster channel id such as `dev`. Left out or empty, the cast goes to your home feed. |

With channels, PostQueen publishes one cast in each, and the post's id and link come back as comma-separated lists. Each extra entry in `value` is a follow-up, posted after its `delay` in minutes as a reply to the cast before it, in every channel the post went to. Links in the text stay plain text, with no embed or frame.

### Find a channel id

The `subreddits` tool searches Farcaster channels by name and returns up to 10. Call it through [trigger a provider tool](/public-api/integrations/trigger):

```bash theme={"system"}
curl -X POST "https://api.postqueen.ai/public/v1/integration-trigger/YOUR_CHANNEL_ID" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "methodName": "subreddits", "data": { "word": "design" } }'
```

The response is `{ "output": [ { "id", "name", "title" } ] }`. Put the chosen `id` in `settings.subreddit[].value.id`.

## What PostQueen checks

A post that breaks one of these rules is refused with `400` before it is scheduled:

| Rule                                   | Message                                                                                                                |
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Images only, no video                  | “Can only accept images”                                                                                               |
| At most 4 images in each entry         | “Farcaster casts can have up to 4 images”                                                                              |
| Each entry at most 1,024 bytes of text | “Farcaster casts can be at most 1,024 bytes, and accented letters, emoji and non-Latin scripts take 2 to 4 bytes each” |
| Each channel item has a string `id`    | A validation error naming the field, such as “posts.0.settings.subreddit.0.value.id must be a string”                  |

The error body names the channel and the rule:

```json theme={"system"}
{
  "statusCode": 400,
  "provider": "wrapcast",
  "name": "Your channel name",
  "message": "Farcaster casts can have up to 4 images"
}
```

A missing or empty field fails the request validation instead, and the body lists every problem under `message`.

A plain Latin letter is one byte, so English text fits about 1,024 characters, while text in other scripts or with emoji fits fewer.

## Examples

Send each body to [create a post](/public-api/posts/create). Replace `YOUR_CHANNEL_ID` with the channel's id from [list channels](/public-api/integrations/list), each Farcaster channel `id` with one from the `subreddits` tool, and each media `id` and `path` with the values [upload a file](/public-api/uploads/upload-file) returns.

<CodeGroup>
  ```json Cast to your home feed theme={"system"}
  {
    "type": "schedule",
    "date": "2026-10-01T09:00:00.000Z",
    "shortLink": false,
    "tags": [],
    "posts": [
      {
        "integration": { "id": "YOUR_CHANNEL_ID" },
        "value": [
          { "content": "Shipping the new editor this week. Early notes below.", "image": [] },
          { "content": "It keeps drafts offline and syncs when you reconnect.", "image": [], "delay": 2 }
        ],
        "settings": { "__type": "wrapcast" }
      }
    ]
  }
  ```

  ```json Cast into two channels with images theme={"system"}
  {
    "type": "schedule",
    "date": "2026-10-01T09:00:00.000Z",
    "shortLink": false,
    "tags": [],
    "posts": [
      {
        "integration": { "id": "YOUR_CHANNEL_ID" },
        "value": [
          {
            "content": "Two layouts for the new home screen. Which one reads better?",
            "image": [
              { "id": "MEDIA_ID_1", "path": "https://uploads.postqueen.ai/layout-a.png" },
              { "id": "MEDIA_ID_2", "path": "https://uploads.postqueen.ai/layout-b.png" }
            ]
          }
        ],
        "settings": {
          "__type": "wrapcast",
          "subreddit": [
            { "value": { "id": "design" } },
            { "value": { "id": "dev" } }
          ]
        }
      }
    ]
  }
  ```
</CodeGroup>

In the first example, the second entry in `value` is posted 2 minutes after the cast, as a reply to it.

## Related

* [Farcaster in the app](/channels/farcaster)
* [Create a post](/public-api/posts/create)
* [Trigger a provider tool](/public-api/integrations/trigger)
