Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Fanaura Revalidate API
version: 1.0.0
summary: Public website files, form posts, and the Fanaura MCP OAuth scopes.
description: 'This document describes the HTTP surface of https://www.fanaura.com and the OAuth scopes for the MCP server at https://app.fanaura.com/mcp. Request public pages with Accept: text/markdown when you want Markdown. Request only the MCP scope the task needs. Canonical protected-resource metadata for the MCP server is https://app.fanaura.com/.well-known/oauth-protected-resource. Authorization server metadata is https://app.fanaura.com/.well-known/oauth-authorization-server.'
servers:
- url: https://www.fanaura.com
description: Fanaura public website
tags:
- name: Revalidate
paths:
/api/revalidate:
post:
operationId: revalidateContent
summary: Refresh the blog or changelog cache
description: Fanaura uses this from its own publish hook. Agents should not call it. The shared secret is the x-revalidate-secret header.
security:
- revalidateSecret: []
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/RevalidateRequest'
responses:
'200':
description: The listed paths were revalidated.
content:
application/json:
schema:
$ref: '#/components/schemas/RevalidateResult'
'401':
description: The shared secret did not match.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
tags:
- Revalidate
components:
schemas:
RevalidateResult:
type: object
required:
- revalidated
properties:
revalidated:
type: boolean
slug:
type:
- string
- 'null'
type:
type: string
ErrorMessage:
type: object
required:
- error
properties:
error:
type: string
RevalidateRequest:
type: object
properties:
slug:
type: string
description: Blog or changelog slug to refresh, in addition to the index.
type:
type: string
enum:
- blog
- changelog
description: Which collection the slug belongs to. Omit it for a blog post.
securitySchemes:
fanauraMcpOAuth:
type: oauth2
description: OAuth 2.0 for https://app.fanaura.com/mcp. Authorization code with PKCE (S256). Request only the scope the task needs. Do not request every scope in this list.
flows:
authorizationCode:
authorizationUrl: https://app.fanaura.com/oauth/mcp/authorize
tokenUrl: https://app.fanaura.com/api/oauth/mcp/token
refreshUrl: https://app.fanaura.com/api/oauth/mcp/token
scopes:
journeys:read: Read journeys, keywords, destinations, and publish state on the signed-in account.
journeys:write: Create and edit journeys on the signed-in account. Publishing still requires an active membership and a connected Instagram account.
audience:read: Read contacts, timelines, and audience totals on the signed-in account.
revalidateSecret:
type: apiKey
in: header
name: x-revalidate-secret
description: Shared secret for the website cache hook. Not an OAuth scope.