AudioMap Notes API

Create and browse notes

Operations 4

POST /v1/notes Import from a public link, or open a direct upload #
GET /v1/notes List notes, newest first #
GET /v1/notes/{id} Get one note with its full text, analyses and outline #
POST /v1/notes/{id}/finalize Close a direct upload and start processing #

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/audiomap-ai:audiomap-ai-notes-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

audiomap-ai-notes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AudioMap Notes API
  version: 1.0.0
  description: 'Transcribe audio and video, then read, analyse and query it programmatically.


    Authentication: send an API key as `Authorization: Bearer am_live_...`.

    Create one at https://audiomap.ai/dashboard/api-keys. The key is shown once.

    A session JWT is NOT accepted here; only API keys.


    Plan: the REST API is included from the Pro plan up. Calls from a lower plan

    answer 403 `tier_upgrade_required` with the plan you need in `requiredTier`.


    Credits: writing operations spend monthly credits from the same balance as the

    MCP server. If an operation fails after being charged, the credits are refunded.

    Read `GET /v1/openapi.json` `x-audiomap-credits` for the current prices.


    There is also an MCP server at POST /mcp/stream with the same capabilities,

    for clients that speak Model Context Protocol. See GET /mcp/info.'
  contact:
    name: AudioMap
    url: https://audiomap.ai/developers
servers:
- url: https://api.audiomap.ai
security:
- apiKey: []
tags:
- name: Notes
  description: Create and browse notes
paths:
  /v1/notes:
    post:
      tags:
      - Notes
      operationId: createNote
      summary: Import from a public link, or open a direct upload
      description: 'Two mutually exclusive shapes:

        - `audioUrl`: import a YouTube or Vimeo video, a podcast (RSS feed or Apple Podcasts page)

        or a direct audio/video file URL. Spotify is not supported (DRM).

        - `filename` + `contentType`: open a direct upload. The response carries a

        presigned `upload.url`; PUT the bytes there and then call

        `POST /v1/notes/{id}/finalize`.


        Transcription is asynchronous: poll `GET /v1/notes/{id}` until `status` is "ready".'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNoteRequest'
      responses:
        '202':
          description: Note created and queued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateNoteResponse'
        '400':
          description: Malformed body, or a link we cannot ingest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: invalid_audio_url
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: Not enough credits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: insufficient_credits
                balance: 10
                required: 50
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          description: File larger than the plan allows, or storage quota exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: file_too_large
        '415':
          description: Content type that is neither audio/* nor video/*
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: unsupported_media_type
        '429':
          $ref: '#/components/responses/RateLimited'
    get:
      tags:
      - Notes
      operationId: listNotes
      summary: List notes, newest first
      description: 'Cursor pagination: pass the `nextCursor` of a response as `cursor` to get the next page. `hasMore` says whether there is one.'
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 20
      - name: cursor
        in: query
        schema:
          type: string
          format: uuid
        description: nextCursor from the previous page
      - name: q
        in: query
        schema:
          type: string
          maxLength: 200
        description: Free text over title, description and transcript
      - name: folderId
        in: query
        schema:
          type: string
        description: Folder UUID, or the literal "null" for notes with no folder
      - name: status
        in: query
        schema:
          type: string
          enum:
          - processing
          - ready
          - failed
      - name: since
        in: query
        schema:
          type: string
          format: date-time
        description: Only notes created at or after this instant
      - name: tags
        in: query
        schema:
          type: string
        description: Comma separated; returns notes carrying ALL of them
      - name: origin
        in: query
        schema:
          type: string
        description: 'Comma separated origins to keep: youtube, podcast, link, video, audio, recording. An unknown value is a 400'
      responses:
        '200':
          description: A page of notes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoteList'
        '400':
          description: Invalid query parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: invalid_query
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v1/notes/{id}:
    get:
      tags:
      - Notes
      operationId: getNote
      summary: Get one note with its full text, analyses and outline
      parameters:
      - $ref: '#/components/parameters/NoteId'
      responses:
        '200':
          description: The note
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoteDetail'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v1/notes/{id}/finalize:
    post:
      tags:
      - Notes
      operationId: finalizeUpload
      summary: Close a direct upload and start processing
      description: Call it after PUTting the bytes to the presigned `upload.url`.
      parameters:
      - $ref: '#/components/parameters/NoteId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  maxLength: 200
      responses:
        '202':
          description: Upload accepted, processing queued
          content:
            application/json:
              schema:
                type: object
                properties:
                  noteId:
                    type: string
                    format: uuid
                  jobId:
                    type: string
                  status:
                    type: string
                    enum:
                    - processing
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: Monthly minute quota exhausted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: quota_exceeded
                remaining: 3
                needed: 12
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: The note is not waiting for an upload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: invalid_state
                current: ready
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    Chapter:
      type: object
      properties:
        startMs:
          type: integer
        endMs:
          type: integer
        headline:
          type: string
    NoteDetail:
      allOf:
      - $ref: '#/components/schemas/Note'
      - type: object
        properties:
          transcript:
            type:
            - object
            - 'null'
            properties:
              fullText:
                type: string
              languagesDetected:
                type: array
                items:
                  type: string
              speakerCount:
                type:
                - integer
                - 'null'
          aiNotes:
            type: array
            items:
              $ref: '#/components/schemas/Analysis'
          outline:
            type: array
            items:
              $ref: '#/components/schemas/Chapter'
    Note:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        description:
          type:
          - string
          - 'null'
        status:
          type: string
          enum:
          - processing
          - ready
          - failed
        errorCode:
          type:
          - string
          - 'null'
          description: Why it failed; null otherwise
        sourceType:
          type: string
          enum:
          - upload
          - recording
          - url
        origin:
          type: string
          enum:
          - youtube
          - podcast
          - link
          - video
          - audio
          - recording
        sourceUrl:
          type:
          - string
          - 'null'
        folderId:
          type:
          - string
          - 'null'
          format: uuid
        tags:
          type: array
          items:
            type: string
        durationSeconds:
          type:
          - integer
          - 'null'
        language:
          type:
          - string
          - 'null'
        recordedAt:
          type:
          - string
          - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    CreateNoteResponse:
      type: object
      required:
      - noteId
      - status
      properties:
        noteId:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - processing
        provider:
          type: string
          description: 'Import only: youtube | apple-podcasts | podcast-rss | direct'
        upload:
          type: object
          description: Direct upload only
          properties:
            method:
              type: string
              enum:
              - PUT
            url:
              type: string
              format: uri
            expiresInSeconds:
              type: integer
            headers:
              type: object
              additionalProperties:
                type: string
        next:
          type: string
          description: What to do next, in plain words
    Analysis:
      type: object
      properties:
        template:
          type: string
          enum:
          - generic
          - sales
          - legal
          - medical
          - journalism
          - education
          - customer_success
          - meeting_minutes
          - consulting
          - coaching
          - therapy
          - podcast
          - university_class
          - debate
        summary:
          type: string
        keyPoints:
          type: array
          items:
            type: string
        actionItems:
          type: array
          items:
            type: object
            properties:
              text:
                type: string
              assignee:
                type: string
              deadline:
                type: string
        decisions:
          type: array
          items:
            type: string
        questions:
          type: array
          items:
            type: string
        topics:
          type: array
          items:
            type: string
        anchors:
          $ref: '#/components/schemas/Anchors'
        sections:
          type:
          - object
          - 'null'
          description: Template-specific sections, only for the "debate" template (podcasts, interviews, multi-person debates). Each item carries who says it (speaker name or diarization letter) and the exact start millisecond of the transcript segment where it is said. Null for other templates.
          properties:
            positions:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: string
                  speaker:
                    type:
                    - string
                    - 'null'
                  t:
                    type:
                    - integer
                    - 'null'
                required:
                - text
            arguments:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: string
                  speaker:
                    type:
                    - string
                    - 'null'
                  t:
                    type:
                    - integer
                    - 'null'
                required:
                - text
            quotes:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: string
                  speaker:
                    type:
                    - string
                    - 'null'
                  t:
                    type:
                    - integer
                    - 'null'
                required:
                - text
            agreements:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: string
                  speaker:
                    type:
                    - string
                    - 'null'
                  t:
                    type:
                    - integer
                    - 'null'
                required:
                - text
            disagreements:
              type: array
              items:
                type: object
                properties:
                  text:
                    type: string
                  speaker:
                    type:
                    - string
                    - 'null'
                  t:
                    type:
                    - integer
                    - 'null'
                required:
                - text
        mindmap:
          type:
          - string
          - 'null'
          description: Mermaid source, when one was generated
        model:
          type: string
        updatedAt:
          type: string
          format: date-time
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: Stable machine-readable code
        message:
          type: string
          description: Human-readable explanation
      additionalProperties: true
    NoteList:
      type: object
      properties:
        notes:
          type: array
          items:
            $ref: '#/components/schemas/Note'
        nextCursor:
          type:
          - string
          - 'null'
          format: uuid
        hasMore:
          type: boolean
    Anchors:
      type:
      - object
      - 'null'
      description: Millisecond at which each element is said, aligned index by index with its list. Null per element when the model could not place it; null as a whole for analyses generated before Sep 2026.
      properties:
        keyPoints:
          type: array
          items:
            type:
            - integer
            - 'null'
        actionItems:
          type: array
          items:
            type:
            - integer
            - 'null'
        decisions:
          type: array
          items:
            type:
            - integer
            - 'null'
        questions:
          type: array
          items:
            type:
            - integer
            - 'null'
    CreateNoteRequest:
      type: object
      properties:
        audioUrl:
          type: string
          format: uri
          maxLength: 2000
          description: Public link to import
        filename:
          type: string
          maxLength: 255
          description: 'Direct upload: original file name'
        contentType:
          type: string
          maxLength: 100
          description: 'Direct upload: audio/* or video/*'
        fileSizeBytes:
          type: integer
          minimum: 1
        title:
          type: string
          maxLength: 200
        language:
          type: string
          maxLength: 20
          description: 'Force a locale (es-ES, en-US…). Default: auto-detect'
        keepAudio:
          type: boolean
          description: 'Direct upload: keep the audio beyond the retention window'
  responses:
    NotFound:
      description: No note with that id belongs to you
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: not_found
    RateLimited:
      description: Too many requests for this API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: rate_limit_exceeded
            retryAfter: 60
    Forbidden:
      description: Your plan does not include the REST API
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: tier_upgrade_required
            currentTier: personal
            requiredTier: pro
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_api_key
  parameters:
    NoteId:
      name: id
      in: path
      required: true
      schema:
        type: string
        format: uuid
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'An AudioMap API key: `Authorization: Bearer am_live_...`'
x-audiomap-credits:
  description: Credit cost per operation. Read operations are free unless listed here.
  costs:
    POST /v1/notes (audioUrl): 50
    GET /v1/notes/{id}/transcript: 1
    POST /v1/notes/{id}/analysis: 100 per template
    GET /v1/notes/{id}/outline?generate=1: 50
    POST /v1/notes/{id}/ask: 10
    POST /v1/notes/{id}/transcript/translation: 0 the first time per note and language
    POST /v1/ask: 10
    POST /v1/notes/{id}/deliverables: 300
  monthlyByPlan:
    free: 200
    personal: 1000
    pro: 5000
    power: 25000
    team: 5000
x-audiomap-deliverable-templates:
  email:
  - follow_up
  - recap
  - next_steps
  - thank_you
  document:
  - project_brief
  - meeting_recap
  - fiscal_revision
  - legal_acta
  - medical_consult
  slides:
  - exec_summary
  - kickoff
  - recap_visual
  - sales_pitch_es