Reference memory for AI creative agents

Turn any public video into a reference your agent can cite.

Give Refmatter a URL. Get back a verified reference: the source as it was observed, the media itself with a poster frame, and provenance that says how and when it was acquired. Through a REST API, a TypeScript SDK, and MCP.

resolve.ts@refmatter/sdk
// npm install @refmatter/sdk
import { Refmatter } from '@refmatter/sdk';

const refmatter = new Refmatter({ apiKey });
const { reference } = await refmatter.resolve(
  'https://www.youtube.com/watch?v=jNQXAC9IVRw',
);
referenceapplication/json
{
  "state": "ready",
  "platform": "youtube",
  "sourceObserved": { "title": "Me at the zoo", "durationSeconds": 19, … },
  "machineDerived": { "container": "mp4", "width": 320, "height": 240, … },
  "provenance": { "contentHash": "sha256:…", "acquiredAt": "2026-09-14T14:21:49Z" },
  "mediaAvailability": "ready",
  "mediaHold": { "expiresAt": "2026-10-14T14:21:49Z" },
  …
}

What comes back

One URL in. One reference out, with everything a creative agent needs to trust it.

ObservedThe source, as it was
Title, description, channel, publish time, and counts exactly as the source served them at acquisition. Missing values stay null; nothing is guessed.
MediaVerified bytes and a poster
The video itself, transferred through our own pipeline, decoded to prove it plays, with a poster frame. 480p analysis copies by default, 1080p when you ask.
ProvenanceEvidence you can cite
Content hash, capture timestamp, source route and contract version travel with every reference, so a generator’s input can always be traced back.
YoursNotes, tags, a title
Human-authored fields that a refresh never overwrites, written with optimistic concurrency so two tools cannot clobber each other.

Built for agents

Three ways in. One contract underneath.

REST API

Idempotent imports, a cursor-paged catalog, media holds, and download URLs. Every route is described in the OpenAPI document served by the API itself.

GET api.refmatter.com/openapi.jsonAPI reference ↗

TypeScript SDK

Generated from the contract, so it cannot drift. One call from URL to reference, typed errors with a retryable flag, the raw client when you need it.

npm install @refmatter/sdkSDK guide ↗

MCP server

The same operations as tools for Claude, Cursor, or your own agent. Each client brings its own workspace key; the server holds none.

claude mcp add --transport http refmatter …/mcpConnect an agent ↗

Sources

Honest about what a source will give.

Only public, unauthenticated content, acquired through our own tooling. No accounts, cookies, client emulation, or rotating proxy pools. When a source will not serve something publicly, you get a stable failure code, not a half-empty result.

  • YouTubePublic videos and ShortsEarly access
  • VimeoPublic videosPlanned
  • TikTokPublic videos and profilesPlanned
  • InstagramPublic post or reel by URLPlanned
  • Reddit, PinterestPosts, pins, boardsPlanned
  • Ad librariesMeta, TikTok, GooglePlanned

Retention you control

Derivatives stay. Bytes are time-boxed.

Metadata, poster, provenance, and your notes live as long as the reference. The video bytes exist only under a media hold you own: 30 days by default, extendable to 365, releasable any time. No standing archive of other people’s video, and a takedown path that acts within 24 hours.

Read the retention and takedown policy
Kept with the reference
Observed metadata, poster frame, provenance, machine-derived facts, annotations
Held while you say so
Verified video bytes, 30–365 days, then deleted and reported as expired
Never built
A permanent library of third-party media

Early access

Building with the first creative teams.

Refmatter is in early access. YouTube is live; the next sources follow the teams that ask for them. Tell us what your agents need to remember.