Cookpit / Timbrage time tracking
If your campground uses Cookpit (Timbrage) for staff time-stamping, this adapter pulls those clock events into CampOne’s time-tracking module every 15 minutes. Payroll-ready totals, no double entry.
If you don’t use Cookpit, CampOne ships a built-in clock-in widget on the daily dashboard — staff hit “Clock in” when they arrive, “Clock out” when they leave, and the same downstream reports work.
What it gives you
Section titled “What it gives you”- Pulls clock events from Cookpit every 15 minutes (idempotent — re-runs don’t duplicate)
- Stores them in CampOne’s
TimeEntrytable alongside manual entries - Tracks adjustments separately (every PATCH writes a
TimeEntryAdjustmentaudit row) - Per-user time summaries with date filters
- A staff-side Clock in / Clock out widget on the dashboard for any tenant
Prerequisites
Section titled “Prerequisites”Cookpit doesn’t publish a public developer portal — you contact them directly:
- Sales: verkauf@cookpit.ch
- Support: support@cookpit.ch
- Product page: https://www.cookpit.ch/cookpit-time/
What to ask for:
- The technical API contract (we currently assume
GET /api/v1/clock-eventswithX-API-Keyheader) - A sandbox tenant + API key for one pilot site
- Confirmation of the base URL (
https://api-test.cookpit.chis our current best guess) - Their position on push: do they accept inbound shifts from us, or is this pull-only?
A ready-to-send email template lives at docs-internal/handoffs/integrations-outreach-emails.md.
What you’ll paste into CampOne
Section titled “What you’ll paste into CampOne”Settings → Integrations → Vendor Adapters → Cookpit:
| Field | Description |
|---|---|
| Environment | Test / Production |
| Location ID | Cookpit’s identifier for your campground |
| API key | The token Cookpit issues per tenant |
| User mapping | A JSON object mapping Cookpit user IDs → CampOne user IDs, e.g. {"cookpit_42": 17, "cookpit_43": 22} |
Click Save, then Test connection.
How the sync works
Section titled “How the sync works”Every 15 minutes a Celery task asks Cookpit “any new clock events since last cursor?”. For each event it finds:
- Look up the Cookpit user ID in your user mapping to get the CampOne user.
- If the user isn’t mapped, skip and log (so you can map them and re-run).
- Create or update a
TimeEntrykeyed on(tenant, source='cookpit', external_ref). Re-imports are idempotent. - Update the cursor so the next pull only fetches new events.
The integration log shows how many events were imported per pull.
Clock-in widget for sites without Cookpit
Section titled “Clock-in widget for sites without Cookpit”The dashboard widget creates TimeEntry rows with source='manual'. Same data shape, same downstream reports. If a site adopts Cookpit later, you flip the toggle on this card and old manual entries stay intact.
Time-entry adjustments
Section titled “Time-entry adjustments”Tenant admins can edit any TimeEntry (e.g. fix a missed clock-out). Every edit writes a TimeEntryAdjustment row with the before / after snapshot and the user who made the change — full audit trail for payroll disputes.
Support contacts
Section titled “Support contacts”- Sales / partnerships: verkauf@cookpit.ch
- Technical support: support@cookpit.ch
Limitations
Section titled “Limitations”- Push-shift to Cookpit is documented as a roadmap item — the adapter raises
NotImplementedErroruntil Cookpit confirms the inbound contract. - The Cookpit API contract is currently inferred from common time-tracking patterns; expect a small adjustment to
services/client.pywhen the vendor confirms the exact response shape. - VCR-recorded tests against the real Cookpit sandbox will be added once credentials arrive.