Developers

Memocore API

The REST API reads and writes the same memory your team uses in ChatGPT, Claude and other AI apps. Give a chatbot your knowledge base, save data from your own app or work with table projects from a script.

Base URL
https://memocore.ai/api/v1

Requests and responses are JSON. Send request bodies with Content-Type: application/json.

Authentication

Every request needs a company API key, sent as a Bearer token in the Authorization header.

Header
Authorization: Bearer YOUR_KEY

API keys come with the Team plan. In your company workspace open Integration, then Catalog, then API key. Choose the projects the key may use and copy the key.

A key sees only the projects you chose for it. Anything outside them answers 404, as if it did not exist.

The key is shown only once, so copy it right away. You can issue as many keys as you need.

Pricing

The API comes with the Team plan at $15 per seat per month. There is no extra charge per request.

Each key can make up to 100 requests per second.

A new company workspace starts with a 30-day free trial, no card needed.

See the Team plan

Errors and limits

Errors come back with an HTTP status and a short message that says what to fix.

StatusMeaning
400The request is invalid: a missing field, a wrong type or a value out of range.
401The API key is missing or not valid.
402The team subscription is inactive. Renew it to use API keys.
404Not found, or outside the projects the key may use.
409A conflict: the key covers several projects and the request needs a project_id, the memo is already archived, or a table row repeats a value in a unique column. In the last case the answer carries the memo_id of the existing row.
429More than 100 requests per second with one key. Slow down and try again.

Memo search, row queries and tag lists take limit (1 to 90, default 30) and skip for paging. The project list comes back whole.

AI apps (MCP)

Connecting an AI app rather than your own code? Add the MCP endpoint to ChatGPT, Claude, Cursor or another app that supports MCP. Setup guides for each app are on the MCP page.

MCP
https://memocore.ai/mcp
Open the MCP guide

Search memos

GET/memos

Search the key’s projects by meaning and keywords together. Without a query it lists memos, newest first. Results carry a preview, not the full text: get a memo for its content.

Query parameters

  • querystring

    Text to search for. Up to 400 characters count toward search by meaning. Omit it to list memos.

  • project_idstring

    Search only these projects. Repeat the parameter for several.

  • tagsstring

    Tag ids an item must carry, all of them. Repeat the parameter for several.

  • exclude_tagsstring

    Tag ids to leave out. An item with any of them is skipped. Repeat the parameter for several.

  • semanticboolean

    Set to false for keyword search only. Search by meaning also falls back to keywords on its own when the monthly search budget is used up.

  • archivedboolean

    Set to true to search only archived memos.

  • limitnumber

    Results per page, 1 to 90. Default 30.

  • skipnumber

    Results to skip, for paging.

Request
curl "https://memocore.ai/api/v1/memos?query=refund%20policy&limit=5" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "items": [
    {
      "id": "6a5f648163d783ad68709520",
      "title": "Refund policy",
      "preview": "Refunds are possible within 30 days of purchase.",
      "tags": [{ "id": "6a5f636c63d783ad6870943a", "name": "support" }],
      "project": { "id": "6a5f62c463d783ad68709363", "name": "Help center" },
      "has_files": false,
      "created_at": "2026-10-01T09:30:00.000Z",
      "updated_at": "2026-10-12T14:02:00.000Z"
    }
  ],
  "count": 1
}

Create a memo

POST/memos

Save a memo to one of the key’s projects. For a table project, send the row as fields instead of content.

Body

  • project_idstring

    Where to save the memo. Needed when the key covers several projects: without it the answer is 409 with the projects to choose from.

  • contentstring

    The memo text, up to 100,000 characters. Required unless you send fields.

  • titlestring

    Title of the memo.

  • previewstring

    A short summary shown in search results, up to 200 characters. It stays empty unless you send it.

  • metastring

    Search hints: keywords and questions people may ask. Weighted highest in search and never shown.

  • fieldsobject

    For a table project: the row as column name → value.

  • tagsstring[]

    Tag ids from the same project.

  • expires_instring

    Archive the memo automatically after this time: 30m, 2h, 3d or 1w, up to 365d. Send none to remove the timer.

  • changesstring

    The line written to the memo’s history and the project activity feed.

Request
curl -X POST "https://memocore.ai/api/v1/memos" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": "6a5f62c463d783ad68709363",
    "title": "Refund policy",
    "content": "Refunds are possible within 30 days of purchase.",
    "preview": "Refunds are possible within 30 days of purchase.",
    "changes": "Added the refund policy"
  }'
Response
{
  "id": "6a5f648163d783ad68709520",
  "title": "Refund policy",
  "content": "Refunds are possible within 30 days of purchase.",
  "preview": "Refunds are possible within 30 days of purchase.",
  "tags": [],
  "links": [],
  "linked_by": [],
  "files": [],
  "project": { "id": "6a5f62c463d783ad68709363", "name": "Help center" },
  "created_at": "2026-10-23T10:00:00.000Z",
  "updated_at": "2026-10-23T10:00:00.000Z"
}

Get a memo

GET/memos/:id

The full content of one memo, with its tags, links and files.

Path parameters

  • idstringrequired

    Memo id.

Request
curl "https://memocore.ai/api/v1/memos/6a5f648163d783ad68709520" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "id": "6a5f648163d783ad68709520",
  "title": "Refund policy",
  "content": "Refunds are possible within 30 days of purchase.",
  "preview": "Refunds are possible within 30 days of purchase.",
  "tags": [{ "id": "6a5f636c63d783ad6870943a", "name": "support" }],
  "links": [],
  "linked_by": [],
  "files": [],
  "project": { "id": "6a5f62c463d783ad68709363", "name": "Help center" },
  "created_at": "2026-10-01T09:30:00.000Z",
  "updated_at": "2026-10-12T14:02:00.000Z"
}

Update a memo

PUT/memos/:id

Change only the fields you send. The edit is recorded in the memo’s history.

Path parameters

  • idstringrequired

    Memo id.

Body

  • contentstring

    New memo text. Cannot be empty.

  • titlestring

    Title of the memo.

  • previewstring

    A short summary shown in search results, up to 200 characters. It stays empty unless you send it.

  • metastring

    Search hints: keywords and questions people may ask. Weighted highest in search and never shown.

  • fieldsobject

    For a table project: the row as column name → value.

  • tagsstring[]

    Tag ids from the same project.

  • expires_instring

    Archive the memo automatically after this time: 30m, 2h, 3d or 1w, up to 365d. Send none to remove the timer.

  • changesstring

    The line written to the memo’s history and the project activity feed.

Request
curl -X PUT "https://memocore.ai/api/v1/memos/6a5f648163d783ad68709520" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Refunds are possible within 45 days of purchase.",
    "changes": "Extended the refund window"
  }'
Response
{
  "id": "6a5f648163d783ad68709520",
  "title": "Refund policy",
  "content": "Refunds are possible within 45 days of purchase.",
  "tags": [{ "id": "6a5f636c63d783ad6870943a", "name": "support" }],
  "links": [],
  "linked_by": [],
  "files": [],
  "project": { "id": "6a5f62c463d783ad68709363", "name": "Help center" },
  "created_at": "2026-10-01T09:30:00.000Z",
  "updated_at": "2026-10-23T10:05:00.000Z"
}

Archive a memo

DELETE/memos/:id

Move a memo to the archive. It is erased automatically after 45 days.

Path parameters

  • idstringrequired

    Memo id.

Request
curl -X DELETE "https://memocore.ai/api/v1/memos/6a5f648163d783ad68709520" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "id": "6a5f648163d783ad68709520",
  "status": "archived",
  "purge_after": "2026-12-07T10:10:00.000Z"
}

List projects

GET/projects

The projects this key may use, with their type: memos or table.

Request
curl "https://memocore.ai/api/v1/projects" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "items": [
    { "id": "6a5f62c463d783ad68709363", "name": "Help center", "description": "Answers for customers", "type": "memos" },
    { "id": "6a6194601cabf000d5fee17c", "name": "Leads", "description": "Sales pipeline", "type": "table" }
  ]
}

Get a project

GET/projects/:id

One project. For a table project the response includes its columns.

Path parameters

  • idstringrequired

    Project id.

Request
curl "https://memocore.ai/api/v1/projects/6a6194601cabf000d5fee17c" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "id": "6a6194601cabf000d5fee17c",
  "name": "Leads",
  "description": "Sales pipeline",
  "type": "table",
  "columns": [
    { "id": "6a6194601cabf000d5fee17d", "name": "Status", "description": "", "type": "select", "required": true, "unique": false, "options": ["new", "won", "lost"] },
    { "id": "6a6194601cabf000d5fee17e", "name": "Amount", "description": "Deal size in USD", "type": "number", "required": false, "unique": false, "options": [] }
  ]
}

Query table rows

POST/projects/:id/rows/query

Filter, sort and page through the rows of a table project. Send aggregate to get counts and totals instead of rows.

Path parameters

  • idstringrequired

    Project id of a table project.

Body

  • whereobject

    Up to 20 conditions in total, joined by mode: and (all must match, the default) or or (any one is enough). A condition is column, op and value; op is =, !=, >, >=, <, <=, in, contains, empty or not_empty. Conditions can be grouped one level deep.

  • sortobject[]

    Up to 3 columns, each with order asc or desc. Default: newest first.

  • columnsstring[]

    Return only these columns in each row.

  • tagsstring[]

    Tag ids an item must carry, all of them.

  • exclude_tagsstring[]

    Tag ids to leave out. An item with any of them is skipped.

  • archivedboolean

    Set to true to query only archived rows.

  • group_byobject[]

    With aggregate: up to 2 columns to group by. A datetime column takes a step: day, week, month or year.

  • aggregateobject[]

    Up to 5 of count, sum, avg, min and max. Results are keyed like count or sum_Amount, up to 100 groups.

  • timezonestring

    IANA timezone for grouping dates, for example Europe/Berlin. Default UTC.

  • limitnumber

    Rows per page, 1 to 90. Default 30.

  • skipnumber

    Results to skip, for paging.

Request
curl -X POST "https://memocore.ai/api/v1/projects/6a6194601cabf000d5fee17c/rows/query" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "where": { "conditions": [{ "column": "Status", "op": "=", "value": "new" }] },
    "sort": [{ "column": "Amount", "order": "desc" }],
    "limit": 10
  }'
Response
{
  "columns": [ … ],
  "rows": [
    {
      "id": "6ac4bc268fa4c72b3756aef8",
      "title": "Acme Inc.",
      "fields": { "Status": "new", "Amount": 12000 },
      "tags": [],
      "created_at": "2026-10-20T08:15:00.000Z",
      "updated_at": "2026-10-21T11:40:00.000Z"
    }
  ],
  "total": 1
}

List tags

GET/tags

Search or list the tags in the key’s projects. Use tag ids to filter memos and rows.

Query parameters

  • querystring

    Text to look for in tag names. Omit it to list tags.

  • limitnumber

    Results per page, 1 to 90. Default 30.

  • skipnumber

    Results to skip, for paging.

Request
curl "https://memocore.ai/api/v1/tags?query=support" \
  -H "Authorization: Bearer YOUR_KEY"
Response
{
  "items": [
    {
      "id": "6a5f636c63d783ad6870943a",
      "name": "support",
      "context": "Customer questions and answers",
      "project_id": "6a5f62c463d783ad68709363",
      "created_at": "2026-09-14T12:00:00.000Z",
      "updated_at": "2026-09-14T12:00:00.000Z"
    }
  ]
}