AinoovaToolsAPI & ClaudeSign inStart free
Docs

API & Claude

Every tool is the same shape: resources you can list, create, update and delete, settings you can read and change, and a few actions. The web app is built on this API, so anything you can do on screen, Claude can do too.

Connect Claude (MCP)

OAuth 2.1 with PKCE and dynamic client registration; metadata at /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource.

describe_toolsStart here. Lists the tools, each resource's fields (with types and allowed values), computed fields, settings, actions, and the user's plan and usage.
todayWhat needs the user today across every tool: tasks due or overdue, note reminders, renewals to act on, charges coming, people to catch up with, new form sign-ups, habits left, journal nudge.
list_recordsList or search records. Filters are exact matches on fields (tags fields match one tag; booleans true/false); add _before/_after to a date/number field or created_at for ranges. Sort by a field, '-' for descending. Resources: assets: assets, streams | notes: notes | tasks: tasks | later: links | habits: habits, checkins | journal: entries | renewals: items | subs: subs | people: people, touches | forms: forms, submissions | sign: documents, signers | short: links.
get_recordFetch one record by id, with its computed fields.
create_recordCreate a record. Unknown fields are rejected with the list of valid ones; call describe_tools for field types. Returns the created record.
update_recordChange some fields of a record (merge: fields you don't send stay as they are; null clears a field). Logged and undoable.
delete_recordMove a record to the trash (restorable with restore_record or undo). permanent=true deletes it for good: only when the user explicitly asked.
restore_recordBring a trashed record back.
batchUp to 200 create/update/delete operations in one call (each runs on its own; failures are reported per operation). Use for imports and bulk edits.
get_settingsCurrent settings of a tool (defaults filled in), or app='account' for time zone and date format.
update_settingsChange some settings of a tool (or app='account'). Only the keys you send change. Logged and undoable.
run_actionRun a tool-specific action (describe_tools lists their inputs). Actions: assets: log_step, portfolio | notes: quick_capture, labels, rename_label, duplicate, delete_label, attach_image, empty_trash | tasks: quick_add, complete, lists | later: surprise | habits: check_in | journal: today, upsert_day, stats | renewals: renew | subs: summary, roll_forward | people: log_touch, due | forms: export_csv, mark_all | sign: create_from_pdf, send, sign_myself, void, duplicate | short: stats.
quick_noteSave a note in Notes from free text. '- item' lines become a checklist; a short first line becomes the title.
activityRecent changes with who made them (web, an API key, or Claude) and whether they can be undone.
undoUndo one entry of the activity log (restores the previous version, un-trashes, or trashes what was created).

REST

Base https://ainoova.com/api/v1, JSON in and out, Authorization: Bearer ainv_… (create keys in Account). Machine-readable: /openapi.json.

GET /apps every tool, field, setting and action GET /today what needs you today, across tools GET /{app}/{resource}?q=&sort=&limit=&offset=&trashed=&<field>=&<field>_before=&<field>_after= POST /{app}/{resource} create GET /{app}/{resource}/{id} PATCH /{app}/{resource}/{id} merge: only sent fields change, null clears DELETE /{app}/{resource}/{id} to the trash (?permanent=true to erase) POST /{app}/{resource}/{id}/restore GET /{app}/settings PATCH /{app}/settings POST /{app}/actions/{action} POST /batch up to 200 create/update/delete operations GET /activity POST /activity/{id}/undo GET /export everything as JSON

Errors: { "error": "…", "fields": { "due_date": "is required" } }. 402 means a free-plan limit was reached: reads keep working, Pro removes the limit.

Assets /assets

Every home, parking and vehicle you own on one map, with what each one needs next.

/assets/assets Something you own or manage: a flat, house, room, parking space, storage room, land or vehicle.
name*stringName
kindapartment | house | room | parking | storage | commercial | land | vehicle | boat | investment | otherKind
statuslet | vacant | own_use | managed | renovating | for_sale | prospect | soldStatus. let = rented out, own_use = you live in it or use it, managed = you look after it for someone
areastringArea. City or area; groups assets on the map
addressstringAddress
referencestringReference. Cadastral reference, number plate or registry number
ownership_pctnumberYour share (%)
acquired_ondateAcquired on
purchase_pricenumberPurchase price
valuenumberCurrent value
value_datedateValued on
tenantstringTenant / user. Who lives in it or uses it
tenant_idid of peopleTenant in People
rent_monthlynumberRent per month
lease_enddateLease ends
mortgage_lenderstringMortgage lender
mortgage_balancenumberMortgage outstanding
mortgage_monthlynumberMortgage per month
mortgage_enddateMortgage ends
ibi_yearlynumberProperty tax per year. IBI, council tax, road tax for vehicles
community_monthlynumberCommunity fees per month
insurance_yearlynumberInsurance per year
other_yearlynumberOther costs per year
factslist of {label, value}Key facts. Short label/value pairs worth having at hand: plaza number, CUPS, policy numbers, contacts, codes
folderurlDocuments folder
notestextNotes
tagstagsTags
healthoverdue | now | soon | ok | idle · read-onlyHow urgent the next action is (now = within 7 days)
nextjson · read-onlyThe next action across its workstreams, tasks, renewals and lease: {title, due, days, source, id, waiting_on}
open_itemsint · read-only
open_streamsint · read-only
dateslist of {} · read-onlyKey dates from linked renewals, tasks, workstreams, lease and mortgage: {label, date, kind, state, source, id}
yearly_incomenumber · read-only
yearly_servicesnumber · read-onlyLinked subscriptions (utilities, internet…) per year
yearly_costsnumber · read-onlyProperty tax + community + insurance + other + linked subscriptions
yearly_cash_flownumber · read-onlyIncome minus costs minus mortgage payments
gross_yieldnumber · read-only% of current value (or purchase price)
net_yieldnumber · read-only
equitynumber · read-onlyYour share of the value minus the mortgage outstanding
/assets/streams 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.
asset_id*id of assetsAsset
title*stringWorkstream
statusactive | waiting | parked | doneStatus. waiting = the ball is in someone else's court
next_stepstringNext step
duedateNext step by
waiting_onstringWaiting on
loglist of {date, text}Log
notestextNotes
linkurlLink
done_atdatetime · read-only
overduebool · read-only
due_inint · read-only
last_updatedate · read-only
Settings: currency (string)upcoming_window_days (int)
Actions:
  • log_step 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.
  • portfolio Totals across every asset (value, equity, rent, costs, cash flow) and one line per asset with its next action.

Notes /notes

Quick notes and checklists, like Keep, that Claude can read and tidy.

/notes/notes A text note or a checklist. Deleting moves it to the trash (restorable for 30 days).
titlestringTitle
bodytextText. Plain text; line breaks are kept
kindtext | checklistKind
itemslist of {text, done, indent}Checklist items. Used when kind is checklist
colordefault | red | orange | yellow | green | teal | blue | cerulean | purple | pink | brown | grayColour
labelstagsLabels
pinnedboolPinned
archivedboolArchived
reminder_atdatetimeReminder. Notifies on your devices and shows in Today from this moment
reminder_repeatnone | daily | weekly | monthly | yearlyRepeat reminder
Settings: default_color (default | red | orange | yellow | green | teal | blue | cerulean | purple | pink | brown | gray)layout (grid | list)new_checklist_items_at (bottom | top)move_checked_to_bottom (bool)labels (tags)
Actions:
  • quick_capture Create a note from free text. Lines like '- [ ] milk' or '- milk' become a checklist; a short first line becomes the title.
  • labels List every label in use with how many active notes carry it.
  • rename_label Rename a label on every note (merge into an existing label if the new name is already used).
  • duplicate Make a copy of a note (same text, checklist, colour, labels and images; not pinned, no reminder).
  • delete_label Remove a label from every note (the notes stay).
  • attach_image 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.
  • empty_trash Permanently delete every note in the trash. Cannot be undone.

Tasks /tasks

A to-do list you can type into like a sentence and Claude can work through.

/tasks/tasks A to-do. Completing a repeating task moves it to its next date instead of closing it.
title*stringTask
notestextNotes
duedateDue
liststringList
prioritynone | low | medium | highPriority
statusopen | doneStatus
recurrencenone | daily | weekdays | weekly | monthly | yearlyRepeats
subtaskslist of {text, done}Subtasks
tagstagsTags
asset_idid of assetsAsset. The flat, house, parking or vehicle this task is about (Assets tool)
done_atdatetime · read-only
overduebool · read-only
due_inint · read-onlyDays until due (negative when overdue)
subtasks_doneint · read-only
Settings: default_list (string)show_overdue_in_today (bool)upcoming_days (int)
Actions:
  • quick_add 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.
  • complete Mark a task done (repeating tasks move to their next date). Set done=false to reopen.
  • lists Every list with its number of open tasks.

Later /later

A read-later shelf you fill from the share sheet and Claude empties.

/later/links A saved web page.
url*urlURL
titlestringTitle. Filled in from the page when left empty
notetextNote
tagstagsTags
statusunread | read | archivedStatus
favoriteboolFavourite
read_atdatetime · read-only
sitestring · read-onlyHost name of the URL
Settings: fetch_titles (bool)open_marks_read (bool)
Actions:
  • surprise Pick one random unread link, optionally within a tag.

Habits /habits

Tap once a day. Watch the streak. Let Claude keep you honest.

/habits/habits Something to do every day or a few times a week.
name*stringName
emojistringEmoji
target_per_weekintTimes per week
colorteal | amber | rose | sky | violet | lime | slateColour
archivedboolArchived
done_todaybool · read-only
this_weekint · read-onlyCheck-ins this week
streakint · read-only
streak_unitstring · read-onlydays or weeks
recenttags · read-onlyDates checked in over the last 84 days
/habits/checkins One habit done on one day. At most one per habit per day.
habit_id*id of habitsHabit
datedateDay. Defaults to today
notestringNote
Settings: week_starts (monday | sunday)show_in_today (bool)
Actions:
  • check_in Mark a habit done for a day (default today). Set done=false to undo. Idempotent.

Journal /journal

One line a day, a mood and an energy score. Claude spots the patterns.

/journal/entries One journal entry per day (date is unique).
datedateDay. Defaults to today; one entry per day
moodintMood (1–5)
energyintEnergy (1–5)
texttextEntry
promptstringPrompt answered
tagstagsTags
Settings: prompts (tags)nudge_after_hour (int)
Actions:
  • today Today's entry (or null) and today's prompt.
  • upsert_day Create or update the entry for a day (default today). Text is appended when append=true.
  • stats Average mood and energy, the daily series, entry streak and tag counts over the last N days (default 30).

Renewals /renewals

Every ID, policy and contract that expires, with the day you must act.

/renewals/items Something that expires or renews on a date.
name*stringName
categoryid | insurance | vehicle | property | contract | subscription | domain | health | tax | otherCategory
due_date*dateDue / expiry date
notice_daysintNotice (days). Act this many days before the due date
recurrencenone | monthly | quarterly | yearly | every_2_years | every_3_years | every_5_years | every_10_yearsRepeats
auto_renewsboolRenews automatically
statusactive | doneStatus
referencestringReference / policy no.
notestextNotes
linkurlLink
asset_idid of assetsAsset. The flat, house, parking or vehicle this belongs to (Assets tool)
act_bydate · read-onlydue_date minus notice_days
days_leftint · read-onlyDays until due_date (negative when overdue)
stateoverdue | act_now | upcoming | ok | done · read-only
Settings: default_notice_days (int)upcoming_window_days (int)
Actions:
  • renew Mark an item as renewed: moves due_date forward by its recurrence (or to new_due_date). Items that don't repeat become done.

Subs /subs

What you pay for every month, in one honest number.

/subs/subs A recurring charge.
name*stringName
amount*numberAmount
currencystringCurrency
cycleweekly | monthly | quarterly | yearlyBilled
next_chargedateNext charge
categorysoftware | media | utilities | finance | health | home | transport | learning | otherCategory
statusactive | trial | paused | cancelledStatus
payment_methodstringPaid with
cancel_urlurlCancel link
notestextNotes
asset_idid of assetsAsset. The flat, house, parking or vehicle this belongs to (Assets tool)
monthly_costnumber · read-onlyamount per month in its own currency
yearly_costnumber · read-only
monthly_cost_basenumber · read-onlyper month in the base currency (null if no FX rate set); 0 when paused/cancelled
days_to_chargeint · read-only
Settings: base_currency (string)fx_rates (json)warn_days (int)
Actions:
  • summary Totals per month and per year in the base currency, by category, plus subscriptions missing an FX rate.
  • roll_forward Move every next_charge date that is in the past forward by its cycle. Runs daily on its own.

People /people

A light personal CRM: who to call, when you last did, and what you talked about.

/people/people Someone you want to stay in touch with.
name*stringName
emailemailEmail
phonestringPhone
companystringCompany
rolestringRole
tagstagsTags
cadence_daysintCatch up every (days). 0 = no rhythm
last_contactdateLast contact
birthdaydateBirthday. Year is ignored; use 1900 if unknown
notestextNotes
pinnedboolPinned
next_followupdate · read-only
duebool · read-onlynext_followup is today or earlier
days_since_contactint · read-only
next_birthdaydate · read-only
days_to_birthdayint · read-only
/people/touches A moment you were in contact with someone. Updates the person's last_contact.
person_id*id of peoplePerson
datedateDay. Defaults to today
channelcall | whatsapp | message | email | meeting | otherHow
notetextNote
Settings: default_cadence_days (int)birthday_notice_days (int)
Actions:
  • log_touch Record that you were in touch with someone (default today).
  • due People due for a catch-up, most overdue first.

Forms /forms

Waitlists and contact forms that work on any site, with no backend.

/forms/forms A form with a hosted page at /f/{id} and a public endpoint at /api/public/forms/{id}.
name*stringName
introtextIntro text. Shown above the hosted form
fieldslist of {name, label, type, required, options}Fields
button_labelstringButton label
success_messagestringThank-you message
redirect_urlurlRedirect after submit. Optional; otherwise the thank-you message is shown
allowed_originstagsAllowed sites. Origins allowed to POST from the browser, e.g. https://example.com. Empty = any
activeboolAccepting submissions
public_urlurl · read-only
post_urlurl · read-only
submissionsint · read-only
new_submissionsint · read-only
last_submission_atdatetime · read-only
/forms/submissions One response to a form. Created by the public endpoint; you can triage, edit or delete them.
form_id*id of formsForm
data*jsonAnswers
statusnew | done | spamStatus
notetextYour note
Settings: show_in_today (bool)honeypot (bool)
Actions:
  • export_csv All submissions of a form as CSV text (semicolon-safe, UTF-8).
  • mark_all Set the status of every submission of a form that currently has from_status.

Sign /sign

Send a PDF on WhatsApp, get it back signed. No apps, no accounts.

/sign/documents 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).
title*stringTitle
file_id*stringPDF file id. id returned by POST /api/v1/files for the PDF (up to 4 MB)
messagetextMessage to signers. Shown on the signing page
expires_ondateSigning links expire on. Defaults to the app's expiry setting when sent
statusdraft | sent | completed | voided · read-onlyStatus
pagesint · read-onlyPages
sha256string · read-onlyOriginal SHA-256
signed_file_idstring · read-onlySigned PDF file id
signed_sha256string · read-onlySigned PDF SHA-256
sent_atdatetime · read-only
completed_atdatetime · read-only
voided_atdatetime · read-only
signers_totalint · read-only
signers_signedint · read-only
file_urlurl · read-only
download_urlurl · read-onlyThe signed PDF with its certificate page, once completed
/sign/signers 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.
document_id*id of documentsDocument
name*stringName
phonestringWhatsApp number. With country code, e.g. +34 600 000 000; used for the WhatsApp link
emailemailEmail
orderintOrder
placementjsonSignature 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.
statuspending | viewed | signed · read-onlyStatus
viewed_atdatetime · read-only
signed_atdatetime · read-only
signed_namestring · read-onlyName typed when signing
ipstring · read-onlyIP address at signing
sign_urlurl · read-only
whatsapp_urlurl · read-only
Settings: default_expiry_days (int)invite_message (text)show_in_today (bool)
Actions:
  • create_from_pdf 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.
  • send 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.
  • sign_myself 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).
  • void Withdraw a document that is out for signing: its links stop working. Signatures already given stay on record.
  • duplicate Copy a document (same PDF and signers, new links) as a new draft, e.g. to resend after withdrawing.

Short /short

Short links on a domain you trust, with honest click counts.

/short/links A slug that redirects to a URL at /s/{slug}. Slugs are unique across the service.
slugstringSlug. Leave empty for a random one
url*urlDestination URL
titlestringTitle
tagstagsTags
activeboolActive
expires_atdatetimeExpires
clicksint · read-only
last_click_atdatetime · read-only
short_urlurl · read-only
Settings: slug_length (int)permanent_redirects (bool)
Actions:
  • stats Total clicks and the most-clicked links.

Account settings /me

timezone (string)locale (en-GB | en-US | es-ES | ca-ES)