Eden Routines API

The Routines API from Eden — 3 operation(s) for routines.

GitHub OpenAPI

Operations 3

POST /v1/tools/eden_create_routine Create routine #
POST /v1/tools/eden_list_routines List routines #
POST /v1/tools/eden_update_routine Update routine #

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/eden-so:eden-so-routines-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

eden-so-routines-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Eden workspace Routines API
  version: 1.0.0
  summary: Every Eden MCP tool as a plain HTTPS call.
  description: 'Each tool in Eden''s MCP server (`https://mcp.eden.so/mcp`) also runs as `POST /v1/tools/` with its arguments as the JSON body: Discover search, creator analysis, the ads library, scheduling, analytics, boards, notes, tables, Custom AIs, and the store.


    **Sign in:** `Authorization: Bearer `, an Eden API key from Settings → API (`eden_pat_…`) or an OAuth access token. Read-only keys can''t run write tools, and a Custom key only sees the tools its access allows.


    **Credits and limits:** the same as MCP. Research tools cost 0.1 to 0.5 AI credits a call; saving, scheduling, and reading your own workspace are free. 120 calls a minute per key, shared with MCP.


    **Answers:** the tool''s own `{ ok: true, ... }` or `{ ok: false, status, message }`, with the HTTP status mirroring `status`.


    Invite-only tools are left out of this file; `GET /v1/tools` lists what a key can use. The store API (sales, customers, products, webhooks) is a separate spec: https://api.eden.so/store-app/v1/openapi.json'
  contact:
    name: Eden
    url: https://eden.so/help/api/use-the-eden-api/
  termsOfService: https://eden.so/terms/
servers:
- url: https://mcp.eden.so
  description: Eden workspace API
security:
- apiKey: []
tags:
- name: Routines
paths:
  /v1/tools/eden_create_routine:
    post:
      operationId: eden_create_routine
      summary: Create routine
      description: 'Create a routine: a recurring task Eden runs automatically on a schedule (at most once a day). Each run opens a FRESH Eden chat and sends the routine''s prompt exactly as if the user typed it; pass `customAIId` so every run is a chat with that Custom AI (its instructions, knowledge, and voice). Use it when the user asks for something recurring: ''every Monday at 9am…'', ''each weekday morning…'', ''once a month…''. Write the prompt as a complete, self-contained instruction for an unattended run (the run''s chat cannot see this conversation and nobody watches it live): open it with ''This is a scheduled routine run: work autonomously, do not ask questions, state any assumptions, and finish with the complete result'', name the exact notes or boards it should read or update, and never have it schedule or publish anything the user did not explicitly ask for as a standing instruction. `timezone` is required over MCP: ask the user, or reuse the schedule timezone from eden_list_schedules. Call eden_list_routines first to avoid creating a duplicate, and confirm the schedule back to the user in plain words. This is a real write. Do NOT use it to schedule a social post — that is eden_schedule_post.'
      tags:
      - Routines
      x-read-only: false
      x-destructive: false
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $schema: http://json-schema.org/draft-07/schema#
              type: object
              properties:
                workspaceId:
                  description: Workspace id from eden_list_workspaces. Optional when a default workspace is set.
                  type: string
                  minLength: 1
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                  description: Short human name, e.g. 'Weekly analytics review'.
                prompt:
                  type: string
                  minLength: 1
                  maxLength: 8000
                  description: The full instruction sent at each run. Self-contained; opens with the autonomy line described above.
                frequency:
                  type: string
                  enum:
                  - daily
                  - weekdays
                  - weekly
                  - monthly
                dayOfWeek:
                  description: 'Required for weekly: 0 = Sunday … 6 = Saturday.'
                  type: integer
                  minimum: 0
                  maximum: 6
                dayOfMonth:
                  description: 'Required for monthly: 1-28.'
                  type: integer
                  minimum: 1
                  maximum: 28
                hour:
                  type: integer
                  minimum: 0
                  maximum: 23
                  description: Local hour, 24h clock.
                minute:
                  description: Default 0.
                  type: integer
                  minimum: 0
                  maximum: 59
                timezone:
                  type: string
                  minLength: 1
                  maxLength: 128
                  description: 'IANA zone the routine runs in, e.g. ''America/Chicago''. Required: ask the user or reuse the schedule timezone from eden_list_schedules.'
                customAIId:
                  description: Bind every run to this Custom AI (id from eden_list_custom_ai or the eden_create_custom_ai result). Omit for a plain Eden chat run.
                  type: string
                  minLength: 1
                target:
                  description: 'eve = an Eve routine: each run starts a new chat and adds a card to Updates on Eve''s page (only for users who have Eve; ignores customAIId). Then write the prompt in their voice with just the job, its bar, and the layout, and no autonomy line (see references/routines.md). Omit or chat = a fresh Eden chat per run.'
                  type: string
                  enum:
                  - eve
                  - chat
                modelMode:
                  description: 'Chat model for every run: regular = Eve Fast, max = Eve Max, sonnet = Claude Sonnet, gptsol = GPT Sol, kimi = Kimi, opus = Claude Opus. Omit for Eden''s normal tier-aware default; never ask the user which model to use.'
                  type: string
                  enum:
                  - regular
                  - max
                  - sonnet
                  - gptsol
                  - kimi
                  - opus
                emailOnFinish:
                  description: true = email the user the run's result each time it finishes. Off by default; set it when the user asks to be emailed.
                  type: boolean
              required:
              - title
              - prompt
              - frequency
              - hour
              - timezone
      responses:
        '200':
          description: 'The tool''s result: `{ ok: true, ... }`. Tools that answer plain text come back as `{ ok: true, text }`.'
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/Failure'
        '401':
          $ref: '#/components/responses/Failure'
        '402':
          $ref: '#/components/responses/Failure'
        '403':
          $ref: '#/components/responses/Failure'
        '404':
          $ref: '#/components/responses/Failure'
        '409':
          $ref: '#/components/responses/Failure'
        '422':
          $ref: '#/components/responses/Failure'
        '429':
          $ref: '#/components/responses/Failure'
        '500':
          $ref: '#/components/responses/Failure'
        '503':
          $ref: '#/components/responses/Failure'
  /v1/tools/eden_list_routines:
    post:
      operationId: eden_list_routines
      summary: List routines
      description: 'List the user''s routines in a workspace: recurring chat runs Eden performs on a schedule (at most once a day), each with its schedule, prompt, bound Custom AI, on/off state, next run, and last run outcome. Use it when the user asks what routines they have, before creating one (to avoid a duplicate), or to find a `routineId` for eden_update_routine. Routines are NOT scheduled social posts — those are eden_list_scheduled_posts.'
      tags:
      - Routines
      x-read-only: true
      x-destructive: false
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $schema: http://json-schema.org/draft-07/schema#
              type: object
              properties:
                workspaceId:
                  description: Workspace id from eden_list_workspaces. Optional when a default workspace is set.
                  type: string
                  minLength: 1
                customAIId:
                  description: Only routines bound to this Custom AI (id from eden_list_custom_ai).
                  type: string
                  minLength: 1
                target:
                  description: Only Eve's routines (each run a new chat with a card in Updates on Eve's page).
                  type: string
                  const: eve
      responses:
        '200':
          description: 'The tool''s result: `{ ok: true, ... }`. Tools that answer plain text come back as `{ ok: true, text }`.'
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/Failure'
        '401':
          $ref: '#/components/responses/Failure'
        '402':
          $ref: '#/components/responses/Failure'
        '403':
          $ref: '#/components/responses/Failure'
        '404':
          $ref: '#/components/responses/Failure'
        '409':
          $ref: '#/components/responses/Failure'
        '422':
          $ref: '#/components/responses/Failure'
        '429':
          $ref: '#/components/responses/Failure'
        '500':
          $ref: '#/components/responses/Failure'
        '503':
          $ref: '#/components/responses/Failure'
  /v1/tools/eden_update_routine:
    post:
      operationId: eden_update_routine
      summary: Update routine
      description: 'Change, pause, resume, or delete an existing routine. Find the `routineId` with eden_list_routines first. Pass `remove: true` to delete it permanently; `enabled: false` pauses without deleting and `enabled: true` resumes. Any schedule or prompt field passed replaces the current value (a weekly/monthly change needs its day field too). Confirm a delete with the user before calling.'
      tags:
      - Routines
      x-read-only: false
      x-destructive: true
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $schema: http://json-schema.org/draft-07/schema#
              type: object
              properties:
                routineId:
                  type: string
                  minLength: 1
                  description: Routine id from eden_list_routines.
                remove:
                  description: true = delete the routine permanently.
                  type: boolean
                enabled:
                  description: false pauses, true resumes.
                  type: boolean
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                prompt:
                  type: string
                  minLength: 1
                  maxLength: 8000
                frequency:
                  type: string
                  enum:
                  - daily
                  - weekdays
                  - weekly
                  - monthly
                dayOfWeek:
                  type: integer
                  minimum: 0
                  maximum: 6
                dayOfMonth:
                  type: integer
                  minimum: 1
                  maximum: 28
                hour:
                  type: integer
                  minimum: 0
                  maximum: 23
                minute:
                  type: integer
                  minimum: 0
                  maximum: 59
                timezone:
                  description: IANA zone.
                  type: string
                  minLength: 1
                  maxLength: 128
                customAIId:
                  description: Bind runs to this Custom AI; pass null to unbind (plain Eden chat runs).
                  anyOf:
                  - type: string
                  - type: 'null'
                target:
                  description: eve makes future runs Eve's (a card in Updates on Eve's page per run); chat makes them plain chat runs.
                  type: string
                  enum:
                  - eve
                  - chat
                modelMode:
                  description: Change the chat model used for future runs.
                  type: string
                  enum:
                  - regular
                  - max
                  - sonnet
                  - gptsol
                  - kimi
                  - opus
                emailOnFinish:
                  description: true = email the run's result on finish; false turns it off.
                  type: boolean
              required:
              - routineId
      responses:
        '200':
          description: 'The tool''s result: `{ ok: true, ... }`. Tools that answer plain text come back as `{ ok: true, text }`.'
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/Failure'
        '401':
          $ref: '#/components/responses/Failure'
        '402':
          $ref: '#/components/responses/Failure'
        '403':
          $ref: '#/components/responses/Failure'
        '404':
          $ref: '#/components/responses/Failure'
        '409':
          $ref: '#/components/responses/Failure'
        '422':
          $ref: '#/components/responses/Failure'
        '429':
          $ref: '#/components/responses/Failure'
        '500':
          $ref: '#/components/responses/Failure'
        '503':
          $ref: '#/components/responses/Failure'
components:
  schemas:
    Failure:
      type: object
      required:
      - ok
      - status
      - message
      properties:
        ok:
          type: boolean
          const: false
        status:
          type: string
          description: auth-expired (401), upgrade-required (402), forbidden / not-enabled (403), not-found (404), conflict (409), invalid / needs-input / missing-workspace / confirmation-required (422), quota-exceeded / rate-limited (429), unreachable / unavailable (503), error (500).
        message:
          type: string
        errors:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
              message:
                type: string
        outOfCredits:
          type: boolean
        upgradeUrl:
          type: string
  responses:
    Failure:
      description: The call failed. `status` and `message` say why and what to do.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: eden_pat_…
      description: An Eden API key from Settings → API, or an OAuth access token.