wakato-io Decks API

Presentation decks: slides of HTML and CSS in a 1280×720 frame, pictures and video from the space's Assets, speaker notes, a link per person and who watched it how far. Uses the decks scope.

Operations 14

GET /decks List decks #
POST /decks Create a deck with all its slides #
GET /decks/{id} Get a deck (its look and every slide) #
PATCH /decks/{id} Change a deck's title, description or look #
DELETE /decks/{id} Delete a deck (its links stop working) #
GET /decks/{id}/views Who watched a deck #
POST /decks/{id}/preview Look at a deck #
POST /decks/{id}/share Share a deck outside the space #
POST /decks/{id}/media Replace one Assets file with another wherever the deck uses it #
POST /decks/{id}/slides Add a slide #
PATCH /decks/{id}/slides/{slideId} Write a slide's html and/or speaker notes again #
DELETE /decks/{id}/slides/{slideId} Take a slide out (it stays in the deck's history) #
POST /decks/{id}/slides/{slideId}/edit Change one piece of a slide's html (find → replace) #
POST /decks/{id}/slides/{slideId}/move Move a slide to a new place in its deck #

Specifications

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/wakato-io:wakato-io-decks-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

wakato-io-decks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Wakato Space Decks API
  version: 1.0.0
  description: 'The **Wakato Space API** lets an external agent or tool (Claude Code, Cursor,

    Zapier, a partner integration, your own scripts) operate a single Wakato

    **Space** using a scoped Bearer token (a *Space API key*, `wks_live_…`).


    The **same token** works two ways:

    - **REST** — the endpoints documented here (`/functions/v1/space-api/…`).

    - **MCP** — a Model Context Protocol server at `/functions/v1/space-mcp`

    that exposes the same operations as tools to MCP clients. MCP clients

    self-discover the tools via `tools/list`; see the Quickstart to connect.


    ### Authentication

    Send the key as a Bearer token: `Authorization: Bearer wks_live_…`.

    A key is locked to exactly one Space and cannot read or write any other

    Space, the wallet (beyond read), member permissions, or other users.


    ### Scopes

    Every key grants per-domain scopes with up to three actions:

    - `read` — list / inspect

    - `write` — create / edit

    - `run` — the *consequential* action (publish a page, send an SMS, post

    socially, run an automation). Public/billable actions are deliberately

    split into `run` so you grant them explicitly.


    Each operation below notes its required scope via `x-required-scope`.

    A call without the scope returns `403`.


    ### Safety model

    - Wallet, Finance, Integrations are **read-only**. Money is never moved.

    - Secrets returns **names only** — values are never exposed.

    - Social posts and ad campaigns default to **drafts**; going live requires

    the `run` scope. Connecting new OAuth accounts is never done by a key.'
servers:
- url: https://api.wakato.io/functions/v1/space-api
  description: Production
- url: https://pnwxrleocjbcvrrwrycq.supabase.co/functions/v1/space-api
  description: Development
security:
- bearerAuth: []
tags:
- name: Decks
  description: 'Presentation decks: slides of HTML and CSS in a 1280×720 frame, pictures and video from the space''s Assets, speaker notes, a link per person and who watched it how far. Uses the decks scope.'
paths:
  /decks:
    get:
      tags:
      - Decks
      summary: List decks
      description: '**Required scope:** `decks:read`


        Title, how many slides, who made it, when it was changed, how it is shared, and its link in the editor.'
      x-required-scope: decks:read
      parameters:
      - in: query
        name: query
        schema:
          type: string
        description: Words in the title
      - in: query
        name: limit
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/decks\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getDecks
      x-operation-id-source: derived
    post:
      tags:
      - Decks
      summary: Create a deck with all its slides
      description: '**Required scope:** `decks:write`


        Each slide is the HTML + CSS inside one 1280×720 box (no scripts, no

        forms). `theme_css` sits above every slide; `fonts` are Google Fonts

        families with their weights (at most three). Pictures and videos must

        be files of this space''s Assets, bound by id:

        `" src="">` — anything else is

        refused and nothing is saved.'
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - title
              - slides
              properties:
                title:
                  type: string
                description:
                  type: string
                theme_css:
                  type: string
                fonts:
                  type: array
                  items:
                    type: string
                transition:
                  type: string
                  enum:
                  - none
                  - fade
                  - slide
                slides:
                  type: array
                  items:
                    type: object
                    required:
                    - html
                    properties:
                      html:
                        type: string
                        description: The inside of one 1280×720 slide; data-build="1", "2"… on what appears one click at a time
                      notes:
                        type: string
                        description: Speaker notes
      responses:
        '201':
          $ref: '#/components/responses/Created'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"title\": \"Launch plan\",\n  \"slides\": []\n}'"
      operationId: postDecks
      x-operation-id-source: derived
  /decks/{id}:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    get:
      tags:
      - Decks
      summary: Get a deck (its look and every slide)
      x-required-scope: decks:read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:read`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getDecksById
      x-operation-id-source: derived
    patch:
      tags:
      - Decks
      summary: Change a deck's title, description or look
      x-required-scope: decks:write
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                description:
                  type: string
                theme_css:
                  type: string
                fonts:
                  type: array
                  items:
                    type: string
                transition:
                  type: string
                  enum:
                  - none
                  - fade
                  - slide
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchDecksById
      x-operation-id-source: derived
    delete:
      tags:
      - Decks
      summary: Delete a deck (its links stop working)
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - confirm_title
              properties:
                confirm_title:
                  type: string
                  description: The deck's exact title
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"confirm_title\": \"Launch plan\"\n}'"
      operationId: deleteDecksById
      x-operation-id-source: derived
  /decks/{id}/views:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    get:
      tags:
      - Decks
      summary: Who watched a deck
      description: '**Required scope:** `decks:read`


        Every person, each visit, the slides in the order they went through with seconds on each, where they stopped, whether they finished or downloaded the PDF, and who is watching now.'
      x-required-scope: decks:read
      parameters:
      - in: query
        name: viewer_id
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X GET \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/views\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: getDecksByIdViews
      x-operation-id-source: derived
  /decks/{id}/preview:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Look at a deck
      description: '**Required scope:** `decks:write`


        One picture of every slide (or one slide with slide_id), and for each slide whether its words run out of the frame or are too small on a phone.'
      x-required-scope: decks:write
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                slide_id:
                  type: string
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/preview\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: postDecksByIdPreview
      x-operation-id-source: derived
  /decks/{id}/share:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Share a deck outside the space
      description: '**Required scope:** `decks:run`


        `people` each get a link of their own; `public_link` turns on one link

        for anyone (`ask_email` asks for an email first, `check_email` sends a

        code to it); `pdf` lets them download it; `remove_people` takes

        person links away. Nothing is sent.'
      x-required-scope: decks:run
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                people:
                  type: array
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      email:
                        type: string
                      contact_id:
                        type: string
                remove_people:
                  type: array
                  items:
                    type: string
                public_link:
                  type: boolean
                ask_email:
                  type: boolean
                check_email:
                  type: boolean
                pdf:
                  type: boolean
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/share\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: postDecksByIdShare
      x-operation-id-source: derived
  /decks/{id}/media:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Replace one Assets file with another wherever the deck uses it
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - from_asset_id
              - to_asset_id
              properties:
                from_asset_id:
                  type: string
                to_asset_id:
                  type: string
                slide_id:
                  type: string
                  description: Only on this slide
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/media\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"from_asset_id\": \"b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\",\n  \"to_asset_id\": \"b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\"\n}'"
      operationId: postDecksByIdMedia
      x-operation-id-source: derived
  /decks/{id}/slides:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Add a slide
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - html
              properties:
                html:
                  type: string
                notes:
                  type: string
                position:
                  type: integer
                  description: 1 = first; default last
      responses:
        '201':
          $ref: '#/components/responses/Created'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/slides\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"html\": \"example\"\n}'"
      operationId: postDecksByIdSlides
      x-operation-id-source: derived
  /decks/{id}/slides/{slideId}:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    - in: path
      name: slideId
      required: true
      schema:
        type: string
    patch:
      tags:
      - Decks
      summary: Write a slide's html and/or speaker notes again
      x-required-scope: decks:write
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                html:
                  type: string
                notes:
                  type: string
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X PATCH \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/slides/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'"
      operationId: patchDecksByIdSlidesBySlideId
      x-operation-id-source: derived
    delete:
      tags:
      - Decks
      summary: Take a slide out (it stays in the deck's history)
      x-required-scope: decks:write
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X DELETE \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/slides/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\""
      operationId: deleteDecksByIdSlidesBySlideId
      x-operation-id-source: derived
  /decks/{id}/slides/{slideId}/edit:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    - in: path
      name: slideId
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Change one piece of a slide's html (find → replace)
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - find
              - replace
              properties:
                find:
                  type: string
                replace:
                  type: string
                all:
                  type: boolean
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/slides/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/edit\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"find\": \"example\",\n  \"replace\": \"example\"\n}'"
      operationId: postDecksByIdSlidesBySlideIdEdit
      x-operation-id-source: derived
  /decks/{id}/slides/{slideId}/move:
    parameters:
    - in: path
      name: id
      required: true
      schema:
        type: string
    - in: path
      name: slideId
      required: true
      schema:
        type: string
    post:
      tags:
      - Decks
      summary: Move a slide to a new place in its deck
      x-required-scope: decks:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - to
              properties:
                to:
                  type: integer
                  description: 1 = first
      responses:
        '200':
          $ref: '#/components/responses/Ok'
      description: '**Required scope:** `decks:write`'
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl -X POST \"https://api.wakato.io/functions/v1/space-api/decks/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/slides/b7e4a1c2-9d3f-4e8a-b2c1-5f6d7e8a9b0c/move\" \\\n  -H \"Authorization: Bearer wks_live_YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"to\": 1\n}'"
      operationId: postDecksByIdSlidesBySlideIdMove
      x-operation-id-source: derived
components:
  responses:
    Ok:
      description: Success
      content:
        application/json:
          schema:
            type: object
    Created:
      description: Created
      content:
        application/json:
          schema:
            type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A Space API key, e.g. `wks_live_…`.