Revise
REMOTE · MCP.REVISE.IO · SCANNED AUG 3
Collaborative word processor you can use with your agent.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS not yet verified: we couldn't determine whether a plaintext access path exists. View diagnostics → Unverified
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability72
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 4157 tokens (~218/item across 19 items; 18 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 88% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · mcp.revise.io
claude mcp add --transport http io-revise-mcp-server https://mcp.revise.io/mcp
[mcp_servers.io-revise-mcp-server] url = "https://mcp.revise.io/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-revise-mcp-server": {
"type": "remote",
"url": "https://mcp.revise.io/mcp",
"enabled": true
}
}
} openclaw mcp add io-revise-mcp-server --url https://mcp.revise.io/mcp --transport streamable-http
mcp_servers:
io-revise-mcp-server:
url: "https://mcp.revise.io/mcp" {
"mcpServers": {
"io-revise-mcp-server": {
"type": "http",
"url": "https://mcp.revise.io/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 0
- New tool “clean_document”, which the server declares destructive security
- Tool “leave_comment” rewrote its description, which is the text the model reads security
- Schema quality: 3711 → 4157 ▼ functional
- “set_page_layout” added an optional parameter “line_numbering” cosmetic
- “set_page_layout” added an optional parameter “watermark” cosmetic
- “leave_comment” added an optional parameter “acknowledge_existing_thread_ids” cosmetic
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +4
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 −1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “edit_document” rewrote its description, which is the text the model reads security
- Tool “export_document” rewrote its description, which is the text the model reads security
- Tool “read_document” rewrote its description, which is the text the model reads security
- Schema quality: 168 → 206 ▼ functional
- Schema quality: excellent → good functional
- New tool “leave_comment” functional
- New tool “style_blocks” functional
- “read_document” added an optional parameter “start_block” cosmetic
- “edit_document” reworded the description of “mode” cosmetic
- “insert_footnote” reworded the description of “mode” cosmetic
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 71
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://mcp.revise.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.revise.io | CN=Amazon RSA 2048 M04,O=Amazon,C=US | 13 Jun 2026 | 27 Dec 2026 | RSA 2048 | SHA256-RSA | 557176ae939d31fe26e80ce97fb1ef6 |
| SANs: mcp.revise.io | ||||||
| CN=Amazon RSA 2048 M04,O=Amazon,C=US (CA) | CN=Amazon Root CA 1,O=Amazon,C=US | 23 Aug 2022 | 23 Aug 2030 | RSA 2048 | SHA256-RSA | 773124f2a952e3ed18a58bdb85d1bc0ce5f27 |
| CN=Amazon Root CA 1,O=Amazon,C=US (CA) | CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US | 25 May 2015 | 31 Dec 2037 | RSA 2048 | SHA256-RSA | 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6 |
DNSSEC insecure
Validation of mcp.revise.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 57355 | 8 | Verified |
| revise.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer error="invalid_token", resource_metadata="https://mcp.revise.io/.well-known/oauth-protected-resource", scope="docs:read docs:write docs:share"
Bearer error="invalid_token", resource_metadata="https://mcp.revise.io/.well-known/oauth-protected-resource", scope="docs:read docs:write docs:share" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
Protected resource metadata
| Document | https://mcp.revise.io/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.revise.io/mcp |
| Authorisation server | https://api.revise.io |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.revise.io/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.revise.io/mcp | Inconclusive | 405 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
clean_document Clean document metadata ~243
Scrub a document before it is shared externally ("clean this document before I send it"): remove comments, resolve ALL pending tracked-change suggestions (accept or reject — everyone's, not just yours), remove hidden text (Word w:vanish), anonymize revision/comment author names to "Author", and clear document properties (title/author/company metadata from the original file). Destructive and not undoable — confirm with the user before running it. Options all default to off; enable only what the user asked to strip. Returns a summary of what was removed.
| Name | Type | Req | Description |
|---|---|---|---|
| anonymize_authors | boolean | — | Replace suggestion and comment author identities with "Author" |
| clear_core_properties | boolean | — | Wipe document properties (author, title, company, created/modified dates) |
| id | string | yes | Document ID |
| remove_comments | boolean | — | Remove all comment threads and their anchors |
| remove_hidden_text | boolean | — | Remove hidden (invisible-in-Word) text spans; footnote/endnote numerals are kept |
| resolve_suggestions | string | — | Resolve ALL pending suggestions: accept applies them, reject reverts them; omit to leave them pending |
| Name | Type | Req | Description |
|---|---|---|---|
| authorsAnonymized | integer | yes | Distinct author identities replaced with "Author" |
| commentsRemoved | integer | yes | Distinct comment threads removed |
| corePropsCleared | boolean | yes | Whether document properties (docProps/core.xml) were wiped |
| hiddenRemoved | integer | yes | Hidden text spans removed (note-reference numerals are kept) |
| status | string | yes | Scrub outcome |
| suggestionsResolved | integer | yes | Distinct pending suggestions resolved |
No examples provided.
create_document Create document (no account) ~145
Create a Revise document without a Revise account, seeded with markdown. Returns: url (give this to your user — they open it to view the document and create a free account to keep it, in one step) and edit_token (keep it; use it as your Authorization Bearer token in future requests to read and edit this document). The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| content_markdown | string | — | Initial content as markdown |
| created_by | string | — | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| title | string | yes | Document title |
| Name | Type | Req | Description |
|---|---|---|---|
| edit_token | string | yes | Bearer token scoped to this document for future read/edit calls |
| id | string | yes | Document ID |
| notes | string | yes | Human-facing claim and retention notes |
| title | string | yes | Document title |
| unlock_more | string | yes | Agent-facing guidance for authenticating to unlock more tools |
| url | string | yes | Editor URL |
No examples provided.
edit_document Edit document ~222
Apply targeted edits to a document using Markdown or HTML content. Edits land as pending tracked changes ("suggest" mode) that the owner reviews and accepts or rejects in the editor — this is the default and the right choice unless your user explicitly asks for direct edits. Pass mode "apply" only on explicit instruction (e.g. "apply it directly", "don't leave suggestions"); it writes immediately with no review step, recorded in the revision history. One exception needs no instruction: on a short/new document (under 20 words) the default is already "apply", since there is nothing meaningful to review. Get block ids from read_document with with_block_ids: true.
| Name | Type | Req | Description |
|---|---|---|---|
| edits | array | yes | Edits to perform, in order |
| id | string | yes | Document ID |
| mode | string | — | Omit for the default: suggest (tracked changes) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when your user explicitly asked for direct edits with… |
| Name | Type | Req | Description |
|---|---|---|---|
| acceptedChangeRegions | integer | — | Change regions accepted immediately |
| editsRequested | integer | — | Requested edit count |
| note | string | — | Review guidance |
| pendingSuggestionIds | array | — | Tracked-change suggestion IDs |
| status | string | yes | Whether edits were suggested or directly applied |
No examples provided.
export_document Export document ~83
Export a document by id to markdown, txt, html, docx, pdf. Markdown is returned inline. Every other format (txt, html, docx, pdf) is hosted at a temporary download URL (expires in ~24h) returned in the response, not streamed back inline.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | yes | — |
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | — | Hosted file byte length |
| content | string | — | Inline exported text content |
| download_url | string | — | Temporary download URL |
| format | string | yes | Export format |
| id | string | yes | Document ID |
| notes | string | — | Download expiry notes |
| status | string | yes | Export status |
No examples provided.
get_document_info Get document info ~37
Get a document's metadata: title, sharing state, URLs, timestamps, and word count.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Top-level block count |
| createdAt | — | — | Creation timestamp from the Revise API |
| id | string | yes | Document ID |
| isOwner | boolean | yes | Whether the current user owns the document |
| isPublic | boolean | yes | Whether the document is publicly shared |
| pages | — | yes | Rendered page count, or null in pageless mode |
| publicUrl | — | yes | Public URL, when enabled |
| readOnly | boolean | yes | Whether the current user has read-only access |
| title | string | yes | Document title |
| updatedAt | — | — | Last update timestamp from the Revise API |
| url | string | yes | Editor URL |
| words | integer | yes | Word count |
No examples provided.
get_document_outline Get document outline ~46
Get a document's heading outline with block ids and per-section word counts. Cheap way to orient in a long document before reading specific sections.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Top-level block count |
| sections | array | yes | — |
| title | — | yes | Document title |
| totalWords | integer | yes | Total word count |
No examples provided.
get_recent_changes Get recent changes ~103
See what changed in a document since YOU last looked at it — e.g. edits the human (or another collaborator) made in between. Returns added, removed, and changed blocks (with block ids), all in the accepted/projected state. Great for catching up before continuing work ("how does it look now?"). The first call on a document just establishes a baseline. Each call advances your baseline to the current state.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| added | array | — | Added blocks |
| baselineEstablished | boolean | — | True when this first call only established a baseline |
| changed | array | — | Changed blocks |
| note | string | — | Result note or truncation guidance |
| removed | array | — | Removed blocks |
| since | — | — | ISO timestamp for the previous baseline |
| summary | object | — | Exact changed-block counts |
No examples provided.
import_document Import document (no account) ~230
Create a Revise document from a file at a public http(s) URL (.md, .markdown, .txt, .html, .htm, .docx, .rtf, .odt; PDFs/images not yet supported). The server fetches the URL — file bytes are never passed inline. For a LOCAL file, use upload_document instead (it streams the file to the server). Returns the new document id and URL. Returns url (give it to your user — they view the document and create a free account to keep it, in one step) and edit_token (your Bearer token for future edits). The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| created_by | string | — | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| filename | string | — | Filename override — its extension selects the converter (otherwise taken from the URL) |
| title | string | — | Document title |
| url | string | yes | Public http(s) URL of the file for the server to fetch |
| Name | Type | Req | Description |
|---|---|---|---|
| edit_token | string | yes | Bearer token scoped to this document for future read/edit calls |
| id | string | yes | Document ID |
| notes | string | yes | Human-facing claim and retention notes |
| title | string | yes | Document title |
| unlock_more | string | yes | Agent-facing guidance for authenticating to unlock more tools |
| url | string | yes | Editor URL |
No examples provided.
insert_footnote Insert footnote ~289
Insert a footnote: a numbered superscript reference placed immediately after the anchor text inside a paragraph, plus the footnote body (shown at the bottom of the page, or as an endnote in pageless documents). On substantial documents this lands as a pending tracked change by default, like edit_document. Footnote bodies appear in read_document as [^n]: definitions with their own block ids — edit or remove them with the normal editing tools (removing a footnote body also removes its reference, and vice versa).
| Name | Type | Req | Description |
|---|---|---|---|
| block_id | string | yes | Paragraph block that gets the reference (from read_document with_block_ids) |
| find | string | yes | Anchor text inside the block; the reference is inserted right after it. Pass an empty string to append at the end of the block. |
| id | string | yes | Document ID |
| kind | string | — | Note stream: footnote (per-page bottom area, numbered 1,2,3 — default) or endnote (grouped on its own page at the document end, numbered i,ii,iii) |
| mode | string | — | Omit for the default: suggest (pending tracked change) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when your user explicitly asked for direct edi… |
| text | string | yes | Footnote body text |
| Name | Type | Req | Description |
|---|---|---|---|
| footnote_block_id | string | — | Block id of the footnote body (editable with block tools) |
| footnote_label | string | — | Display label as it appears in the text: arabic for footnotes, lowercase roman for endnotes |
| footnote_number | integer | — | Per-stream index of the new note |
| status | string | yes | inserted directly, or left as a pending tracked change |
| suggestion_id | string | — | Pending suggestion id when status is suggested |
No examples provided.
leave_comment Leave a comment ~493
Leave a review comment in a document WITHOUT changing its text — either a new thread anchored to one block, or a reply to an existing thread. Comments appear in the editor's margin attributed to you, where the owner can reply or resolve. Prefer this for passage-specific critique or questions; to propose an actual text change, use edit_document in "suggest" mode instead. To START a thread: target one block (from read_document with_block_ids: true) and exactly one anchor form — anchor_text (short text occurring exactly once in the block), anchor_start_text + anchor_end_text (boundaries of a longer range, without reproducing it), or whole_block: true (structural or empty blocks). To REPLY: pass reply_to_comment_id (a comment id from a <comment-thread> element in read_document format "html", or from an earlier leave_comment result) and no block/anchor fields. Text that already carries an unresolved <comment-thread> is already under discussion: reply to that thread rather than starting a second one over the same words, which is rejected unless you pass acknowledge_existing_thread_ids.
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_existing_thread_ids | array | — | Only for a NEW thread that deliberately overlaps existing unresolved threads: list their ids to confirm you read them and are raising a genuinely different point. Without this, a new thread over text… |
| anchor_end_text | string | — | Exact text at the end of that range (pair with anchor_start_text) |
| anchor_start_text | string | — | Exact text at the start of a longer range (pair with anchor_end_text) |
| anchor_text | string | — | Short exact text that occurs exactly once in the block; the comment anchors to it |
| block_id | string | — | Target block for a NEW thread (from read_document with_block_ids: true). Required unless replying. |
| comment | string | yes | Comment body (Markdown) |
| id | string | yes | Document ID |
| reply_to_comment_id | string | — | Reply to an existing thread instead of starting a new one: any comment id in the thread (the reply attaches to the thread root). Omit block_id and anchors when replying. |
| whole_block | boolean | — | Anchor to the entire block instead of a text range (structural or empty blocks) |
| Name | Type | Req | Description |
|---|---|---|---|
| anchored_text_range | object | — | Anchored character range within the block (text anchors only) |
| block_id | string | — | Block the comment is anchored to (new threads only) |
| comment_id | string | yes | ID of the new comment or reply |
| note | string | — | Review guidance |
| status | string | yes | commented: new thread started; replied: reply added to an existing thread |
| thread_id | string | — | Root comment id of the thread a reply was added to |
No examples provided.
read_document Read document ~355
Read a Revise document's content. Format "markdown" (default) is the simple dialect — best for plain prose; set with_block_ids to true to interleave <!-- block:xxxxxx --> anchors usable with edit_document. Format "html" is the full-fidelity dialect: compact HTML-like markup with a block id on every element plus everything markdown cannot express — rich marks, <latex> math, code block languages, merged table cells, page layout, and each comment thread inline as a <comment-thread transcript="..."> wrapper around its anchored text. Prefer html when a document uses rich features or has comments; edit_document accepts the same dialect in replacements. "text" is plain text. (For a styled, self-contained HTML file, use export_document instead.) view controls how pending tracked-change suggestions read: "final" (default, as if accepted) or "original" (as if rejected). Long documents are paginated: when a read exceeds the character budget it is cut at a block boundary and the response carries truncated: true, next_start_block, and a ready-to-run example call — repeat with start_block to continue. For a targeted read of a large document, prefer get_document_outline + search_within_document over paging through everything.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | — | — |
| id | string | yes | Document ID |
| start_block | integer | — | 0-based top-level block index to start reading from (default 0). Use the previous response's next_start_block to continue a paginated read. |
| view | string | — | Projection of pending suggestions: final = accepted (default), original = rejected |
| with_block_ids | boolean | — | Interleave block id anchors (markdown format only) |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks_included | integer | — | Top-level blocks included in this page |
| content | string | yes | Document content in the requested format |
| format | string | yes | Returned format |
| id | string | yes | Document ID |
| next_start_block | integer | — | Pass as start_block to read the next page |
| note | string | — | Pagination guidance |
| start_block | integer | — | First top-level block index included in this page |
| total_blocks | integer | — | Total top-level blocks in the document |
| truncated | boolean | — | True when the read was cut at a block boundary |
| with_block_ids | boolean | — | Whether markdown block anchors were included |
No examples provided.
rename_document Rename document ~33
Change a document's title.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| title | string | yes | New document title |
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | Rename status |
| title | string | yes | New title |
No examples provided.
replace_document_content Replace document content ~69
Replace the ENTIRE content of a document with new markdown. Destructive: existing content is removed (it remains recoverable via the document's revision history). Prefer edit_document for targeted changes.
| Name | Type | Req | Description |
|---|---|---|---|
| content_markdown | string | yes | New full document content |
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Number of blocks in the new content |
| status | string | yes | Replacement status |
No examples provided.
resolve_suggestions Accept or reject your suggestions ~218
Accept or reject the tracked-change suggestions YOU made on a document — only your own, never the user's edits or another agent's suggestions. Use this when the user approves your suggested changes (e.g. they say "lgtm" / "looks good") to apply them on their behalf, or asks you to withdraw them. Covers the whole document by default; pass block_ids to limit to specific blocks. (Edits made with edit_document in "apply" mode are already applied — this is for edits left as suggestions in "suggest" mode.)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | accept: apply your suggested changes; reject: withdraw them |
| block_ids | array | — | Limit to suggestions in these blocks (from read_document with_block_ids); omit to review the whole document |
| id | string | yes | Document ID |
| kind | string | — | Limit to one kind of change (Word-style review filter): insert = added text/blocks, delete = removed text/blocks, format = formatting-only changes; omit for all kinds |
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | — | Why no suggestions were resolved |
| resolvedChangeRegions | integer | — | Resolved change-region count |
| status | string | yes | Suggestion resolution outcome |
No examples provided.
search_within_document Search within document ~95
Find where a query matches inside one document. Returns the matching blocks as markdown with <!-- block:xxxxxx --> anchors (usable with edit_document), each with a few neighboring blocks for context. Case-insensitive.
| Name | Type | Req | Description |
|---|---|---|---|
| context_blocks | integer | — | Neighboring blocks to include on each side (default 2) |
| id | string | yes | Document ID |
| query | string | yes | Text to find (case-insensitive) |
| Name | Type | Req | Description |
|---|---|---|---|
| groups | array | — | Context groups containing matches |
| note | string | — | Result note or truncation guidance |
| query | string | yes | Search query |
| returnedMatchingBlocks | integer | — | Number of matching blocks returned in this response |
| totalMatchingBlocks | integer | yes | Matching block count |
No examples provided.
set_page_layout Set page layout ~406
Set a document's page layout: page size, orientation, margins, page numbers, line/paragraph spacing, pageless mode, or the APA-7 preset. Length values are strings with explicit units (e.g. "1in", "2.54cm", "72px").
| Name | Type | Req | Description |
|---|---|---|---|
| block_spacing | string | — | Vertical spacing between blocks, e.g. "0.125in" |
| id | string | yes | Document ID |
| line_numbering | — | — | Word-style line numbering in the left margin (pleading paper). Pass an object (possibly empty) to enable, null to disable |
| margin | string | — | Uniform margin for all sides, e.g. "1in" |
| margin_bottom | string | — | — |
| margin_left | string | — | — |
| margin_right | string | — | — |
| margin_top | string | — | — |
| note_mode | string | — | Bulk-convert every note in the document to this stream: footnotes (per-page bottom areas, numbered 1,2,3) or endnotes (grouped on their own page at the end, numbered i,ii,iii). Individual notes choos… |
| orientation | string | — | — |
| page_number_position | string | — | — |
| page_number_start | integer | — | — |
| page_size | string | — | Named page size |
| pageless | boolean | — | Enable pageless (continuous) mode |
| preset | string | — | Layout preset applied before other overrides |
| show_page_numbers | boolean | — | Show/hide page numbers (managed as an automatic header/footer page-number field slot; hand-authored header/footer content is never overwritten) |
| watermark | — | — | Diagonal page watermark text painted on every page, e.g. "DRAFT" or "CONFIDENTIAL". Also accepts a JSON settings string {text, color?, opacity?, diagonal?, fontSizePx?}. Pass "" or null to remove the… |
| Name | Type | Req | Description |
|---|---|---|---|
| applied | object | yes | Applied layout settings |
| status | string | yes | Layout update status |
No examples provided.
style_blocks Style document blocks ~277
Style existing content with forgiving CSS-lite selectors and values. Use this for bulk formatting instead of rewriting text. Block selectors include *, #blockId, p, h1-h6, li, lists, tables, and descendants. Inline selectors such as b/strong, i/em, u, s/strike/del, code, sup, sub, mark, and a target only matching formatted text ranges. Examples: set the entire document to Georgia with selectors="*" and attrs=[{"name":"fontFamily","value":"Georgia"}]; bold headings with selectors=["h1","h2","h3"] and attrs=[{"name":"fontWeight","value":"bold"}]. Formatting lands as pending tracked changes by default on substantial documents.
| Name | Type | Req | Description |
|---|---|---|---|
| attrs | array | yes | Style attributes to set |
| id | string | yes | Document ID |
| mode | string | — | Omit for the default: suggest (tracked formatting changes) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when the user explicitly asks for direct f… |
| selectors | — | yes | CSS-lite selectors: *, #blockId, p, h1-h6, li, ul, ol, pre, latex, img, table, tr, td/th, div, inline formatting tags, descendants, and :nth-child(n) |
| Name | Type | Req | Description |
|---|---|---|---|
| acceptedChangeRegions | integer | — | Formatting change regions accepted immediately |
| attributesRequested | integer | yes | Number of style attributes in the request |
| note | string | — | Review guidance |
| pendingSuggestionIds | array | — | Tracked formatting suggestion IDs |
| selectorsRequested | integer | yes | Number of selectors in the request |
| status | string | yes | Whether formatting was suggested or directly applied |
No examples provided.
upload_document Upload a document file (no account) ~190
Create a Revise document from a LOCAL file (docx, md, txt, html; PDFs/images not yet supported) without a Revise account and without putting its bytes in your context. Returns a one-time upload_url and a ready-to-run curl command — run the curl to stream the file. The curl response contains url (give it to your user — they view the document and create a free account to keep it, in one step) and edit_token (your Bearer token for future edits). For a public http(s) URL or a tiny inline file, use import_document instead. The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| created_by | string | — | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| filename | string | yes | The file's name (its extension selects the converter) |
| Name | Type | Req | Description |
|---|---|---|---|
| curl | string | yes | Ready-to-run curl command for the upload |
| expires_in | integer | yes | Seconds until the upload URL expires |
| next | string | yes | What to do after reserving the upload |
| upload_url | string | yes | One-time upload endpoint |
No examples provided.