1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <!-- TODO: Set the document title to the name of your application --> 7 <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 8 <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> 9 <meta name="apple-mobile-web-app-capable" content="yes" /> 10 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> 11 <meta name="apple-mobile-web-app-title" content="Parchment" /> 12 <title>Parchment</title> 13 <meta name="description" content="Simple SaaS Notion alternative: create/organize standalone pages & collections with lists, tables, graphs in a clean UI, with user accounts & API/CLI access."> 14 <meta name="author" content="Lovable" /> 15 16 <!-- TODO: Update og:title to match your application name --> 17 18 19 <meta property="og:type" content="website" /> 20 <meta property="og:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/6f427ee8-d089-4069-90d0-1fa4865472d7/id-preview-f3fc7b54--18d4bdc6-8a32-4555-aac3-02ce4bbf39ea.lovable.app-1772087109693.png"> 21 22 <meta name="twitter:card" content="summary_large_image" /> 23 <meta name="twitter:site" content="@Lovable" /> 24 <meta name="twitter:image" content="https://pub-bb2e103a32db4e198524a2e9ed8f35b4.r2.dev/6f427ee8-d089-4069-90d0-1fa4865472d7/id-preview-f3fc7b54--18d4bdc6-8a32-4555-aac3-02ce4bbf39ea.lovable.app-1772087109693.png"> 25 <meta property="og:title" content="Parchment"> 26 <meta name="twitter:title" content="Parchment"> 27 <meta property="og:description" content="Simple SaaS Notion alternative: create/organize standalone pages & collections with lists, tables, graphs in a clean UI, with user accounts & API/CLI access."> 28 <meta name="twitter:description" content="Simple SaaS Notion alternative: create/organize standalone pages & collections with lists, tables, graphs in a clean UI, with user accounts & API/CLI access."> 29
29<script type="module" crossorigin src="/assets/index-CvgahmYE.js"></script>
29 30 <link rel="stylesheet" crossorigin href="/assets/index-jC3L05Jr.css"> 31<link rel="manifest" href="/manifest.webmanifest">
31<script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script>
31</head> 32 33 <body> 34 <div id="root"></div> 35 <noscript> 36 <article id="api-docs-crawlable" aria-label="Parchment API Documentation"> 37# Parchment API 38Programmatically manage your collections, pages, and blocks. 39 40## Base URL 41https://theparchment.app/functions/v1/api 42 43## Authentication 44All requests require header: x-api-key 45 46curl -X POST https://theparchment.app/functions/v1/api \ 47 -H "Content-Type: application/json" \ 48 -H "x-api-key: pmt_your_key" \ 49 -d '{"action":"list_collections"}' 50 51## Rate Limits 52- 60 requests/minute per API key 53- 1000 requests/day per API key 54- 10KB max content per block 55- Free plan accounts are limited to 5 collections â create_collection returns HTTP 402 when the limit is reached 56 57## Actions 58- list_collections 59- create_collection 60- delete_collection 61- rename_collection 62- list_pages (response includes app_url and share_url per page) 63- create_page 64- delete_page 65- rename_page 66- get_page 67- append_blocks (adds blocks to END of page â does NOT replace existing) 68- replace_blocks (deletes all existing blocks, writes new ones in array order â use for full rewrites) 69- update_blocks (alias for append_blocks â kept for backwards compatibility) 70- delete_block 71- delete_group 72 73## move_page 74curl -X POST https://theparchment.app/functions/v1/api \ 75 -H "Content-Type: application/json" \ 76 -H "x-api-key: pmt_your_key" \ 77 -d '{"action":"move_page","page_id":"<page_id>","collection_id":"<target_collection_id>"}' 78 79## move_collection 80curl -X POST https://theparchment.app/functions/v1/api \ 81 -H "Content-Type: application/json" \ 82 -H "x-api-key: pmt_your_key" \ 83 -d '{"action":"move_collection","collection_id":"<collection_id>","workspace_id":"<target_workspace_id>"}' 84 85## Block Types 86- text 87- heading1 88- heading2 89- heading3 90- bullet_list 91- numbered_list 92- todo (checkbox) 93- quote 94- divider 95- code 96- group (container block â groups child blocks together; use group_id on child blocks to associate them) 97 98## Nested Lists (indent_level) 99bullet_list and numbered_list blocks support an indent_level field (integer, 0-4) for nested sub-lists. 100- Level 0 (default): top-level â rendered as 1, 2, 3 101- Level 1: sub-items â rendered as a, b, c 102- Level 2+: deep sub-items â rendered as i, ii, iii (roman numerals) 103Example: {"type":"numbered_list","content":"Sub-item","indent_level":1} 104 105## Block Content Format 106Block content is stored as HTML strings. Use standard HTML tags for formatting: 107- Bold: <b>bold</b> or <strong>bold</strong> 108- Italic: <i>italic</i> or <em>italic</em> 109- Strikethrough: <s>strikethrough</s> or <del>strikethrough</del> 110- Link: <a href="url">link text</a> 111- Color: <span style="color: red">colored text</span> 112 113## append_blocks example (adds to end of page) 114curl -X POST https://theparchment.app/functions/v1/api \ 115 -H "Content-Type: application/json" \ 116 -H "x-api-key: pmt_your_key" \ 117 -d '{ 118 "action": "append_blocks", 119 "page_id": "<page_id>", 120 "blocks": [ 121 { 122 "type": "heading1", 123 "content": "<span style=\"color: red\">My Red Heading</span>" 124 }, 125 { 126 "type": "text", 127 "content": "First item" 128 } 129 ] 130 }' 131 132## replace_blocks example (rewrites entire page â RECOMMENDED for full page writes) 133curl -X POST https://theparchment.app/functions/v1/api \ 134 -H "Content-Type: application/json" \ 135 -H "x-api-key: pmt_your_key" \ 136 -d '{ 137 "action": "replace_blocks", 138 "page_id": "<page_id>", 139 "blocks": [ 140 { "type": "heading1", "content": "My Page Title" }, 141 { "type": "text", "content": "First paragraph." }, 142 { "type": "divider" }, 143 { "type": "text", "content": "Second paragraph." } 144 ] 145 }' 146NOTE: update_blocks is kept as an alias for append_blocks for backwards compatibility. 147NOTE: append_blocks returns the full blocks array in its response. replace_blocks returns only {success, mode, blocks_written} â use get_page after replace_blocks if you need block IDs. 148NOTE: Every newly created page starts with an empty text block at position 0. replace_blocks removes it; append_blocks leaves it in place. 149 150## rename_page 151curl -X POST https://theparchment.app/functions/v1/api \ 152 -H "Content-Type: application/json" \ 153 -H "x-api-key: pmt_your_key" \ 154 -d '{"action":"rename_page","page_id":"<page_id>","title":"My New Title"}' 155 156## rename_collection 157curl -X POST https://theparchment.app/functions/v1/api \ 158 -H "Content-Type: application/json" \ 159 -H "x-api-key: pmt_your_key" \ 160 -d '{"action":"rename_collection","collection_id":"<
160collection_id>","name":"My Collection"}' 161 162## delete_block 163curl -X POST https://theparchment.app/functions/v1/api \ 164 -H "Content-Type: application/json" \ 165 -H "x-api-key: pmt_your_key" \ 166 -d '{"action":"delete_block","page_id":"<page_id>","block_id":"<block_id>"}' 167 168## Group Blocks 169A group block is a container (like a div) that holds child blocks together. 170Create a group block first, then append child blocks with group_id set to the group's id. 171Use delete_group to delete the group and all its children in one operation. 172 173## delete_group 174curl -X POST https://theparchment.app/functions/v1/api \ 175 -H "Content-Type: application/json" \ 176 -H "x-api-key: pmt_your_key" \ 177 -d '{"action":"delete_group","page_id":"<page_id>","group_block_id":"<group_id>"}' 178 179## Data Export 180Use list_collections to get all collections, list_pages for each collection, 181and get_page for each page (which includes all blocks with id, type, content, position). 182list_pages response includes app_url (direct editor link) and share_url (public share link, or null) per page. 183 </article> 184 </noscript> 185 </body> 186</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.