Objects

An object is any item you've saved to your mind — a URL, note, image, or document. Every object has a type, optional content, and metadata like tags, spaces, and AI-generated fields.

The object model

Property Type Description
id Uid Unique identifier for the object.
title string Display title. Set by the user, extracted from the source URL or content, or generated by AI.
blob? BlobReference The underlying media for the object — present for uploaded files (images, video, PDFs) and similar binary content.
content? Content The content body, if the object carries inline content.
entities? Entity[] Entities associated with this object.
summary string AI generated summary of the object.
screenshot? BlobReference Screenshot captured at save time — typically the rendered view of a saved web page. Bytes can also be fetched directly via Get object screenshot.
spaces? ObjectSpace[] Spaces this object belongs to.
tags ObjectTag[] Tags associated with this object.
notes? ObjectNote[] Notes attached to this object.
source? ObjectSource The original source of the content.
bumped Timestamp When the object was last bumped. Defaults to created, then updates whenever the same content is saved again — re-posting the URL, re-uploading the blob, or otherwise resolving to an existing object (see Create an object).
created Timestamp When the object was created.
modified Timestamp When the object was last modified.
deleted? Timestamp Present only when the object has been soft-deleted. Deleted objects remain available for 30 days — they're excluded from list and search results, can still be retrieved by ID, and are permanently destroyed when the window expires. See Restore an object.

ObjectSource

Property Type Description
url string The original source URL.

ObjectSpace

Property Type Description
id Uid The space's unique identifier.

ObjectNote

Property Type Description
id Uid Unique identifier for the note.
content Content The note's body.

ObjectTag

Property Type Description
name string The tag label.
flags TagFlag How the tag was applied.

Actions

List objects

Returns all objects belonging to the authenticated user. Objects outside the access key's content scope are silently omitted from results.

GET /objects 1–250 credits

Query parameters

Parameter Type Default Description
q string Search query. See syntax.
id Uid Object IDs to fetch. Repeatable: ?id=…&id=….
spaceId Uid Restrict results to objects belonging to the given space.
similarTo Mastermind Uid Return objects related to the given object ID, ranked by similarity.
contentAs string native Format for content body. Currently text/markdown.
limit integer 10000 Max results. Capped at 10000 — the cap is removed when streaming with Accept: application/jsonl.

When q is provided, results are capped at 1000 and search costs apply. The cap is lifted in streaming mode.

Headers

Header Description
Accept required Either application/json (returns a single array) or application/jsonl (streaming mode — every matching object as newline-delimited JSON).
Response 200 OK
[
  {
    "id": "a1B2c3D4e5F6g7H8i9J0k1",
    "title": "The Art of Plain Text",
    "url": "https://example.com/plain-text",
    "content": {
      "type": "text/markdown",
      "body": "# The Art of Plain Text\n\nPlain text is the most portable, future-proof format..."
    },
    "tags": [
      { "name": "writing" },
      { "name": "tools" }
    ],
    "created": "2024-03-01T12:00:00Z",
    "modified": "2024-03-01T12:00:00Z",
    "bumped": "2024-03-01T12:00:00Z"
  }
]
Streaming response 200 OK
{"id":"a1B2c3D4e5F6g7H8i9J0k1","title":"The Art of Plain Text",…}
{"id":"z9Y8x7W6v5U4t3S2r1Q0p9","title":"Meeting notes",…}
{"id":"m5N6o7P8q9R0s1T2u3V4w5","title":"Reading list",…}

Create an object

Creates a new object from a URL, inline content, or uploaded file.

POST /objects 10–250 credits

Request body

Property Type Description
title string Display title. If omitted, it's extracted from the url or content.
spaces ObjectSpace[] Spaces to add the object to on creation.
tags ObjectTag[] Tags to attach on creation.
One of provide exactly one — combining them returns 400
blob multipart only binary Raw file bytes sent alongside the metadata. Only valid when the request is multipart/form-data — encode the metadata JSON as the metadata part and the bytes as the blob part. The filename parameter of the blob part's Content-Disposition header is captured as the blob's name. Capped at 64 MB. See supported formats.
content string | Content The content body. Pass a plain string or a structured Content object.
url string A remote URL to save.
Response 201 Created
{
  "id": "a1B2c3D4e5F6g7H8i9J0k1",
  "title": "Example Article",
  "url": "https://example.com/article",
  "tags": [
    { "name": "reading" }
  ],
  "created": "2024-04-08T09:00:00Z",
  "modified": "2024-04-08T09:00:00Z",
  "bumped": "2024-04-08T09:00:00Z"
}
Response — duplicate, existing object bumped 200 OK
{
  "id": "a1B2c3D4e5F6g7H8i9J0k1",
  "title": "Example Article",
  "url": "https://example.com/article",
  "tags": [
    { "name": "reading" }
  ],
  "created": "2024-04-08T09:00:00Z",
  "modified": "2024-04-08T09:00:00Z",
  "bumped": "2024-04-08T15:30:00Z"
}

If the request body resolves to a blob that already exists in your mind — the same URL, the same content body, or a byte-identical upload — the API returns the existing object instead of creating a duplicate, refreshes its bumped timestamp, and responds with 200 OK rather than 201 Created.

Get an object

Retrieves a single object by its ID.

GET /objects/:id 1 credit

Path parameters

Parameter Type Description
id Uid Object to retrieve.

Query parameters

Parameter Type Default Description
contentAs string native Format for content body. Currently text/markdown.
Response 200 OK
{
  "id": "a1B2c3D4e5F6g7H8i9J0k1",
  "title": "The Art of Plain Text",
  "url": "https://example.com/plain-text",
  "content": {
    "type": "text/markdown",
    "body": "# The Art of Plain Text\n\nPlain text is the most portable, future-proof format..."
  },
  "tags": [
    { "name": "writing" },
    { "name": "tools" }
  ],
  "created": "2024-03-01T12:00:00Z",
  "modified": "2024-03-01T12:00:00Z",
  "bumped": "2024-03-01T12:00:00Z"
}

Get object blob

Returns the original blob that was uploaded to the object — no transcoded or derived variants. Only works for objects with a single uploaded attachment (e.g. an image, video, or PDF); returns 422 otherwise. The response may be a 302 redirect to a CDN URL, so your client must follow redirects.

GET /objects/:id/blob 1 credit

Path parameters

Parameter Type Description
id Uid Object to fetch.
Response 200 OK
<original blob bytes>
Response — redirect 302
Location: https://mymind.media/...

Get object content

Returns the content of a text-based object. Set the Accept header to pick a format, or omit it to receive the content in its native format. Only works for text-based objects (e.g. article, note). Returns 422 for non-text types, and 406 if the requested format isn't supported.

GET /objects/:id/content 1 credit

Path parameters

Parameter Type Description
id Uid Object to read.

Headers

Header Description
Accept One of text/markdown, application/prose+json, or text/html. Omit to receive the content in its native format.
Response 200 OK
# The Art of Plain Text

Plain text is the most portable, future-proof format for writing...

Get object screenshot

Returns the screenshot captured at save time — typically the rendered view of a saved web page or article. Returns 422 for objects without a screenshot. The response may be a 302 redirect to a CDN URL, so your client must follow redirects.

GET /objects/:id/screenshot 1 credit

Path parameters

Parameter Type Description
id Uid Object to fetch.
Response 200 OK
<screenshot image bytes>
Response — redirect 302
Location: https://mymind.media/...

Get object thumbnail

Returns a thumbnail image for the object. Useful for previews, lists, and grids. Available for any object with a renderable thumbnail (images, videos, articles with cover images, etc.).

GET /objects/:id/thumbnail 1 credit

Path parameters

Parameter Type Description
id Uid Object to preview.

Query parameters

Parameter Type Default Description
size string full Containment box as WxH (e.g. 100x100). The thumbnail is scaled to fit inside this box, preserving aspect ratio — equivalent to CSS object-fit: contain. Omit for the default, pre-rendered thumbnail.
Response 200 OK
<image bytes>
Response — redirect 302
Location: https://mymind.media/...
// signed URL, valid for ~5 minutes

Update an object

Updates an object's metadata. Only include the fields you want to change — omitted fields are left untouched.

PATCH /objects/:id 2 credits

Path parameters

Parameter Type Description
id Uid Object to update.

Request body

Property Type Description
title string New display title for the object.
summary string New summary for the object.
Response 200 OK
{}

Create an object note

Appends a new note to the object's notes array and returns its assigned id. Send Markdown for a simple note, or Prose to preserve rich formatting.

UI support

Objects can hold up to 100 notes via the API, but the mymind app currently surfaces only the first one (notes[0]). Additional notes are stored and returned by the API, but won't be visible in the app until multi-note UI ships.

POST /objects/:objectId/notes 10 credits

Path parameters

Parameter Type Description
objectId Uid Object to attach the note to.

Headers

Header Description
Content-Type required Either text/markdown or application/prose+json.

Request body

The note body, in the format declared by Content-Type.

Request — Markdown
Reminders for later:

- [ ] Follow up with Sam
- [ ] Check on the proofs
Request — Prose
{
  "type": "doc",
  "content": [
    {
      "type": "paragraph",
      "content": [{ "type": "text", "text": "Reminders for later:" }]
    },
    {
      "type": "taskList",
      "content": [
        {
          "type": "taskItem",
          "attrs": { "checked": false },
          "content": [
            {
              "type": "paragraph",
              "content": [{ "type": "text", "text": "Follow up with Sam" }]
            }
          ]
        },
        {
          "type": "taskItem",
          "attrs": { "checked": false },
          "content": [
            {
              "type": "paragraph",
              "content": [{ "type": "text", "text": "Check on the proofs" }]
            }
          ]
        }
      ]
    }
  ]
}
Response 201 Created
{
  "id": "n4K8m2N6p9Q3r5T7v1X0z2"
}

Update an object note

Replaces the body of an existing note. Returns 404 if the note doesn't exist on the object. This is a full replace — not a patch.

PUT /objects/:objectId/notes/:noteId Idempotent 10 credits

Path parameters

Parameter Type Description
objectId Uid Object the note belongs to.
noteId Uid Note to update.

Headers

Header Description
Content-Type required Either text/markdown or application/prose+json.
Response 200 OK
{}

Delete an object note

Removes a note from the object's notes array. Idempotent — deleting a note that's already gone is a no-op.

DELETE /objects/:objectId/notes/:noteId Idempotent 1 credit

Path parameters

Parameter Type Description
objectId Uid Object the note belongs to.
noteId Uid Note to delete.
Response 200 OK
{}

Update object content

Replaces the entire content body of a Note. Returns 422 for any other object type. This is a full replace — not a patch. Send Markdown for a simple rewrite, or Prose to preserve rich formatting.

PUT /objects/:id/content Idempotent 20 credits

Path parameters

Parameter Type Description
id Uid Object to update.

Headers

Header Description
Content-Type required Either text/markdown or application/prose+json.
Response 200 OK
{}

Add tags to an object

Adds tags to an object.

POST /objects/:objectId/tags Idempotent 2 credits

Path parameters

Parameter Type Description
objectId Uid Object to tag.

Request body

Property Type Description
tags ObjectTag[] Tags to add to the object.
Request
{
  "tags": [
    { "name": "design" },
    { "name": "inspiration" }
  ]
}
Response 200 OK
{}

Remove tags from an object

Removes one or more tags from an object. Tags can be referenced by name or by id — mix and match within the same request. Removing a tag that isn't on the object is a no-op.

DELETE /objects/:objectId/tags Idempotent 2 credits

Path parameters

Parameter Type Description
objectId Uid Object to untag.

Request body

An array of tag references. Each entry must contain either name or id.

Request — by name
[
  { "name": "design" },
  { "name": "inspiration" }
]
Request — by id
[
  { "id": "t8R3p9K2m5N7q1V4x6L0z8" }
]
Response 200 OK
{}

Add an object to spaces

Adds an object to one or more spaces. Objects may belong to a maximum of 100 spaces.

POST /objects/:objectId/spaces Idempotent 2 credits

Path parameters

Parameter Type Description
objectId Uid Object to add.

Request body

Request
[
  { "id": "j5K6l7M8n9O0p1Q2r3S4t5" }
]
Response 200 OK
{}

Pin an object

Pins an object to your top of mind. Pass an optional position in the body to control ordering — omit it to append to the end.

POST /objects/:id/pin 3 credits

Path parameters

Parameter Type Description
id Uid Object to pin.

Request body

Property Type Description
position number Zero-based slot in your top of mind. Omit to append to the end.
Response 200 OK
{}

Unpin an object

Removes an object from your top of mind. Idempotent — unpinning an object that isn't pinned is a no-op.

DELETE /objects/:id/pin Idempotent 3 credits

Path parameters

Parameter Type Description
id Uid Object to unpin.
Response 200 OK
{}

Delete an object

Soft-deletes an object. Deleted objects are recoverable for 30 days, after which they are permanently destroyed.

DELETE /objects/:id Idempotent 1 credit

Path parameters

Parameter Type Description
id Uid Object to delete.
Response 200 OK
{}

Restore an object

Restores a deleted object. Objects can be restored within 30 days of deletion.

POST /objects/:id/restore Idempotent 1 credit

Path parameters

Parameter Type Description
id Uid Object to restore.
Response 200 OK
{}