# Harbor Harbor is a personal board of lists and items for one signed-in person. Use this API when building a custom connector. Prefer completing an item over deleting it. Read the board before you change it. Dates are YYYY-MM-DD. ## Authentication Send a Harbor API key as: Authorization: Bearer hbr_... The person creates the key in Harbor under Connect, then pastes it when you ask. Keys are either read-only (scope board:read) or read-write (board:read and board:write). A read-only key cannot add, edit, complete, or delete. OAuth 2.1 is also available for MCP clients. Authorization server metadata: https://memoairem.shipstime.app/.well-known/oauth-authorization-server ## Base URL https://memoairem.shipstime.app ## Read - GET /api/v1/me - GET /api/v1/lists - GET /api/v1/lists/{listId}/items?include_done=true - GET /api/v1/items/{itemId} - GET /api/v1/search?q={text} - GET /api/v1/records - GET /api/v1/records?since={milliseconds} includes edits and deletions after that time - GET /api/v1/records/{recordId} - POST /api/v1/query with { "q": "Friday afternoon with Sam" } ## MemoAirem records A record is the same shape the phone saves: type, title, date (YYYY-MM-DD), time (HH:MM, 24-hour), location, people, notes, via, and an optional thumb. Dates in a question resolve in Asia/Singapore. A later updated_at wins. The phone pushes with PUT and pulls with GET ?since=. - PUT /api/v1/records/{recordId} with the record fields and updated_at - POST /api/v1/records creates one when you do not already have an id - DELETE /api/v1/records/{recordId} Read records before changing them. Prefer query over guessing. ## Write - POST /api/v1/lists with { "name": "Groceries" } - DELETE /api/v1/lists/{listId} removes the list and its items - POST /api/v1/lists/{listId}/items with { "title": "Milk", "notes": "", "due_on": "2026-10-26" } - PATCH /api/v1/items/{itemId} with any of title, notes, due_on, list, done - POST /api/v1/items/{itemId}/complete - POST /api/v1/items/{itemId}/reopen - DELETE /api/v1/items/{itemId} Creating a list that already exists returns that list. The person sees every write on their Harbor board immediately. ## Machine-readable description https://memoairem.shipstime.app/openapi.json ## MCP Streamable HTTP: https://memoairem.shipstime.app/mcp Unauthenticated calls return 401 with a WWW-Authenticate header pointing at the OAuth metadata. An API key works as the bearer token too.