Upsert a document | Context Link

Upsert markdown by a stable UID whenever the source data changes.

The UID is yours, so re-pushing the same document updates it rather than adding a duplicate, and re-pushing unchanged content costs nothing.

Request fields

connection_id·integer

Required, in the path. The CONN_ID returned when you created the connection.

uid·string

Required, in the path. Your own stable id for the document, 1 to 255 characters of a-z, 0-9, hyphen, underscore or dot. Re-using it updates that document rather than adding another.

title·string

Required. The document's title, up to 255 characters.

body·string

Required. The document as markdown, up to 100KB. An empty body is a 422: delete the post instead.

Response fields

status·string

What the upsert did: created, updated, or unchanged when the content matched what was already indexed.

post·object

The post as it now stands.

post.uid·string

The stable UID you addressed the post with.

post.title·string

The title you sent with this upsert.

post.chunk_count·integer

Embedded passages the body was split into.

post.will_index·boolean

Whether the post is included in the index; an excluded post is a 409 rather than an upsert.

post.created_at·timestamp

When the post was first pushed.

post.updated_at·timestamp

When the post was last written.

A 201 means the post was created; an existing uid answers 200 with status of updated, or unchanged when the content already matched.

No polling step

Chunking and embedding happen inside the request, so once you have a 201 that content is already searchable by /context and /question.

For small ad-hoc notes you want back word for word rather than retrieved by meaning, use a namespace instead of a document.

Quotas

Standard custom-connection quotas apply: 1,000 posts and 100MB per connection, 100KB per post body, up to 6 custom connections per API account.