Calendar & Accounting Sync API for Google Calendar, Outlook & QuickBooks | FieldCamp
FieldCamp's calendar sync API lets you trigger Google Calendar, Outlook and QuickBooks syncs and pull incremental changes from one place.
The FieldCamp calendar sync API gives integrators a programmatic way to trigger Google Calendar, Outlook and QuickBooks syncs and to read incremental Google Calendar changes. Use it whenever a dispatcher action, a webhook from an upstream system, or a user-facing "Refresh now" button needs to push or pull data faster than the default polling cadence. This reference covers the four supported endpoints, their request and response shapes, and the error codes you need to handle in production code.
If you're new to the FieldCamp API, start with the API quickstart and Authentication before invoking integration endpoints. For the full API reference index and the in-app setup behind these connections, see Apps and integrations: all FieldCamp connections.
What the calendar sync API does
The integration sync endpoints are designed for one job: bring a connected third-party system into agreement with FieldCamp on demand. Four routes are available:
POST /api/v1/integrations/google-calendar/sync— trigger a Google Calendar sync.GET /api/v1/integrations/google-calendar/sync— pull the incremental changes since the last successful run.GET /api/v1/integrations/google-calendar/status— read the current connection and sync state.POST /api/v1/integrations/outlook-calendar/sync— trigger an Outlook calendar sync.POST /api/v1/integrations/quickbooks/sync— trigger a bidirectional QuickBooks Online sync.
All of these endpoints assume the integration has already been connected in the FieldCamp web app under Integrations. If the connection is missing or the OAuth token has expired, FieldCamp returns the standard INTEGRATION_NOT_CONNECTED error described in Errors.
Most production integrations should rely on FieldCamp's scheduled background sync. Reserve manual triggers for user-initiated actions ("Refresh now") or webhook-driven flows. To know exactly when to fire a sync, subscribe to FieldCamp events using Webhooks.
Authentication and headers
Every calendar sync API call uses the same bearer-token authentication as the rest of the FieldCamp API. Mutating endpoints (the POST triggers) should be sent with an idempotency key so retries are safe.
Generate an API key
Create or rotate a key in your FieldCamp workspace. Step-by-step setup is covered in Authentication, and the underlying API keys resource lets you script key rotation.
Add headers to every call
Include Authorization: Bearer <token> and Content-Type: application/json. For POST sync triggers, also send an Idempotency-Key header — see Idempotency.
Respect rate limits
Sync triggers count toward your account's request quota. See Rate limits for current ceilings and recommended backoff.
Handle the connection error
If an integration is not connected, FieldCamp returns INTEGRATION_NOT_CONNECTED. Send the user back to Connect Google Calendar and Outlook to FieldCamp or Connect QuickBooks, Xero and Wave to FieldCamp before retrying.
Trigger a Google Calendar sync
POST /api/v1/integrations/google-calendar/sync enqueues a sync between FieldCamp visits and the connected Google Calendar account. It is the API equivalent of clicking "Sync now" in the integration settings — the same control surfaced in Calendar sync and preferences.
Use this trigger after any action that changes a visit time or assignee — for example, a dispatcher reschedule, an AI Dispatcher suggestion being accepted, or a route optimization run. A typical request looks like:
POST /api/v1/integrations/google-calendar/sync HTTP/1.1
Host: api.fieldcamp.ai
Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: a4b2c0d1-9a1b-4d6c-9c8d-1f3e2a7b1234
{
"mode": "incremental"
}A successful response returns a job descriptor you can use to poll status:
{
"job_id": "syn_01HZX2Q8YV3D1G0N3WJ2P7K9MA",
"integration": "google_calendar",
"mode": "incremental",
"status": "queued",
"created_at": "2026-05-29T14:21:08Z"
}Pair the trigger call with Live team tracking so dispatch, the technician's phone calendar, and Google Calendar all reflect the same source of truth within seconds.
Pull incremental Google Calendar changes
GET /api/v1/integrations/google-calendar/sync returns the events that have changed in Google Calendar since the last successful incremental sync. This is the right endpoint when you want to mirror Google-side changes into your own system without rebuilding the entire calendar.
GET /api/v1/integrations/google-calendar/sync?since=2026-05-29T13:00:00Z HTTP/1.1
Host: api.fieldcamp.ai
Authorization: Bearer <api_key>The response is a paginated list of change records, each with an action (created, updated, or deleted), the FieldCamp visit ID where applicable, and the Google event ID. Use the returned next_cursor for any subsequent page. Combine the data you get back with the Visits API to keep your own scheduling view in lockstep with FieldCamp's calendar.
Read Google Calendar status
GET /api/v1/integrations/google-calendar/status tells you whether the connection is healthy, when the last successful sync ran, and what direction it covered. Call it before triggering a sync so you can short-circuit if the integration is disconnected.
{
"integration": "google_calendar",
"connected": true,
"last_synced_at": "2026-05-29T14:05:11Z",
"next_scheduled_sync_at": "2026-05-29T14:35:11Z",
"active_job_id": null,
"errors": []
}When connected is false, treat it the same as receiving INTEGRATION_NOT_CONNECTED on a trigger call — guide the user back into the integration settings to reconnect.
Trigger an Outlook calendar sync
POST /api/v1/integrations/outlook-calendar/sync mirrors the Google Calendar trigger pattern for Microsoft 365 / Outlook calendars. It is especially useful for service businesses whose field crews live in Outlook. After scheduling jobs through the Job Tray and dispatch workflow, call this endpoint to push fresh visit details to each technician's mailbox.
POST /api/v1/integrations/outlook-calendar/sync HTTP/1.1
Host: api.fieldcamp.ai
Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: 9d2f10c5-2a0a-4f44-8a4b-3a98a37fbb02
{
"mode": "incremental"
}The response shape matches the Google Calendar trigger — a job_id, status, and timestamps. As with Google, an unconnected integration returns INTEGRATION_NOT_CONNECTED.
Trigger a QuickBooks sync
POST /api/v1/integrations/quickbooks/sync runs a bidirectional sync between FieldCamp and your QuickBooks Online file: clients flow through as customers, invoices post, payment statuses reconcile, and taxes from Tax settings align to your QuickBooks tax codes.
POST /api/v1/integrations/quickbooks/sync HTTP/1.1
Host: api.fieldcamp.ai
Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: 1c6b48d3-1e72-4f99-9e72-7c1f88d2d4a3
{
"scope": "all"
}QuickBooks syncs can take longer than calendar syncs because they walk through
customers, items, invoices, and payments. Poll the job rather than firing
repeat trigger requests in a tight loop — repeated triggers will collide and
return 409 Conflict.
Error handling
Sync endpoints use the standard FieldCamp error envelope documented in Errors. Two responses deserve special attention:
INTEGRATION_NOT_CONNECTED— the requested integration is missing, never authorized, or its OAuth token has been revoked. Surface the user to the setup flow in Apps and integrations: all FieldCamp connections.409 Conflict— a sync is already in flight for that integration. Poll the status endpoint and let the running job finish before retrying.
Wrap sync triggers in idempotency keys so retries never duplicate work.
Subscribe to FieldCamp events so your code knows exactly when to fire a sync.
Best practices for production
A few patterns that hold up well in real deployments:
- Trigger on user intent, not on a timer. Let scheduled jobs rely on FieldCamp's built-in cadence and reserve manual triggers for "Refresh now" buttons or webhook handlers — subscribe via webhook events to know when source data changed.
- Always read the status endpoint after a trigger. Treat the trigger as "start the job" and the status route as "did it finish cleanly?"
- Batch related changes. If your code adjusts ten visits in a row, queue one calendar sync at the end instead of one per visit.
- Log job IDs and counts. Keeping a record of
job_id, records pulled, pushed, and skipped makes drift easy to spot before users notice.
Troubleshooting
If a sync returns an error or never completes, work through these checks before opening a support ticket. End users can follow a similar flow in Troubleshooting common issues and fixes.
- Call the status endpoint. If
connectedisfalse, reconnect the integration first. - Check that the user who owns the OAuth grant still has access in Google, Microsoft, or Intuit.
- Treat
409as "a sync is already running" — wait, then poll status. - Read the
errorsarray on the status response; codes there map to entries in Errors. - As a last resort, disconnect and reconnect to mint fresh OAuth tokens.
FAQs
Do I need to call the trigger endpoint at all? No. FieldCamp runs scheduled background syncs on a regular cadence. The trigger endpoints exist for the moments when waiting is not acceptable — user-initiated refreshes or webhook-driven flows.
What happens if I call the trigger while one is already running?
You'll get a 409 Conflict. Poll the status endpoint until the active job clears, then retry. Idempotency keys do not bypass this guard.
How do I know if a customer has connected QuickBooks?
Call GET /api/v1/integrations/google-calendar/status for calendars and the analogous status route for accounting. If connected is false, point the user at Connect QuickBooks, Xero and Wave to FieldCamp.
Can I run a full Google Calendar sync from the API?
Yes — send "mode": "full" to the Google Calendar trigger. Use this sparingly; it rebuilds every event and is meant for first-time connections, recovery after a long disconnect, or suspected drift.
Where do I see the changelog for these endpoints? Endpoint additions, deprecations, and field changes are recorded in the API changelog.
Related articles
- Apps and integrations: all FieldCamp connections
- Connect Google Calendar and Outlook to FieldCamp
- Connect QuickBooks, Xero and Wave to FieldCamp
- Calendar sync and preferences
- API quickstart
- Authentication
- API keys resource
- Idempotency
- Rate limits
- Webhooks
- Webhook events catalog
- Errors
- Visits API
- API changelog
Managing FieldCamp API keys: create, scope, and rotate
Create, scope, rotate, and revoke FieldCamp API keys with /api/v1/api-keys to give every integration its own credentials.
Invoices | FieldCamp API
Use the FieldCamp Invoices API to create, list, update, void, and collect on v1 invoices with line items, discounts, markup, and Stripe payment links.