FieldCamp

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 jobNumber you'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.

On this page