fanvault-shop Posts API
The Posts API from fanvault-shop — 5 operation(s) for posts.
The Posts API from fanvault-shop — 5 operation(s) for posts.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fanvault-shop:fanvault-shop-posts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a 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.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Fanvault Posts API
version: 1.0.0
description: Programmatic control of a Fanvault creator storefront. Every path below is one tool from the shared registry, reachable over plain HTTP; the same registry is served as MCP over Streamable HTTP at the endpoint in the x-mcp block, and drives the `fanvault` CLI. All money values are integer cents.
servers:
- url: https://fanvault.shop
security:
- bearerAuth: []
tags:
- name: Posts
paths:
/api/v1/tools/create_post:
post:
operationId: create_post
summary: Create post
description: Publishes a feed post immediately. Provide body text (≤1000 chars) and/or up to 4 media items. Media urls come from create_upload_url (purpose post_media) after upload, or from import_media_from_url. Post text is automatically moderated. To publish at a future time, use schedule_post instead.
tags:
- Posts
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: Replays the stored response for a repeat of the same call within 24h. Strongly recommended on every mutating call — agents retry on ambiguous network failures, and without a key a retry creates a second listing, post, or message.
- name: X-Fanvault-Dry-Run
in: header
required: false
schema:
type: string
enum:
- '1'
description: Run every precondition and return the change that would be made, writing nothing.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
creator:
type: string
maxLength: 64
description: 'Which creator to act on: a creator UUID or @handle. Required for admin/agency tokens that manage multiple creators and for tokens restricted to more than one creator (see list_managed_creators); omit it when the token is pinned to exactly one creator or you are the creator.'
body:
type: string
maxLength: 1000
description: Post text (≤1000 chars). Can be empty if media is provided.
media:
type: array
items:
type: object
properties:
url:
type: string
format: uri
description: Public media URL (from create_upload_url or import_media_from_url).
type:
type: string
enum:
- image
- video
description: Media type.
required:
- url
- type
additionalProperties: false
maxItems: 4
description: Up to 4 images/videos.
required:
- body
additionalProperties: false
responses:
'200':
description: Tool result.
content:
application/json:
schema:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
text:
type: string
required:
- type
- text
structuredContent:
type: object
properties:
creator:
type: object
properties:
id:
type: string
handle:
type:
- string
- 'null'
required:
- id
- handle
additionalProperties: true
additionalProperties: true
required:
- content
'400':
description: Invalid params, or the acting creator is ambiguous.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Token lacks the required scope, or targets a creator it may not act on.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown tool, or the referenced resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A precondition is unmet (payouts not connected, ship-from unset, ...).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The action was understood but could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Honor Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/tools/delete_post:
post:
operationId: delete_post
summary: Delete post
description: Permanently deletes a feed post. Requires the destructive scope. There is no undo.
tags:
- Posts
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: Replays the stored response for a repeat of the same call within 24h. Strongly recommended on every mutating call — agents retry on ambiguous network failures, and without a key a retry creates a second listing, post, or message.
- name: X-Fanvault-Dry-Run
in: header
required: false
schema:
type: string
enum:
- '1'
description: Run every precondition and return the change that would be made, writing nothing.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
creator:
type: string
maxLength: 64
description: 'Which creator to act on: a creator UUID or @handle. Required for admin/agency tokens that manage multiple creators and for tokens restricted to more than one creator (see list_managed_creators); omit it when the token is pinned to exactly one creator or you are the creator.'
post_id:
type: string
format: uuid
description: Post UUID to delete.
confirm:
type: boolean
description: Must be true — deletion is permanent.
required:
- post_id
- confirm
additionalProperties: false
responses:
'200':
description: Tool result.
content:
application/json:
schema:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
text:
type: string
required:
- type
- text
structuredContent:
type: object
properties:
creator:
type: object
properties:
id:
type: string
handle:
type:
- string
- 'null'
required:
- id
- handle
additionalProperties: true
additionalProperties: true
required:
- content
'400':
description: Invalid params, or the acting creator is ambiguous.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Token lacks the required scope, or targets a creator it may not act on.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown tool, or the referenced resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A precondition is unmet (payouts not connected, ship-from unset, ...).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The action was understood but could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Honor Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/tools/list_posts:
post:
operationId: list_posts
summary: List posts
description: Lists the creator's feed posts, newest first, with body text and media. Paginated via next_cursor.
tags:
- Posts
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: Replays the stored response for a repeat of the same call within 24h. Strongly recommended on every mutating call — agents retry on ambiguous network failures, and without a key a retry creates a second listing, post, or message.
- name: X-Fanvault-Dry-Run
in: header
required: false
schema:
type: string
enum:
- '1'
description: Run every precondition and return the change that would be made, writing nothing.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
creator:
type: string
maxLength: 64
description: 'Which creator to act on: a creator UUID or @handle. Required for admin/agency tokens that manage multiple creators and for tokens restricted to more than one creator (see list_managed_creators); omit it when the token is pinned to exactly one creator or you are the creator.'
limit:
type: integer
minimum: 1
maximum: 100
description: Page size (default 20).
cursor:
type: string
description: Opaque cursor from next_cursor.
additionalProperties: false
responses:
'200':
description: Tool result.
content:
application/json:
schema:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
text:
type: string
required:
- type
- text
structuredContent:
type: object
properties:
creator:
type: object
properties:
id:
type: string
handle:
type:
- string
- 'null'
required:
- id
- handle
additionalProperties: true
additionalProperties: true
required:
- content
'400':
description: Invalid params, or the acting creator is ambiguous.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Token lacks the required scope, or targets a creator it may not act on.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown tool, or the referenced resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A precondition is unmet (payouts not connected, ship-from unset, ...).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The action was understood but could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Honor Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/tools/schedule_post:
post:
operationId: schedule_post
summary: Schedule a post
description: Schedules a feed post for a future time (sugar over schedule_action with kind create_post). Validates now — media must be reachable and text ≤1000 chars — and publishes at run_at. Pass timezone (IANA) when run_at has no offset, and recurrence to repeat. To publish immediately use create_post.
tags:
- Posts
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: Replays the stored response for a repeat of the same call within 24h. Strongly recommended on every mutating call — agents retry on ambiguous network failures, and without a key a retry creates a second listing, post, or message.
- name: X-Fanvault-Dry-Run
in: header
required: false
schema:
type: string
enum:
- '1'
description: Run every precondition and return the change that would be made, writing nothing.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
creator:
type: string
maxLength: 64
description: 'Which creator to act on: a creator UUID or @handle. Required for admin/agency tokens that manage multiple creators and for tokens restricted to more than one creator (see list_managed_creators); omit it when the token is pinned to exactly one creator or you are the creator.'
body:
type: string
maxLength: 1000
description: Post text (≤1000 chars).
media:
type: array
items:
type: object
properties:
url:
type: string
format: uri
type:
type: string
enum:
- image
- video
required:
- url
- type
additionalProperties: false
maxItems: 4
description: Up to 4 images/videos (public URLs).
run_at:
type: string
format: date-time
description: When to publish (ISO 8601, e.g. 2026-07-10T18:00:00Z).
timezone:
type: string
maxLength: 64
description: IANA timezone for recurrence math (e.g. America/Los_Angeles).
recurrence:
type: object
properties:
freq:
type: string
enum:
- daily
- weekly
- monthly
interval:
type: integer
minimum: 1
maximum: 52
until:
type: string
format: date-time
count:
type: integer
minimum: 1
maximum: 366
required:
- freq
additionalProperties: false
description: 'Optional recurrence: repeats the action daily/weekly/monthly (timezone-aware). Use `until` or `count` to bound it.'
required:
- body
- run_at
additionalProperties: false
responses:
'200':
description: Tool result.
content:
application/json:
schema:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
text:
type: string
required:
- type
- text
structuredContent:
type: object
properties:
creator:
type: object
properties:
id:
type: string
handle:
type:
- string
- 'null'
required:
- id
- handle
additionalProperties: true
additionalProperties: true
required:
- content
'400':
description: Invalid params, or the acting creator is ambiguous.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Token lacks the required scope, or targets a creator it may not act on.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown tool, or the referenced resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A precondition is unmet (payouts not connected, ship-from unset, ...).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The action was understood but could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Honor Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/tools/update_post:
post:
operationId: update_post
summary: Update post
description: Edits an existing post's text and/or media. Omitting media leaves the existing media unchanged; passing media replaces it (≤4 items).
tags:
- Posts
security:
- bearerAuth: []
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
maxLength: 255
description: Replays the stored response for a repeat of the same call within 24h. Strongly recommended on every mutating call — agents retry on ambiguous network failures, and without a key a retry creates a second listing, post, or message.
- name: X-Fanvault-Dry-Run
in: header
required: false
schema:
type: string
enum:
- '1'
description: Run every precondition and return the change that would be made, writing nothing.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
creator:
type: string
maxLength: 64
description: 'Which creator to act on: a creator UUID or @handle. Required for admin/agency tokens that manage multiple creators and for tokens restricted to more than one creator (see list_managed_creators); omit it when the token is pinned to exactly one creator or you are the creator.'
post_id:
type: string
format: uuid
description: Post UUID from list_posts.
body:
type: string
maxLength: 1000
description: New post text.
media:
type: array
items:
type: object
properties:
url:
type: string
format: uri
description: Public media URL (from create_upload_url or import_media_from_url).
type:
type: string
enum:
- image
- video
description: Media type.
required:
- url
- type
additionalProperties: false
maxItems: 4
description: Replacement media (omit to keep current).
required:
- post_id
- body
additionalProperties: false
responses:
'200':
description: Tool result.
content:
application/json:
schema:
type: object
properties:
content:
type: array
items:
type: object
properties:
type:
type: string
text:
type: string
required:
- type
- text
structuredContent:
type: object
properties:
creator:
type: object
properties:
id:
type: string
handle:
type:
- string
- 'null'
required:
- id
- handle
additionalProperties: true
additionalProperties: true
required:
- content
'400':
description: Invalid params, or the acting creator is ambiguous.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Token lacks the required scope, or targets a creator it may not act on.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown tool, or the referenced resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A precondition is unmet (payouts not connected, ship-from unset, ...).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The action was understood but could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Honor Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
hint:
type: string
retryAfterSeconds:
type: integer
details: {}
required:
- code
- message
required:
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'A Fanvault personal access token (fv_mcp_…), created at /settings/cli or /settings/mcp, or an OAuth 2.1 access token. Sent as `Authorization: Bearer <token>`.'
x-mcp:
endpoint: https://fanvault.shop/mcp
transport: streamable-http
spec_revision: '2025-11-25'
auth: Bearer PAT (fv_mcp_…) or OAuth 2.1
scopes:
- read
- write
- destructive
- payments
tool_count: 82
x-fanvault:
manifest: https://fanvault.shop/api/v1/manifest
manifest_version: 1
tools_hash: 385678b0326a5acd4c4ad0e412991ec0c9a510ea57eb743899b7c40ad0a5ecf4
min_cli_version: 0.1.0
cli:
install: npm i -g fanvault
docs: https://fanvault.shop/developers/cli