Log in

Changelog

New features and improvements to Osoto.

April 14, 2026

Name-your-price supporter pricing

Osoto stays free for everyone who plans a trip. If you want to help keep it independent, you can now become a supporter and name a fair price starting at $6 per month or $60 per year (two months free). Supporters remove the two-trip limit, get 600 AI assistant messages a month, and can host up to 50 people per trip. Settings, the upgrade dialog, and the new public pricing page all share the same simple card: pick monthly or yearly, type any whole-dollar amount, and go. Change your amount or cancel at any time from the Stripe portal.

April 12, 2026

Instagram messaging

Link your Instagram account and chat with your Osoto trip the same way you do on WhatsApp and Telegram. Go to Settings, get a 6-character code, and send it as a DM to the Osoto Instagram account. Once connected, you can ask the agent about your trips, get reminders, and receive itinerary updates right in your Instagram inbox.

April 11, 2026

Mobile settings: full web parity

Mobile settings now do everything the web version does, so you never need to switch to a browser to administer your account or group. The screen is a single scrollable surface with 13 cards in the same order as web: Profile, Appearance, Integrations, Agent, Trip template, Memories, API keys, Group, Members, Travelers, Skills, Feedback, Sign out. Profile gains avatar upload through the photo library with a 1:1 crop, plus the full add, verify, set primary, and remove flow for additional email addresses. Integrations gains Google Calendar and Gmail inbox connect/disconnect, handled inside an in-app browser that closes itself when the exchange completes. Every destructive confirmation (sign out, delete group, revoke API key, disconnect an integration, delete a memory or skill) now opens a bottom-sheet dialog that matches the rest of the app instead of the native iOS alert.

Public API: agent-friendly Phase 2

Pagination, diff-based sync, trip-scoped API keys, and two publishable npm packages. `GET /trips/:tripId/legs`, `/action-items`, `/map-pins`, and `/commitments` now paginate — default 100, max 200, response shape `{ data, nextCursor }`. `POST /trips/:tripId/sync` accepts a partial snapshot (legs, action items, map pins) and upserts by `clientRef`; `dryRun=true` returns a change preview without writing. API keys can be limited to a single trip: pick a scope like `trips:write` in settings and paste a trip ID in the new Limit to trip field, and the server rewrites it to `trips:write:<tripId>`. Two new packages are ready to publish: `@osoto/mcp-server` (Model Context Protocol server wrapping the REST API as tools and resources for any MCP client) and `@osoto/api-client` (official typed TypeScript SDK with retries, idempotency, pagination iterators, and an unauthenticated share-token consumer).

Public API: agent-friendly Phase 1

The REST API picked up the pieces an autonomous agent needs to actually plan a trip end-to-end. `GET /me` returns the caller's user, group memberships, and default group ID, so an agent can discover `groupId` once at startup instead of hardcoding one. Every `POST`, `PATCH`, and `DELETE` now honours an `Idempotency-Key` header: retries with the same key replay the cached response, while a key reused with a different body returns a clear 409. Creates for legs, action items, map pins, and stays take an optional `clientRef` that upserts on retry instead of creating duplicates. New batch endpoints — `POST /trips/:tripId/legs:batch`, `:action-items:batch`, `:map-pins:batch` — let an agent import a full itinerary in a single call of up to 50 items, with per-item results on a 207 response. `GET /trips/:tripId/export` returns the whole trip (legs, pins, action items, commitments, members) in one snapshot so an agent can answer "where am I staying on Tuesday?" without chasing five separate reads. `GET /shared/trips/:token` and `:token/export` are unauthenticated read-only endpoints gated by the existing share token, so an agent can hand back a safe view link without exposing API credentials. Error bodies and response headers now carry a stable `X-Request-Id` plus a structured `details[]` array on validation errors. The OpenAPI spec and developer docs page reflect all of this.

Live agent edits land instantly

When the assistant updates a trip doc, the changes now appear in your editor immediately without a reload. The editor also recovers faster from network hiccups — if your connection drops, it reconnects with a fresh session token and picks up right where you left off. Behind the scenes, the doc's real-time backbone moved onto infrastructure we run ourselves, which is why the round-trip is shorter and the failure modes are cleaner.

April 10, 2026

Trip page header and layout polish

The trip workspace title, date range, nights count, participant avatars, Share button, and overflow menu now live in a single full-width header row above the three panels instead of crammed inside the center column. The center column's boxed card is gone, so the itinerary reads as a document rather than a widget. The chat panel gets a clean Osoto header with the trip name as a subtitle, and the map panel now carries a Places in (city) header with a live pin count. Collapsing the chat or map rails stays as smooth as before.

Trip page redesign: itinerary as the artifact

The trip workspace now opens to a single **Itinerary** tab that collects flights, stays, dinner reservations, activities, birthdays, meetings, and task deadlines into one time-sorted timeline. Days without events stay out of the way. A pinned Things to do block sits above the day rows for undated tasks, and new trips get sensible starter tasks automatically so you never land on an empty page. The Doc tab is now a planner workbench for notes, with a Places block listing all your map pins and an Add to itinerary affordance on each one. Map pins on the map panel get the same affordance: tap a pin, fill in the form, and the commitment drops onto the itinerary day. Trip viewers still get a helpful read-only agent that can look up wifi passwords and host phone numbers but cannot make any edits.

Faster trip pages, lighter attachment panels

The artifacts panel now keeps emails inline and tucks PDFs and chat file attachments behind a collapsible Files section that only loads when you open it. On mobile, the artifacts sheet only fetches its contents after you open it. Email bodies load on demand the first time you expand a card, so there is a brief loading state you did not see before. The payoff: trip pages load faster, reactive updates stay fresher, and the whole experience costs a lot less bandwidth.

Stays tab: map pan on click (wide layout)

Clicking "Open in maps" on a stay card now pans the in-app map to the property instead of opening a new browser tab, on wide layouts where the map panel is visible. Narrow layouts still open the universal Google Maps link in a new tab. Cards whose stay has not been geocoded yet fall back to the external link on either layout, so the button is never dead.

Public API: nested stay endpoints

The REST API now exposes `POST /trips/:tripId/legs/:legId/stays`, `PATCH /trips/:tripId/legs/:legId/stays/:stayId`, and `DELETE /trips/:tripId/legs/:legId/stays/:stayId` for targeted single-stay writes. POST is idempotent on `confirmationNumber`, and PATCH diff-merges into an existing stay so concurrent writers cannot clobber each other. The MCP `osoto_update_leg` tool gained a `stay` sub-argument that routes through the same diff-merge path, replacing the old "send the whole accommodation array" pattern which would wipe the other stays on a leg.

Stays tab

Accommodation is now a first-class surface in the trip workspace. Forward a booking email and the stay shows up as a hero card with the property name, brand logo, address bar, day-badge check-in and check-out rows, and a practical info rail that surfaces wifi, door code, host phone, and confirmation number on the arrival screen. A single leg can hold multiple stays, and re-forwarding the same booking email updates the existing card instead of duplicating it. Delete a stay from the kebab menu; the card and its map pin go away together.

Share link privacy hardening

Sensitive accommodation fields never leave the authenticated workspace. Wifi passwords, door codes, host phone numbers, confirmation numbers, and check-in instructions are stripped from the public share URL via an explicit allowlist. Only the property name, address, dates, provider, and host name are visible to people opening a read-only trip link.

`@osoto` replies in group chat

You can now mention `@osoto` directly in a trip's group chat on web and get an answer in the same shared thread. Plain group messages still stay human-only, so the assistant only jumps in when you explicitly ask.

Agent intent capture (behind the scenes)

Osoto now quietly records every request the assistant handles, including the ones it cannot fulfill. There is no user-visible change. The captured data feeds a weekly sweep that turns the most common unmet requests into the next batch of agent capabilities, so the roadmap comes from what you actually ask for rather than guesswork. When the assistant cannot do something you ask for, it now logs the request before gracefully pointing you to the manual path.

Rich email cards in trip chat

Forwarded emails in the trip chat now render as expandable cards that match the look of the trip artifacts panel. Tap to reveal a labeled header (From, Received, Subject), the full message body in a bounded scroll container, and PDF attachment chips you can click to download. No more one-line subject stubs or runaway forwarded-message blobs stretching the chat column.

External conversation tabs on the chat card

The trip chat card now shows a tab per external conversation alongside AI and Group: WhatsApp, Telegram, and email threads with individual participants all live in the same switcher. Click a tab to view that conversation without leaving the trip workspace.

March 31, 2026

Messenger-style chat bubbles

Trip chat now uses Messenger-style grouped bubbles with position-aware corner radii, sender avatars, and timestamp headers. Consecutive messages from the same person are visually grouped, and time gaps insert readable separators. Long conversations are much easier to follow.

Unified "With Osoto" channel

All your messaging channels (WhatsApp, email, and in-app) now appear in a single unified timeline under the "With Osoto" tab. You can search across all channels at once, and source badges show where each message came from. A new connect card makes it easy to link WhatsApp or email to any trip.

Email attachment extraction

Forwarded emails with PDF attachments (booking confirmations, itineraries, receipts) are now fully processed. The AI extracts text from PDFs, including CJK documents, and incorporates the details into your trip. Bot replies are threaded so email conversations stay organized.

Redesigned mobile auth

The mobile app login is now a single unified screen matching the web experience: email/phone toggle, OAuth buttons, language selector, and theme toggle. Cleaner, faster, and consistent across platforms.

Mobile search

The mobile app now has a real search screen with debounced global search across all your trips. Results are grouped by trip with source type labels, and tapping a result navigates directly to the trip.

Dark mode polish

Dark theme has been overhauled with Linear-inspired semantic color tokens, replacing hardcoded values across both web and mobile. Tabs, cards, and input fields all have proper contrast now.

Share page improvements

The share page now shows a centered card layout with a deduplicated title and a "What's this?" call-to-action that explains osoto to first-time viewers.

March 29, 2026

New participant system

Adding people to trips is now simpler and more secure. Search your group members and add them to a trip with one click, or invite someone new to osoto with a trip automatically attached. No more entering contact details for people already in your group.

Shareable trip links

Generate a read-only link to your trip document and share it with anyone. No account needed. Perfect for sharing plans with extended family, friends, or travel agents. Links can be revoked at any time from the trip header or the participant section.

March 27, 2026

Email import

Forward booking confirmations to your trip's email address. The AI extracts flight details, hotel info, and dates, then updates your trip doc, calendar, and map automatically. Find your trip's email address in the workspace menu (⋯ → Copy trip email address).

Trip document template

Customize how new trip documents are structured. Go to Settings → Trips to write your own template instructions. The AI will follow them instead of the default layout.

Improved document formatting

Trip documents now have proper typography: clear heading hierarchy, readable paragraph spacing, styled inline code, nested lists, and blockquotes. Inspired by Linear and Notion.

Redesigned invitations page

Cleaner invitation cards with inviter avatars, role badges, and contextual descriptions. Single invitations show "John invited you to join Acme" instead of generic text.

Personalized welcome emails

New users who signed up via invitation get a tailored email: "{Name} added you to a trip" with a direct link to their group. Organic signups still get the founder intro.