Skip to content

Developers

Mavo API

Read and write household collections with a family-scoped API key. New to Mavo? Start with the product guide.

Authentication

Every request uses the x-api-key header. Each key belongs to one family, so thefamilySlug in the path must match that key.

x-api-key: $MAVO_API_KEY

API or connected assistant?

Mavo supports direct API calls and connected assistants. Pick the surface based on where the work is running.

Use the REST API for apps, scripts, and automations that can make normal HTTP requests with an API key. Use MCP when you are connecting Mavo to an assistant, so Mavo can appear inside that assistant as a set of available household actions.

Endpoint guide

Collections

Use these when your app needs to see or manage the family’s collection list: meals, chores, routines, and any custom collections. These endpoints are about the containers themselves.

Entries

Use these when your app already knows which collection it is working with and needs the rows inside it. Each entry has a `title` display label plus `data` for the fields defined by that collection.

Calendar

Use these for calendar events, linked external calendars, and calendar share links.

Household operations

Use these for household people, notifications, webhook destinations, and other household settings that an integration may need to manage directly.

Context and lookups

Use these when an integration needs Mavo’s household context search, weather lookup, or public web lookup without running a full agent conversation.

Collections

Create and manage household collections.

4 endpoints
get/api/v1/families/{familySlug}/trackersList collectionsReturns every collection in the family, built-in and custom.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/trackers \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "trackers": [
    {
      "key": "meals",
      "name": "Meals",
      "description": "What’s for dinner.",
      "fields": []
    }
  ]
}
post/api/v1/families/{familySlug}/trackersCreate a collectionCreates a custom collection with the given fields.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • category"calendar"optional

    Set to calendar only when creating another household calendar; omit for ordinary collections.

  • color"sage" | "blue" | "clay" | "plum" | "gold"optional

    Optional display color for a calendar collection.

  • descriptionstringoptional

    Optional short explanation of what the collection tracks.

  • fieldsobject[]optionaldefault []

    Structured fields shared by items in this collection.

    • keystringrequired

      Stable camelCase or snake_case field key used in collection item data.

    • labelstringrequired

      Short family-facing label shown for this field.

    • optionsstring[]optional

      Allowed values when type is select; omit for other field types.

    • type"date" | "number" | "person" | "select" | "text" | "textarea"optionaldefault "text"

      How values in this field should be entered and displayed.

  • namestringrequired

    Family-facing collection or calendar name.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/trackers \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name":"string"}'

Example response

{
  "tracker": {
    "key": "chores",
    "name": "Chores",
    "fields": []
  }
}
patch/api/v1/families/{familySlug}/trackers/{collectionKey}Update a collectionUpdates a custom collection. Send only the fields you want to change.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Request body

  • color"sage" | "blue" | "clay" | "plum" | "gold"optional

    Replacement display color for a calendar collection.

  • descriptionstring | nulloptional

    Replacement description; null removes the current description.

  • fieldsobject[]optional

    Complete replacement list of structured fields.

    • keystringrequired

      Stable camelCase or snake_case field key used in collection item data.

    • labelstringrequired

      Short family-facing label shown for this field.

    • optionsstring[]optional

      Allowed values when type is select; omit for other field types.

    • type"date" | "number" | "person" | "select" | "text" | "textarea"optionaldefault "text"

      How values in this field should be entered and displayed.

  • namestringoptional

    Replacement family-facing name.

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/trackers/meals \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"color":"sage","description":"string","fields":[{"key":"string","label":"string"}],"name":"string"}'

Example response

{
  "tracker": {
    "key": "chores",
    "name": "Weekly chores"
  }
}
delete/api/v1/families/{familySlug}/trackers/{collectionKey}Delete a collectionDeletes a custom collection and its entries. Built-in collections cannot be deleted.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/trackers/meals \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "tracker": {
    "key": "chores",
    "name": "Weekly chores"
  }
}

Entries

Add and edit entries inside a collection.

7 endpoints
get/api/v1/families/{familySlug}/trackers/{collectionKey}/entriesList entriesReturns entries in a collection, optionally narrowed by text, status, or result count.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".
  • queryCase-insensitive text to match against entry titles and data.
  • statusOnly return entries with this status.
  • limitMaximum number of matching entries to return.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/trackers/meals/entries \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "entries": [
    {
      "id": "ent_123",
      "title": "Taco night",
      "data": {
        "day": "2026-06-09",
        "status": "Planned"
      }
    }
  ]
}
post/api/v1/families/{familySlug}/trackers/{collectionKey}/entriesCreate an entryAdds an entry to a collection. `title` is the entry’s display label; collection-specific fields go in `data`.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Request body

  • dataobjectoptionaldefault {}

    Collection-specific fields for this entry. Only fields defined by the collection are saved.

  • titlestringrequired

    Human-readable entry label. This is stored separately from collection-specific data fields and is returned in entry responses.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/trackers/meals/entries \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"title":"string"}'

Example response

{
  "entry": {
    "id": "ent_123",
    "title": "Taco night",
    "data": {
      "day": "2026-06-09",
      "status": "Planned"
    }
  }
}
patch/api/v1/families/{familySlug}/trackers/{collectionKey}/entries/{entryId}Update an entryUpdates an entry. Send only the fields you want to change. `title` renames the entry; collection-specific fields go in `data`.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".
  • entryIdIdentifier of the entry within the collection.

Request body

  • dataobjectoptional

    Collection-specific fields for this entry. Only fields defined by the collection are saved.

  • status"active" | "archived" | "done"optional
  • titlestringoptional

    Human-readable entry label. This is stored separately from collection-specific data fields and is returned in entry responses.

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/trackers/meals/entries/ent_123 \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"data":{},"status":"active","title":"string"}'

Example response

{
  "entry": {
    "id": "ent_123",
    "title": "Taco night",
    "status": "done"
  }
}
delete/api/v1/families/{familySlug}/trackers/{collectionKey}/entries/{entryId}Delete an entryRemoves an entry from a collection by id. No request body is needed; the deleted entry is returned for confirmation.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".
  • entryIdIdentifier of the entry within the collection.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/trackers/meals/entries/ent_123 \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "entry": {
    "id": "ent_123",
    "title": "Taco night"
  }
}
post/api/v1/families/{familySlug}/trackers/{collectionKey}/entries/batchCreate entriesAdds multiple entries to a collection in one request.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Request body

  • itemsobject[]required
    • dataobjectoptionaldefault {}
    • titlestringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/trackers/meals/entries/batch \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"items":[{"title":"string"}]}'

Example response

{
  "count": 2,
  "entries": [
    {
      "id": "ent_123",
      "title": "Taco night"
    }
  ],
  "ok": true
}
patch/api/v1/families/{familySlug}/trackers/{collectionKey}/entries/batchUpdate entriesUpdates multiple entries in a collection in one request.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Request body

  • itemsobject[]required
    • dataobjectoptional
    • entryIdstringrequired
    • status"active" | "done" | "archived"optional
    • titlestringoptional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/trackers/meals/entries/batch \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"items":[{"entryId":"string"}]}'

Example response

{
  "count": 2,
  "entries": [
    {
      "id": "ent_123",
      "title": "Taco night",
      "status": "done"
    }
  ],
  "ok": true
}
delete/api/v1/families/{familySlug}/trackers/{collectionKey}/entries/batchDelete entriesDeletes multiple entries from a collection in one request. Pass entry ids only; titles are returned in the response for confirmation.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • collectionKeyKey of the collection, e.g. "meals".

Request body

  • entryIdsstring[]required

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/trackers/meals/entries/batch \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"entryIds":["string"]}'

Example response

{
  "count": 2,
  "entries": [
    {
      "id": "ent_123",
      "title": "Taco night"
    }
  ],
  "ok": true
}

Calendar

Manage family calendar events, external feeds, and share links.

13 endpoints
get/api/v1/families/{familySlug}/calendar/eventsList calendar eventsReturns family calendar events, optionally narrowed by date window, text, status, or result count. When both date boundaries are supplied, repeating series are expanded into concrete occurrences inside the window.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • fromOnly include events on or after this date (YYYY-MM-DD). With `to`, repeating series expand into dated occurrences inside the window.
  • toOnly include events on or before this date (YYYY-MM-DD).
  • queryCase-insensitive text to match against event titles and data.
  • statusOnly return events with this status.
  • excludeEndedSet true to leave out events that already finished in the household's time zone. Expanded repeating occurrences are evaluated independently.
  • limitMaximum number of matching events to return.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/calendar/events \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "events": [
    {
      "id": "ent_123",
      "title": "Soccer practice",
      "data": {
        "date": "2026-07-01",
        "time": "17:00"
      }
    }
  ],
  "ok": true
}
post/api/v1/families/{familySlug}/calendar/eventsCreate calendar eventAdds an event to the family calendar.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • allDaybooleanoptional
  • assigneestringoptional
  • attendanceobjectoptional
  • calendarKeystringoptional
  • dataobjectoptional
  • datestringrequired

    Required event date in YYYY-MM-DD format.

  • durationMinutesintegeroptional
  • endDatestringoptional

    Inclusive ISO end date for multi-day events.

  • endTimestringoptional

    Local event end time when known.

  • everyoneAttendance"going" | "maybe" | "out"optional
  • notestringoptional
  • ownerPersonIdstringoptional
  • responsibilityRequiredbooleanoptional

    False means the household explicitly decided this event needs no responsible person. Omit it when responsibility is still undecided.

  • responsiblePersonIdsstring[]optional
  • remindersobject[]optional
    • audience"household" | "responsible" | "going" | "people"optionaldefault "household"

      Who should receive the reminder: the whole household, responsible people, people marked going, or the explicit people list.

    • channels"in_app" | "email" | "push" | "sms"[]optionaldefault ["in_app"]

      Delivery channels for this reminder.

    • mode"plain" | "mavo"optionaldefault "plain"

      plain sends the saved reminder; mavo allows a contextual reminder generated at send time.

    • offsetMinutesintegerrequired

      How many minutes before the event start to send the reminder; 0 means at the start.

    • recipientPersonIdsstring[]optionaldefault []

      Household person ids to notify when audience is people; otherwise leave empty.

  • repeatDaysinteger[]optional
  • repeatFrequency"none" | "daily" | "weekdays" | "weekends" | "weekly" | "monthly" | "yearly" | "custom"optional
  • repeatIntervalintegeroptional
  • timestringoptional
  • titlestringrequired
  • travelPlanobject | nulloptional
  • wherestringoptional

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/calendar/events \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"date":"string","title":"string"}'

Example response

{
  "entryId": "ent_123",
  "ok": true,
  "title": "Soccer practice"
}
patch/api/v1/families/{familySlug}/calendar/events/{eventId}Update calendar eventUpdates one family calendar event.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • eventIdIdentifier of the calendar event.

Request body

  • allDaybooleanoptional
  • assigneestringoptional
  • attendanceobjectoptional
  • calendarKeystringoptional
  • dataobjectoptional
  • datestringoptional

    Required event date in YYYY-MM-DD format.

  • durationMinutesintegeroptional
  • endDatestringoptional

    Inclusive ISO end date for multi-day events.

  • endTimestringoptional

    Local event end time when known.

  • everyoneAttendance"going" | "maybe" | "out"optional
  • notestringoptional
  • ownerPersonIdstringoptional
  • responsibilityRequiredbooleanoptional

    False means the household explicitly decided this event needs no responsible person. Omit it when responsibility is still undecided.

  • responsiblePersonIdsstring[]optional
  • remindersobject[]optional
    • audience"household" | "responsible" | "going" | "people"optionaldefault "household"

      Who should receive the reminder: the whole household, responsible people, people marked going, or the explicit people list.

    • channels"in_app" | "email" | "push" | "sms"[]optionaldefault ["in_app"]

      Delivery channels for this reminder.

    • mode"plain" | "mavo"optionaldefault "plain"

      plain sends the saved reminder; mavo allows a contextual reminder generated at send time.

    • offsetMinutesintegerrequired

      How many minutes before the event start to send the reminder; 0 means at the start.

    • recipientPersonIdsstring[]optionaldefault []

      Household person ids to notify when audience is people; otherwise leave empty.

  • repeatDaysinteger[]optional
  • repeatFrequency"none" | "daily" | "weekdays" | "weekends" | "weekly" | "monthly" | "yearly" | "custom"optional
  • repeatIntervalintegeroptional
  • timestringoptional
  • titlestringoptional
  • travelPlanobject | nulloptional
  • wherestringoptional
  • clearAttendancebooleanoptional
  • clearTravelPlanbooleanoptional
  • editScope"occurrence" | "series"optional
  • occurrenceDatestringoptional
  • status"active" | "done" | "archived"optional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/calendar/events/eventId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"allDay":true,"assignee":"string","attendance":{},"calendarKey":"string","data":{},"date":"string","durationMinutes":0,"endDate":"string","endTime":"string","everyoneAttendance":"going","note":"string","ownerPersonId":"string","responsibilityRequired":true,"responsiblePersonIds":["string"],"reminders":[{"offsetMinutes":0}],"repeatDays":[0],"repeatFrequency":"none","repeatInterval":0,"time":"string","title":"string","travelPlan":{"baseTravelMinutes":0,"origin":"string"},"where":"string","clearAttendance":true,"clearTravelPlan":true,"editScope":"occurrence","occurrenceDate":"string","status":"active"}'

Example response

{
  "event": {
    "id": "ent_123",
    "title": "Soccer practice",
    "data": {
      "date": "2026-07-01"
    }
  },
  "ok": true
}
delete/api/v1/families/{familySlug}/calendar/events/{eventId}Delete calendar eventDeletes a calendar event series by default, or one occurrence when both occurrence query parameters are provided.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • eventIdIdentifier of the calendar event.
  • editScopeUse `occurrence` to delete one date in a repeating series. Defaults to the entire series.
  • occurrenceDateOriginal occurrence date (YYYY-MM-DD). Required when `editScope=occurrence`.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/calendar/events/eventId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "event": {
    "id": "ent_123",
    "title": "Soccer practice"
  },
  "ok": true
}
get/api/v1/families/{familySlug}/calendar/externalList external calendarsReturns linked external calendar feeds.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/calendar/external \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "feeds": [],
  "ok": true
}
post/api/v1/families/{familySlug}/calendar/externalCreate external calendarLinks an external ICS calendar feed and syncs its events.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • colorstringoptional
  • hintstringoptional
  • namestringrequired
  • urlstringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/calendar/external \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name":"string","url":"string"}'

Example response

{
  "eventCount": 12,
  "ok": true
}
post/api/v1/families/{familySlug}/calendar/external/probeProbe external calendarChecks whether an external ICS calendar URL can be read.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • urlstringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/calendar/external/probe \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"url":"string"}'

Example response

{
  "ok": true
}
patch/api/v1/families/{familySlug}/calendar/external/{sourceId}Update external calendarUpdates notes about a linked external calendar feed.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • sourceIdIdentifier of the external calendar feed.

Request body

  • hintstringoptional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/calendar/external/sourceId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"hint":"string"}'

Example response

{
  "ok": true
}
delete/api/v1/families/{familySlug}/calendar/external/{sourceId}Delete external calendarRemoves a linked external calendar feed and its synced calendar.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • sourceIdIdentifier of the external calendar feed.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/calendar/external/sourceId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
post/api/v1/families/{familySlug}/calendar/external/{sourceId}/refreshRefresh external calendarRequests a refresh for a linked external calendar feed.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • sourceIdIdentifier of the external calendar feed.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/calendar/external/sourceId/refresh \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
get/api/v1/families/{familySlug}/calendar/sharesList calendar sharesReturns household calendar share links.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/calendar/shares \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "shares": []
}
post/api/v1/families/{familySlug}/calendar/sharesCreate calendar shareCreates a calendar share link. The plaintext share token is returned once.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • categoriesstring[]optionaldefault []
  • eventIdsstring[]optionaldefault []
  • namestringrequired
  • personIdsstring[]optionaldefault []
  • sourceIdsstring[]optionaldefault []

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/calendar/shares \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name":"string"}'

Example response

{
  "ok": true,
  "share": {
    "id": "share_123",
    "name": "Soccer calendar"
  },
  "token": "share-token"
}
delete/api/v1/families/{familySlug}/calendar/shares/{shareId}Revoke calendar shareRevokes a calendar share link.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • shareIdIdentifier of the calendar share link.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/calendar/shares/shareId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}

Plans

Manage family plans: linked calendar events, notes, date polls, and the public share page.

21 endpoints
get/api/v1/families/{familySlug}/plansList plansReturns the household plans with each plan's derived date range, phase, event count, and share state.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/plans \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "plans": [
    {
      "archived": false,
      "eventCount": 3,
      "phase": "upcoming",
      "planId": "plan_123",
      "shareEnabled": false,
      "shareUrl": null,
      "title": "Spring break in Tahoe",
      "when": "Mar 21–28"
    }
  ]
}
post/api/v1/families/{familySlug}/plansCreate planCreates a plan: a named thing the family is planning that gathers calendar events, notes, and date polls in one place.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • prosestringoptional

    A few plain sentences about what the plan covers.

  • titlestringrequired

    Name of the specific thing being planned, e.g. "Spring break in Tahoe".

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"title":"string"}'

Example response

{
  "ok": true,
  "planId": "plan_123",
  "title": "Spring break in Tahoe"
}
get/api/v1/families/{familySlug}/plans/{planId}Get planReturns one plan in full: description, linked calendar events, notes, and polls with vote counts.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/plans/planId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "archived": false,
  "events": [
    {
      "eventId": "event_123",
      "location": "Tahoe City",
      "showDetailsOnShare": true,
      "showLocationOnShare": true,
      "timing": {
        "date": "2026-03-21",
        "endDate": "2026-03-28",
        "kind": "all-day"
      },
      "title": "Cabin week"
    }
  ],
  "notes": [
    {
      "author": "Dana",
      "body": "Cabin gate code is 4415.",
      "noteId": "note_123",
      "onSharedPage": false
    }
  ],
  "ok": true,
  "phase": "upcoming",
  "planId": "plan_123",
  "polls": [
    {
      "options": [
        {
          "date": "2026-03-21",
          "endDate": null,
          "endTime": null,
          "label": "Mar 21 weekend",
          "optionId": "option_123",
          "time": "3:30 PM",
          "votes": 3
        }
      ],
      "pollId": "poll_123",
      "question": "Which weekend works?",
      "settledOptionId": null,
      "status": "open"
    }
  ],
  "prose": "A week at the cabin with the cousins.",
  "shareUrl": null,
  "title": "Spring break in Tahoe",
  "when": "Mar 21–28"
}
patch/api/v1/families/{familySlug}/plans/{planId}Update planRenames a plan, rewrites its description, or archives it. Pass at least one of title, prose, or archived.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Request body

  • archivedbooleanoptional

    True archives the plan once it has run its course; false brings it back. Linked calendar events stay either way.

  • prosestring | nulloptional

    Replacement description. Null clears it. Omit to leave unchanged.

  • titlestringoptional

    Replacement name. Omit to leave unchanged.

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/plans/planId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"archived":true,"prose":"string","title":"string"}'

Example response

{
  "archived": false,
  "ok": true,
  "planId": "plan_123",
  "title": "Spring break in Tahoe"
}
delete/api/v1/families/{familySlug}/plans/{planId}Delete planDeletes a plan along with its notes, polls, and share link. Linked calendar events stay on the calendar.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
post/api/v1/families/{familySlug}/plans/{planId}/eventsLink plan eventPoints the plan at an existing calendar event. Nothing is copied; the plan derives its dates from the events it points at.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Request body

  • eventIdstringrequired

    Identifier of the calendar event to link. Nothing is copied; the plan points at the event.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/events \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"eventId":"string"}'

Example response

{
  "eventId": "event_123",
  "ok": true,
  "planId": "plan_123"
}
delete/api/v1/families/{familySlug}/plans/{planId}/events/{eventId}Unlink plan eventRemoves the plan's pointer to a calendar event. The event stays on the calendar.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • eventIdIdentifier of the calendar event.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId/events/eventId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "eventId": "event_123",
  "ok": true,
  "planId": "plan_123"
}
post/api/v1/families/{familySlug}/plans/{planId}/notesAdd plan noteAdds a note to the plan. Notes stay family-only unless showOnSharedPage is true.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Request body

  • bodystringrequired

    The note itself: context that is not an event, like a gate code or pack list.

  • showOnSharedPagebooleanoptional

    True shows this note on the public share page. Notes stay family-only by default.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/notes \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"body":"string"}'

Example response

{
  "noteId": "note_123",
  "ok": true
}
patch/api/v1/families/{familySlug}/plans/{planId}/notes/{noteId}Update plan noteRewrites a note, or changes whether it shows on the plan's share link. The note keeps its author and its place in the plan.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • noteIdIdentifier of the plan note.

Request body

  • bodystringoptional

    Replacement text for the note. Omit to leave the wording alone.

  • showOnSharedPagebooleanoptional

    True puts this note on the plan's share link, false keeps it family-only. Omit to leave it as it is.

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/plans/planId/notes/noteId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"body":"string","showOnSharedPage":true}'

Example response

{
  "noteId": "note_123",
  "ok": true,
  "onSharedPage": false
}
delete/api/v1/families/{familySlug}/plans/{planId}/notes/{noteId}Delete plan noteDeletes a plan note.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • noteIdIdentifier of the plan note.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId/notes/noteId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
post/api/v1/families/{familySlug}/plans/{planId}/pollsCreate plan pollOpens a poll on the plan, like which weekend works. Options can be dated, label-only, or both.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Request body

  • optionsobject[]required

    Two to twelve choices. Each option needs a label or a date.

    • datestringoptional

      Proposed date when this option is a date choice. The winning dated option can land on the calendar at settle time.

    • endDatestringoptional

      Inclusive proposed end date for multi-day options.

    • endTimestringoptional

      Proposed local end time, like "4:30 PM".

    • labelstringoptional

      What the option says. Optional when a date is given.

    • timestringoptional

      Proposed local start time, like "3:30 PM".

  • questionstringrequired

    The question being decided, e.g. "Which weekend works for the trip?".

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/polls \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"options":[{"date":"string","endDate":"string","endTime":"string","label":"string","time":"string"}],"question":"string"}'

Example response

{
  "ok": true,
  "pollId": "poll_123"
}
patch/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}Update plan pollRewords the question a poll is asking. The options and every vote already cast stay as they are. Only works while the poll is open.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Request body

  • questionstringrequired

    Replacement wording for the question.

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"question":"string"}'

Example response

{
  "ok": true,
  "pollId": "poll_123"
}
delete/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}Delete plan pollDeletes a plan poll and its votes.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
post/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/optionsAdd plan poll optionAdds one more choice to an open poll, for when a possibility turns up after the question went out. Votes already cast are untouched. Twelve options is the ceiling.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Request body

  • datestringoptional

    Proposed date when this option is a date choice. The winning dated option can land on the calendar at settle time.

  • endDatestringoptional

    Inclusive proposed end date for multi-day options.

  • endTimestringoptional

    Proposed local end time, like "4:30 PM".

  • labelstringoptional

    What the option says. Optional when a date is given.

  • timestringoptional

    Proposed local start time, like "3:30 PM".

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/options \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"date":"string","endDate":"string","endTime":"string","label":"string","time":"string"}'

Example response

{
  "ok": true,
  "optionId": "option_456"
}
patch/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/options/{optionId}Update plan poll optionRewrites an option on an open poll: its wording, its day, its time. The option keeps its identity, so the votes cast for it stay attached. Fields left out are cleared, so send the option as it should end up.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.
  • optionIdIdentifier of the option within the poll.

Request body

  • datestringoptional

    Proposed date when this option is a date choice. The winning dated option can land on the calendar at settle time.

  • endDatestringoptional

    Inclusive proposed end date for multi-day options.

  • endTimestringoptional

    Proposed local end time, like "4:30 PM".

  • labelstringoptional

    What the option says. Optional when a date is given.

  • timestringoptional

    Proposed local start time, like "3:30 PM".

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/options/optionId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"date":"string","endDate":"string","endTime":"string","label":"string","time":"string"}'

Example response

{
  "ok": true,
  "optionId": "option_123"
}
delete/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/options/{optionId}Delete plan poll optionRemoves one choice from an open poll. Any votes cast for that option go with it, so reword it instead when the choice is still on the table in some form.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.
  • optionIdIdentifier of the option within the poll.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/options/optionId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "optionId": "option_123"
}
post/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/voteVote on plan pollCasts the calling person's vote on an open poll. One vote per person: voting again moves it to the new option. There is no way to vote on someone else's behalf.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Request body

  • optionIdstringrequired

    Identifier of the option to vote for.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/vote \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"optionId":"string"}'

Example response

{
  "ok": true,
  "optionId": "option_123",
  "pollId": "poll_123"
}
delete/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/voteClear plan poll voteTakes the calling person's own vote back off an open poll, leaving them with no answer. Other people's votes are untouched.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/vote \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "pollId": "poll_123"
}
post/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/settleSettle plan pollCloses a poll on the chosen option. A dated option is written to the family calendar as a real event and linked onto the plan.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Request body

  • optionIdstringrequired

    Identifier of the option the family is going with.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/settle \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"optionId":"string"}'

Example response

{
  "addedToCalendar": true,
  "eventId": "event_456",
  "ok": true
}
post/api/v1/families/{familySlug}/plans/{planId}/polls/{pollId}/reopenReopen plan pollPuts a settled poll back to open. Anything settling created goes with it: a calendar event written from the winning option is removed and unlinked from the plan. Votes already cast stay.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.
  • pollIdIdentifier of the plan poll.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/polls/pollId/reopen \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "removedEventId": "event_456",
  "removedFromCalendar": true
}
post/api/v1/families/{familySlug}/plans/{planId}/shareSet plan sharingTurns the plan's public share link on or off. The link shows the live plan to whoever has it, no account needed.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • planIdIdentifier of the plan.

Request body

  • enabledbooleanrequired

    True turns the public share link on; false turns it off. The same address comes back when re-enabled.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/plans/planId/share \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"enabled":true}'

Example response

{
  "enabled": true,
  "ok": true,
  "shareUrl": "https://mavolife.com/share/plan/abc123"
}

People

Manage household people.

4 endpoints
get/api/v1/families/{familySlug}/peopleList peopleReturns household people.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/people \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "people": [
    {
      "id": "person_123",
      "name": "Maya",
      "role": "child"
    }
  ]
}
post/api/v1/families/{familySlug}/peopleCreate personAdds a household person profile.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • familiarNamestringoptional
  • kind"adult" | "child" | "helper" | "caregiver" | "other"optionaldefault "adult"
  • namestringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/people \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name":"string"}'

Example response

{
  "ok": true,
  "person": {
    "id": "person_123",
    "displayName": "Maya"
  }
}
patch/api/v1/families/{familySlug}/people/{personId}Update personUpdates a household person profile.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • personIdIdentifier of the household person.

Request body

  • familiarNamestring | nulloptional
  • kind"adult" | "child" | "helper" | "caregiver" | "other"optional
  • namestringoptional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/people/personId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"familiarName":"string","kind":"adult","name":"string"}'

Example response

{
  "ok": true,
  "person": {
    "id": "person_123",
    "displayName": "Maya"
  }
}
delete/api/v1/families/{familySlug}/people/{personId}Delete personRemoves a household person profile from active household views.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • personIdIdentifier of the household person.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/people/personId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "personId": "person_123"
}

Notifications

Send notifications and manage notification routines.

9 endpoints
get/api/v1/families/{familySlug}/notificationsList recent notificationsReturns recent household notifications. Supports an optional `sinceMinutes` query parameter.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • sinceMinutesOnly include notifications newer than this many minutes.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/notifications \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "notifications": [
    {
      "title": "Practice moved",
      "body": "Field changed."
    }
  ]
}
post/api/v1/families/{familySlug}/notificationsSend notificationSends a household notification.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • bodystringoptionaldefault ""
  • channels"in_app" | "email" | "push" | "sms"[]optional
  • titlestringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/notifications \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"title":"string"}'

Example response

{
  "delivered": 1,
  "ok": true,
  "suppressed": 0
}
post/api/v1/families/{familySlug}/checksSchedule event checkSchedules a background check ahead of a calendar event.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • channels"in_app" | "email" | "push" | "sms"[]optional
  • eventIdstringrequired
  • leadHoursnumberrequired
  • taskstringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/checks \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"eventId":"string","leadHours":0,"task":"string"}'

Example response

{
  "eventId": "ent_123",
  "leadHours": 14,
  "ok": true
}
get/api/v1/families/{familySlug}/notification-preferencesGet notification preferencesReturns household notification preferences.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/notification-preferences \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "preferences": {}
}
post/api/v1/families/{familySlug}/notification-preferencesSet notification preferenceUpdates one household notification preference.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • channel"email" | "push"required
  • eventKind"reminder" | "coverage_alert" | "follow_up_nudge" | "digest" | "intake_update"required
  • isEnabledbooleanrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/notification-preferences \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"channel":"email","eventKind":"reminder","isEnabled":true}'

Example response

{
  "ok": true,
  "preferences": {}
}
get/api/v1/families/{familySlug}/notification-routinesList notification routinesReturns household notification routines.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/notification-routines \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "routines": []
}
post/api/v1/families/{familySlug}/notification-routinesCreate notification routineCreates a household notification routine.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • channels"in_app" | "email" | "push" | "sms"[]optional
  • cronstringoptional
  • intent"briefing" | "reminder" | "digest"optional
  • isEnabledbooleanoptional
  • mode"plain" | "mavo"optional
  • timezonestringoptional

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/notification-routines \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"channels":["in_app"],"cron":"string","intent":"briefing","isEnabled":true,"mode":"plain","timezone":"string"}'

Example response

{
  "ok": true,
  "routine": {
    "id": "trg_123"
  }
}
patch/api/v1/families/{familySlug}/notification-routines/{triggerId}Update notification routineUpdates a household notification routine.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • triggerIdIdentifier of the notification routine.

Request body

  • channels"in_app" | "email" | "push" | "sms"[]optional
  • cronstringoptional
  • intent"briefing" | "reminder" | "digest"optional
  • isEnabledbooleanoptional
  • mode"plain" | "mavo"optional
  • timezonestringoptional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/notification-routines/triggerId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"channels":["in_app"],"cron":"string","intent":"briefing","isEnabled":true,"mode":"plain","timezone":"string"}'

Example response

{
  "ok": true,
  "routine": {
    "id": "trg_123"
  }
}
delete/api/v1/families/{familySlug}/notification-routines/{triggerId}Delete notification routineDeletes a household notification routine.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • triggerIdIdentifier of the notification routine.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/notification-routines/triggerId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}

Webhooks

Manage outbound webhook destinations.

5 endpoints
get/api/v1/families/{familySlug}/webhook-destinationsList webhook destinationsReturns outbound webhook destinations, delivery history, available events, and usage.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/webhook-destinations \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "destinations": [],
  "events": [
    "tracker.entry.created"
  ],
  "ok": true
}
post/api/v1/families/{familySlug}/webhook-destinationsCreate webhook destinationCreates an outbound webhook destination. The signing secret is returned once.Details

Path parameters

  • familySlugSlug of the family (household) to act on.

Request body

  • enabledbooleanoptional
  • eventTypes"collection.created" | "collection.updated" | "collection.deleted" | "tracker.entry.created" | "tracker.entry.updated" | "tracker.entry.deleted" | "calendar.event.created" | "calendar.event.updated" | "calendar.event.deleted" | "calendar.check.created" | "external_calendar.created" | "external_calendar.updated" | "external_calendar.refresh_requested" | "external_calendar.deleted" | "calendar_share.created" | "calendar_share.deleted" | "plan.created" | "plan.updated" | "plan.deleted" | "plan.event.linked" | "plan.event.unlinked" | "plan.note.created" | "plan.note.updated" | "plan.note.deleted" | "plan.poll.created" | "plan.poll.deleted" | "plan.poll.settled" | "plan.poll.reopened" | "plan.poll.vote.cast" | "plan.share.enabled" | "plan.share.disabled" | "person.created" | "person.updated" | "person.deleted" | "notification.sent" | "notification_preference.updated" | "notification_routine.created" | "notification_routine.updated" | "notification_routine.deleted" | "webhook_destination.created" | "webhook_destination.updated" | "webhook_destination.deleted"[]required
  • namestringrequired
  • urlstringrequired

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/webhook-destinations \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"eventTypes":["collection.created"],"name":"string","url":"string"}'

Example response

{
  "destination": {
    "id": "whd_123",
    "name": "Zapier",
    "url": "https://example.com/webhook"
  },
  "ok": true,
  "signingSecret": "whsec_..."
}
patch/api/v1/families/{familySlug}/webhook-destinations/{destinationId}Update webhook destinationUpdates an outbound webhook destination or rotates its signing secret.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • destinationIdIdentifier of the webhook destination.

Request body

  • enabledbooleanoptional
  • eventTypes"collection.created" | "collection.updated" | "collection.deleted" | "tracker.entry.created" | "tracker.entry.updated" | "tracker.entry.deleted" | "calendar.event.created" | "calendar.event.updated" | "calendar.event.deleted" | "calendar.check.created" | "external_calendar.created" | "external_calendar.updated" | "external_calendar.refresh_requested" | "external_calendar.deleted" | "calendar_share.created" | "calendar_share.deleted" | "plan.created" | "plan.updated" | "plan.deleted" | "plan.event.linked" | "plan.event.unlinked" | "plan.note.created" | "plan.note.updated" | "plan.note.deleted" | "plan.poll.created" | "plan.poll.deleted" | "plan.poll.settled" | "plan.poll.reopened" | "plan.poll.vote.cast" | "plan.share.enabled" | "plan.share.disabled" | "person.created" | "person.updated" | "person.deleted" | "notification.sent" | "notification_preference.updated" | "notification_routine.created" | "notification_routine.updated" | "notification_routine.deleted" | "webhook_destination.created" | "webhook_destination.updated" | "webhook_destination.deleted"[]optional
  • namestringoptional
  • urlstringoptional
  • rotateSecretbooleanoptional

Example request

curl -X PATCH https://mavolife.com/api/v1/families/your-family/webhook-destinations/destinationId \
  -H "x-api-key: $MAVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"eventTypes":["collection.created"],"name":"string","url":"string","rotateSecret":true}'

Example response

{
  "destination": {
    "id": "whd_123",
    "name": "Zapier"
  },
  "ok": true
}
delete/api/v1/families/{familySlug}/webhook-destinations/{destinationId}Delete webhook destinationDeletes an outbound webhook destination.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • destinationIdIdentifier of the webhook destination.

Example request

curl -X DELETE https://mavolife.com/api/v1/families/your-family/webhook-destinations/destinationId \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
post/api/v1/families/{familySlug}/webhook-destinations/{destinationId}/testTest webhook destinationSends a test delivery to a webhook destination.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • destinationIdIdentifier of the webhook destination.

Example request

curl -X POST https://mavolife.com/api/v1/families/your-family/webhook-destinations/destinationId/test \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}

Context

Search household context.

1 endpoints
get/api/v1/families/{familySlug}/contextSearch household contextSearches household collections, members, and upcoming calendar items. Use the optional `query` query parameter to narrow results.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • queryText to match across household collections, people, and calendar items.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/context \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "query": "soccer",
  "results": []
}

External info

Look up weather and public web content.

3 endpoints
get/api/v1/families/{familySlug}/weatherCheck weatherLooks up weather for a location. Send `location`, and optionally `date` and `time`, as query parameters.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • locationPlace to look up, such as a venue, city, or postal code.
  • dateDate to focus on (YYYY-MM-DD). Defaults to the soonest available day.
  • timeLocal time to focus on (HH:mm).

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/weather \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true
}
get/api/v1/families/{familySlug}/web/searchSearch webSearches the public web. Send `query`, and optionally `numResults`, as query parameters.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • queryWhat to search the public web for.
  • numResultsNumber of search results to return.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/web/search \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "results": [
    {
      "title": "Example",
      "url": "https://example.com"
    }
  ]
}
get/api/v1/families/{familySlug}/web/pageRead web pageReads the main text of a public web page. Send `url` as a query parameter.Details

Path parameters

  • familySlugSlug of the family (household) to act on.
  • urlPublic HTTP or HTTPS URL to read.

Example request

curl -X GET https://mavolife.com/api/v1/families/your-family/web/page \
  -H "x-api-key: $MAVO_API_KEY"

Example response

{
  "ok": true,
  "text": "Readable page content...",
  "url": "https://example.com"
}