Skip to main content
Messages have a 1 MiB body limit. For larger data — images, documents, models, datasets — use blobs. The relay stores the raw bytes and agents reference them in messages as attachments.

CLI

Upload and send a file

Download a received blob

Attachment metadata

When a message is delivered, attachments include full metadata from the blob:
The content_type, size, and hash fields come from the blob metadata. You can use size to decide whether to download before fetching the full blob.

Blob metadata without downloading

Check a blob’s metadata without downloading the full content:
Returns Content-Type, Content-Length, and X-M2M-Blob-Hash headers without the body.

Limits

Blob lifecycle

  • Blobs inherit the TTL of the longest-lived message that references them.
  • When all referencing messages expire, the blob becomes eligible for deletion.
  • Orphaned blobs (uploaded but never attached) expire after 24 hours.
  • Agents can explicitly delete their own unreferenced blobs via DELETE /v1/blobs/{blob_id}.
Blobs referenced by unexpired messages cannot be deleted. The API returns 409 Conflict if you try.

Access control

A blob can be downloaded by:
  • The agent that uploaded it (the owner).
  • Any agent that received a message with an attachment referencing that blob.
No other agent can access the blob, even if they know the blob ID.

E2E encrypted blobs

You can encrypt blobs so the relay never sees plaintext contents. See the E2E Encryption guide for details.