Jobs | FieldCamp API
The Jobs endpoint is the headline resource of the FieldCamp API — schedule work, assign crews, and roll up billing.
A job is a scheduled unit of work: a client, an address, a time window, a team, and one or more line items. Jobs are the primary resource your booking system will create.
Most important things to know
POST /api/jobs uses multipart/form-data, not JSON.
Two form fields:
jobData— a JSON-stringified payload (theNewJobDataschema below)notes— a plain string with any free-form notes
If you accidentally send JSON, you'll get 400 jobNumber is required
even though jobNumber is in your payload — the server never parsed it.
assignedToTeams takes user IDs, not team IDs. Get them from
GET /api/team. The field name is historical and won't be renamed.
Datetimes are UTC ISO-8601. timezone is a display hint for the
FieldCamp UI — do not encode the offset into startDateTime. Always
convert your local time to UTC before sending.
Typical patterns
- Reschedule:
PUT /api/jobs/{id}with{ startDateTime, endDateTime }. - Cancel:
PUT /api/jobs/{id}with{ jobStatus: "cancelled" }. Prefer this overDELETEuntil delete semantics are confirmed. - Find existing:
GET /api/jobs, filter by yourjobNumberclient-side. See Idempotency.
Visits on jobs
A job has a time window (startDateTime/endDateTime), and FieldCamp
auto-generates one visit to cover it. For multi-stop jobs (e.g. a
delivery-then-collection flow), pass visits: [] on create and use
POST /api/visits afterwards for full control.
Endpoints
/api/jobsPass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Response Body
application/json
application/json
curl -X GET "https://api.fieldcamp.ai/api/jobs"{
"success": true,
"data": {
"jobs": [
{
"clientId": "string",
"jobNumber": "BOOKING-5512-MOVE",
"isBillingDifferent": false,
"billToClientId": "string",
"billToClientDetails": {},
"jobAddress": {
"street": "221B Baker Street",
"houseNumber": "",
"city": "London",
"state": "England",
"country": "United Kingdom",
"zipCode": "NW1 6XE",
"formattedAddress": "221B Baker Street, London, England, NW1 6XE, United Kingdom",
"latitude": 51.5237,
"longitude": -0.1585,
"plusCode": ""
},
"jobPhone": {
"countryCode": "+44",
"number": "7555123456",
"countryIdentifier": "gb"
},
"assignedToTeams": [
"string"
],
"jobType": "one-off",
"startDateTime": "2019-08-24T14:15:22Z",
"endDateTime": "2019-08-24T14:15:22Z",
"scheduleLater": false,
"anyTime": false,
"serviceDuration": 0,
"jobFormIds": [
"string"
],
"subTotal": 0.1,
"tax": 0.1,
"total": 0.1,
"discount": 0,
"discountType": 1,
"jobStatus": "scheduled",
"jobItems": [
{
"itemId": "string",
"id": "string",
"itemName": "Standard 3-person moving crew",
"description": "",
"taxIds": [
"string"
],
"exemptFromTax": false,
"quantity": 1,
"price": 299,
"total": 299,
"taxAmount": 0,
"orderIndex": 1,
"type": "Service",
"taxes": [
{}
],
"action": 1
}
],
"timezone": "Europe/London",
"properties": [
{
"id": "string",
"name": "Sub Type",
"type": "Text",
"value": "Delivery",
"options": [
"string"
],
"isRequired": true,
"source": "fieldDefinition"
}
],
"isStartTime": true,
"isEndTime": true,
"skillsId": [
"string"
],
"priority": "medium",
"notesLinking": {
"linkToEstimate": true,
"linkToInvoice": true
},
"jobLogsTemplateId": "string",
"templateId": "string",
"templateSnapshot": {},
"visits": [
{
"visitStartDateTime": "2026-05-01T09:00:00.000Z",
"visitEndDateTime": "2026-05-01T17:00:00.000Z",
"teamId": [
"string"
],
"visitStatus": "scheduled"
}
],
"id": "string",
"recordId": "string",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
]
}
}{
"success": false,
"error": "Invalid or expired token"
}/api/jobsPass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://api.fieldcamp.ai/api/jobs" \ -F jobData="string" \ -F notes="string"{
"success": true,
"data": {
"jobId": "string",
"job": {
"clientId": "string",
"jobNumber": "BOOKING-5512-MOVE",
"isBillingDifferent": false,
"billToClientId": "string",
"billToClientDetails": {},
"jobAddress": {
"street": "221B Baker Street",
"houseNumber": "",
"city": "London",
"state": "England",
"country": "United Kingdom",
"zipCode": "NW1 6XE",
"formattedAddress": "221B Baker Street, London, England, NW1 6XE, United Kingdom",
"latitude": 51.5237,
"longitude": -0.1585,
"plusCode": ""
},
"jobPhone": {
"countryCode": "+44",
"number": "7555123456",
"countryIdentifier": "gb"
},
"assignedToTeams": [
"string"
],
"jobType": "one-off",
"startDateTime": "2019-08-24T14:15:22Z",
"endDateTime": "2019-08-24T14:15:22Z",
"scheduleLater": false,
"anyTime": false,
"serviceDuration": 0,
"jobFormIds": [
"string"
],
"subTotal": 0.1,
"tax": 0.1,
"total": 0.1,
"discount": 0,
"discountType": 1,
"jobStatus": "scheduled",
"jobItems": [
{
"itemId": "string",
"id": "string",
"itemName": "Standard 3-person moving crew",
"description": "",
"taxIds": [
"string"
],
"exemptFromTax": false,
"quantity": 1,
"price": 299,
"total": 299,
"taxAmount": 0,
"orderIndex": 1,
"type": "Service",
"taxes": [
{}
],
"action": 1
}
],
"timezone": "Europe/London",
"properties": [
{
"id": "string",
"name": "Sub Type",
"type": "Text",
"value": "Delivery",
"options": [
"string"
],
"isRequired": true,
"source": "fieldDefinition"
}
],
"isStartTime": true,
"isEndTime": true,
"skillsId": [
"string"
],
"priority": "medium",
"notesLinking": {
"linkToEstimate": true,
"linkToInvoice": true
},
"jobLogsTemplateId": "string",
"templateId": "string",
"templateSnapshot": {},
"visits": [
{
"visitStartDateTime": "2026-05-01T09:00:00.000Z",
"visitEndDateTime": "2026-05-01T17:00:00.000Z",
"teamId": [
"string"
],
"visitStatus": "scheduled"
}
],
"id": "string",
"recordId": "string",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
}
}{
"success": false,
"error": "jobNumber is required"
}{
"success": false,
"error": "Invalid or expired token"
}/api/jobs/{id}Pass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://api.fieldcamp.ai/api/jobs/string"{
"success": true,
"data": {
"job": {
"clientId": "string",
"jobNumber": "BOOKING-5512-MOVE",
"isBillingDifferent": false,
"billToClientId": "string",
"billToClientDetails": {},
"jobAddress": {
"street": "221B Baker Street",
"houseNumber": "",
"city": "London",
"state": "England",
"country": "United Kingdom",
"zipCode": "NW1 6XE",
"formattedAddress": "221B Baker Street, London, England, NW1 6XE, United Kingdom",
"latitude": 51.5237,
"longitude": -0.1585,
"plusCode": ""
},
"jobPhone": {
"countryCode": "+44",
"number": "7555123456",
"countryIdentifier": "gb"
},
"assignedToTeams": [
"string"
],
"jobType": "one-off",
"startDateTime": "2019-08-24T14:15:22Z",
"endDateTime": "2019-08-24T14:15:22Z",
"scheduleLater": false,
"anyTime": false,
"serviceDuration": 0,
"jobFormIds": [
"string"
],
"subTotal": 0.1,
"tax": 0.1,
"total": 0.1,
"discount": 0,
"discountType": 1,
"jobStatus": "scheduled",
"jobItems": [
{
"itemId": "string",
"id": "string",
"itemName": "Standard 3-person moving crew",
"description": "",
"taxIds": [
"string"
],
"exemptFromTax": false,
"quantity": 1,
"price": 299,
"total": 299,
"taxAmount": 0,
"orderIndex": 1,
"type": "Service",
"taxes": [
{}
],
"action": 1
}
],
"timezone": "Europe/London",
"properties": [
{
"id": "string",
"name": "Sub Type",
"type": "Text",
"value": "Delivery",
"options": [
"string"
],
"isRequired": true,
"source": "fieldDefinition"
}
],
"isStartTime": true,
"isEndTime": true,
"skillsId": [
"string"
],
"priority": "medium",
"notesLinking": {
"linkToEstimate": true,
"linkToInvoice": true
},
"jobLogsTemplateId": "string",
"templateId": "string",
"templateSnapshot": {},
"visits": [
{
"visitStartDateTime": "2026-05-01T09:00:00.000Z",
"visitEndDateTime": "2026-05-01T17:00:00.000Z",
"teamId": [
"string"
],
"visitStatus": "scheduled"
}
],
"id": "string",
"recordId": "string",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
}
}{
"success": false,
"error": "Invalid or expired token"
}/api/jobs/{id}Pass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Any subset of NewJobData fields.
Response Body
application/json
application/json
curl -X PUT "https://api.fieldcamp.ai/api/jobs/string" \ -H "Content-Type: application/json" \ -d '{ "jobStatus": "cancelled" }'{
"success": true,
"data": {
"job": {
"clientId": "string",
"jobNumber": "BOOKING-5512-MOVE",
"isBillingDifferent": false,
"billToClientId": "string",
"billToClientDetails": {},
"jobAddress": {
"street": "221B Baker Street",
"houseNumber": "",
"city": "London",
"state": "England",
"country": "United Kingdom",
"zipCode": "NW1 6XE",
"formattedAddress": "221B Baker Street, London, England, NW1 6XE, United Kingdom",
"latitude": 51.5237,
"longitude": -0.1585,
"plusCode": ""
},
"jobPhone": {
"countryCode": "+44",
"number": "7555123456",
"countryIdentifier": "gb"
},
"assignedToTeams": [
"string"
],
"jobType": "one-off",
"startDateTime": "2019-08-24T14:15:22Z",
"endDateTime": "2019-08-24T14:15:22Z",
"scheduleLater": false,
"anyTime": false,
"serviceDuration": 0,
"jobFormIds": [
"string"
],
"subTotal": 0.1,
"tax": 0.1,
"total": 0.1,
"discount": 0,
"discountType": 1,
"jobStatus": "scheduled",
"jobItems": [
{
"itemId": "string",
"id": "string",
"itemName": "Standard 3-person moving crew",
"description": "",
"taxIds": [
"string"
],
"exemptFromTax": false,
"quantity": 1,
"price": 299,
"total": 299,
"taxAmount": 0,
"orderIndex": 1,
"type": "Service",
"taxes": [
{}
],
"action": 1
}
],
"timezone": "Europe/London",
"properties": [
{
"id": "string",
"name": "Sub Type",
"type": "Text",
"value": "Delivery",
"options": [
"string"
],
"isRequired": true,
"source": "fieldDefinition"
}
],
"isStartTime": true,
"isEndTime": true,
"skillsId": [
"string"
],
"priority": "medium",
"notesLinking": {
"linkToEstimate": true,
"linkToInvoice": true
},
"jobLogsTemplateId": "string",
"templateId": "string",
"templateSnapshot": {},
"visits": [
{
"visitStartDateTime": "2026-05-01T09:00:00.000Z",
"visitEndDateTime": "2026-05-01T17:00:00.000Z",
"teamId": [
"string"
],
"visitStatus": "scheduled"
}
],
"id": "string",
"recordId": "string",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
}
}{
"success": false,
"error": "Invalid or expired token"
}/api/jobs/{id}Pass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Path Parameters
Response Body
application/json
curl -X DELETE "https://api.fieldcamp.ai/api/jobs/string"{
"success": false,
"error": "Invalid or expired token"
}/api/jobs/{id}/itemsPass your JWT API key as Authorization: Bearer <token>. Send
alongside X-API-Key: <token> for maximum compatibility.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://api.fieldcamp.ai/api/jobs/string/items"{
"success": true,
"data": {
"items": [
{
"itemId": "string",
"id": "string",
"itemName": "Standard 3-person moving crew",
"description": "",
"taxIds": [
"string"
],
"exemptFromTax": false,
"quantity": 1,
"price": 299,
"total": 299,
"taxAmount": 0,
"orderIndex": 1,
"type": "Service",
"taxes": [
{}
],
"action": 1
}
]
}
}{
"success": false,
"error": "Invalid or expired token"
}