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

# Introduction

> Publish content from Jorge Castro to any website, on any tech stack

**Jorge Castro** publishes blogs, products, categories and SEO metadata straight
to your website. If you run WordPress or Shopify, our plugins handle everything.
If you run **anything else**, Laravel, Django, Rails, Next.js, a home-grown CMS,
the **Custom Integration** is for you.

<Note>
  Throughout these docs we shorten the product name to **Castro** after the first
  mention. The wire protocol keeps that name too: the headers are `X-Castro-*` and
  the conventional base path is `/api/castro`. Those are identifiers: don't
  rename them.
</Note>

## How it works

You implement a small REST contract on your own backend. When a user clicks
**Publish**, **Update** or **Delete** in Castro, our servers push signed HTTPS
requests to your endpoints, and your code stores the content wherever your site
reads it from.

```text theme={null}
Castro "Publish" click
        │
        ▼
   Castro servers ── signed HTTPS ──▶  https://your-site.com/api/castro/posts
                                       (your implementation, your database)
```

<Note>
  **You never poll Castro.** Content is pushed to you the moment it's published,
  exactly like a webhook, but with a documented resource contract, so updates,
  deletes and page sync work too.
</Note>

You give Castro a **base URL**, not a single endpoint. Castro appends the paths
itself: `POST {base}/posts`, `PUT {base}/posts/42`, and so on.

## What you implement

Only **three endpoints are required**. Everything else is optional, and unlocked
per feature via [capabilities](/docs/capabilities): declare what you built, and Castro
adapts its UI to match.

| Endpoint | Required | What it powers |
| - | - | - |
| `POST /handshake` | ✅ | Connection verification |
| `POST /posts` | ✅ | Publishing blog posts |
| `PUT /posts/{id}` | ✅ | Updating blog posts |
| `DELETE /posts/{id}` | Optional | The Delete action on published posts |
| `GET /pages` | Optional | [Page sync](/docs/guides/page-sync): letting Castro recognise which entity each crawled page is |
| `PUT /seo` | Optional | SEO-only ("Update Metadata") pushes |
| `/blog-categories`, `/authors` | Optional | Category & author pickers in the editor |
| `/products`, `/product-categories` | Optional | Product & product-category publishing |

## The two rules that matter most

Everything else is mechanical. These two are where integrations actually break:

<CardGroup cols={2}>
  <Card title="Sign over the raw body" icon="binary" href="/docs/authentication">
    The HMAC covers the **exact bytes** Castro sent. Parse the JSON and
    re-serialize it to verify, and the signature will match for some payloads and
    not others, which looks maddeningly intermittent.
  </Card>

  <Card title="PUT is partial" icon="pen-to-square" href="/docs/errors#the-partial-update-rule">
    Apply **only the fields present in the body**. Castro's *Update Content*
    action sends nothing but the content. Treat that as a full replace and you
    erase the user's title, categories and SEO.
  </Card>
</CardGroup>

## Get started

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/docs/quickstart">
    Key → three endpoints → connected. About 30 minutes.
  </Card>

  <Card title="Test your implementation" icon="flask" href="/docs/testing">
    A zero-dependency script that proves your endpoints are correct, before real
    content depends on them.
  </Card>

  <Card title="Authentication" icon="lock" href="/docs/authentication">
    API key + HMAC signatures, with verification snippets in three languages.
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/docs/troubleshooting">
    Every failure that actually happens, and the fix for each.
  </Card>
</CardGroup>


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