# Connect your blog (https://www.getfounderhq.com/docs/publish/connect-your-blog)

Connect the blog you already run. Publish then sends finished articles
there, as live posts or as drafts. About 5 minutes.

<Callout title="Before you start">
You need admin access to your blog, to create a key or a token for
FounderHQ.
</Callout>

## 1. Start the connection

Open [Publish → Settings](https://app.getfounderhq.com/publish/settings). Under **Blog Connections**, press
**Connect blog** and choose your CMS type.

## 2. Enter the details for your CMS

Give the connection a **Connection name** in every case.

### Ghost

| Field | What to enter |
| --- | --- |
| **Ghost Admin URL** | The address of your Ghost admin |
| **Ghost Admin API key** | In Ghost Admin, open Integrations and add a custom integration. Copy its Admin API key. It has the form `id:secret`. |

### WordPress

| Field | What to enter |
| --- | --- |
| **WordPress URL** | The address of your site |
| **Username + application password** | Your username, a colon, and an application password from your WordPress profile: `username:xxxx xxxx xxxx xxxx` |

### Payload

| Field | What to enter |
| --- | --- |
| **Payload API URL** | The address of your Payload API |
| **Payload API token** | An API key for a Payload user |

Publish then reads your collections and asks you to match them under
**Payload content mapping**: the posts collection, the author collection,
and the fields for title, slug, content, excerpt, status, and featured
image.

Built your blog with FounderHQ's Next.js package? Use the endpoint
`https://your-domain.com/payload-api`, with `cms-users` as the auth
collection and `blog-posts` as the posts collection.

### GitHub

Publish commits each article to your repository as a Markdown or MDX file.

1. Under **Authentication**, choose **GitHub App** and press
   **Connect GitHub**, then pick the **Repository**. Or choose
   **Manual token** and paste a fine-grained token with **Contents: Read
   and write**.
2. Set the **Branch**.
3. Choose the **Output format**: Markdown (`.md`) or MDX (`.mdx`).
4. Set the **File path template**. It starts as
   `content/blog/{{ slug }}.md`.

The path template accepts `{{ slug }}`, `{{ yyyy }}`, `{{ mm }}`,
`{{ dd }}`, and `{{ article.title }}`.

### Custom API

Publish calls an endpoint you own. You build the request in the wizard.

It starts as a `POST` with a bearer token and this body:

```json
{
  "title": "{{ article.title }}",
  "slug": "{{ article.slug }}",
  "html": "{{ article.html }}",
  "markdown": "{{ article.markdown }}",
  "excerpt": "{{ article.excerpt }}"
}
```

The request must use `article.title` and one of `article.html` or
`article.markdown`. You can also use `article.slug`, `article.excerpt`,
`article.tldr`, `article.faq`, `article.keyTakeaways`,
`article.schemaOrg`, and `article.dateModified`.

Then tell Publish where to read your reply: the post's ID, its address,
its status, and an error message. They start as `id`, `url`, `status`, and
`error.message`.

## 3. Test the connection

Press the test button on the step. Publish checks that it can reach your
blog with what you entered.

## 4. Match your authors

For Ghost, WordPress, and Payload, Publish lists the authors in your CMS.
Match each one to a FounderHQ author, so a post goes out under the right
name.

## 5. Add the blog address and save

Enter the **Blog address**: where readers find your blog, such as
`www.example.com/blog`. Leave **Make this the primary publishing target**
on for your main blog, then press **Save target**.

Auto-publish sends to the primary target.

## Verify


The connection appears under **Blog Connections** with the status
**Active** and the badge **Primary**. Press **Validate** on it at any time
to check it again.

## Manage a connection

| On the connection | What it does |
| --- | --- |
| **Map authors** | Change which CMS author each FounderHQ author publishes as |
| **IndexNow** | Tell search engines about new posts. See [Get indexed](/publish/get-indexed). |
| **Validate** | Check the connection now |
| **Edit details** | Change the address or the credentials |
| **Make primary** | Send auto-published posts here |
| **Archive** | Stop using it. Published posts stay on your blog. |

**Needs attention** means the last check failed. Open **Edit details**,
correct the credentials, and validate again.
