Echosaw API

Echosaw API as documented publicly: 12 operations. Contract generated from the documentation by API Evangelist (2026-11-06); not the provider's own document.

Operations 12

GET /v1/analysis/results/{mediaid} Retrieve the full intelligence report for a completed analysis. #
GET /v1/analysis/status/{mediaid} Poll for the current processing status of a submitted job. #
POST /v1/analyze POST /v1/analyze #
POST /v1/analyze/url Submit a publicly accessible media or document URL, or a video platform URL (YouTube, Rumble, Vimeo, etc.). #
POST /v1/media/ask Ask a natural-language question and receive an answer synthesized from your analyzed media. #
GET /v1/media/library List media items and folders in your library. #
DELETE /v1/media/library/folder Delete a folder from your media library. #
PATCH /v1/media/library/folder Rename an existing folder in your media library. #
POST /v1/media/library/folder Create a new folder in your media library. #
PATCH /v1/media/library/move Move one or more media items to a different folder in your library. #
GET /v1/media/locker GET /v1/media/locker #

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/echosaw-com:echosaw-com-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

echosaw-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Echosaw API
  version: '2026-11-06'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-06: 12 operation(s) read from 1 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Echosaw has published no machine-readable contract that the pipeline
    could find. Engine: local.'
  x-evidence-tiers:
    code-example: 1
    documentation: 11
    pages-with-code: 1
    pages-read: 1
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-06'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://echosaw.com/developers/api-reference
servers:
- url: https://api.echosaw.com
paths:
  /v1/analysis/results/{mediaid}:
    get:
      operationId: get_v1_analysis_results_mediaid
      tags:
      - Analysis
      summary: Retrieve the full intelligence report for a completed analysis.
      x-source: https://echosaw.com/developers/api-reference
      parameters:
      - name: mediaid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1AnalysisResultsMediaidResponse'
      x-evidence:
        kind: documentation
  /v1/analysis/status/{mediaid}:
    get:
      operationId: get_v1_analysis_status_mediaid
      tags:
      - Analysis
      summary: Poll for the current processing status of a submitted job.
      x-source: https://echosaw.com/developers/api-reference
      parameters:
      - name: mediaid
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1AnalysisStatusMediaidResponse'
      x-evidence:
        kind: documentation
  /v1/analyze:
    post:
      operationId: post_v1_analyze
      tags:
      - Analyze
      summary: POST /v1/analyze
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1AnalyzeRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1AnalyzeResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.echosaw.com/v1/analyze  -H \"X-Api-Key: your-api-key\"  -H \"Content-Type: application/json\"  -d '{\n\
          \ \"mediaType\": \"video\",\n \"originalFilename\": \"interview.mp4\",\n \"fileSize\": 52428800,\n \"contentType\": \"video/mp4\"\n\
          \ }' Response 200 OK {\n \"jobId\": \"38be3491-b9a4-446f-b3f5-95380576baf4\",\n \"mediaId\": \"38be3491-b9a4-446f-b3f5-95380576baf4\"\
          ,\n \"uploadUrl\": \"https://...presigned-s3-url"
  /v1/analyze/url:
    post:
      operationId: post_v1_analyze_url
      tags:
      - Analyze
      summary: Submit a publicly accessible media or document URL, or a video platform URL (YouTube, Rumble, Vimeo, etc.).
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1AnalyzeUrlRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1AnalyzeUrlResponse'
      x-evidence:
        kind: documentation
  /v1/media/ask:
    post:
      operationId: post_v1_media_ask
      tags:
      - Media
      summary: Ask a natural-language question and receive an answer synthesized from your analyzed media.
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1MediaAskRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1MediaAskResponse'
      x-evidence:
        kind: documentation
  /v1/media/library:
    get:
      operationId: get_v1_media_library
      tags:
      - Media
      summary: List media items and folders in your library.
      x-source: https://echosaw.com/developers/api-reference
      parameters:
      - name: folderPath
        in: query
        required: false
        schema:
          type: string
        description: 'Filter by folder path (default: "/" for root)'
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: 'Max items per page (default: 25)'
      - name: nextToken
        in: query
        required: false
        schema:
          type: string
        description: Pagination cursor from previous response
      - name: includeSubfolders
        in: query
        required: false
        schema:
          type: boolean
        description: 'Include subfolder listing (default: false)'
      - name: mediaType
        in: query
        required: false
        schema:
          type: string
        description: Filter by media type.
      - name: status
        in: query
        required: false
        schema:
          type: string
        description: Filter by job status (e.g. COMPLETE , PROCESSING , FAILED )
      - name: sentiment
        in: query
        required: false
        schema:
          type: string
        description: Filter by report sentiment.
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1MediaLibraryResponse'
      x-evidence:
        kind: documentation
  /v1/media/library/folder:
    delete:
      operationId: delete_v1_media_library_folder
      tags:
      - Media
      summary: Delete a folder from your media library.
      x-source: https://echosaw.com/developers/api-reference
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_v1_media_library_folder
      tags:
      - Media
      summary: Rename an existing folder in your media library.
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchV1MediaLibraryFolderRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_media_library_folder
      tags:
      - Media
      summary: Create a new folder in your media library.
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1MediaLibraryFolderRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/media/library/move:
    patch:
      operationId: patch_v1_media_library_move
      tags:
      - Media
      summary: Move one or more media items to a different folder in your library.
      x-source: https://echosaw.com/developers/api-reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchV1MediaLibraryMoveRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /v1/media/locker:
    get:
      operationId: get_v1_media_locker
      tags:
      - Media
      summary: GET /v1/media/locker
      x-source: https://echosaw.com/developers/api-reference
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1MediaLockerResponse'
      x-evidence:
        kind: documentation
  /v1/media/search:
    get:
      operationId: get_v1_media_search
      tags:
      - Media
      summary: GET /v1/media/search
      x-source: https://echosaw.com/developers/api-reference
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
        description: Search query (natural language supported, including phrases someone said)
      - name: scope
        in: query
        required: false
        schema:
          type: string
        description: One of mine (default), org, or public
      - name: mediaType
        in: query
        required: false
        schema:
          type: string
        description: Filter by media type.
      - name: status
        in: query
        required: false
        schema:
          type: string
        description: Filter by job status (e.g. COMPLETE )
      - name: sentiment
        in: query
        required: false
        schema:
          type: string
        description: 'Filter by report sentiment: positive , negative , neutral , or mixed'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1MediaSearchResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetV1AnalysisResultsMediaidResponse:
      type: object
      properties:
        videoId:
          type: string
        mediaType:
          type: string
        createdAt:
          type: string
        summary:
          type: object
        transcript:
          type: object
        safety:
          type: object
        insights:
          type: object
        metadata:
          type: object
        thumbnailUrl:
          type: string
        thumbnails:
          type: array
        location:
          type: object
        downloads:
          type: object
    GetV1AnalysisStatusMediaidResponse:
      type: object
      properties:
        mediaId:
          type: string
        status:
          type: string
        createdAt:
          type: integer
        updatedAt:
          type: integer
    PostV1AnalyzeRequest:
      type: object
      properties:
        mediaType:
          type: string
        originalFilename:
          type: string
        fileSize:
          type: integer
        contentType:
          type: string
    PostV1AnalyzeResponse:
      type: object
      properties:
        jobId:
          type: string
        mediaId:
          type: string
        uploadUrl:
          type: string
    PostV1AnalyzeUrlRequest:
      type: object
      properties:
        url:
          type: string
          description: HTTP(S) URL of the file or platform page
        mediaType:
          type: string
          description: One of video , audio , image , or document
        originalFilename:
          type: string
          description: Filename to record for the item
      required:
      - url
      - mediaType
    PostV1AnalyzeUrlResponse:
      type: object
      properties:
        jobId:
          type: string
        mediaId:
          type: string
    PostV1MediaAskRequest:
      type: object
      properties:
        question:
          type: string
          description: The question to answer
        mediaIds:
          type: array
          description: Restrict the question to these media items.
        conversationId:
          type: string
          description: Continue a prior conversation.
      required:
      - question
    PostV1MediaAskResponse:
      type: object
      properties:
        answer:
          type: string
        sources:
          type: array
        question:
          type: string
        conversationId:
          type: string
        turnId:
          type: string
    GetV1MediaLibraryResponse:
      type: object
      properties:
        items:
          type: array
        folders:
          type: array
        count:
          type: integer
        nextToken:
          type: string
    PatchV1MediaLibraryFolderRequest:
      type: object
      properties:
        folderPath:
          type: string
          description: Current folder path to rename
        newName:
          type: string
          description: New display name for the folder
      required:
      - folderPath
      - newName
    PostV1MediaLibraryFolderRequest:
      type: object
      properties:
        name:
          type: string
          description: Folder display name
        parentPath:
          type: string
          description: 'Parent folder path (default: "/")'
      required:
      - name
    PatchV1MediaLibraryMoveRequest:
      type: object
      properties:
        mediaIds:
          type: array
          description: Array of mediaId strings to move
        targetFolderPath:
          type: string
          description: Destination folder path
      required:
      - mediaIds
      - targetFolderPath
    GetV1MediaLockerResponse:
      type: object
      properties:
        items:
          type: array
        count:
          type: integer
    GetV1MediaSearchResponse:
      type: object
      properties:
        query:
          type: string
        resultCount:
          type: integer
        results:
          type: array
        searchType:
          type: string
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
security:
- apiKey: []
tags:
- name: Analysis
- name: Analyze
- name: Media