Mem external API
The external API from Mem — 53 operation(s) for external.
The external API from Mem — 53 operation(s) for external.
openapi: 3.1.0
info:
description: The external developer API exposed through api.mem.ai. This compatibility projection remains independent from first-party product routes.
title: Mem Public Client CoreApi__service-info external API
version: 1.0.0
servers:
- url: https://api.mem.ai
security:
- bearerAuth: []
tags:
- name: external
paths:
/schema/openapi.json:
get:
operationId: getPublicClientOpenApiJson
responses:
'200':
description: Public client OpenAPI document
tags:
- external
/schema/openapi.yaml:
get:
operationId: getPublicClientOpenApiYaml
responses:
'200':
description: Public client OpenAPI document
tags:
- external
/v0:
get:
operationId: app_src_api_routes_external_v0_views_root
parameters: []
responses:
'410':
content:
application/json:
schema:
$ref: '#/components/schemas/DeprecatedRouteResponseSchema'
description: Gone
summary: Root
tags:
- external
/v0/mems:
post:
operationId: app_src_api_routes_external_v0_views_create_mem
parameters: []
responses:
'410':
content:
application/json:
schema:
$ref: '#/components/schemas/DeprecatedRouteResponseSchema'
description: Gone
summary: Create Mem
tags:
- external
/v0/mems/{mem_id}/append:
post:
operationId: app_src_api_routes_external_v0_views_append_mem
parameters:
- in: path
name: mem_id
required: true
schema:
title: Mem Id
type: string
responses:
'410':
content:
application/json:
schema:
$ref: '#/components/schemas/DeprecatedRouteResponseSchema'
description: Gone
summary: Append Mem
tags:
- external
/v0/mems/batch:
post:
operationId: app_src_api_routes_external_v0_views_batch_create_mems
parameters: []
responses:
'410':
content:
application/json:
schema:
$ref: '#/components/schemas/DeprecatedRouteResponseSchema'
description: Gone
summary: Batch Create Mems
tags:
- external
/v1/mem-it:
post:
operationId: app_src_api_routes_external_v1_mem_it_views_mem_it
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LegacyMemItRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LegacyMemItResponseSchema'
description: OK
summary: Mem It
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v1/mem-it\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --data '{\n \"input\": \"<!DOCTYPE html><html><head><title>AI Trends 2025</title>...</html>\",\n \"instructions\": \"Extract the key findings and save as a research note\",\n }'"
/v1/notes:
post:
operationId: app_src_api_routes_external_v1_notes_views_create_note
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LegacyCreateNoteRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LegacyCreateNoteResponseSchema'
description: OK
summary: Create Note
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: " curl \"https://api.mem.ai/v1/notes\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --data '{\n \"content\": \"# Sales Call with Acme Corp\n\nContact: John Smith (john@acme.com)\n\nInterested in enterprise plan. Follow up next week.\",\n \"auto_organize\": \"Add this to both my Sales and Follow-ups collections\",\n \"auto_format\": \"Format as a sales call summary with clear follow-up tasks\"\n }'\n "
/v1/notes/{note_id}:
delete:
operationId: app_src_api_routes_external_v1_notes_views_delete_note
parameters:
- in: path
name: note_id
required: true
schema:
format: uuid
title: Note Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LegacyDeleteNoteResponseSchema'
description: OK
summary: Delete Note
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v1/notes/01961d40-7a67-7049-a8a6-d5638cbaaeb9\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --request DELETE"
/v2/attachments/answer-question:
post:
description: 'Ask one focused question about a single attachment by kind and ID.
Use `attachment_kind` and `attachment_id` returned in note attachment metadata.'
operationId: app_src_api_routes_external_v2_attachments_views_answer_question_about_attachment
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AnswerQuestionAboutAttachmentRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AnswerQuestionAboutAttachmentResponseSchema'
description: OK
summary: Answer Question About Attachment
tags:
- external
/v2/attachments/read:
post:
description: 'Read structured content for a single attachment by kind and ID.
Use `attachment_kind` and `attachment_id` returned in note attachment metadata.'
operationId: app_src_api_routes_external_v2_attachments_views_read_attachment
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReadAttachmentRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReadAttachmentResponseSchema'
description: OK
summary: Read Attachment
tags:
- external
/v2/audio-recordings/{audio_recording_id}:
get:
description: Fetch the current public transcript and metadata for a single audio recording by ID.
operationId: app_src_api_routes_external_v2_audio_recordings_views_read_audio_recording
parameters:
- description: 'When true (default), transcript turns are prefixed with available speaker
labels. Labels may be participant names, generic diarization labels such as
`[Speaker 1]`, or app channel labels such as `[Speaker]` and
`[Other Speakers]`.
Participant names are included only when available; many transcripts use
generic diarization labels or app channel labels instead. Generic labels are
speaker grouping context, not verified participant identity.
When false, the same transcript content is returned without speaker labels.'
in: query
name: transcript_speaker_labels
required: false
schema:
default: true
description: 'When true (default), transcript turns are prefixed with available speaker
labels. Labels may be participant names, generic diarization labels such as
`[Speaker 1]`, or app channel labels such as `[Speaker]` and
`[Other Speakers]`.
Participant names are included only when available; many transcripts use
generic diarization labels or app channel labels instead. Generic labels are
speaker grouping context, not verified participant identity.
When false, the same transcript content is returned without speaker labels.'
title: Transcript Speaker Labels
type: boolean
- description: UUID of the audio recording to read. The caller must be able to access this recording.
in: path
name: audio_recording_id
required: true
schema:
description: UUID of the audio recording to read. The caller must be able to access this recording.
format: uuid
title: Audio Recording Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReadAudioRecordingResponseSchema'
description: OK
summary: Read Audio Recording
tags:
- external
/v2/calendar/calendars:
get:
operationId: app_src_api_routes_external_v2_calendar_views_list_calendars
parameters: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListCalendarsResponseSchema'
description: OK
summary: List Calendars
tags:
- external
/v2/calendar/calendars/settings:
post:
operationId: app_src_api_routes_external_v2_calendar_views_update_calendar_settings
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCalendarSettingsRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCalendarSettingsResponseSchema'
description: OK
summary: Update Calendar Settings
tags:
- external
/v2/calendar/connections:
get:
operationId: app_src_api_routes_external_v2_calendar_views_list_calendar_connections
parameters: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListCalendarConnectionsResponseSchema'
description: OK
summary: List Calendar Connections
tags:
- external
/v2/calendar/connections/{provider}/callback:
post:
operationId: app_src_api_routes_external_v2_calendar_views_calendar_oauth_callback
parameters:
- in: path
name: provider
required: true
schema:
title: Provider
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CalendarOAuthCallbackRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CalendarOAuthCallbackResponseSchema'
description: OK
summary: Calendar Oauth Callback
tags:
- external
/v2/calendar/connections/{provider}/connect:
post:
operationId: app_src_api_routes_external_v2_calendar_views_connect_calendar
parameters:
- in: path
name: provider
required: true
schema:
title: Provider
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectCalendarRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectCalendarResponseSchema'
description: OK
summary: Connect Calendar
tags:
- external
/v2/calendar/connections/{provider}/disconnect:
post:
operationId: app_src_api_routes_external_v2_calendar_views_disconnect_calendar
parameters:
- in: path
name: provider
required: true
schema:
title: Provider
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DisconnectCalendarRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DisconnectCalendarResponseSchema'
description: OK
summary: Disconnect Calendar
tags:
- external
/v2/calendar/events:
get:
operationId: app_src_api_routes_external_v2_calendar_views_list_calendar_events
parameters:
- description: Filter events ending at or after this time.
in: query
name: start_time
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: Filter events ending at or after this time.
title: Start Time
- description: Filter events starting at or before this time.
in: query
name: end_time
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: Filter events starting at or before this time.
title: End Time
- description: Filter by external calendar ID (provider calendar ID).
in: query
name: calendar_id
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Filter by external calendar ID (provider calendar ID).
title: Calendar Id
- description: Maximum number of events to return.
in: query
name: limit
required: false
schema:
anyOf:
- type: integer
- type: 'null'
description: Maximum number of events to return.
title: Limit
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListCalendarEventsResponseSchema'
description: OK
summary: List Calendar Events
tags:
- external
/v2/calendar/events/{event_id}:
get:
operationId: app_src_api_routes_external_v2_calendar_views_read_calendar_event
parameters:
- description: UUID of the calendar event to read.
in: path
name: event_id
required: true
schema:
description: UUID of the calendar event to read.
format: uuid
title: Event Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReadCalendarEventResponseSchema'
description: OK
summary: Read Calendar Event
tags:
- external
/v2/calendar/reconcile:
post:
operationId: app_src_api_routes_external_v2_calendar_views_reconcile_calendar
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReconcileCalendarRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReconcileCalendarResponseSchema'
description: OK
summary: Reconcile Calendar
tags:
- external
/v2/collections:
get:
description: 'List collections visible to the authenticated caller with cursor pagination.
Results are ordered by `order_by` and return `next_page` when additional rows are available.
For relevance-ranked retrieval by query, use `POST /v2/collections/search`.'
operationId: app_src_api_routes_external_v2_collections_views_list_collections
parameters:
- description: 'Maximum number of collections in this page.
Use smaller values for lower latency.
Default is 50; valid range is 1 to 100.'
in: query
name: limit
required: false
schema:
anyOf:
- maximum: 100
minimum: 1
type: integer
- type: 'null'
default: 50
description: 'Maximum number of collections in this page.
Use smaller values for lower latency.
Default is 50; valid range is 1 to 100.'
title: Limit
- description: 'Opaque cursor from a previous list response.
Omit for the first page.
IMPORTANT: Reuse with the same filters and `order_by` settings.'
in: query
name: page
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: 'Opaque cursor from a previous list response.
Omit for the first page.
IMPORTANT: Reuse with the same filters and `order_by` settings.'
title: Page
- description: 'Sort key for pagination boundaries.
Use `updated_at` (default) for recency feeds.
Use `created_at` for creation-order views.'
in: query
name: order_by
required: false
schema:
allOf:
- enum:
- created_at
- updated_at
title: CollectionListOrderBy
type: string
default: updated_at
description: 'Sort key for pagination boundaries.
Use `updated_at` (default) for recency feeds.
Use `created_at` for creation-order views.'
- description: 'Optional inclusive lower bound for collection creation time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
in: query
name: filter_by_created_after
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: 'Optional inclusive lower bound for collection creation time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
title: Filter By Created After
- description: 'Optional inclusive upper bound for collection creation time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
in: query
name: filter_by_created_before
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: 'Optional inclusive upper bound for collection creation time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
title: Filter By Created Before
- description: 'Optional inclusive lower bound for collection update time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
in: query
name: filter_by_updated_after
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: 'Optional inclusive lower bound for collection update time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
title: Filter By Updated After
- description: 'Optional inclusive upper bound for collection update time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
in: query
name: filter_by_updated_before
required: false
schema:
anyOf:
- format: date-time
type: string
- type: 'null'
description: 'Optional inclusive upper bound for collection update time (ISO 8601).
The timestamp must include a timezone offset such as `Z` or `+01:00`.'
title: Filter By Updated Before
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CollectionListResponseSchema'
description: OK
summary: List Collections
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections?limit=20\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\""
post:
description: 'Create a collection with optional caller-provided ID and timestamps.
If `id` already exists, this request returns a conflict.
Use collection membership endpoints to add, remove, or move notes between collections.'
operationId: app_src_api_routes_external_v2_collections_views_create_collection
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCollectionRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCollectionResponseSchema'
description: OK
summary: Create Collection
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --data '{\n \"title\": \"Acme Corp\"\n }'"
/v2/collections/{collection_id}:
delete:
description: 'Permanently delete a collection.
Hard-deleting removes the collection resource itself.
For membership-only changes, use note add, remove, or move collection endpoints.'
operationId: app_src_api_routes_external_v2_collections_views_delete_collection
parameters:
- description: UUID of the collection to permanently delete. Use an ID returned by create/list/search. The caller must be able to access this collection.
in: path
name: collection_id
required: true
schema:
description: UUID of the collection to permanently delete. Use an ID returned by create/list/search. The caller must be able to access this collection.
format: uuid
title: Collection Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteCollectionResponseSchema'
description: OK
summary: Delete Collection
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections/01961d40-7a67-7049-a8a6-d5638cbaaeb9\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --request DELETE"
get:
description: 'Fetch metadata for a single collection by ID.
This endpoint returns collection metadata only, not a note list for that collection.
For discovery flows, use `GET /v2/collections` or `POST /v2/collections/search`.'
operationId: app_src_api_routes_external_v2_collections_views_read_collection
parameters:
- description: UUID of the collection to read. Use an ID returned by create/list/search. The caller must be able to access this collection.
in: path
name: collection_id
required: true
schema:
description: UUID of the collection to read. Use an ID returned by create/list/search. The caller must be able to access this collection.
format: uuid
title: Collection Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReadCollectionResponseSchema'
description: OK
summary: Read Collection
tags:
- external
patch:
description: 'Update metadata for a collection by ID.
Use this endpoint to rename a collection by setting `title`.
This endpoint updates only provided fields (`title`, `description`) and leaves omitted fields unchanged.
For read-only retrieval, use `GET /v2/collections/{collection_id}`.'
operationId: app_src_api_routes_external_v2_collections_views_update_collection
parameters:
- description: UUID of the collection to update. Use an ID returned by create/list/search. The caller must be able to edit this collection.
in: path
name: collection_id
required: true
schema:
description: UUID of the collection to update. Use an ID returned by create/list/search. The caller must be able to edit this collection.
format: uuid
title: Collection Id
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCollectionRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCollectionResponseSchema'
description: OK
summary: Update Collection
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections/01961d40-7a67-7049-a8a6-d5638cbaaeb9\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --request PATCH \\\n --data '{\n \"title\": \"Acme Corp - 2026\",\n \"description\": \"Collection for 2026 Acme planning and execution notes.\"\n }'"
/v2/collections/{collection_id}/notes/{note_id}:
delete:
description: 'Remove a note from a collection while keeping both resources.
This operation only removes the membership link between IDs.
Use note/collection deletion endpoints to remove resources.'
operationId: app_src_api_routes_external_v2_collections_views_remove_note_from_collection
parameters:
- description: UUID of the collection to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
in: path
name: collection_id
required: true
schema:
description: UUID of the collection to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
format: uuid
title: Collection Id
type: string
- description: UUID of the note to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
in: path
name: note_id
required: true
schema:
description: UUID of the note to unlink. Use an ID returned by create/list/search. Caller must be able to edit the note or contribute to the collection.
format: uuid
title: Note Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RemoveNoteFromCollectionResponseSchema'
description: OK
summary: Remove Note From Collection
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections/01961d40-7a67-7049-a8a6-d5638cbaaeb9/notes/01961d40-7b6f-70dd-8a92-2ee8f7137ab5\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --request DELETE"
put:
description: 'Add an existing note to an existing collection.
This operation only creates the membership link and does not modify note or collection content.
Use create endpoints to create notes or collections.'
operationId: app_src_api_routes_external_v2_collections_views_add_note_to_collection
parameters:
- description: UUID of the collection that will receive the note. Use an ID returned by create/list/search. The caller must be able to contribute to this collection.
in: path
name: collection_id
required: true
schema:
description: UUID of the collection that will receive the note. Use an ID returned by create/list/search. The caller must be able to contribute to this collection.
format: uuid
title: Collection Id
type: string
- description: UUID of the note to add. Use an ID returned by create/list/search. The caller must be able to access this note.
in: path
name: note_id
required: true
schema:
description: UUID of the note to add. Use an ID returned by create/list/search. The caller must be able to access this note.
format: uuid
title: Note Id
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AddNoteToCollectionResponseSchema'
description: OK
summary: Add Note To Collection
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections/01961d40-7a67-7049-a8a6-d5638cbaaeb9/notes/01961d40-7b6f-70dd-8a92-2ee8f7137ab5\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --request PUT"
/v2/collections/{source_collection_id}/notes/{note_id}/move:
post:
description: 'Move a note from one collection to another collection.
This operation adds the note to the target collection, then removes it from the source collection.
It does not modify note or collection content.'
operationId: app_src_api_routes_external_v2_collections_views_move_note
parameters:
- description: UUID of the collection that currently contains the note. Caller must be able to remove the note from this collection.
in: path
name: source_collection_id
required: true
schema:
description: UUID of the collection that currently contains the note. Caller must be able to remove the note from this collection.
format: uuid
title: Source Collection Id
type: string
- description: UUID of the note to move. Use an ID returned by create/list/search.
in: path
name: note_id
required: true
schema:
description: UUID of the note to move. Use an ID returned by create/list/search.
format: uuid
title: Note Id
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MoveNoteRequestSchema'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MoveNoteResponseSchema'
description: OK
summary: Move Note
tags:
- external
x-codeSamples:
- label: cURL
lang: bash
source: "curl \"https://api.mem.ai/v2/collections/01961d40-7a67-7049-a8a6-d5638cbaaeb9/notes/01961d40-7b6f-70dd-8a92-2ee8f7137ab5/move\" \\\n --header \"Content-Type: application/json\" \\\n --header \"Authorization: Bearer $MEM_API_KEY\" \\\n --data '{\n \"target_collection_id\": \"01961d40-7c70-7ed8-8cd4-bd99203de422\"\n }'"
/v2/collections/search:
post:
description: 'Search collections using free-text relevance matching.
Returns a bounded relevance-ranked result set and does not return `next_page`.
For deterministic chronological pagination, use `GET /v2/collections`.'
operationId: app_src_api_routes_external_v2_collections_views_search_collections
parameters: []
requestBody:
content:
app
# --- truncated at 32 KB (300 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mem/refs/heads/main/openapi/mem-external-api-openapi.yml