▦ Structure Cal
Public developer documentation · API v1

One calendar. Shared with your team.

Read and manage full Google calendars or independent native calendars with your own GFAVIP identity. Every account follows the same calendar permissions.

Send these links to a teammate or assistant. The documentation is public; calendar data requires authentication and explicit access.

Get connected

For the calendar owner

  1. Sign in with GFAVIP, then open Calendars.
  2. Choose Add calendar → Find my Google calendars. Connect Google first if needed, then select the calendar you want to share. You can also create a native calendar.
  3. After your teammate has signed in or called the API once, open Sharing and add their exact GFAVIP username as Editor to let them manage events, or Viewer for read access.

For a headless client

  1. Obtain your own GFAVIP Wallet session token through your existing headless sign-in flow.
  2. Call GET /api/v1/calendars with Authorization: Bearer <gfavip_session_token>. The first valid call registers your account here.
  3. An empty calendars list means authentication worked but no calendars are available yet. Ask the owner to share, then call again.

Sharing includes all event details visible to the connected Google account, including personal/private events and events created outside Structure Cal. Each Google calendar must be selected and shared explicitly. Google credentials stay on the server.

Use a Wallet session token

The API validates each bearer token with https://wallet.gfavip.com/api/auth/validate and maps it to a stable GFAVIP user ID. A token identifies you; calendar membership determines what you can do.

For an existing PowerLobster integration, exchange its identity token at Wallet’s POST /api/auth/powerlobster with JSON {"token":"<identity_token>"}. Use the returned sso_token for Structure Cal, and respect expires_at. A PowerLobster API key or Google access token cannot be used directly as the calendar bearer token.

Keep credentials in your client’s secret store. Do not put tokens in URLs, shared messages, or event descriptions. Reauthenticate when a session expires.

Start with your calendars

For a compact morning agenda, use GET /api/v1/calendars/{id}/agenda?tz=Asia/Bangkok. Add date=YYYY-MM-DD for another day. You can also combine selected calendars, preview duplicates, and inspect change history with guarded undo. The API reference describes each endpoint and its limits.

Base URL: https://cal.structure.info/api/v1. Load GFAVIP_SESSION_TOKEN securely into your environment before running this example.

curl --fail-with-body --silent --show-error \
  -H "Authorization: Bearer $GFAVIP_SESSION_TOKEN" \
  https://cal.structure.info/api/v1/calendars

Use the returned local calendar id in event requests. Supply timezone-aware time_min and time_max values and follow next_page_token to read the full result.

MethodPath (after /api/v1)Purpose
GET/calendarsCalendars you can access and your effective role
GET/calendars/{id}/eventsFull event list for a date range, including non-booking events
GET/calendars/{id}/events/{event_id}Current event and its version (etag)
POST/calendars/{id}/eventsCreate an event with an Idempotency-Key
PATCH / DELETE/calendars/{id}/events/{event_id}Edit, move or delete using the current If-Match version
GET/calendars/{id}/busyBusy intervals for a date range

Read the full reference for request/response examples, calendar creation, sharing, pagination, errors and retry rules.

Make changes reliably

Google calendars support recurring creation, whole-series edits and previewed future splits. Linked single events can be updated as a group or previewed for conversion into an equivalent series. Event reminders, explicit attendee updates and delegated calendar RSVP are documented in the API guide. Native calendars support recurrence, invitations, import/export and opt-in notifications. Automatic native-to-Google synchronization remains unsupported. See the API reference for exact limits.