Simplo Generate API

The Generate API from Simplo — 3 operation(s) for generate.

GitHub OpenAPI

Operations 3

POST /generate/captions Generate caption ideas #
POST /generate/image Generate images #
POST /generate/carousel Generate a carousel #

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/getsimplo-ai:getsimplo-ai-generate-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

getsimplo-ai-generate-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Simplo Generate API
  version: 1.0.0
servers:
- url: https://api.getsimplo.ai/v1
security:
- apiKey: []
tags:
- name: Generate
paths:
  /generate/captions:
    post:
      operationId: generateCaptions
      summary: Generate caption ideas
      description: On-brand post ideas (hook, caption, hashtags, image prompt) for a topic, saved as a research session. Costs credits. Needs a completed brand profile.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  description: The project whose brand the ideas follow.
                topic:
                  type: string
                  minLength: 1
                  description: What the posts are about.
                platforms:
                  description: Shape the ideas for these platforms.
                  type: array
                  items:
                    type: string
                    enum:
                    - instagram
                    - tiktok
                    - facebook
                limit:
                  description: How many ideas, 1 to 10.
                  type: integer
                  minimum: 1
                  maximum: 10
              required:
              - projectId
              - topic
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  reply:
                    type: string
                  ideas:
                    type: array
                    items:
                      type: object
                      properties: {}
                      additionalProperties: {}
                required:
                - ideas
                additionalProperties: false
        '400':
          description: 'The request is not valid. Error code: validation_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing or invalid API key. Error code: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Not enough credits. Error code: insufficient_credits.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Not allowed. Error code: subscription_inactive.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Not found. Error code: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Too many requests. Error code: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '500':
          description: 'Something went wrong on our side. Error code: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: 'A platform or AI provider failed. Error code: upstream_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-costs-credits: true
      tags:
      - Generate
  /generate/image:
    post:
      operationId: generateImage
      summary: Generate images
      description: On-brand images for a post, saved to the project's image history. Costs credits (more for more images). Style "ad-layout" sets real type over a photo; other styles draw text badly. Every model tier currently runs as "standard".
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  description: The project whose brand the images follow.
                prompt:
                  type: string
                  minLength: 1
                  description: What the image shows.
                format:
                  default: instagram-portrait
                  description: 'The picture''s size. instagram-portrait (4:5) is the default: Instagram''s profile grid shows posts as 3:4, which cuts the sides of a square.'
                  type: string
                  enum:
                  - instagram-post
                  - instagram-story
                  - instagram-portrait
                  - tiktok
                  - x-post
                  - facebook-post
                  - facebook-cover
                style:
                  default: studio
                  type: string
                  enum:
                  - ad-layout
                  - studio
                  - candid
                  - cinematic
                  - retro-film
                  - flat-illustration
                  - hand-drawn
                  - render-3d
                  - bold-type
                  - minimal
                adBackground:
                  default: image
                  type: string
                  enum:
                  - image
                  - brand
                modelTier:
                  default: standard
                  type: string
                  enum:
                  - fast
                  - standard
                  - premium
                imageCount:
                  default: 1
                  description: How many images, 1 to 4. Each one costs credits.
                  type: integer
                  minimum: 1
                  maximum: 4
                includeLogo:
                  default: false
                  type: boolean
              required:
              - projectId
              - prompt
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  generationId:
                    type: string
                  style:
                    type: string
                  format:
                    type: string
                  imageUrls:
                    type: array
                    items:
                      type: string
                required:
                - generationId
                - style
                - format
                - imageUrls
                additionalProperties: false
        '400':
          description: 'The request is not valid. Error code: validation_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing or invalid API key. Error code: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Not enough credits. Error code: insufficient_credits.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Not allowed. Error code: subscription_inactive.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Not found. Error code: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Too many requests. Error code: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '500':
          description: 'Something went wrong on our side. Error code: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: 'A platform or AI provider failed. Error code: upstream_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-costs-credits: true
      tags:
      - Generate
  /generate/carousel:
    post:
      operationId: generateCarousel
      summary: Generate a carousel
      description: 'Writes and draws an Instagram carousel about a topic and saves it as a draft post. Costs credits: the slide copy, plus each picture when pictures are on. It is never published or scheduled here. A slide in overflowSlides has more text than fits. If saving the draft fails after the slides were drawn, the answer is 502 with the slide URLs in details.slides: those slides are paid for, so use the URLs rather than retrying (a retry with the same Idempotency-Key gets the same answer).'
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: Up to 255 characters. Repeating a request with the same key within 24 hours returns the first answer instead of doing the work again.
        schema:
          type: string
          maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  description: The project that owns the carousel.
                topic:
                  type: string
                  minLength: 1
                  description: What the carousel is about.
                slideCount:
                  default: 5
                  description: How many slides, 2 to 10.
                  type: integer
                  minimum: 2
                  maximum: 10
                style:
                  type: string
                  enum:
                  - editorial
                  - clean
                  - boldPhoto
                  - dark
                pictures:
                  default: false
                  description: Draw a picture on each slide. Costs extra credits.
                  type: boolean
                caption:
                  description: The post text; written for you when left out.
                  type: string
                scheduledAt:
                  type: string
                  format: date-time
                  description: 'ISO 8601 with UTC offset. Scheduling needs a future whole hour; a draft''s date isn''t checked until it is scheduled. localTime with timeZone is safer: the server works out the offset.'
                localTime:
                  description: The time on the user's clock, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. The server resolves the UTC offset in force on that date; a time the clocks skip or pass twice is refused with invalid_schedule_time. Not together with scheduledAt.
                  type: string
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?$
                timeZone:
                  description: An IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is given in.
                  type: string
                replacesPostId:
                  description: 'A draft this carousel replaces: the new carousel takes its day in the plan (unless a time is given) and the old draft is deleted. Only a draft that never went out can be replaced.'
                  type: string
                goal:
                  description: 'With a style: "tips" teaches and closes on a save; "promo" sells and closes on the brand''s offer. Read from the topic when left out.'
                  type: string
                  enum:
                  - tips
                  - promo
              required:
              - projectId
              - topic
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  postId:
                    type: string
                  status:
                    type: string
                    enum:
                    - draft
                    - draft_scheduled
                    - scheduled
                    - published
                    - partially_published
                    - failed
                    - missed
                  caption:
                    type: string
                  slides:
                    type: array
                    items:
                      type: object
                      properties:
                        number:
                          type: number
                        imageUrl:
                          type: string
                        text:
                          type: string
                      required:
                      - number
                      - imageUrl
                      additionalProperties: false
                  overflowSlides:
                    type: array
                    items:
                      type: number
                  creditsRefunded:
                    type: number
                  scheduledAt:
                    description: The day the draft sits on in the plan, when it has one.
                    type: string
                  scheduledLocal:
                    type: object
                    properties:
                      localTime:
                        type: string
                        description: YYYY-MM-DDTHH:MM on that zone's clock.
                      weekday:
                        type: string
                      timeZone:
                        type: string
                      utcOffset:
                        type: string
                        description: The offset in force then, e.g. -06:00.
                    required:
                    - localTime
                    - weekday
                    - timeZone
                    - utcOffset
                    additionalProperties: false
                    description: 'Present when the request named a timeZone and the post has a time: check it against what was meant.'
                  possibleDuplicateOf:
                    description: Another planned post within 14 days that opens the same way.
                    type: string
                  replaced:
                    description: 'With replacesPostId: whether the old draft was deleted.'
                    type: boolean
                required:
                - postId
                - status
                - caption
                - slides
                additionalProperties: false
        '400':
          description: 'The request is not valid. Error code: validation_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing or invalid API key. Error code: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Not enough credits. Error code: insufficient_credits.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'Not allowed. Error code: subscription_inactive.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: 'Not found. Error code: not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: 'Conflict with the current state. Error code: idempotency_in_progress.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: 'Idempotency-Key reused with a different request. Error code: idempotency_key_reused.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Too many requests. Error code: rate_limited.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
        '500':
          description: 'Something went wrong on our side. Error code: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: 'A platform or AI provider failed. Error code: upstream_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-costs-credits: true
      tags:
      - Generate
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              enum:
              - invalid_api_key
              - forbidden
              - not_found
              - validation_error
              - invalid_schedule_time
              - platform_not_available
              - already_published
              - publishing_in_progress
              - conflict
              - idempotency_key_reused
              - idempotency_in_progress
              - insufficient_credits
              - subscription_inactive
              - video_too_large
              - file_too_large
              - upload_link_invalid
              - rate_limited
              - upstream_error
              - internal_error
              description: A stable machine-readable code, e.g. validation_error.
            message:
              type: string
              description: A human-readable explanation.
            details:
              description: Extra context, such as the failing fields of a validation_error.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: smp_live_… key from Settings → API keys
x-provenance:
  method: harvested
  publisher: Simplo
  source: https://getsimplo.ai/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)