fanvault-shop Posts API

The Posts API from fanvault-shop — 5 operation(s) for posts.

GitHub OpenAPI

Operations 5

POST /api/v1/tools/create_post Create post #
POST /api/v1/tools/delete_post Delete post #
POST /api/v1/tools/list_posts List posts #
POST /api/v1/tools/schedule_post Schedule a post #
POST /api/v1/tools/update_post Update post #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fanvault-shop:fanvault-shop-posts-api"
All apis
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.

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.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fanvault-shop-posts-api-openapi.yml Raw ↑
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