BAMF.ai Posts API

The Posts API from BAMF.ai — 15 operation(s) for posts.

Operations 18

GET /posts List posts #
POST /posts Create a draft post #
GET /posts/{post_id} Get a post #
PATCH /posts/{post_id} Edit a post #
DELETE /posts/{post_id} Delete a post #
POST /posts/{post_id}/approve Approve a creator-owned draft post #
GET /posts/{post_id}/preview Get a preview-rich post #
POST /posts/{post_id}/schedule Schedule a post #
GET /posts/{post_id}/versions List saved copy, image and slide versions of a post #
POST /posts/{post_id}/versions/revert Restore a saved version on the same post #
POST /posts/{post_id}/image/edit Edit the post's current image in place (async job) #
POST /posts/{post_id}/slides/{slide}/edit Edit one carousel slide's copy and/or image in place #
POST /posts/{post_id}/slides/{slide}/render Re-render one prompt-carousel page and rebuild its PDF #
POST /posts/{post_id}/unschedule Unschedule a post #
POST /posts/{post_id}/pause Pause a scheduled post #
POST /posts/{post_id}/resume Resume a scheduled post #
POST /posts/{post_id}/publish Publish a post immediately #
POST /posts/{post_id}/boost Apply or trigger an engagement boost #

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/bamf-ai:bamf-ai-posts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

bamf-ai-posts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BAMF Developer Platform Posts API
  version: 0.1.0
servers:
- url: https://api.bamf.ai/v1
security:
- BearerAuth: []
tags:
- name: Posts
paths:
  /posts:
    get:
      summary: List posts
      parameters:
      - name: creator_id
        in: query
        schema:
          type: string
      - name: status
        in: query
        schema:
          type: string
          enum:
          - scheduled
      - name: include
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          maximum: 100
      responses:
        '200':
          description: Posts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostsResponse'
      tags:
      - Posts
      operationId: getPosts
      x-operation-id-source: derived
    post:
      summary: Create a draft post
      parameters:
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePostRequest'
      responses:
        '201':
          description: Post created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: postPosts
      x-operation-id-source: derived
  /posts/{post_id}:
    get:
      summary: Get a post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: getPostsByPostId
      x-operation-id-source: derived
    patch:
      summary: Edit a post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePostRequest'
      responses:
        '200':
          description: Post updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: patchPostsByPostId
      x-operation-id-source: derived
    delete:
      summary: Delete a post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      responses:
        '200':
          description: Post deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericDataResponse'
      tags:
      - Posts
      operationId: deletePostsByPostId
      x-operation-id-source: derived
  /posts/{post_id}/approve:
    post:
      summary: Approve a creator-owned draft post
      description: Records the creator owner's approval for an unscheduled, unpublished draft. The transition atomically persists canonical BAMF post review metadata and any matching approval request, uses an Approved label when the workspace has one, and otherwise preserves the unscheduled draft status. It returns a replayable receipt and never schedules, publishes, calls, or mutates a provider. Only the exact creator owner may approve; workspace managers, members, clients, and creator-scoped keys for another creator are denied.
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          minLength: 8
          maxLength: 240
      responses:
        '200':
          description: Creator approval receipt; provider_action and provider_mutation are false.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatorPostApprovalResponse'
        '400':
          description: Missing or unbounded Idempotency-Key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Exact creator ownership is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Post is already approved, scheduled, published, or not a draft.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Posts
      operationId: postPostsByPostIdApprove
      x-operation-id-source: derived
  /posts/{post_id}/preview:
    get:
      summary: Get a preview-rich post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post preview
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: getPostsByPostIdPreview
      x-operation-id-source: derived
  /posts/{post_id}/schedule:
    post:
      summary: Schedule a post
      description: Schedules a post. Pass an optional boost object to enroll the creator so Engagement Boost fires automatically when the post goes live. The boost object requires the posts:boost scope in addition to posts:schedule.
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SchedulePostRequest'
      responses:
        '200':
          description: Post scheduled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: postPostsByPostIdSchedule
      x-operation-id-source: derived
  /posts/{post_id}/versions:
    get:
      summary: List saved copy, image and slide versions of a post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post versions
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
      tags:
      - Posts
      operationId: getPostsByPostIdVersions
      x-operation-id-source: derived
  /posts/{post_id}/versions/revert:
    post:
      summary: Restore a saved version on the same post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                kind:
                  type: string
                  enum:
                  - text
                  - image
                  - slide_image
                  - slide_text
                version_id:
                  type: string
                index:
                  type: integer
                slide:
                  type: integer
                image_url:
                  type: string
              required:
              - kind
      responses:
        '200':
          description: Version restored in place
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
      tags:
      - Posts
      operationId: postPostsByPostIdVersionsRevert
      x-operation-id-source: derived
  /posts/{post_id}/image/edit:
    post:
      summary: Edit the post's current image in place (async job)
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                instruction:
                  type: string
                keep_everything_else:
                  type: boolean
                reference_version:
                  type: integer
              required:
              - instruction
      responses:
        '202':
          description: Image edit job queued
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
      tags:
      - Posts
      operationId: postPostsByPostIdImageEdit
      x-operation-id-source: derived
  /posts/{post_id}/slides/{slide}/edit:
    post:
      summary: Edit one carousel slide's copy and/or image in place
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: slide
        in: path
        required: true
        schema:
          type: integer
          minimum: 1
        description: 1-based slide number by order.
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                body:
                  type: string
                cta:
                  type: string
                content:
                  type: string
                image_instruction:
                  type: string
      responses:
        '200':
          description: Slide copy updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '202':
          description: Slide image edit queued
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
      tags:
      - Posts
      operationId: postPostsByPostIdSlidesBySlideEdit
      x-operation-id-source: derived
  /posts/{post_id}/slides/{slide}/render:
    post:
      summary: Re-render one prompt-carousel page and rebuild its PDF
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: slide
        in: path
        required: true
        schema:
          type: integer
          minimum: 1
        description: 1-based slide number by order.
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      responses:
        '202':
          description: Re-render queued
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
      tags:
      - Posts
      operationId: postPostsByPostIdSlidesBySlideRender
      x-operation-id-source: derived
  /posts/{post_id}/unschedule:
    post:
      summary: Unschedule a post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        schema:
          type: string
      responses:
        '200':
          description: Post unscheduled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: postPostsByPostIdUnschedule
      x-operation-id-source: derived
  /posts/{post_id}/pause:
    post:
      summary: Pause a scheduled post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post paused
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: postPostsByPostIdPause
      x-operation-id-source: derived
  /posts/{post_id}/resume:
    post:
      summary: Resume a scheduled post
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post resumed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
      tags:
      - Posts
      operationId: postPostsByPostIdResume
      x-operation-id-source: derived
  /posts/{post_id}/publish:
    post:
      summary: Publish a post immediately
      description: User-scoped keys only.
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Post published
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostResponse'
        '403':
          description: Creator-scoped key denied
      tags:
      - Posts
      operationId: postPostsByPostIdPublish
      x-operation-id-source: derived
  /posts/{post_id}/boost:
    post:
      summary: Apply or trigger an engagement boost
      description: Applies an Engagement Boost to a post. If the post is already published it boosts immediately; if scheduled it arms the boost for publish time. Targeting is auto-matched to the creator. Requires the posts:boost scope.
      parameters:
      - name: post_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                tier:
                  type: string
                  enum:
                  - basic
                  - power
                  - mega
                engagement_type:
                  type: string
                  enum:
                  - reactions
                  - reactions_comments
                  - any
      responses:
        '200':
          description: Boost applied or armed
      tags:
      - Posts
      operationId: postPostsByPostIdBoost
      x-operation-id-source: derived
components:
  schemas:
    PostFirstComment:
      type:
      - object
      - 'null'
      properties:
        content:
          type: string
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            request_id:
              type: string
    Post:
      type: object
      properties:
        id:
          type: string
        author_id:
          type: string
        creator_id:
          type: string
          description: Alias used by preview responses; raw post rows may use author_id.
        status_id:
          type:
          - string
          - 'null'
        post_type:
          $ref: '#/components/schemas/BamfPostType'
        platform:
          type:
          - string
          - 'null'
          enum:
          - linkedin
          - x
          - twitter
          - null
        content:
          type: string
        topic:
          type:
          - string
          - 'null'
        first_comment:
          type:
          - string
          - 'null'
        scheduled_for:
          type:
          - string
          - 'null'
          format: date-time
        generated_image_url:
          type:
          - string
          - 'null'
        uploaded_image_url:
          type:
          - string
          - 'null'
        document_url:
          type:
          - string
          - 'null'
        video_url:
          type:
          - string
          - 'null'
        created_at:
          type:
          - string
          - 'null'
          format: date-time
        updated_at:
          type:
          - string
          - 'null'
          format: date-time
    BamfPostType:
      type: string
      enum:
      - text
      - image
      - carousel
      - video
      - article
      - poll
    SchedulePostRequest:
      type: object
      required:
      - scheduled_for
      properties:
        scheduled_for:
          type: string
          format: date-time
        timezone:
          type: string
          maxLength: 80
          description: Optional IANA timezone for the scheduled post and creator notification. Invalid supplied zones are rejected; omitted legacy schedules use UTC.
        boost:
          type: object
          description: Optional Engagement Boost configuration. Requires the posts:boost scope.
          properties:
            enabled:
              type: boolean
            tier:
              type: string
              enum:
              - basic
              - power
              - mega
            engagement_type:
              type: string
              enum:
              - reactions
              - reactions_comments
              - any
    PostPreviewMedia:
      type: object
      properties:
        type:
          type: string
          enum:
          - image
          - carousel_slide
          - video
        url:
          type:
          - string
          - 'null'
        order:
          type: integer
        alt_text:
          type:
          - string
          - 'null'
    PostsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/Post'
            - $ref: '#/components/schemas/PostPreview'
    CreatorPostApprovalReceipt:
      type: object
      required:
      - schema
      - operation
      - post_id
      - creator_id
      - state
      - approved_at
      - idempotency_key
      - provider_action
      - provider_mutation
      - replay
      properties:
        schema:
          const: creator-post-approval-receipt/v1
        operation:
          const: post.approve
        post_id:
          type: string
        creator_id:
          type: string
        approval_request_id:
          type:
          - string
          - 'null'
        state:
          const: approved
        previous_state:
          type: string
        approved_at:
          type: string
          format: date-time
        approved_by:
          type: string
        idempotency_key:
          type: string
          minLength: 8
          maxLength: 240
        provider_action:
          const: false
        provider_mutation:
          const: false
        replay:
          type: boolean
    CreatePostRequest:
      type: object
      required:
      - creator_id
      - content
      properties:
        creator_id:
          type: string
        content:
          type: string
        topic:
          type: string
        first_comment:
          type: string
        post_type:
          $ref: '#/components/schemas/BamfPostType'
        platform:
          type: string
          description: Case-insensitive; aliases li, x/twitter, ig accepted. Stored as LinkedIn, Twitter, Instagram, Threads, TikTok, YouTube or Facebook. Unknown values return 400 invalid_platform.
          enum:
          - linkedin
          - li
          - x
          - twitter
          - instagram
          - ig
          - threads
          - tiktok
          - youtube
          - facebook
          - LinkedIn
          - X
          - Twitter
          - Instagram
          - Threads
          - TikTok
          - YouTube
          - Facebook
        funnel_plan:
          type: object
          description: Optional funnel intent from a funnel plan. Stored as generation_metadata.funnel_plan.
          required:
          - stage
          properties:
            stage:
              type: string
              enum:
              - tof
              - mof
              - bof
            format:
              type: string
            planned_date:
              type: string
              format: date
    GenericDataResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/JSONValue'
    PostResponse:
      type: object
      properties:
        data:
          oneOf:
          - $ref: '#/components/schemas/Post'
          - $ref: '#/components/schemas/PostPreview'
          - $ref: '#/components/schemas/JSONValue'
    JSONValue:
      description: Any JSON value returned by flexible workflow, analytics, context, or generation payloads.
    PostPreview:
      type: object
      properties:
        id:
          type: string
        creator_id:
          type: string
        status_id:
          type:
          - string
          - 'null'
        post_type:
          $ref: '#/components/schemas/BamfPostType'
        content:
          type: string
        topic:
          type:
          - string
          - 'null'
        first_comment:
          $ref: '#/components/schemas/PostFirstComment'
        scheduled_for:
          type:
          - string
          - 'null'
          format: date-time
        media:
          type: array
          items:
            $ref: '#/components/schemas/PostPreviewMedia'
        raw:
          $ref: '#/components/schemas/Post'
    UpdatePostRequest:
      type: object
      properties:
        content:
          type: string
        topic:
          type: string
        first_comment:
          type: string
        post_type:
          $ref: '#/components/schemas/BamfPostType'
        platform:
          type: string
          enum:
          - linkedin
          - x
          - twitter
    CreatorPostApprovalResponse:
      type: object
      required:
      - data
      - receipt
      properties:
        data:
          $ref: '#/components/schemas/Post'
        receipt:
          $ref: '#/components/schemas/CreatorPostApprovalReceipt'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer