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

# Custom Integrations (Invite Only)

> Build your own integration with Outpost using the Integration API. Available by invitation only.

export const PlanStatus = ({tier, status, beta, deprecated}) => {
  const variants = {
    luna: {
      bg: "#8340B9",
      color: "#ffffff",
      border: "1px solid #8340B9"
    },
    voyager: {
      bg: "#6B2FA0",
      color: "#ffffff",
      border: "1px solid #6B2FA0"
    },
    "space-station": {
      bg: "transparent",
      color: "#8340B9",
      border: "1px solid #8340B9"
    },
    "all-plans": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    labs: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    beta: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    "invite-only": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    bespoke: {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    "outpost-hosted": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    deprecated: {
      bg: "transparent",
      color: "#b91c1c",
      border: "1px solid #b91c1c"
    }
  };
  const chip = (variant, label) => {
    const s = variants[variant] || variants["all-plans"];
    return <span key={variant + ":" + label} style={{
      display: "inline-flex",
      alignItems: "center",
      padding: "0.15rem 0.55rem",
      fontSize: "0.7rem",
      fontWeight: 700,
      letterSpacing: "0.05em",
      textTransform: "uppercase",
      borderRadius: "3px",
      lineHeight: 1.4,
      whiteSpace: "nowrap",
      backgroundColor: s.bg,
      color: s.color,
      border: s.border
    }}>
        {label}
      </span>;
  };
  const tierLabel = {
    "luna": "Luna",
    "voyager+": "Voyager+",
    "voyager-luna": "Voyager + Luna",
    "space-station+": "Space Station+",
    "all-plans": "All plans"
  };
  const tierVariant = {
    "luna": "luna",
    "voyager+": "voyager",
    "voyager-luna": "voyager",
    "space-station+": "space-station",
    "all-plans": "all-plans"
  };
  const statusLabel = {
    "labs": "Labs",
    "invite-only": "Invite-only",
    "bespoke": "Bespoke",
    "deprecated": "Deprecated",
    "outpost-hosted": "Outpost Hosted"
  };
  return <span style={{
    display: "inline-flex",
    gap: "0.4rem",
    flexWrap: "wrap",
    alignItems: "center",
    margin: "0 0 1.25rem 0"
  }}>
      {tier && chip(tierVariant[tier], tierLabel[tier])}
      {status && chip(status, statusLabel[status])}
      {beta && chip("beta", "Beta")}
      {deprecated && chip("deprecated", "Deprecated")}
    </span>;
};

<PlanStatus status="invite-only" />

<Info>
  The Integration API is available by invitation. Contact [support@outpost.pub](mailto:support@outpost.pub) to request access for your publication.
</Info>

If your tooling isn't covered by Outpost's built-in integrations, you can build your own integration against the **Integration API**. The API lets external tools and scripts read member data and (in approved cases) update it.

## What's available today

Outpost's custom-integration story is **API-based, not webhook-based**. There is no outgoing-webhook product: Outpost does not POST to publisher-configured URLs when events happen. Instead, your integration **polls the Integration API** at the cadence that fits your workflow.

If you need event-driven workflows for your own tools, run a regular polling job (every minute or every hour, depending on how fresh you need the data) and call the Integration API to get the latest member state.

## Authentication

The Integration API authenticates with an **API key** scoped to your publication. Pass it on every request as either:

* A query parameter: `?api_key=YOUR_KEY`
* A request header: `Authorization: Bearer YOUR_KEY`

Both are supported. Treat the key like a password — anyone with the key can read your member data.

## Endpoints and full reference

See the [Integration API Reference](/api-reference/introduction) for the full list of endpoints, request and response shapes, error codes, and example requests.

## Request your API key

Email **[support@outpost.pub](mailto:support@outpost.pub)** with:

* The publication name your key should be scoped to.
* A short description of what you plan to build (helps us understand whether the Integration API covers your use case).

We provision API keys manually after a quick sanity check. Lead time is usually one business day.

## Rate limits

The Integration API has usage limits per API key. If you're running migrations or bulk operations and bump into them, contact [support@outpost.pub](mailto:support@outpost.pub) — we can raise the limit for time-bound projects.

## Related features

<CardGroup cols={2}>
  <Card title="Integration API Reference" icon="code" href="/api-reference/introduction">
    Full endpoint documentation and request/response examples.
  </Card>

  <Card title="Integrations Overview" icon="plug" href="/integrations/overview">
    Built-in integrations that may already cover your use case.
  </Card>
</CardGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Are there outgoing webhooks?">
    Not today. Outpost does not POST events to publisher-configured URLs. Custom integrations poll the Integration API instead.
  </Accordion>

  <Accordion title="Can I use Zapier or Make?">
    Indirectly. Both can call the Outpost Integration API on a schedule using their HTTP modules and the API key, which gets you Zapier/Make automation against polled data. There is no native Zapier or Make Outpost connector today.
  </Accordion>

  <Accordion title="Can I write data with the Integration API?">
    Some endpoints accept writes (e.g. updating member labels or notes). Read the [Integration API Reference](/api-reference/introduction) for the per-endpoint details. Write access is granted carefully; let us know what you need to update when you request a key.
  </Accordion>
</AccordionGroup>
