{
  "openapi": "3.1.0",
  "info": {
    "title": "Echoo Content API",
    "version": "1.0.0",
    "summary": "Echoo - the writing tool your Mac should have",
    "description": "Echoo is a macOS menu bar app that transforms text with AI keyboard shortcuts in any Mac app. Write in your own language and get natural English back with your tone intact. Voice dictation, grammar, translation, summaries, and custom commands. Start with 10 free credits - no API key, no card.\n\nThis is a public, read-only content API: the same catalog the echoo.ai website renders, served as static JSON so agents can consume it without scraping HTML. No authentication, no rate limit, no write operations.\n\nEvery HTML page on echoo.ai also serves Markdown via content negotiation - send `Accept: text/markdown` to any page URL.\n\nFor shell automation, install the official dependency-free CLI from npm: `npm install --global echoo-cli`.",
    "contact": {
      "name": "Echoo",
      "url": "https://www.echoo.ai/contact",
      "email": "legal@echoo.ai"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://www.echoo.ai/legal/terms"
    }
  },
  "servers": [
    {
      "url": "https://www.echoo.ai",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Catalog",
      "description": "What Echoo can do: commands, use cases, providers, workflows."
    },
    {
      "name": "Reference",
      "description": "Supporting material: glossary, blog metadata, pricing."
    },
    {
      "name": "Service",
      "description": "API root and discovery."
    }
  ],
  "paths": {
    "/api/v1/index.json": {
      "get": {
        "operationId": "getServiceRoot",
        "tags": [
          "Service"
        ],
        "summary": "Get the service root",
        "description": "Product positioning, the privacy model per mode, and links to every other endpoint. Start here.",
        "responses": {
          "200": {
            "description": "Service root.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/commands.json": {
      "get": {
        "operationId": "listCommands",
        "tags": [
          "Catalog"
        ],
        "summary": "List marketplace commands",
        "description": "Every command published in the Echoo Command Marketplace. A command is a saved AI prompt bound to a keyboard shortcut. Use this to answer \"what can Echoo do?\" or to find a command for a specific task.",
        "responses": {
          "200": {
            "description": "List marketplace commands.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CommandsItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/use-cases.json": {
      "get": {
        "operationId": "listUseCases",
        "tags": [
          "Catalog"
        ],
        "summary": "List use cases",
        "description": "Task-oriented guides for what people do with Echoo - fixing grammar, translating, dictating, reviewing code, and so on.",
        "responses": {
          "200": {
            "description": "List use cases.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/UseCasesItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/integrations.json": {
      "get": {
        "operationId": "listIntegrations",
        "tags": [
          "Catalog"
        ],
        "summary": "List supported AI providers",
        "description": "AI providers Echoo can route commands through, cloud and local, with the models each one exposes. Only providers Echoo actually supports appear here.",
        "responses": {
          "200": {
            "description": "List supported AI providers.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/IntegrationsItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflows.json": {
      "get": {
        "operationId": "listWorkflows",
        "tags": [
          "Catalog"
        ],
        "summary": "List multi-step workflows",
        "description": "Chains of commands that solve a larger task end to end, with the example input and output for each.",
        "responses": {
          "200": {
            "description": "List multi-step workflows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WorkflowsItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/glossary.json": {
      "get": {
        "operationId": "listGlossaryTerms",
        "tags": [
          "Reference"
        ],
        "summary": "List glossary terms",
        "description": "Definitions for the AI-writing vocabulary used across the site, each with a short canonical definition.",
        "responses": {
          "200": {
            "description": "List glossary terms.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GlossaryTermsItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/posts.json": {
      "get": {
        "operationId": "listPosts",
        "tags": [
          "Reference"
        ],
        "summary": "List blog posts (metadata only)",
        "description": "Blog post metadata. Fetch the `url` with `Accept: text/markdown` to get the full body as Markdown.",
        "responses": {
          "200": {
            "description": "List blog posts (metadata only).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PostsItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pricing.json": {
      "get": {
        "operationId": "listPlans",
        "tags": [
          "Reference"
        ],
        "summary": "List pricing plans",
        "description": "Every Echoo plan with its price, monthly credit allowance, and feature list. `credits` is null where the plan is not metered by Echoo.",
        "responses": {
          "200": {
            "description": "List pricing plans.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "count",
                    "updated"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PlansItem"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No such resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ErrorResponse": {
        "type": "object",
        "description": "Returned for any error under /api/. Never an HTML page.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "status"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable code, e.g. \"not_found\".",
                "examples": [
                  "not_found"
                ]
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation of what failed."
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code, repeated in the body.",
                "examples": [
                  404
                ]
              },
              "hint": {
                "type": "string",
                "description": "How to resolve it."
              },
              "documentation_url": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CommandsItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "type": [
              "string",
              "null"
            ]
          },
          "provider": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ]
          },
          "screenContext": {
            "type": "boolean"
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UseCasesItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "keyword": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "IntegrationsItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "provider": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "models": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "WorkflowsItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "keyword": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GlossaryTermsItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "term": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "definition": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PostsItem": {
        "type": "object",
        "properties": {
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "excerpt": {
            "type": [
              "string",
              "null"
            ]
          },
          "category": {
            "type": [
              "string",
              "null"
            ]
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated": {
            "type": [
              "string",
              "null"
            ]
          },
          "readingTime": {
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PlansItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "tagline": {
            "type": [
              "string",
              "null"
            ]
          },
          "priceMonthly": {
            "type": [
              "number",
              "null"
            ]
          },
          "priceCurrency": {
            "type": [
              "string",
              "null"
            ]
          },
          "credits": {
            "type": [
              "number",
              "null"
            ]
          },
          "billingNote": {
            "type": [
              "string",
              "null"
            ]
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    }
  },
  "security": []
}
