{"openapi":"3.1.0","info":{"title":"Streepaf","version":"1.0.0","description":"Shareable checklists with no accounts. A list is addressed by a secret token: vw_ reads, ed_ edits, ad_ also deletes the list and rotates its links. See /llms.txt for a prose description.","contact":{"name":"Streepaf","url":"https://streepaf.nl"}},"servers":[{"url":"https://streepaf.nl","description":"Production"}],"tags":[{"name":"Lists","description":"Create, read, share and delete lists."},{"name":"Items","description":"Add, change, cross off and reorder rows."},{"name":"Templates","description":"Built-in starting points."}],"components":{"schemas":{"List":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"emoji":{"type":["string","null"]},"version":{"type":"integer"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"expiresAt":{"type":"string"},"capability":{"type":"string","enum":["view","edit","admin"]},"tokens":{"type":"object","properties":{"view":{"type":"string"},"edit":{"type":"string"},"admin":{"type":"string"}},"required":["view"]},"links":{"type":"object","properties":{"view":{"type":"string"},"edit":{"type":"string"},"admin":{"type":"string"},"api":{"type":"string"},"events":{"type":"string"}},"required":["view","api","events"]},"stats":{"type":"object","properties":{"total":{"type":"integer"},"checked":{"type":"integer"},"sections":{"type":"integer"}},"required":["total","checked","sections"]},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"text":{"type":"string"},"total":{"type":"integer"},"checked":{"type":"integer"}},"required":["id","text","total","checked"]}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"kind":{"type":"string","enum":["item","section"]},"text":{"type":"string"},"note":{"type":"string"},"quantity":{"type":["string","null"]},"checked":{"type":"boolean"},"checkedAt":{"type":["string","null"]},"checkedBy":{"type":["string","null"]},"claimedBy":{"type":["string","null"]},"position":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","kind","text","note","quantity","checked","checkedAt","checkedBy","claimedBy","position","createdAt","updatedAt"]}}},"required":["title","description","emoji","version","createdAt","updatedAt","expiresAt","capability","tokens","links","stats","sections","items"]},"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]}}},"required":["type","title","status"]},"CreateListBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"emoji":{"type":["string","null"],"minLength":1,"maxLength":16},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"kind":{"type":"string","enum":["item","section"],"default":"item"},"text":{"type":"string","minLength":1,"maxLength":500},"note":{"type":"string","maxLength":2000},"quantity":{"type":["string","null"],"maxLength":30},"checked":{"type":"boolean"},"claimedBy":{"type":["string","null"],"minLength":1,"maxLength":50}},"required":["text"]},"maxItems":100},"template":{"type":"string"}}},"UpdateListBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"emoji":{"type":["string","null"],"minLength":1,"maxLength":16}}},"RotateResponse":{"type":"object","properties":{"tokens":{"type":"object","properties":{"view":{"type":"string"},"edit":{"type":"string"}}},"links":{"type":"object","properties":{"view":{"type":"string"},"edit":{"type":"string"}}}},"required":["tokens","links"]},"RotateTokensBody":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string","enum":["view","edit"]},"minItems":1}},"required":["tokens"]},"DuplicateListBody":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"includeChecked":{"type":"boolean","default":true},"resetChecked":{"type":"boolean","default":true}}},"ItemsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"}},"version":{"type":"integer"}},"required":["items","version"]},"Item":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"kind":{"type":"string","enum":["item","section"]},"text":{"type":"string"},"note":{"type":"string"},"quantity":{"type":["string","null"]},"checked":{"type":"boolean"},"checkedAt":{"type":["string","null"]},"checkedBy":{"type":["string","null"]},"claimedBy":{"type":["string","null"]},"position":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","kind","text","note","quantity","checked","checkedAt","checkedBy","claimedBy","position","createdAt","updatedAt"]},"CreateItemsBody":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"kind":{"type":"string","enum":["item","section"],"default":"item"},"text":{"type":"string","minLength":1,"maxLength":500},"note":{"type":"string","maxLength":2000},"quantity":{"type":["string","null"],"maxLength":30},"checked":{"type":"boolean"},"claimedBy":{"type":["string","null"],"minLength":1,"maxLength":50}},"required":["text"]},"minItems":1,"maxItems":100},"afterId":{"type":["string","null"],"pattern":"^[0-9A-Za-z]{12}$"},"beforeId":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"}},"required":["items"]},"ItemResponse":{"type":"object","properties":{"item":{"$ref":"#/components/schemas/Item"},"version":{"type":"integer"}},"required":["item","version"]},"UpdateItemBody":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":500},"note":{"type":"string","maxLength":2000},"quantity":{"type":["string","null"],"maxLength":30},"checked":{"type":"boolean"},"checkedBy":{"type":["string","null"],"minLength":1,"maxLength":50},"claimedBy":{"type":["string","null"],"minLength":1,"maxLength":50}}},"DeletedResponse":{"type":"object","properties":{"deletedIds":{"type":"array","items":{"type":"string"}},"version":{"type":"integer"}},"required":["deletedIds","version"]},"CheckBody":{"type":"object","properties":{"by":{"type":"string","minLength":1,"maxLength":50}}},"MoveItemBody":{"type":"object","properties":{"afterId":{"type":["string","null"],"pattern":"^[0-9A-Za-z]{12}$"},"beforeId":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"}}},"BulkCheckBody":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"minItems":1,"maxItems":500},"checked":{"type":"boolean"},"by":{"type":"string","minLength":1,"maxLength":50}},"required":["ids","checked"]},"BulkDeleteBody":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"minItems":1,"maxItems":500}},"required":["ids"]},"ReorderBody":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"minItems":1,"maxItems":500}},"required":["ids"]},"VersionResponse":{"type":"object","properties":{"version":{"type":"integer"}},"required":["version"]},"TemplateSummary":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":"string"},"lang":{"type":"string"},"itemCount":{"type":"integer"}},"required":["id","title","emoji","description","lang","itemCount"]},"Template":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":"string"},"lang":{"type":"string"},"itemCount":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[0-9A-Za-z]{12}$"},"kind":{"type":"string","enum":["item","section"],"default":"item"},"text":{"type":"string","minLength":1,"maxLength":500},"note":{"type":"string","maxLength":2000},"quantity":{"type":["string","null"],"maxLength":30},"checked":{"type":"boolean"},"claimedBy":{"type":["string","null"],"minLength":1,"maxLength":50}},"required":["text"]}}},"required":["id","title","emoji","description","lang","itemCount","items"]}},"parameters":{}},"paths":{"/api/lists":{"post":{"tags":["Lists"],"summary":"Create a list","description":"Creates a list and returns its three links. This is the only response that ever contains the edit and admin tokens, so store them: they are hashed at rest and cannot be shown again.","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateListBody"}}}},"responses":{"201":{"description":"The new list, including all three tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}":{"get":{"tags":["Lists"],"summary":"Read a list","description":"Returns the list with its items in order. The ETag is the list version; pass it back as If-None-Match to get a 304.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"responses":{"200":{"description":"The list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"304":{"description":"Not modified."},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Lists"],"summary":"Rename a list or change its description or emoji","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateListBody"}}}},"responses":{"200":{"description":"The updated list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"If-Match did not equal the current version."},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Lists"],"summary":"Delete a list permanently","description":"Requires the admin token (ad_). This cannot be undone.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"responses":{"204":{"description":"Deleted."},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/rotate":{"post":{"tags":["Lists"],"summary":"Issue fresh view or edit links","description":"Requires the admin token. Old links of the rotated kinds stop working immediately, which is how you recover from an edit link that leaked.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateTokensBody"}}}},"responses":{"200":{"description":"The new tokens and links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/duplicate":{"post":{"tags":["Lists"],"summary":"Copy a list into a new one","description":"The copy gets fresh tokens. Handy for reusing a packing list.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateListBody"}}}},"responses":{"201":{"description":"The new list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/export":{"get":{"tags":["Lists"],"summary":"Export a list as markdown, plain text or JSON","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","enum":["markdown","text","json"],"default":"markdown"},"required":false,"name":"format","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"download","in":"query"}],"responses":{"200":{"description":"The rendered list.","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items":{"post":{"tags":["Items"],"summary":"Add one or more items","description":"Adds items at the end by default. Pass afterId to insert after an item, beforeId to insert before one, or afterId: null to insert at the top. Set kind to \"section\" to add a heading.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateItemsBody"}}}},"responses":{"201":{"description":"The created items.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/{itemId}":{"get":{"tags":["Items"],"summary":"Read one item","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"}],"responses":{"200":{"description":"The item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Item"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Items"],"summary":"Change an item","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateItemBody"}}}},"responses":{"200":{"description":"The updated item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Items"],"summary":"Delete an item","description":"Deleting a section leaves its items in place unless deleteSectionItems is true.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"deleteSectionItems","in":"query"}],"responses":{"200":{"description":"The deleted item ids.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/{itemId}/check":{"post":{"tags":["Items"],"summary":"Cross off an item","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckBody"}}}},"responses":{"200":{"description":"The updated item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/{itemId}/uncheck":{"post":{"tags":["Items"],"summary":"Restore an item","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckBody"}}}},"responses":{"200":{"description":"The updated item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/{itemId}/move":{"post":{"tags":["Items"],"summary":"Move an item","description":"Pass afterId to place it after an item, beforeId to place it before one, afterId: null for the top, or an empty body for the bottom.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"},{"schema":{"type":"string","pattern":"^[0-9A-Za-z]{12}$","example":"k3Zp9QaB2xLm"},"required":true,"name":"itemId","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveItemBody"}}}},"responses":{"200":{"description":"The moved item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/check":{"post":{"tags":["Items"],"summary":"Check or uncheck many items at once","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCheckBody"}}}},"responses":{"200":{"description":"The updated items.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/delete":{"post":{"tags":["Items"],"summary":"Delete many items at once","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteBody"}}}},"responses":{"200":{"description":"The deleted item ids.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/items/order":{"put":{"tags":["Items"],"summary":"Set the order of the whole list","description":"ids must contain every item in the list exactly once, sections included.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderBody"}}}},"responses":{"200":{"description":"The reordered items.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemsResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/clear-completed":{"post":{"tags":["Items"],"summary":"Delete every crossed-off item","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"responses":{"200":{"description":"The deleted item ids.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/lists/{token}/uncheck-all":{"post":{"tags":["Items"],"summary":"Restore every item, keeping the list","description":"Turns a finished packing or cleaning list back into a fresh one.","parameters":[{"schema":{"type":"string","pattern":"^(vw|ed|ad)_[0-9A-Za-z]{20}$","example":"ed_3xKq9WmZ2pLcVn7RtY4B","description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links."},"required":true,"description":"A list token. vw_ grants read-only access, ed_ grants editing, ad_ additionally allows deleting the list and rotating its links.","name":"token","in":"path"}],"responses":{"200":{"description":"How many were restored.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/VersionResponse"},{"type":"object","properties":{"changed":{"type":"integer"}},"required":["changed"]}]}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/templates":{"get":{"tags":["Templates"],"summary":"List the built-in starting points","parameters":[{"schema":{"type":"string","enum":["nl","en"]},"required":false,"name":"lang","in":"query"}],"responses":{"200":{"description":"Available templates.","content":{"application/json":{"schema":{"type":"object","properties":{"templates":{"type":"array","items":{"$ref":"#/components/schemas/TemplateSummary"}}},"required":["templates"]}}}}}}},"/api/templates/{id}":{"get":{"tags":["Templates"],"summary":"Read one template, including its items","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The template.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Template"}}}},"400":{"description":"The request body or parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The token does not grant this capability.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No such list or item.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"The request conflicts with the current list.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"A size limit would be exceeded.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"webhooks":{}}