{"openapi":"3.1.0","info":{"title":"Ainoova Tools API","version":"1","description":"One API for twelve small tools. Authenticate with an API key from Account → Claude & API: `Authorization: Bearer ainv_…`. The MCP endpoint for Claude is /api/mcp."},"servers":[{"url":"https://ainoova.com/api/v1"}],"security":[{"bearer":[]}],"paths":{"/apps":{"get":{"summary":"Every tool, its fields, settings, actions and your access","responses":{"200":{"description":"OK"}}}},"/me":{"get":{"summary":"Your account"},"patch":{"summary":"Change name or account settings (timezone, locale)"}},"/today":{"get":{"summary":"What needs you today across tools","parameters":[{"name":"apps","in":"query","schema":{"type":"string"},"description":"Comma-separated tool ids"}]}},"/activity":{"get":{"summary":"Change log (who changed what)","parameters":[{"name":"app","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer"}}]}},"/activity/{id}/undo":{"post":{"summary":"Undo a change","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/export":{"get":{"summary":"Download all your data as JSON"}},"/batch":{"post":{"summary":"Up to 200 create/update/delete operations","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"operations":{"type":"array","items":{"type":"object"}}}}}}}}},"/assets/settings":{"get":{"tags":["Assets"],"summary":"Assets settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"currency":{"description":"Currency","default":"EUR","type":["string","null"]},"upcoming_window_days":{"description":"Show as coming up within (days)","default":30,"type":["integer","null"],"minimum":7,"maximum":365}},"additionalProperties":false}}}}}},"patch":{"tags":["Assets"],"summary":"Change Assets settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currency":{"description":"Currency","default":"EUR","type":["string","null"]},"upcoming_window_days":{"description":"Show as coming up within (days)","default":30,"type":["integer","null"],"minimum":7,"maximum":365}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/assets/actions/log_step":{"post":{"tags":["Assets"],"summary":"Record progress on a workstream: appends a dated line to its log and, if given, sets the next step, its date, who you're waiting on and the status.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"stream_id":{"type":["string","null"],"description":"Id of a streams record"},"text":{"description":"What happened","type":["string","null"]},"date":{"description":"Defaults to today","type":["string","null"],"format":"date"},"next_step":{"type":["string","null"]},"due":{"type":["string","null"],"format":"date"},"waiting_on":{"type":["string","null"]},"status":{"type":"string","enum":["active","waiting","parked","done"]}},"required":["stream_id","text"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/assets/actions/portfolio":{"post":{"tags":["Assets"],"summary":"Totals across every asset (value, equity, rent, costs, cash flow) and one line per asset with its next action.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/assets/assets":{"get":{"tags":["Assets"],"summary":"List assets","description":"Something you own or manage: a flat, house, room, parking space, storage room, land or vehicle.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default name"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on kind (also kind_before / kind_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"area","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on area (also area_before / area_after for ranges)"},{"name":"address","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on address (also address_before / address_after for ranges)"},{"name":"reference","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on reference (also reference_before / reference_after for ranges)"},{"name":"lat","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on lat (also lat_before / lat_after for ranges)"},{"name":"lng","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on lng (also lng_before / lng_after for ranges)"},{"name":"map_x","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on map_x (also map_x_before / map_x_after for ranges)"},{"name":"map_y","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on map_y (also map_y_before / map_y_after for ranges)"},{"name":"ownership_pct","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on ownership_pct (also ownership_pct_before / ownership_pct_after for ranges)"},{"name":"acquired_on","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on acquired_on (also acquired_on_before / acquired_on_after for ranges)"},{"name":"purchase_price","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on purchase_price (also purchase_price_before / purchase_price_after for ranges)"},{"name":"value","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on value (also value_before / value_after for ranges)"},{"name":"value_date","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on value_date (also value_date_before / value_date_after for ranges)"},{"name":"tenant","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tenant (also tenant_before / tenant_after for ranges)"},{"name":"tenant_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tenant_id (also tenant_id_before / tenant_id_after for ranges)"},{"name":"rent_monthly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on rent_monthly (also rent_monthly_before / rent_monthly_after for ranges)"},{"name":"lease_end","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on lease_end (also lease_end_before / lease_end_after for ranges)"},{"name":"mortgage_lender","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on mortgage_lender (also mortgage_lender_before / mortgage_lender_after for ranges)"},{"name":"mortgage_balance","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on mortgage_balance (also mortgage_balance_before / mortgage_balance_after for ranges)"},{"name":"mortgage_monthly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on mortgage_monthly (also mortgage_monthly_before / mortgage_monthly_after for ranges)"},{"name":"mortgage_end","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on mortgage_end (also mortgage_end_before / mortgage_end_after for ranges)"},{"name":"ibi_yearly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on ibi_yearly (also ibi_yearly_before / ibi_yearly_after for ranges)"},{"name":"community_monthly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on community_monthly (also community_monthly_before / community_monthly_after for ranges)"},{"name":"insurance_yearly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on insurance_yearly (also insurance_yearly_before / insurance_yearly_after for ranges)"},{"name":"other_yearly","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on other_yearly (also other_yearly_before / other_yearly_after for ranges)"},{"name":"facts","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on facts (also facts_before / facts_after for ranges)"},{"name":"folder","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on folder (also folder_before / folder_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/assets_assets"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Assets"],"summary":"Create a asset","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"kind":{"description":"Kind","default":"apartment","type":"string","enum":["apartment","house","room","parking","storage","commercial","land","vehicle","boat","investment","other"]},"status":{"description":"Status. let = rented out, own_use = you live in it or use it, managed = you look after it for someone","default":"own_use","type":"string","enum":["let","vacant","own_use","managed","renovating","for_sale","prospect","sold"]},"area":{"description":"Area. City or area; groups assets on the map","type":["string","null"]},"address":{"description":"Address","type":["string","null"]},"reference":{"description":"Reference. Cadastral reference, number plate or registry number","type":["string","null"]},"lat":{"description":"Latitude. Map position; fill from the address when you can","type":["number","null"],"minimum":-90,"maximum":90},"lng":{"description":"Longitude","type":["number","null"],"minimum":-180,"maximum":180},"map_x":{"description":"Position inside its area on the schematic map (0–1), set by dragging","type":["number","null"],"minimum":0,"maximum":1},"map_y":{"type":["number","null"],"minimum":0,"maximum":1},"ownership_pct":{"description":"Your share (%)","default":100,"type":["number","null"],"minimum":0,"maximum":100},"acquired_on":{"description":"Acquired on","type":["string","null"],"format":"date"},"purchase_price":{"description":"Purchase price","type":["number","null"],"minimum":0},"value":{"description":"Current value","type":["number","null"],"minimum":0},"value_date":{"description":"Valued on","type":["string","null"],"format":"date"},"tenant":{"description":"Tenant / user. Who lives in it or uses it","type":["string","null"]},"tenant_id":{"description":"Tenant in People. Id of a people/people record","type":["string","null"]},"rent_monthly":{"description":"Rent per month","type":["number","null"],"minimum":0},"lease_end":{"description":"Lease ends","type":["string","null"],"format":"date"},"mortgage_lender":{"description":"Mortgage lender","type":["string","null"]},"mortgage_balance":{"description":"Mortgage outstanding","type":["number","null"],"minimum":0},"mortgage_monthly":{"description":"Mortgage per month","type":["number","null"],"minimum":0},"mortgage_end":{"description":"Mortgage ends","type":["string","null"],"format":"date"},"ibi_yearly":{"description":"Property tax per year. IBI, council tax, road tax for vehicles","type":["number","null"],"minimum":0},"community_monthly":{"description":"Community fees per month","type":["number","null"],"minimum":0},"insurance_yearly":{"description":"Insurance per year","type":["number","null"],"minimum":0},"other_yearly":{"description":"Other costs per year","type":["number","null"],"minimum":0},"facts":{"description":"Key facts. Short label/value pairs worth having at hand: plaza number, CUPS, policy numbers, contacts, codes","default":[],"type":"array","items":{"type":"object","properties":{"label":{"type":["string","null"]},"value":{"type":["string","null"]}},"additionalProperties":false}},"folder":{"description":"Documents folder","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/assets/assets/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Assets"],"summary":"Get a asset","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Assets"],"summary":"Update a asset (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"kind":{"description":"Kind","default":"apartment","type":"string","enum":["apartment","house","room","parking","storage","commercial","land","vehicle","boat","investment","other"]},"status":{"description":"Status. let = rented out, own_use = you live in it or use it, managed = you look after it for someone","default":"own_use","type":"string","enum":["let","vacant","own_use","managed","renovating","for_sale","prospect","sold"]},"area":{"description":"Area. City or area; groups assets on the map","type":["string","null"]},"address":{"description":"Address","type":["string","null"]},"reference":{"description":"Reference. Cadastral reference, number plate or registry number","type":["string","null"]},"lat":{"description":"Latitude. Map position; fill from the address when you can","type":["number","null"],"minimum":-90,"maximum":90},"lng":{"description":"Longitude","type":["number","null"],"minimum":-180,"maximum":180},"map_x":{"description":"Position inside its area on the schematic map (0–1), set by dragging","type":["number","null"],"minimum":0,"maximum":1},"map_y":{"type":["number","null"],"minimum":0,"maximum":1},"ownership_pct":{"description":"Your share (%)","default":100,"type":["number","null"],"minimum":0,"maximum":100},"acquired_on":{"description":"Acquired on","type":["string","null"],"format":"date"},"purchase_price":{"description":"Purchase price","type":["number","null"],"minimum":0},"value":{"description":"Current value","type":["number","null"],"minimum":0},"value_date":{"description":"Valued on","type":["string","null"],"format":"date"},"tenant":{"description":"Tenant / user. Who lives in it or uses it","type":["string","null"]},"tenant_id":{"description":"Tenant in People. Id of a people/people record","type":["string","null"]},"rent_monthly":{"description":"Rent per month","type":["number","null"],"minimum":0},"lease_end":{"description":"Lease ends","type":["string","null"],"format":"date"},"mortgage_lender":{"description":"Mortgage lender","type":["string","null"]},"mortgage_balance":{"description":"Mortgage outstanding","type":["number","null"],"minimum":0},"mortgage_monthly":{"description":"Mortgage per month","type":["number","null"],"minimum":0},"mortgage_end":{"description":"Mortgage ends","type":["string","null"],"format":"date"},"ibi_yearly":{"description":"Property tax per year. IBI, council tax, road tax for vehicles","type":["number","null"],"minimum":0},"community_monthly":{"description":"Community fees per month","type":["number","null"],"minimum":0},"insurance_yearly":{"description":"Insurance per year","type":["number","null"],"minimum":0},"other_yearly":{"description":"Other costs per year","type":["number","null"],"minimum":0},"facts":{"description":"Key facts. Short label/value pairs worth having at hand: plaza number, CUPS, policy numbers, contacts, codes","default":[],"type":"array","items":{"type":"object","properties":{"label":{"type":["string","null"]},"value":{"type":["string","null"]}},"additionalProperties":false}},"folder":{"description":"Documents folder","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Assets"],"summary":"Move a asset to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/assets/assets/{id}/restore":{"post":{"tags":["Assets"],"summary":"Restore a asset from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/assets/streams":{"get":{"tags":["Assets"],"summary":"List workstreams","description":"An ongoing thread of work on one asset (a re-let, a repair, a claim, a sale) with its next step and a dated log.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default due"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"asset_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on asset_id (also asset_id_before / asset_id_after for ranges)"},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"next_step","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on next_step (also next_step_before / next_step_after for ranges)"},{"name":"due","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on due (also due_before / due_after for ranges)"},{"name":"waiting_on","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on waiting_on (also waiting_on_before / waiting_on_after for ranges)"},{"name":"log","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on log (also log_before / log_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"link","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on link (also link_before / link_after for ranges)"},{"name":"done_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on done_at (also done_at_before / done_at_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/assets_streams"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Assets"],"summary":"Create a workstream","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"description":"Asset. Id of a assets record","type":["string","null"]},"title":{"description":"Workstream","type":["string","null"]},"status":{"description":"Status. waiting = the ball is in someone else's court","default":"active","type":"string","enum":["active","waiting","parked","done"]},"next_step":{"description":"Next step","type":["string","null"]},"due":{"description":"Next step by","type":["string","null"],"format":"date"},"waiting_on":{"description":"Waiting on","type":["string","null"]},"log":{"description":"Log","default":[],"type":"array","items":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date"},"text":{"type":["string","null"]}},"additionalProperties":false}},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"}},"required":["asset_id","title"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/assets/streams/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Assets"],"summary":"Get a workstream","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Assets"],"summary":"Update a workstream (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"description":"Asset. Id of a assets record","type":["string","null"]},"title":{"description":"Workstream","type":["string","null"]},"status":{"description":"Status. waiting = the ball is in someone else's court","default":"active","type":"string","enum":["active","waiting","parked","done"]},"next_step":{"description":"Next step","type":["string","null"]},"due":{"description":"Next step by","type":["string","null"],"format":"date"},"waiting_on":{"description":"Waiting on","type":["string","null"]},"log":{"description":"Log","default":[],"type":"array","items":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date"},"text":{"type":["string","null"]}},"additionalProperties":false}},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Assets"],"summary":"Move a workstream to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/assets/streams/{id}/restore":{"post":{"tags":["Assets"],"summary":"Restore a workstream from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/notes/settings":{"get":{"tags":["Notes"],"summary":"Notes settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"default_color":{"description":"Colour for new notes","default":"default","type":"string","enum":["default","red","orange","yellow","green","teal","blue","cerulean","purple","pink","brown","gray"]},"layout":{"description":"Layout","default":"grid","type":"string","enum":["grid","list"]},"new_checklist_items_at":{"description":"New checklist items go to the","default":"bottom","type":"string","enum":["bottom","top"]},"move_checked_to_bottom":{"description":"Move ticked items to the bottom","default":true,"type":"boolean"},"labels":{"description":"Labels. Your label list (labels used on notes are added automatically)","default":[],"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}}}},"patch":{"tags":["Notes"],"summary":"Change Notes settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"default_color":{"description":"Colour for new notes","default":"default","type":"string","enum":["default","red","orange","yellow","green","teal","blue","cerulean","purple","pink","brown","gray"]},"layout":{"description":"Layout","default":"grid","type":"string","enum":["grid","list"]},"new_checklist_items_at":{"description":"New checklist items go to the","default":"bottom","type":"string","enum":["bottom","top"]},"move_checked_to_bottom":{"description":"Move ticked items to the bottom","default":true,"type":"boolean"},"labels":{"description":"Labels. Your label list (labels used on notes are added automatically)","default":[],"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/quick_capture":{"post":{"tags":["Notes"],"summary":"Create a note from free text. Lines like '- [ ] milk' or '- milk' become a checklist; a short first line becomes the title.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":["string","null"]},"labels":{"type":"array","items":{"type":"string"}}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/labels":{"post":{"tags":["Notes"],"summary":"List every label in use with how many active notes carry it.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/rename_label":{"post":{"tags":["Notes"],"summary":"Rename a label on every note (merge into an existing label if the new name is already used).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":["string","null"]},"to":{"type":["string","null"]}},"required":["from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/duplicate":{"post":{"tags":["Notes"],"summary":"Make a copy of a note (same text, checklist, colour, labels and images; not pinned, no reminder).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Id of a notes record"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/delete_label":{"post":{"tags":["Notes"],"summary":"Remove a label from every note (the notes stay).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":["string","null"]}},"required":["label"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/attach_image":{"post":{"tags":["Notes"],"summary":"Attach an image to a note (or start a new image note when note_id is empty). Send the image as base64; JPEG, PNG, WebP or GIF up to 5 MB.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"note_id":{"type":["string","null"],"description":"Id of a notes record"},"data_base64":{"type":["string","null"]},"mime":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"width":{"type":["integer","null"],"minimum":1,"maximum":20000},"height":{"type":["integer","null"],"minimum":1,"maximum":20000}},"required":["data_base64","mime"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/actions/empty_trash":{"post":{"tags":["Notes"],"summary":"Permanently delete every note in the trash. Cannot be undone.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/notes":{"get":{"tags":["Notes"],"summary":"List notes","description":"A text note or a checklist. Deleting moves it to the trash (restorable for 30 days).","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -updated_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"body","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on body (also body_before / body_after for ranges)"},{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on kind (also kind_before / kind_after for ranges)"},{"name":"items","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on items (also items_before / items_after for ranges)"},{"name":"images","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on images (also images_before / images_after for ranges)"},{"name":"color","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on color (also color_before / color_after for ranges)"},{"name":"labels","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on labels (also labels_before / labels_after for ranges)"},{"name":"pinned","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on pinned (also pinned_before / pinned_after for ranges)"},{"name":"archived","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on archived (also archived_before / archived_after for ranges)"},{"name":"reminder_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on reminder_at (also reminder_at_before / reminder_at_after for ranges)"},{"name":"reminder_repeat","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on reminder_repeat (also reminder_repeat_before / reminder_repeat_after for ranges)"},{"name":"reminder_sent_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on reminder_sent_at (also reminder_sent_at_before / reminder_sent_at_after for ranges)"},{"name":"source","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on source (also source_before / source_after for ranges)"},{"name":"source_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on source_id (also source_id_before / source_id_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/notes_notes"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Notes"],"summary":"Create a note","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Title","type":["string","null"]},"body":{"description":"Text. Plain text; line breaks are kept","type":["string","null"]},"kind":{"description":"Kind","default":"text","type":"string","enum":["text","checklist"]},"items":{"description":"Checklist items. Used when kind is checklist","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"},"indent":{"description":"1 = sub-item of the item above","default":0,"type":["integer","null"],"minimum":0,"maximum":1}},"additionalProperties":false}},"images":{"description":"Images. Attached images, shown on top of the note. Upload with the attach_image action or POST /api/v1/files","default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"w":{"type":["integer","null"],"minimum":1,"maximum":20000},"h":{"type":["integer","null"],"minimum":1,"maximum":20000}},"additionalProperties":false}},"color":{"description":"Colour","default":"default","type":"string","enum":["default","red","orange","yellow","green","teal","blue","cerulean","purple","pink","brown","gray"]},"labels":{"description":"Labels","default":[],"type":"array","items":{"type":"string"}},"pinned":{"description":"Pinned","default":false,"type":"boolean"},"archived":{"description":"Archived","default":false,"type":"boolean"},"reminder_at":{"description":"Reminder. Notifies on your devices and shows in Today from this moment","type":["string","null"],"format":"date-time"},"reminder_repeat":{"description":"Repeat reminder","default":"none","type":"string","enum":["none","daily","weekly","monthly","yearly"]},"source":{"description":"Where the note came from, e.g. keep-import","type":["string","null"]},"source_id":{"type":["string","null"]}},"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/notes/notes/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Notes"],"summary":"Get a note","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Notes"],"summary":"Update a note (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Title","type":["string","null"]},"body":{"description":"Text. Plain text; line breaks are kept","type":["string","null"]},"kind":{"description":"Kind","default":"text","type":"string","enum":["text","checklist"]},"items":{"description":"Checklist items. Used when kind is checklist","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"},"indent":{"description":"1 = sub-item of the item above","default":0,"type":["integer","null"],"minimum":0,"maximum":1}},"additionalProperties":false}},"images":{"description":"Images. Attached images, shown on top of the note. Upload with the attach_image action or POST /api/v1/files","default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"w":{"type":["integer","null"],"minimum":1,"maximum":20000},"h":{"type":["integer","null"],"minimum":1,"maximum":20000}},"additionalProperties":false}},"color":{"description":"Colour","default":"default","type":"string","enum":["default","red","orange","yellow","green","teal","blue","cerulean","purple","pink","brown","gray"]},"labels":{"description":"Labels","default":[],"type":"array","items":{"type":"string"}},"pinned":{"description":"Pinned","default":false,"type":"boolean"},"archived":{"description":"Archived","default":false,"type":"boolean"},"reminder_at":{"description":"Reminder. Notifies on your devices and shows in Today from this moment","type":["string","null"],"format":"date-time"},"reminder_repeat":{"description":"Repeat reminder","default":"none","type":"string","enum":["none","daily","weekly","monthly","yearly"]},"source":{"description":"Where the note came from, e.g. keep-import","type":["string","null"]},"source_id":{"type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Notes"],"summary":"Move a note to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/notes/notes/{id}/restore":{"post":{"tags":["Notes"],"summary":"Restore a note from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/tasks/settings":{"get":{"tags":["Tasks"],"summary":"Tasks settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"default_list":{"description":"List for new tasks","default":"Inbox","type":["string","null"]},"show_overdue_in_today":{"description":"Show overdue tasks in Today","default":true,"type":"boolean"},"upcoming_days":{"description":"Upcoming covers (days)","default":7,"type":["integer","null"],"minimum":1,"maximum":60}},"additionalProperties":false}}}}}},"patch":{"tags":["Tasks"],"summary":"Change Tasks settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"default_list":{"description":"List for new tasks","default":"Inbox","type":["string","null"]},"show_overdue_in_today":{"description":"Show overdue tasks in Today","default":true,"type":"boolean"},"upcoming_days":{"description":"Upcoming covers (days)","default":7,"type":["integer","null"],"minimum":1,"maximum":60}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/tasks/actions/quick_add":{"post":{"tags":["Tasks"],"summary":"Create a task from a sentence: 'pay rent friday #home !high every month'. Understands today, tomorrow, weekdays, 'in N days', 'next week', YYYY-MM-DD, DD/MM, #list, !high/!medium/!low and every day/weekday/week/month/year.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":["string","null"]},"asset_id":{"description":"Optional: the asset this task is about. Id of a assets/assets record","type":["string","null"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/tasks/actions/complete":{"post":{"tags":["Tasks"],"summary":"Mark a task done (repeating tasks move to their next date). Set done=false to reopen.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Id of a tasks record"},"done":{"default":true,"type":"boolean"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/tasks/actions/lists":{"post":{"tags":["Tasks"],"summary":"Every list with its number of open tasks.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/tasks/tasks":{"get":{"tags":["Tasks"],"summary":"List tasks","description":"A to-do. Completing a repeating task moves it to its next date instead of closing it.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default due,-priority_rank,created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"due","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on due (also due_before / due_after for ranges)"},{"name":"list","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on list (also list_before / list_after for ranges)"},{"name":"priority","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on priority (also priority_before / priority_after for ranges)"},{"name":"priority_rank","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on priority_rank (also priority_rank_before / priority_rank_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"recurrence","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on recurrence (also recurrence_before / recurrence_after for ranges)"},{"name":"subtasks","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on subtasks (also subtasks_before / subtasks_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"},{"name":"asset_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on asset_id (also asset_id_before / asset_id_after for ranges)"},{"name":"stream_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on stream_id (also stream_id_before / stream_id_after for ranges)"},{"name":"done_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on done_at (also done_at_before / done_at_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/tasks_tasks"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Tasks"],"summary":"Create a task","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Task","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"due":{"description":"Due","type":["string","null"],"format":"date"},"list":{"description":"List","default":"Inbox","type":["string","null"]},"priority":{"description":"Priority","default":"none","type":"string","enum":["none","low","medium","high"]},"status":{"description":"Status","default":"open","type":"string","enum":["open","done"]},"recurrence":{"description":"Repeats","default":"none","type":"string","enum":["none","daily","weekdays","weekly","monthly","yearly"]},"subtasks":{"description":"Subtasks","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"}},"additionalProperties":false}},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this task is about (Assets tool). Id of a assets/assets record","type":["string","null"]},"stream_id":{"description":"Workstream. The asset workstream this task moves forward. Id of a assets/streams record","type":["string","null"]}},"required":["title"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/tasks/tasks/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Tasks"],"summary":"Get a task","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Tasks"],"summary":"Update a task (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Task","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"due":{"description":"Due","type":["string","null"],"format":"date"},"list":{"description":"List","default":"Inbox","type":["string","null"]},"priority":{"description":"Priority","default":"none","type":"string","enum":["none","low","medium","high"]},"status":{"description":"Status","default":"open","type":"string","enum":["open","done"]},"recurrence":{"description":"Repeats","default":"none","type":"string","enum":["none","daily","weekdays","weekly","monthly","yearly"]},"subtasks":{"description":"Subtasks","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"}},"additionalProperties":false}},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this task is about (Assets tool). Id of a assets/assets record","type":["string","null"]},"stream_id":{"description":"Workstream. The asset workstream this task moves forward. Id of a assets/streams record","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Tasks"],"summary":"Move a task to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/tasks/tasks/{id}/restore":{"post":{"tags":["Tasks"],"summary":"Restore a task from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/later/settings":{"get":{"tags":["Later"],"summary":"Later settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"fetch_titles":{"description":"Fetch page titles automatically","default":true,"type":"boolean"},"open_marks_read":{"description":"Opening a link marks it as read","default":true,"type":"boolean"}},"additionalProperties":false}}}}}},"patch":{"tags":["Later"],"summary":"Change Later settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fetch_titles":{"description":"Fetch page titles automatically","default":true,"type":"boolean"},"open_marks_read":{"description":"Opening a link marks it as read","default":true,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/later/actions/surprise":{"post":{"tags":["Later"],"summary":"Pick one random unread link, optionally within a tag.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tag":{"type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/later/links":{"get":{"tags":["Later"],"summary":"List links","description":"A saved web page.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"url","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on url (also url_before / url_after for ranges)"},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"note","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on note (also note_before / note_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"favorite","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on favorite (also favorite_before / favorite_after for ranges)"},{"name":"read_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on read_at (also read_at_before / read_at_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/later_links"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Later"],"summary":"Create a link","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"URL","type":["string","null"],"format":"uri"},"title":{"description":"Title. Filled in from the page when left empty","type":["string","null"]},"note":{"description":"Note","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"status":{"description":"Status","default":"unread","type":"string","enum":["unread","read","archived"]},"favorite":{"description":"Favourite","default":false,"type":"boolean"}},"required":["url"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/later/links/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Later"],"summary":"Get a link","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Later"],"summary":"Update a link (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"URL","type":["string","null"],"format":"uri"},"title":{"description":"Title. Filled in from the page when left empty","type":["string","null"]},"note":{"description":"Note","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"status":{"description":"Status","default":"unread","type":"string","enum":["unread","read","archived"]},"favorite":{"description":"Favourite","default":false,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Later"],"summary":"Move a link to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/later/links/{id}/restore":{"post":{"tags":["Later"],"summary":"Restore a link from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/habits/settings":{"get":{"tags":["Habits"],"summary":"Habits settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"week_starts":{"description":"Week starts on","default":"monday","type":"string","enum":["monday","sunday"]},"show_in_today":{"description":"List unfinished habits in Today","default":true,"type":"boolean"}},"additionalProperties":false}}}}}},"patch":{"tags":["Habits"],"summary":"Change Habits settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"week_starts":{"description":"Week starts on","default":"monday","type":"string","enum":["monday","sunday"]},"show_in_today":{"description":"List unfinished habits in Today","default":true,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/habits/actions/check_in":{"post":{"tags":["Habits"],"summary":"Mark a habit done for a day (default today). Set done=false to undo. Idempotent.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"habit_id":{"type":["string","null"],"description":"Id of a habits record"},"date":{"type":["string","null"],"format":"date"},"done":{"default":true,"type":"boolean"},"note":{"type":["string","null"]}},"required":["habit_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/habits/habits":{"get":{"tags":["Habits"],"summary":"List habits","description":"Something to do every day or a few times a week.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default order"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"emoji","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on emoji (also emoji_before / emoji_after for ranges)"},{"name":"target_per_week","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on target_per_week (also target_per_week_before / target_per_week_after for ranges)"},{"name":"color","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on color (also color_before / color_after for ranges)"},{"name":"archived","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on archived (also archived_before / archived_after for ranges)"},{"name":"order","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on order (also order_before / order_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/habits_habits"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Habits"],"summary":"Create a habit","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"emoji":{"description":"Emoji","type":["string","null"]},"target_per_week":{"description":"Times per week","default":7,"type":["integer","null"],"minimum":1,"maximum":7},"color":{"description":"Colour","default":"teal","type":"string","enum":["teal","amber","rose","sky","violet","lime","slate"]},"archived":{"description":"Archived","default":false,"type":"boolean"},"order":{"default":0,"type":["integer","null"]}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/habits/habits/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Habits"],"summary":"Get a habit","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Habits"],"summary":"Update a habit (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"emoji":{"description":"Emoji","type":["string","null"]},"target_per_week":{"description":"Times per week","default":7,"type":["integer","null"],"minimum":1,"maximum":7},"color":{"description":"Colour","default":"teal","type":"string","enum":["teal","amber","rose","sky","violet","lime","slate"]},"archived":{"description":"Archived","default":false,"type":"boolean"},"order":{"default":0,"type":["integer","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Habits"],"summary":"Move a habit to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/habits/habits/{id}/restore":{"post":{"tags":["Habits"],"summary":"Restore a habit from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/habits/checkins":{"get":{"tags":["Habits"],"summary":"List check-ins","description":"One habit done on one day. At most one per habit per day.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -date"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"habit_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on habit_id (also habit_id_before / habit_id_after for ranges)"},{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on date (also date_before / date_after for ranges)"},{"name":"note","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on note (also note_before / note_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/habits_checkins"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Habits"],"summary":"Create a check-in","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"habit_id":{"description":"Habit. Id of a habits record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"note":{"description":"Note","type":["string","null"]}},"required":["habit_id"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/habits/checkins/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Habits"],"summary":"Get a check-in","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Habits"],"summary":"Update a check-in (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"habit_id":{"description":"Habit. Id of a habits record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"note":{"description":"Note","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Habits"],"summary":"Move a check-in to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/habits/checkins/{id}/restore":{"post":{"tags":["Habits"],"summary":"Restore a check-in from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/journal/settings":{"get":{"tags":["Journal"],"summary":"Journal settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"prompts":{"description":"Daily prompts. One is shown per day, in rotation","default":["What gave you energy today?","What drained it?","One thing you'd do differently.","What are you looking forward to?","Who did you enjoy time with?","What did you learn?","What are you grateful for?"],"type":"array","items":{"type":"string"}},"nudge_after_hour":{"description":"Remind me in Today after (hour)","default":19,"type":["integer","null"],"minimum":0,"maximum":23}},"additionalProperties":false}}}}}},"patch":{"tags":["Journal"],"summary":"Change Journal settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompts":{"description":"Daily prompts. One is shown per day, in rotation","default":["What gave you energy today?","What drained it?","One thing you'd do differently.","What are you looking forward to?","Who did you enjoy time with?","What did you learn?","What are you grateful for?"],"type":"array","items":{"type":"string"}},"nudge_after_hour":{"description":"Remind me in Today after (hour)","default":19,"type":["integer","null"],"minimum":0,"maximum":23}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/journal/actions/today":{"post":{"tags":["Journal"],"summary":"Today's entry (or null) and today's prompt.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/journal/actions/upsert_day":{"post":{"tags":["Journal"],"summary":"Create or update the entry for a day (default today). Text is appended when append=true.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date"},"mood":{"type":["integer","null"],"minimum":1,"maximum":5},"energy":{"type":["integer","null"],"minimum":1,"maximum":5},"text":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"append":{"default":false,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/journal/actions/stats":{"post":{"tags":["Journal"],"summary":"Average mood and energy, the daily series, entry streak and tag counts over the last N days (default 30).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"days":{"default":30,"type":["integer","null"],"minimum":7,"maximum":730}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/journal/entries":{"get":{"tags":["Journal"],"summary":"List entries","description":"One journal entry per day (date is unique).","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -date"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on date (also date_before / date_after for ranges)"},{"name":"mood","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on mood (also mood_before / mood_after for ranges)"},{"name":"energy","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on energy (also energy_before / energy_after for ranges)"},{"name":"text","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on text (also text_before / text_after for ranges)"},{"name":"prompt","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on prompt (also prompt_before / prompt_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/journal_entries"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Journal"],"summary":"Create a entry","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"description":"Day. Defaults to today; one entry per day","type":["string","null"],"format":"date"},"mood":{"description":"Mood (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"energy":{"description":"Energy (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"text":{"description":"Entry","type":["string","null"]},"prompt":{"description":"Prompt answered","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/journal/entries/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Journal"],"summary":"Get a entry","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Journal"],"summary":"Update a entry (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"description":"Day. Defaults to today; one entry per day","type":["string","null"],"format":"date"},"mood":{"description":"Mood (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"energy":{"description":"Energy (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"text":{"description":"Entry","type":["string","null"]},"prompt":{"description":"Prompt answered","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Journal"],"summary":"Move a entry to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/journal/entries/{id}/restore":{"post":{"tags":["Journal"],"summary":"Restore a entry from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/renewals/settings":{"get":{"tags":["Renewals"],"summary":"Renewals settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"default_notice_days":{"description":"Default notice (days)","default":30,"type":["integer","null"],"minimum":0,"maximum":730},"upcoming_window_days":{"description":"Show as upcoming within (days)","default":60,"type":["integer","null"],"minimum":7,"maximum":365}},"additionalProperties":false}}}}}},"patch":{"tags":["Renewals"],"summary":"Change Renewals settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"default_notice_days":{"description":"Default notice (days)","default":30,"type":["integer","null"],"minimum":0,"maximum":730},"upcoming_window_days":{"description":"Show as upcoming within (days)","default":60,"type":["integer","null"],"minimum":7,"maximum":365}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/renewals/actions/renew":{"post":{"tags":["Renewals"],"summary":"Mark an item as renewed: moves due_date forward by its recurrence (or to new_due_date). Items that don't repeat become done.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Id of a items record"},"new_due_date":{"type":["string","null"],"format":"date"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/renewals/items":{"get":{"tags":["Renewals"],"summary":"List items","description":"Something that expires or renews on a date.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default due_date"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on category (also category_before / category_after for ranges)"},{"name":"due_date","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on due_date (also due_date_before / due_date_after for ranges)"},{"name":"notice_days","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notice_days (also notice_days_before / notice_days_after for ranges)"},{"name":"recurrence","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on recurrence (also recurrence_before / recurrence_after for ranges)"},{"name":"auto_renews","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on auto_renews (also auto_renews_before / auto_renews_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"reference","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on reference (also reference_before / reference_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"link","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on link (also link_before / link_after for ranges)"},{"name":"asset_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on asset_id (also asset_id_before / asset_id_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/renewals_items"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Renewals"],"summary":"Create a item","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"category":{"description":"Category","default":"other","type":"string","enum":["id","insurance","vehicle","property","contract","subscription","domain","health","tax","other"]},"due_date":{"description":"Due / expiry date","type":["string","null"],"format":"date"},"notice_days":{"description":"Notice (days). Act this many days before the due date","type":["integer","null"],"minimum":0,"maximum":730},"recurrence":{"description":"Repeats","default":"yearly","type":"string","enum":["none","monthly","quarterly","yearly","every_2_years","every_3_years","every_5_years","every_10_years"]},"auto_renews":{"description":"Renews automatically","default":false,"type":"boolean"},"status":{"description":"Status","default":"active","type":"string","enum":["active","done"]},"reference":{"description":"Reference / policy no.","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]}},"required":["name","due_date"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/renewals/items/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Renewals"],"summary":"Get a item","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Renewals"],"summary":"Update a item (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"category":{"description":"Category","default":"other","type":"string","enum":["id","insurance","vehicle","property","contract","subscription","domain","health","tax","other"]},"due_date":{"description":"Due / expiry date","type":["string","null"],"format":"date"},"notice_days":{"description":"Notice (days). Act this many days before the due date","type":["integer","null"],"minimum":0,"maximum":730},"recurrence":{"description":"Repeats","default":"yearly","type":"string","enum":["none","monthly","quarterly","yearly","every_2_years","every_3_years","every_5_years","every_10_years"]},"auto_renews":{"description":"Renews automatically","default":false,"type":"boolean"},"status":{"description":"Status","default":"active","type":"string","enum":["active","done"]},"reference":{"description":"Reference / policy no.","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Renewals"],"summary":"Move a item to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/renewals/items/{id}/restore":{"post":{"tags":["Renewals"],"summary":"Restore a item from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/subs/settings":{"get":{"tags":["Subs"],"summary":"Subs settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"base_currency":{"description":"Base currency","default":"EUR","type":["string","null"]},"fx_rates":{"description":"FX rates. Value of 1 unit of each currency in the base currency","default":{"USD":0.92,"GBP":1.17},"type":"object"},"warn_days":{"description":"Warn this many days before a charge","default":3,"type":["integer","null"],"minimum":0,"maximum":30}},"additionalProperties":false}}}}}},"patch":{"tags":["Subs"],"summary":"Change Subs settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"base_currency":{"description":"Base currency","default":"EUR","type":["string","null"]},"fx_rates":{"description":"FX rates. Value of 1 unit of each currency in the base currency","default":{"USD":0.92,"GBP":1.17},"type":"object"},"warn_days":{"description":"Warn this many days before a charge","default":3,"type":["integer","null"],"minimum":0,"maximum":30}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/subs/actions/summary":{"post":{"tags":["Subs"],"summary":"Totals per month and per year in the base currency, by category, plus subscriptions missing an FX rate.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/subs/actions/roll_forward":{"post":{"tags":["Subs"],"summary":"Move every next_charge date that is in the past forward by its cycle. Runs daily on its own.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/subs/subs":{"get":{"tags":["Subs"],"summary":"List subscriptions","description":"A recurring charge.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default next_charge"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"amount","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on amount (also amount_before / amount_after for ranges)"},{"name":"currency","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on currency (also currency_before / currency_after for ranges)"},{"name":"cycle","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on cycle (also cycle_before / cycle_after for ranges)"},{"name":"next_charge","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on next_charge (also next_charge_before / next_charge_after for ranges)"},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on category (also category_before / category_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"payment_method","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on payment_method (also payment_method_before / payment_method_after for ranges)"},{"name":"cancel_url","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on cancel_url (also cancel_url_before / cancel_url_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"asset_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on asset_id (also asset_id_before / asset_id_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/subs_subs"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Subs"],"summary":"Create a subscription","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"amount":{"description":"Amount","type":["number","null"],"minimum":0},"currency":{"description":"Currency","default":"EUR","type":["string","null"]},"cycle":{"description":"Billed","default":"monthly","type":"string","enum":["weekly","monthly","quarterly","yearly"]},"next_charge":{"description":"Next charge","type":["string","null"],"format":"date"},"category":{"description":"Category","default":"other","type":"string","enum":["software","media","utilities","finance","health","home","transport","learning","other"]},"status":{"description":"Status","default":"active","type":"string","enum":["active","trial","paused","cancelled"]},"payment_method":{"description":"Paid with","type":["string","null"]},"cancel_url":{"description":"Cancel link","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]}},"required":["name","amount"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/subs/subs/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Subs"],"summary":"Get a subscription","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Subs"],"summary":"Update a subscription (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"amount":{"description":"Amount","type":["number","null"],"minimum":0},"currency":{"description":"Currency","default":"EUR","type":["string","null"]},"cycle":{"description":"Billed","default":"monthly","type":"string","enum":["weekly","monthly","quarterly","yearly"]},"next_charge":{"description":"Next charge","type":["string","null"],"format":"date"},"category":{"description":"Category","default":"other","type":"string","enum":["software","media","utilities","finance","health","home","transport","learning","other"]},"status":{"description":"Status","default":"active","type":"string","enum":["active","trial","paused","cancelled"]},"payment_method":{"description":"Paid with","type":["string","null"]},"cancel_url":{"description":"Cancel link","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Subs"],"summary":"Move a subscription to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/subs/subs/{id}/restore":{"post":{"tags":["Subs"],"summary":"Restore a subscription from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/people/settings":{"get":{"tags":["People"],"summary":"People settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"default_cadence_days":{"description":"Default rhythm for new people (days)","default":60,"type":["integer","null"],"minimum":0,"maximum":730},"birthday_notice_days":{"description":"Show birthdays this many days ahead","default":7,"type":["integer","null"],"minimum":0,"maximum":60}},"additionalProperties":false}}}}}},"patch":{"tags":["People"],"summary":"Change People settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"default_cadence_days":{"description":"Default rhythm for new people (days)","default":60,"type":["integer","null"],"minimum":0,"maximum":730},"birthday_notice_days":{"description":"Show birthdays this many days ahead","default":7,"type":["integer","null"],"minimum":0,"maximum":60}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/people/actions/log_touch":{"post":{"tags":["People"],"summary":"Record that you were in touch with someone (default today).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"person_id":{"type":["string","null"],"description":"Id of a people record"},"channel":{"default":"other","type":"string","enum":["call","whatsapp","message","email","meeting","other"]},"note":{"type":["string","null"]},"date":{"type":["string","null"],"format":"date"}},"required":["person_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/people/actions/due":{"post":{"tags":["People"],"summary":"People due for a catch-up, most overdue first.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/people/people":{"get":{"tags":["People"],"summary":"List people","description":"Someone you want to stay in touch with.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default name"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"email","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on email (also email_before / email_after for ranges)"},{"name":"phone","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on phone (also phone_before / phone_after for ranges)"},{"name":"company","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on company (also company_before / company_after for ranges)"},{"name":"role","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on role (also role_before / role_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"},{"name":"cadence_days","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on cadence_days (also cadence_days_before / cadence_days_after for ranges)"},{"name":"last_contact","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on last_contact (also last_contact_before / last_contact_after for ranges)"},{"name":"birthday","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on birthday (also birthday_before / birthday_after for ranges)"},{"name":"notes","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on notes (also notes_before / notes_after for ranges)"},{"name":"pinned","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on pinned (also pinned_before / pinned_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/people_people"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["People"],"summary":"Create a person","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"phone":{"description":"Phone","type":["string","null"]},"company":{"description":"Company","type":["string","null"]},"role":{"description":"Role","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"cadence_days":{"description":"Catch up every (days). 0 = no rhythm","type":["integer","null"],"minimum":0,"maximum":730},"last_contact":{"description":"Last contact","type":["string","null"],"format":"date"},"birthday":{"description":"Birthday. Year is ignored; use 1900 if unknown","type":["string","null"],"format":"date"},"notes":{"description":"Notes","type":["string","null"]},"pinned":{"description":"Pinned","default":false,"type":"boolean"}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/people/people/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["People"],"summary":"Get a person","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["People"],"summary":"Update a person (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"phone":{"description":"Phone","type":["string","null"]},"company":{"description":"Company","type":["string","null"]},"role":{"description":"Role","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"cadence_days":{"description":"Catch up every (days). 0 = no rhythm","type":["integer","null"],"minimum":0,"maximum":730},"last_contact":{"description":"Last contact","type":["string","null"],"format":"date"},"birthday":{"description":"Birthday. Year is ignored; use 1900 if unknown","type":["string","null"],"format":"date"},"notes":{"description":"Notes","type":["string","null"]},"pinned":{"description":"Pinned","default":false,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["People"],"summary":"Move a person to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/people/people/{id}/restore":{"post":{"tags":["People"],"summary":"Restore a person from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/people/touches":{"get":{"tags":["People"],"summary":"List touches","description":"A moment you were in contact with someone. Updates the person's last_contact.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -date"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"person_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on person_id (also person_id_before / person_id_after for ranges)"},{"name":"date","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on date (also date_before / date_after for ranges)"},{"name":"channel","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on channel (also channel_before / channel_after for ranges)"},{"name":"note","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on note (also note_before / note_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/people_touches"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["People"],"summary":"Create a touch","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"person_id":{"description":"Person. Id of a people record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"channel":{"description":"How","default":"other","type":"string","enum":["call","whatsapp","message","email","meeting","other"]},"note":{"description":"Note","type":["string","null"]}},"required":["person_id"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/people/touches/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["People"],"summary":"Get a touch","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["People"],"summary":"Update a touch (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"person_id":{"description":"Person. Id of a people record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"channel":{"description":"How","default":"other","type":"string","enum":["call","whatsapp","message","email","meeting","other"]},"note":{"description":"Note","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["People"],"summary":"Move a touch to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/people/touches/{id}/restore":{"post":{"tags":["People"],"summary":"Restore a touch from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/forms/settings":{"get":{"tags":["Forms"],"summary":"Forms settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"show_in_today":{"description":"Show new submissions in Today","default":true,"type":"boolean"},"honeypot":{"description":"Block bots with a hidden field","default":true,"type":"boolean"}},"additionalProperties":false}}}}}},"patch":{"tags":["Forms"],"summary":"Change Forms settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"show_in_today":{"description":"Show new submissions in Today","default":true,"type":"boolean"},"honeypot":{"description":"Block bots with a hidden field","default":true,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/forms/actions/export_csv":{"post":{"tags":["Forms"],"summary":"All submissions of a form as CSV text (semicolon-safe, UTF-8).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"form_id":{"type":["string","null"],"description":"Id of a forms record"},"status":{"type":"string","enum":["new","done","spam"]}},"required":["form_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/forms/actions/mark_all":{"post":{"tags":["Forms"],"summary":"Set the status of every submission of a form that currently has from_status.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"form_id":{"type":["string","null"],"description":"Id of a forms record"},"from_status":{"default":"new","type":"string","enum":["new","done","spam"]},"to_status":{"type":"string","enum":["new","done","spam"]}},"required":["form_id","to_status"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/forms/forms":{"get":{"tags":["Forms"],"summary":"List forms","description":"A form with a hosted page at /f/{id} and a public endpoint at /api/public/forms/{id}.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"intro","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on intro (also intro_before / intro_after for ranges)"},{"name":"fields","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on fields (also fields_before / fields_after for ranges)"},{"name":"button_label","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on button_label (also button_label_before / button_label_after for ranges)"},{"name":"success_message","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on success_message (also success_message_before / success_message_after for ranges)"},{"name":"redirect_url","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on redirect_url (also redirect_url_before / redirect_url_after for ranges)"},{"name":"allowed_origins","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on allowed_origins (also allowed_origins_before / allowed_origins_after for ranges)"},{"name":"active","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on active (also active_before / active_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/forms_forms"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Forms"],"summary":"Create a form","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"intro":{"description":"Intro text. Shown above the hosted form","type":["string","null"]},"fields":{"description":"Fields","default":[{"name":"email","label":"Email","type":"email","required":true}],"type":"array","items":{"type":"object","properties":{"name":{"description":"Key in the submission data (letters, numbers, _)","type":["string","null"]},"label":{"type":["string","null"]},"type":{"default":"text","type":"string","enum":["text","email","textarea","select","checkbox","number","phone","url"]},"required":{"default":false,"type":"boolean"},"options":{"description":"Choices for select","type":"array","items":{"type":"string"}}},"additionalProperties":false}},"button_label":{"description":"Button label","default":"Send","type":["string","null"]},"success_message":{"description":"Thank-you message","default":"Thanks, we got it.","type":["string","null"]},"redirect_url":{"description":"Redirect after submit. Optional; otherwise the thank-you message is shown","type":["string","null"],"format":"uri"},"allowed_origins":{"description":"Allowed sites. Origins allowed to POST from the browser, e.g. https://example.com. Empty = any","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Accepting submissions","default":true,"type":"boolean"}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/forms/forms/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Forms"],"summary":"Get a form","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Forms"],"summary":"Update a form (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name","type":["string","null"]},"intro":{"description":"Intro text. Shown above the hosted form","type":["string","null"]},"fields":{"description":"Fields","default":[{"name":"email","label":"Email","type":"email","required":true}],"type":"array","items":{"type":"object","properties":{"name":{"description":"Key in the submission data (letters, numbers, _)","type":["string","null"]},"label":{"type":["string","null"]},"type":{"default":"text","type":"string","enum":["text","email","textarea","select","checkbox","number","phone","url"]},"required":{"default":false,"type":"boolean"},"options":{"description":"Choices for select","type":"array","items":{"type":"string"}}},"additionalProperties":false}},"button_label":{"description":"Button label","default":"Send","type":["string","null"]},"success_message":{"description":"Thank-you message","default":"Thanks, we got it.","type":["string","null"]},"redirect_url":{"description":"Redirect after submit. Optional; otherwise the thank-you message is shown","type":["string","null"],"format":"uri"},"allowed_origins":{"description":"Allowed sites. Origins allowed to POST from the browser, e.g. https://example.com. Empty = any","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Accepting submissions","default":true,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Forms"],"summary":"Move a form to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/forms/forms/{id}/restore":{"post":{"tags":["Forms"],"summary":"Restore a form from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/forms/submissions":{"get":{"tags":["Forms"],"summary":"List submissions","description":"One response to a form. Created by the public endpoint; you can triage, edit or delete them.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"form_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on form_id (also form_id_before / form_id_after for ranges)"},{"name":"data","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on data (also data_before / data_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"note","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on note (also note_before / note_after for ranges)"},{"name":"meta","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on meta (also meta_before / meta_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/forms_submissions"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Forms"],"summary":"Create a submission","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"form_id":{"description":"Form. Id of a forms record","type":["string","null"]},"data":{"description":"Answers","type":"object"},"status":{"description":"Status","default":"new","type":"string","enum":["new","done","spam"]},"note":{"description":"Your note","type":["string","null"]}},"required":["form_id","data"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/forms/submissions/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Forms"],"summary":"Get a submission","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Forms"],"summary":"Update a submission (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"form_id":{"description":"Form. Id of a forms record","type":["string","null"]},"data":{"description":"Answers","type":"object"},"status":{"description":"Status","default":"new","type":"string","enum":["new","done","spam"]},"note":{"description":"Your note","type":["string","null"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Forms"],"summary":"Move a submission to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/forms/submissions/{id}/restore":{"post":{"tags":["Forms"],"summary":"Restore a submission from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/sign/settings":{"get":{"tags":["Sign"],"summary":"Sign settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"default_expiry_days":{"description":"Signing links last (days)","default":30,"type":["integer","null"],"minimum":1,"maximum":365},"invite_message":{"description":"WhatsApp message. Use {name}, {title} and {link}","default":"Hi {name}, could you sign “{title}”? It takes a minute on your phone: {link}","type":["string","null"]},"show_in_today":{"description":"Show documents waiting for signatures in Today","default":true,"type":"boolean"}},"additionalProperties":false}}}}}},"patch":{"tags":["Sign"],"summary":"Change Sign settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"default_expiry_days":{"description":"Signing links last (days)","default":30,"type":["integer","null"],"minimum":1,"maximum":365},"invite_message":{"description":"WhatsApp message. Use {name}, {title} and {link}","default":"Hi {name}, could you sign “{title}”? It takes a minute on your phone: {link}","type":["string","null"]},"show_in_today":{"description":"Show documents waiting for signatures in Today","default":true,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/actions/create_from_pdf":{"post":{"tags":["Sign"],"summary":"Create a document from a base64 PDF (up to about 3 MB this way; larger files go through POST /api/v1/files), optionally with signers, and optionally send it.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":["string","null"]},"pdf_base64":{"description":"The PDF, base64 or a data: URL","type":["string","null"]},"message":{"type":["string","null"]},"signers":{"default":[],"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"],"format":"email"}},"additionalProperties":false}},"send":{"description":"Send right away and return the signing links","default":false,"type":"boolean"}},"required":["title","pdf_base64"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/actions/send":{"post":{"tags":["Sign"],"summary":"Send a draft for signing (or get the links again for one already sent). Returns each signer's sign_url and whatsapp_url; share those with the person.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"type":["string","null"],"description":"Id of a documents record"},"expires_on":{"description":"Optional; defaults to the expiry setting","type":["string","null"],"format":"date"}},"required":["document_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/actions/sign_myself":{"post":{"tags":["Sign"],"summary":"Add the account owner as a signer of a document, send it if it's still a draft, and return the owner's signing link (open it to sign).","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"type":["string","null"],"description":"Id of a documents record"},"name":{"description":"Defaults to the account name","type":["string","null"]}},"required":["document_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/actions/void":{"post":{"tags":["Sign"],"summary":"Withdraw a document that is out for signing: its links stop working. Signatures already given stay on record.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"type":["string","null"],"description":"Id of a documents record"}},"required":["document_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/actions/duplicate":{"post":{"tags":["Sign"],"summary":"Copy a document (same PDF and signers, new links) as a new draft, e.g. to resend after withdrawing.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"type":["string","null"],"description":"Id of a documents record"}},"required":["document_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/documents":{"get":{"tags":["Sign"],"summary":"List documents","description":"A PDF to be signed. Upload the PDF to /api/v1/files first (or use the create_from_pdf action), add signers, then run the send action. Status moves draft → sent → completed (or voided).","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"file_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on file_id (also file_id_before / file_id_after for ranges)"},{"name":"message","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on message (also message_before / message_after for ranges)"},{"name":"expires_on","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on expires_on (also expires_on_before / expires_on_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"pages","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on pages (also pages_before / pages_after for ranges)"},{"name":"sha256","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on sha256 (also sha256_before / sha256_after for ranges)"},{"name":"current_file_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on current_file_id (also current_file_id_before / current_file_id_after for ranges)"},{"name":"signed_file_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on signed_file_id (also signed_file_id_before / signed_file_id_after for ranges)"},{"name":"signed_sha256","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on signed_sha256 (also signed_sha256_before / signed_sha256_after for ranges)"},{"name":"sent_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on sent_at (also sent_at_before / sent_at_after for ranges)"},{"name":"completed_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on completed_at (also completed_at_before / completed_at_after for ranges)"},{"name":"voided_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on voided_at (also voided_at_before / voided_at_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/sign_documents"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Sign"],"summary":"Create a document","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Title","type":["string","null"]},"file_id":{"description":"PDF file id. id returned by POST /api/v1/files for the PDF (up to 4 MB)","type":["string","null"]},"message":{"description":"Message to signers. Shown on the signing page","type":["string","null"]},"expires_on":{"description":"Signing links expire on. Defaults to the app's expiry setting when sent","type":["string","null"],"format":"date"}},"required":["title","file_id"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/documents/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Sign"],"summary":"Get a document","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Sign"],"summary":"Update a document (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Title","type":["string","null"]},"file_id":{"description":"PDF file id. id returned by POST /api/v1/files for the PDF (up to 4 MB)","type":["string","null"]},"message":{"description":"Message to signers. Shown on the signing page","type":["string","null"]},"expires_on":{"description":"Signing links expire on. Defaults to the app's expiry setting when sent","type":["string","null"],"format":"date"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Sign"],"summary":"Move a document to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/sign/documents/{id}/restore":{"post":{"tags":["Sign"],"summary":"Restore a document from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/sign/signers":{"get":{"tags":["Sign"],"summary":"List signers","description":"One person who signs a document, with their private signing link (sign_url) and a ready WhatsApp link (whatsapp_url). Status pending → viewed → signed is set by the signing page.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default order"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"document_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on document_id (also document_id_before / document_id_after for ranges)"},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on name (also name_before / name_after for ranges)"},{"name":"phone","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on phone (also phone_before / phone_after for ranges)"},{"name":"email","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on email (also email_before / email_after for ranges)"},{"name":"order","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on order (also order_before / order_after for ranges)"},{"name":"placement","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on placement (also placement_before / placement_after for ranges)"},{"name":"token","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on token (also token_before / token_after for ranges)"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on status (also status_before / status_after for ranges)"},{"name":"viewed_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on viewed_at (also viewed_at_before / viewed_at_after for ranges)"},{"name":"signed_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on signed_at (also signed_at_before / signed_at_after for ranges)"},{"name":"signed_name","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on signed_name (also signed_name_before / signed_name_after for ranges)"},{"name":"signature_file_id","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on signature_file_id (also signature_file_id_before / signature_file_id_after for ranges)"},{"name":"ip","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on ip (also ip_before / ip_after for ranges)"},{"name":"user_agent","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on user_agent (also user_agent_before / user_agent_after for ranges)"},{"name":"is_owner","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on is_owner (also is_owner_before / is_owner_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/sign_signers"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Sign"],"summary":"Create a signer","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"description":"Document. Id of a documents record","type":["string","null"]},"name":{"description":"Name","type":["string","null"]},"phone":{"description":"WhatsApp number. With country code, e.g. +34 600 000 000; used for the WhatsApp link","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"order":{"description":"Order","default":0,"type":["integer","null"]},"placement":{"description":"Signature box. {page, x, y, w, h}: page from 1, the rest fractions of the page from its top-left. Leave empty to sign on the certificate page only.","type":"object"}},"required":["document_id","name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/sign/signers/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Sign"],"summary":"Get a signer","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Sign"],"summary":"Update a signer (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"document_id":{"description":"Document. Id of a documents record","type":["string","null"]},"name":{"description":"Name","type":["string","null"]},"phone":{"description":"WhatsApp number. With country code, e.g. +34 600 000 000; used for the WhatsApp link","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"order":{"description":"Order","default":0,"type":["integer","null"]},"placement":{"description":"Signature box. {page, x, y, w, h}: page from 1, the rest fractions of the page from its top-left. Leave empty to sign on the certificate page only.","type":"object"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Sign"],"summary":"Move a signer to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/sign/signers/{id}/restore":{"post":{"tags":["Sign"],"summary":"Restore a signer from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/short/settings":{"get":{"tags":["Short"],"summary":"Short settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug_length":{"description":"Random slug length","default":6,"type":["integer","null"],"minimum":4,"maximum":16},"permanent_redirects":{"description":"Use permanent (301) redirects. Browsers cache 301s; clicks then stop being counted","default":false,"type":"boolean"}},"additionalProperties":false}}}}}},"patch":{"tags":["Short"],"summary":"Change Short settings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"slug_length":{"description":"Random slug length","default":6,"type":["integer","null"],"minimum":4,"maximum":16},"permanent_redirects":{"description":"Use permanent (301) redirects. Browsers cache 301s; clicks then stop being counted","default":false,"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}}},"/short/actions/stats":{"post":{"tags":["Short"],"summary":"Total clicks and the most-clicked links.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"top":{"default":10,"type":["integer","null"],"minimum":1,"maximum":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/short/links":{"get":{"tags":["Short"],"summary":"List links","description":"A slug that redirects to a URL at /s/{slug}. Slugs are unique across the service.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search"},{"name":"sort","in":"query","schema":{"type":"string"},"description":"Field name, '-' prefix for descending. Default -created_at"},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500}},{"name":"offset","in":"query","schema":{"type":"integer"}},{"name":"trashed","in":"query","schema":{"type":"string","enum":["false","true","only"]}},{"name":"slug","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on slug (also slug_before / slug_after for ranges)"},{"name":"url","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on url (also url_before / url_after for ranges)"},{"name":"title","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on title (also title_before / title_after for ranges)"},{"name":"tags","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on tags (also tags_before / tags_after for ranges)"},{"name":"active","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on active (also active_before / active_after for ranges)"},{"name":"expires_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on expires_at (also expires_at_before / expires_at_after for ranges)"},{"name":"clicks","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on clicks (also clicks_before / clicks_after for ranges)"},{"name":"last_click_at","in":"query","required":false,"schema":{"type":"string"},"description":"Filter on last_click_at (also last_click_at_before / last_click_at_after for ranges)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/short_links"}},"has_more":{"type":"boolean"}}}}}}}},"post":{"tags":["Short"],"summary":"Create a short link","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"description":"Slug. Leave empty for a random one","type":["string","null"]},"url":{"description":"Destination URL","type":["string","null"],"format":"uri"},"title":{"description":"Title","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Active","default":true,"type":"boolean"},"expires_at":{"description":"Expires","type":["string","null"],"format":"date-time"}},"required":["url"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created"},"402":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"}}}},"/short/links/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"tags":["Short"],"summary":"Get a short link","responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["Short"],"summary":"Update a short link (merge)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"description":"Slug. Leave empty for a random one","type":["string","null"]},"url":{"description":"Destination URL","type":["string","null"],"format":"uri"},"title":{"description":"Title","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Active","default":true,"type":"boolean"},"expires_at":{"description":"Expires","type":["string","null"],"format":"date-time"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK"},"422":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["Short"],"summary":"Move a short link to the trash (?permanent=true to purge)","parameters":[{"name":"permanent","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK"}}}},"/short/links/{id}/restore":{"post":{"tags":["Short"],"summary":"Restore a short link from the trash","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"fields":{"type":"object"}}}}}}},"schemas":{"assets_assets":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"kind":{"description":"Kind","default":"apartment","type":"string","enum":["apartment","house","room","parking","storage","commercial","land","vehicle","boat","investment","other"]},"status":{"description":"Status. let = rented out, own_use = you live in it or use it, managed = you look after it for someone","default":"own_use","type":"string","enum":["let","vacant","own_use","managed","renovating","for_sale","prospect","sold"]},"area":{"description":"Area. City or area; groups assets on the map","type":["string","null"]},"address":{"description":"Address","type":["string","null"]},"reference":{"description":"Reference. Cadastral reference, number plate or registry number","type":["string","null"]},"lat":{"description":"Latitude. Map position; fill from the address when you can","type":["number","null"],"minimum":-90,"maximum":90},"lng":{"description":"Longitude","type":["number","null"],"minimum":-180,"maximum":180},"map_x":{"description":"Position inside its area on the schematic map (0–1), set by dragging","type":["number","null"],"minimum":0,"maximum":1},"map_y":{"type":["number","null"],"minimum":0,"maximum":1},"ownership_pct":{"description":"Your share (%)","default":100,"type":["number","null"],"minimum":0,"maximum":100},"acquired_on":{"description":"Acquired on","type":["string","null"],"format":"date"},"purchase_price":{"description":"Purchase price","type":["number","null"],"minimum":0},"value":{"description":"Current value","type":["number","null"],"minimum":0},"value_date":{"description":"Valued on","type":["string","null"],"format":"date"},"tenant":{"description":"Tenant / user. Who lives in it or uses it","type":["string","null"]},"tenant_id":{"description":"Tenant in People. Id of a people/people record","type":["string","null"]},"rent_monthly":{"description":"Rent per month","type":["number","null"],"minimum":0},"lease_end":{"description":"Lease ends","type":["string","null"],"format":"date"},"mortgage_lender":{"description":"Mortgage lender","type":["string","null"]},"mortgage_balance":{"description":"Mortgage outstanding","type":["number","null"],"minimum":0},"mortgage_monthly":{"description":"Mortgage per month","type":["number","null"],"minimum":0},"mortgage_end":{"description":"Mortgage ends","type":["string","null"],"format":"date"},"ibi_yearly":{"description":"Property tax per year. IBI, council tax, road tax for vehicles","type":["number","null"],"minimum":0},"community_monthly":{"description":"Community fees per month","type":["number","null"],"minimum":0},"insurance_yearly":{"description":"Insurance per year","type":["number","null"],"minimum":0},"other_yearly":{"description":"Other costs per year","type":["number","null"],"minimum":0},"facts":{"description":"Key facts. Short label/value pairs worth having at hand: plaza number, CUPS, policy numbers, contacts, codes","default":[],"type":"array","items":{"type":"object","properties":{"label":{"type":["string","null"]},"value":{"type":["string","null"]}},"additionalProperties":false}},"folder":{"description":"Documents folder","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"health":{"description":"How urgent the next action is (now = within 7 days)","type":"string","enum":["overdue","now","soon","ok","idle"]},"next":{"description":"The next action across its workstreams, tasks, renewals and lease: {title, due, days, source, id, waiting_on}","type":"object"},"open_items":{"type":["integer","null"]},"open_streams":{"type":["integer","null"]},"dates":{"description":"Key dates from linked renewals, tasks, workstreams, lease and mortgage: {label, date, kind, state, source, id}","type":"array","items":{}},"yearly_income":{"type":["number","null"]},"yearly_services":{"description":"Linked subscriptions (utilities, internet…) per year","type":["number","null"]},"yearly_costs":{"description":"Property tax + community + insurance + other + linked subscriptions","type":["number","null"]},"yearly_cash_flow":{"description":"Income minus costs minus mortgage payments","type":["number","null"]},"gross_yield":{"description":"% of current value (or purchase price)","type":["number","null"]},"net_yield":{"type":["number","null"]},"equity":{"description":"Your share of the value minus the mortgage outstanding","type":["number","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"assets_streams":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"asset_id":{"description":"Asset. Id of a assets record","type":["string","null"]},"title":{"description":"Workstream","type":["string","null"]},"status":{"description":"Status. waiting = the ball is in someone else's court","default":"active","type":"string","enum":["active","waiting","parked","done"]},"next_step":{"description":"Next step","type":["string","null"]},"due":{"description":"Next step by","type":["string","null"],"format":"date"},"waiting_on":{"description":"Waiting on","type":["string","null"]},"log":{"description":"Log","default":[],"type":"array","items":{"type":"object","properties":{"date":{"type":["string","null"],"format":"date"},"text":{"type":["string","null"]}},"additionalProperties":false}},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"},"done_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"overdue":{"type":"boolean"},"due_in":{"type":["integer","null"]},"last_update":{"type":["string","null"],"format":"date"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"notes_notes":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"description":"Title","type":["string","null"]},"body":{"description":"Text. Plain text; line breaks are kept","type":["string","null"]},"kind":{"description":"Kind","default":"text","type":"string","enum":["text","checklist"]},"items":{"description":"Checklist items. Used when kind is checklist","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"},"indent":{"description":"1 = sub-item of the item above","default":0,"type":["integer","null"],"minimum":0,"maximum":1}},"additionalProperties":false}},"images":{"description":"Images. Attached images, shown on top of the note. Upload with the attach_image action or POST /api/v1/files","default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"w":{"type":["integer","null"],"minimum":1,"maximum":20000},"h":{"type":["integer","null"],"minimum":1,"maximum":20000}},"additionalProperties":false}},"color":{"description":"Colour","default":"default","type":"string","enum":["default","red","orange","yellow","green","teal","blue","cerulean","purple","pink","brown","gray"]},"labels":{"description":"Labels","default":[],"type":"array","items":{"type":"string"}},"pinned":{"description":"Pinned","default":false,"type":"boolean"},"archived":{"description":"Archived","default":false,"type":"boolean"},"reminder_at":{"description":"Reminder. Notifies on your devices and shows in Today from this moment","type":["string","null"],"format":"date-time"},"reminder_repeat":{"description":"Repeat reminder","default":"none","type":"string","enum":["none","daily","weekly","monthly","yearly"]},"reminder_sent_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"source":{"description":"Where the note came from, e.g. keep-import","type":["string","null"]},"source_id":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"tasks_tasks":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"description":"Task","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"due":{"description":"Due","type":["string","null"],"format":"date"},"list":{"description":"List","default":"Inbox","type":["string","null"]},"priority":{"description":"Priority","default":"none","type":"string","enum":["none","low","medium","high"]},"priority_rank":{"readOnly":true,"default":0,"type":["integer","null"]},"status":{"description":"Status","default":"open","type":"string","enum":["open","done"]},"recurrence":{"description":"Repeats","default":"none","type":"string","enum":["none","daily","weekdays","weekly","monthly","yearly"]},"subtasks":{"description":"Subtasks","default":[],"type":"array","items":{"type":"object","properties":{"text":{"type":["string","null"]},"done":{"default":false,"type":"boolean"}},"additionalProperties":false}},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this task is about (Assets tool). Id of a assets/assets record","type":["string","null"]},"stream_id":{"description":"Workstream. The asset workstream this task moves forward. Id of a assets/streams record","type":["string","null"]},"done_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"overdue":{"type":"boolean"},"due_in":{"description":"Days until due (negative when overdue)","type":["integer","null"]},"subtasks_done":{"type":["integer","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"later_links":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"description":"URL","type":["string","null"],"format":"uri"},"title":{"description":"Title. Filled in from the page when left empty","type":["string","null"]},"note":{"description":"Note","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"status":{"description":"Status","default":"unread","type":"string","enum":["unread","read","archived"]},"favorite":{"description":"Favourite","default":false,"type":"boolean"},"read_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"site":{"description":"Host name of the URL","type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"habits_habits":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"emoji":{"description":"Emoji","type":["string","null"]},"target_per_week":{"description":"Times per week","default":7,"type":["integer","null"],"minimum":1,"maximum":7},"color":{"description":"Colour","default":"teal","type":"string","enum":["teal","amber","rose","sky","violet","lime","slate"]},"archived":{"description":"Archived","default":false,"type":"boolean"},"order":{"default":0,"type":["integer","null"]},"done_today":{"type":"boolean"},"this_week":{"description":"Check-ins this week","type":["integer","null"]},"streak":{"type":["integer","null"]},"streak_unit":{"description":"days or weeks","type":["string","null"]},"recent":{"description":"Dates checked in over the last 84 days","type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"habits_checkins":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"habit_id":{"description":"Habit. Id of a habits record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"note":{"description":"Note","type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"journal_entries":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"date":{"description":"Day. Defaults to today; one entry per day","type":["string","null"],"format":"date"},"mood":{"description":"Mood (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"energy":{"description":"Energy (1–5)","type":["integer","null"],"minimum":1,"maximum":5},"text":{"description":"Entry","type":["string","null"]},"prompt":{"description":"Prompt answered","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"renewals_items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"category":{"description":"Category","default":"other","type":"string","enum":["id","insurance","vehicle","property","contract","subscription","domain","health","tax","other"]},"due_date":{"description":"Due / expiry date","type":["string","null"],"format":"date"},"notice_days":{"description":"Notice (days). Act this many days before the due date","type":["integer","null"],"minimum":0,"maximum":730},"recurrence":{"description":"Repeats","default":"yearly","type":"string","enum":["none","monthly","quarterly","yearly","every_2_years","every_3_years","every_5_years","every_10_years"]},"auto_renews":{"description":"Renews automatically","default":false,"type":"boolean"},"status":{"description":"Status","default":"active","type":"string","enum":["active","done"]},"reference":{"description":"Reference / policy no.","type":["string","null"]},"notes":{"description":"Notes","type":["string","null"]},"link":{"description":"Link","type":["string","null"],"format":"uri"},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]},"act_by":{"description":"due_date minus notice_days","type":["string","null"],"format":"date"},"days_left":{"description":"Days until due_date (negative when overdue)","type":["integer","null"]},"state":{"type":"string","enum":["overdue","act_now","upcoming","ok","done"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"subs_subs":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"amount":{"description":"Amount","type":["number","null"],"minimum":0},"currency":{"description":"Currency","default":"EUR","type":["string","null"]},"cycle":{"description":"Billed","default":"monthly","type":"string","enum":["weekly","monthly","quarterly","yearly"]},"next_charge":{"description":"Next charge","type":["string","null"],"format":"date"},"category":{"description":"Category","default":"other","type":"string","enum":["software","media","utilities","finance","health","home","transport","learning","other"]},"status":{"description":"Status","default":"active","type":"string","enum":["active","trial","paused","cancelled"]},"payment_method":{"description":"Paid with","type":["string","null"]},"cancel_url":{"description":"Cancel link","type":["string","null"],"format":"uri"},"notes":{"description":"Notes","type":["string","null"]},"asset_id":{"description":"Asset. The flat, house, parking or vehicle this belongs to (Assets tool). Id of a assets/assets record","type":["string","null"]},"monthly_cost":{"description":"amount per month in its own currency","type":["number","null"]},"yearly_cost":{"type":["number","null"]},"monthly_cost_base":{"description":"per month in the base currency (null if no FX rate set); 0 when paused/cancelled","type":["number","null"]},"days_to_charge":{"type":["integer","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"people_people":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"phone":{"description":"Phone","type":["string","null"]},"company":{"description":"Company","type":["string","null"]},"role":{"description":"Role","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"cadence_days":{"description":"Catch up every (days). 0 = no rhythm","type":["integer","null"],"minimum":0,"maximum":730},"last_contact":{"description":"Last contact","type":["string","null"],"format":"date"},"birthday":{"description":"Birthday. Year is ignored; use 1900 if unknown","type":["string","null"],"format":"date"},"notes":{"description":"Notes","type":["string","null"]},"pinned":{"description":"Pinned","default":false,"type":"boolean"},"next_followup":{"type":["string","null"],"format":"date"},"due":{"description":"next_followup is today or earlier","type":"boolean"},"days_since_contact":{"type":["integer","null"]},"next_birthday":{"type":["string","null"],"format":"date"},"days_to_birthday":{"type":["integer","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"people_touches":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"person_id":{"description":"Person. Id of a people record","type":["string","null"]},"date":{"description":"Day. Defaults to today","type":["string","null"],"format":"date"},"channel":{"description":"How","default":"other","type":"string","enum":["call","whatsapp","message","email","meeting","other"]},"note":{"description":"Note","type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"forms_forms":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"description":"Name","type":["string","null"]},"intro":{"description":"Intro text. Shown above the hosted form","type":["string","null"]},"fields":{"description":"Fields","default":[{"name":"email","label":"Email","type":"email","required":true}],"type":"array","items":{"type":"object","properties":{"name":{"description":"Key in the submission data (letters, numbers, _)","type":["string","null"]},"label":{"type":["string","null"]},"type":{"default":"text","type":"string","enum":["text","email","textarea","select","checkbox","number","phone","url"]},"required":{"default":false,"type":"boolean"},"options":{"description":"Choices for select","type":"array","items":{"type":"string"}}},"additionalProperties":false}},"button_label":{"description":"Button label","default":"Send","type":["string","null"]},"success_message":{"description":"Thank-you message","default":"Thanks, we got it.","type":["string","null"]},"redirect_url":{"description":"Redirect after submit. Optional; otherwise the thank-you message is shown","type":["string","null"],"format":"uri"},"allowed_origins":{"description":"Allowed sites. Origins allowed to POST from the browser, e.g. https://example.com. Empty = any","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Accepting submissions","default":true,"type":"boolean"},"public_url":{"type":["string","null"],"format":"uri"},"post_url":{"type":["string","null"],"format":"uri"},"submissions":{"type":["integer","null"]},"new_submissions":{"type":["integer","null"]},"last_submission_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"forms_submissions":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"form_id":{"description":"Form. Id of a forms record","type":["string","null"]},"data":{"description":"Answers","type":"object"},"status":{"description":"Status","default":"new","type":"string","enum":["new","done","spam"]},"note":{"description":"Your note","type":["string","null"]},"meta":{"description":"Referrer and user agent","readOnly":true,"type":"object"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"sign_documents":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"description":"Title","type":["string","null"]},"file_id":{"description":"PDF file id. id returned by POST /api/v1/files for the PDF (up to 4 MB)","type":["string","null"]},"message":{"description":"Message to signers. Shown on the signing page","type":["string","null"]},"expires_on":{"description":"Signing links expire on. Defaults to the app's expiry setting when sent","type":["string","null"],"format":"date"},"status":{"description":"Status","readOnly":true,"default":"draft","type":"string","enum":["draft","sent","completed","voided"]},"pages":{"description":"Pages","readOnly":true,"type":["integer","null"]},"sha256":{"description":"Original SHA-256","readOnly":true,"type":["string","null"]},"current_file_id":{"readOnly":true,"type":["string","null"]},"signed_file_id":{"description":"Signed PDF file id","readOnly":true,"type":["string","null"]},"signed_sha256":{"description":"Signed PDF SHA-256","readOnly":true,"type":["string","null"]},"sent_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"completed_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"voided_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"signers_total":{"type":["integer","null"]},"signers_signed":{"type":["integer","null"]},"file_url":{"type":["string","null"],"format":"uri"},"download_url":{"description":"The signed PDF with its certificate page, once completed","type":["string","null"],"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"sign_signers":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"document_id":{"description":"Document. Id of a documents record","type":["string","null"]},"name":{"description":"Name","type":["string","null"]},"phone":{"description":"WhatsApp number. With country code, e.g. +34 600 000 000; used for the WhatsApp link","type":["string","null"]},"email":{"description":"Email","type":["string","null"],"format":"email"},"order":{"description":"Order","default":0,"type":["integer","null"]},"placement":{"description":"Signature box. {page, x, y, w, h}: page from 1, the rest fractions of the page from its top-left. Leave empty to sign on the certificate page only.","type":"object"},"token":{"readOnly":true,"type":["string","null"]},"status":{"description":"Status","readOnly":true,"default":"pending","type":"string","enum":["pending","viewed","signed"]},"viewed_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"signed_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"signed_name":{"description":"Name typed when signing","readOnly":true,"type":["string","null"]},"signature_file_id":{"readOnly":true,"type":["string","null"]},"ip":{"description":"IP address at signing","readOnly":true,"type":["string","null"]},"user_agent":{"readOnly":true,"type":["string","null"]},"is_owner":{"readOnly":true,"type":"boolean"},"sign_url":{"type":["string","null"],"format":"uri"},"whatsapp_url":{"type":["string","null"],"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"short_links":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"description":"Slug. Leave empty for a random one","type":["string","null"]},"url":{"description":"Destination URL","type":["string","null"],"format":"uri"},"title":{"description":"Title","type":["string","null"]},"tags":{"description":"Tags","default":[],"type":"array","items":{"type":"string"}},"active":{"description":"Active","default":true,"type":"boolean"},"expires_at":{"description":"Expires","type":["string","null"],"format":"date-time"},"clicks":{"readOnly":true,"default":0,"type":["integer","null"]},"last_click_at":{"readOnly":true,"type":["string","null"],"format":"date-time"},"short_url":{"type":["string","null"],"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}