Webhooks | FieldCamp API
FieldCamp does not currently emit outbound webhooks — use polling to track state changes.
FieldCamp does not emit outbound webhooks yet. This page documents the current polling-based pattern and our roadmap.
Poll for state changes
To track when a job moves to completed, cancelled, or another status,
poll GET /api/jobs at a reasonable interval. A typical cadence:
- Reconciliation loop: list all jobs once per hour and reconcile status changes against your own store.
- Targeted check: for a specific
jobNumberyou're watching, poll every 5 – 10 minutes until terminal status. - On-demand: after you create or update a job, poll once after ~30 seconds to confirm the state change landed.
async function waitForCompletion(jobNumber, { intervalMs = 600_000, timeoutMs = 86_400_000 } = {}) {
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
const { data } = await fc.get('/api/jobs');
const job = (data.data?.jobs ?? []).find(j => j.jobNumber === jobNumber);
if (!job) throw new Error(`Job ${jobNumber} not found`);
if (['completed', 'cancelled'].includes(job.jobStatus)) return job;
await new Promise(r => setTimeout(r, intervalMs));
}
throw new Error(`Timed out waiting for ${jobNumber}`);
}What the webhook offering will look like
When webhooks ship, we'll emit HTTPS POSTs to a URL you configure, with a JSON body like:
{
"eventId": "evt_01HK3...",
"eventType": "job.updated",
"occurredAt": "2026-05-01T17:32:10.000Z",
"data": { "job": { "id": "job_abc123", "jobStatus": "completed" } }
}Planned event types cover job and visit lifecycle plus invoice payments. Payloads will be signed; exact signing scheme and event schemas will be published when webhooks launch.
Timeline: not yet announced. Email support if this would unblock a specific integration.