Job APIs
About
This section will cover APIs needed for every action pertaining to the Job such as Create, Update, Post to marketplace, Fetch details, Enable/Disable in Marketplace, Lock/Unlock job from marketplace, Cancel, Assign/Unassign job to engineer, create Visits, Approve/Reject visits created by engineer and Complete the job. To make these API requests, you combine the HTTP GET
, POST
, PUT
and PATCH
methods, the URL to API service, query parameter(s), HTTP request headers and payload data.
Query Parameters
These query parameters are common to most APIs with few exceptions which will be mentioned under those respective API sections.
Parameter Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
API Responses
Each API responses return generic HTTP code/messages along with two other elements under response body: payload and result. payload
could be either an array or an object depending on the API request; and result
consists of specific FE business scenario related status code/messages.(Described in detail under individual APIs).
HTTP Status Codes
Status code | Message description |
---|---|
200 |
Success |
400 |
Bad Request |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not Found |
500 |
Internal Server Error |
Business Scenario Related Status Codes
Note: Detailed description of each status code is given under respective APIs below.
Status code | Message description |
---|---|
301 |
Invalid Company User |
302 |
Invalid User |
303 |
Invalid scheduled date |
304 |
Missing address |
305 |
Invalid job |
306 |
Cancelled job |
307 |
Completed or Closed job |
308 |
Minimum job payment should be $10 |
309 |
Only 20 custom fields are allowed |
310 |
Duplicate custom fields |
311 |
Cannot update route of an active job |
312 |
This operation is not allowed on current job |
313 |
Not enough credits availabl |
314 |
Minimum of one visit is required to complete a job |
315 |
Job not locked |
316 |
Job can be locked contracted with engineer |
317 |
Visits present for the job |
318 |
Job not in assigned status |
319 |
Job in not in active status |
320 |
Job in cancelled status |
321 |
Unauthorized action |
322 |
Not allowed to erase job as visits exists |
323 |
Duplicate project name |
324 |
Pay, address, skills update not allowed on accepted job |
325 |
Companies credit is not enabled |
326 |
Invalid opportunity content |
327 |
Company account has past due |
328 |
Job is in locked status |
329 |
No data found |
331 |
Per Visit allowance is not allowed as pay is fixed |
332 |
Custom Group Name is Mandatory |
333 |
Custom Group should have atleast one field |
334 |
Allowed Allowance type is Fixed or Per Visit |
335 |
Address1 is mandatory in parsed address |
APIs
1. Create Job
POST /job
This endpoint will create a new job either in draft or active status. To create a job you need to send all the details as per schema specifications shown in Sample Request. If job is saved successfully, opportunityId and workOrderNumber will be returned in response.
Note:
- On performing CREATE or UPDATE request, the job is either saved as draft or created in active status.
- When the job is posted in active status then it is visible in Marketplace as well.
- The indicator publishToMarketPlace in CREATE/UPDATE job request body, if set to false/true then creates job in draft/active status respectively.
Note: Sample Request and Responses for this API are shown under UPDATE JOB Api section.
2. Update Job
PUT /job?endClientOrderNumber=<value>
This endpoint will update the job, but only if it is in draft status. To update you will need to enter all the details per schema specifications shown in Sample Request, and pass either endClientOrderNumber / workOrderNumber / opportunityId.
You cannot update an active Job!
i. Sample Request
Both Create and Update Job APIs will have same Response body.
curl -X POST \
https://sandboxapi.fieldengineer.io/v1/job \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{<Request_json>}'
ii. Sample Request Body
{
"title": "FieldEngineer",
"scheduledOn": "2021-10-06 12:58:59",
"name": "Install adtran",
"projectName": "ABCxxxx Inc",
"jobType": "REMOTE",
"endClientOrderNumber": "ABCxxxx",
"subuserId": "81da89f6e335bae36ce068e32",
"address": {
"parsed": {
"address1": "10 Corporate Place South",
"address2": "Suite 105",
"city": "Piscataway",
"country": "US",
"subDivision": "NJ",
"zip": "08854"
},
"unParsed": "10 Corporate Place South, Piscataway, NJ 08854, USA"
},
"qualification": [
{
"isMandatory": false,
"name": "CCIE Collaboration",
"id": "h763b834e69j8egjb13169j5"
},
{
"isMandatory": true,
"name": "CCIE Data Center",
"id": "5b6c7b4b5acbf4c440f444c91"
}
],
"equipment": [
{
"name": "Cisco Console Cable",
"id": "233f61e058ad77aa5a5be4ffe"
},
{
"id": "9d7cee3acc0f750bb89ded7af",
"name": "Optical Fiber Cable"
}
],
"routing": "platformIntelligence",
"routingId": "817f5b9cea44968587fd66e94",
"pay": {
"perHour": {
"rate": "85",
"hours": 1,
"maxHours": 4
},
"fixed": null
},
"allowance": {
"type": "Per Visit",
"amount": 525,
"numOfVisits": 2
},
"contact": [
{
"email": "john@company.com",
"extension": "10",
"firstName": "John",
"lastName": "Doe",
"mobile": "1234567890",
"phone": "2323242342",
"type": "PointOfContact"
}
],
"description": "Tools to Carry:Field Engineer Must carry Laptop, Console Cable for Adtran/Cisco Router",
"task": [
{
"description": "Rack & Stack Cisco router in Rack",
"isConfirmRequired": false,
"isMediaRequired": true,
"isSignatureRequired": false
},
{
"description": "Take signature of onsite contact",
"isConfirmRequired": false,
"isMediaRequired": false,
"isSignatureRequired": true
},
{
"description": "Need to confirm if server room has space for the new router installation ",
"isConfirmRequired": true,
"isMediaRequired": false,
"isSignatureRequired": false
}
],
"planning": [
{
"description": "Review the attached documents before going onsite"
}
],
"confidentialData": {
"description": "PORT HANDOFF INFO LEC circuit ID: 12/ABCD /123450//SB Ord: AB12A0A8 Media:"
},
"internalData": {
"description": "Billing details - 3*$50=$150"
},
"customFields": {
"groupName": "custom group 1",
"fields": [
{
"name": "Custom field 1",
"value": "Devices",
"private": true,
"isPrivate": true
},
{
"name": "Custom field 2",
"value": "Steps",
"private": true,
"isPrivate": true
}
]
},
"publishToMarketPlace": true,
"fundingSource": "CASH"
}
iii. Sample Response
Both Create and Update Job APIs will have same Response body.
{
"payload": {
"opportunityId": "<opportunityId>",
"workOrderNumber": "<Work-Order-Number>"
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Request Payload Details
This is applicable for both Create and Update Job APIs.
Element Name | Data Type | Description | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
title | string | Job title | |||||||||||||||||||||||||||
scheduledOn | string | Job scheduled date and time Format: YYYY-MM-DD HH:MM:SS (2020-04-20 05:58:59) |
|||||||||||||||||||||||||||
name | string | Job type | |||||||||||||||||||||||||||
jobType | string | Indicating if Job is Remote or Onsite Valid values: - REMOTE - JOB |
|||||||||||||||||||||||||||
projectName | string | Name of the project | |||||||||||||||||||||||||||
endClientOrderNumber | string | End client order number | |||||||||||||||||||||||||||
subuserId | string | The id generated once the subuser is created. This id is to be used under this field while posting the job to identify which user created and is handling the job. Types of subusers are: Administrator, Operator, Executive, Billing, Project Manager. NOTE: You can get subuserId from 'Retrieve Subuser details' API (i.e. GET /subuser/retrieve) in this document. |
|||||||||||||||||||||||||||
address | object | Service location address object with two possible ways to send address. 1. parsed address (individual address fields) 2. unparsed address(entire address in a single line) NOTE: parsed and unparsed are not mutually exclusive, if parsed address type exists then system will always consider parsed, if parsed is null only then system considers the unparsed. The
|
|||||||||||||||||||||||||||
qualification | array | Qualifications are the skills required for performing this job.
|
|||||||||||||||||||||||||||
equipment | array | If engineer needs to be aware about bringing any equipment onsite, or need to have for the remote work, then it can be specified here.
|
|||||||||||||||||||||||||||
routing | string | How do you want to Route this job once posted?
|
|||||||||||||||||||||||||||
routingId | string | Routing ID is the 'talentId' example: 1dbb8e6abd153226703333b19 of the routing pools created i.e.Marketplace pool, Private pool and Custom routing (routingId is not applicable to jobs with Platform Intelligence routing type). When you want to create job using one of these routing types then you need to create the respective routing pools first. On creating the pool you will get the talentId which can be used in routingId field. |
|||||||||||||||||||||||||||
pay | object | Pay details can be provided `Per Hour`/ `Fixed` amount.
The
The
|
|||||||||||||||||||||||||||
allowance | object | Allowance amount paid to the engineer.
|
|||||||||||||||||||||||||||
contact | array | Point of contact(s) associated with the job.
|
|||||||||||||||||||||||||||
description | string | Job description | |||||||||||||||||||||||||||
task | object | Tasks serve as a to do list for your engineer. You can track your engineer's progress as he completes task from his app.
|
|||||||||||||||||||||||||||
planning | object |
|
|||||||||||||||||||||||||||
confidentialData | object |
|
|||||||||||||||||||||||||||
internalData | object |
|
|||||||||||||||||||||||||||
customFields | object | Optional custom fields to send if any
| |||||||||||||||||||||||||||
publishToMarketPlace | boolean | Setting it to 'true' will create the job in active status, and 'false' in draft status. | |||||||||||||||||||||||||||
fundingSource | string | You can pay visits/jobs through two types of funding sources either credit or cash. Valid values: - CREDIT - CASH |
v. Response Status Codes
Status code | Message | Description |
---|---|---|
201 |
Created | You will get this status code if the job was created/updated successfully along with opportunityId and workOrderNumber in api response json. |
3. Post Job
PATCH /workorder/status/active?endClientOrderNumber=<value>
This API is used to change the status of the job from Draft to Active. You can choose to either post it to marketplace or not, by using the field marketPlace.
i. Query parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/active?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{}'
iii. Sample Request Body
{
"fundingSource": "CASH",
"routingConfig": [
{
"marketPlace": true,
"talentId": "1dbb8e6abd153226703333b19",
"waitTimeInSec": 120
}
]
}
iii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "Success"
}
}
iv. Request Payload Details
Element Name | Data Type | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fundingSource | string | You can pay visits/jobs through two types of funding sources either Credit or Cash.
|
||||||||||||
routingConfig | object | Here by specifying certain values you get to choose to either post the job to marketplace or not, if yes then which talent pool and how long you want the job to stay in that routing type.
|
v. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - You cannot update accepted job (pay, address, skills) - Company's credit is not enabled - Your account is past due, credit funds cannot be accessed at the moment. Please contact account@fieldengineer.com - Minimum job payment should be $10 - There is not enough credit available to complete this transaction - Not a valid job - Job is cancelled - Job is completed or closed - Job is currently locked, please unlock it to perform any actions. |
4. Retrieve Job Details
GET /job?endClientOrderNumber=<value>
Use this method to fetch particular Job details using either workOrderNumber /opportunityId /endClientOrderNumber.
This api can fetch details of Jobs in Draft or Active status.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X GET \
https://sandboxapi.fieldengineer.io/v1/job?endClientOrderNumber=<value> \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'Content-Type: application/json' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": [
{
"workOrderNumber": "Wxxxxxxxxxxxx",
"opportunityId": "81a42a8933956a64d2e96816d",
"status": "active",
"job": {
"title": "FieldEngineer",
"scheduledOn": "2020-06-28 10:56:38",
"name": "Install adtran",
"projectName": "ABCProject Inc",
"jobType": "JOB",
"endClientOrderNumber": "ABCxxxxxx",
"address": {
"parsed": {
"address1": "10 Corporate Place South",
"address2": "Suite 105",
"city": "Piscataway",
"subDivision": "NJ",
"country": "US",
"zip": "08854"
},
"unParsed": "10 Corporate Place South, Piscataway, NJ 08854, United States",
"latitude": 32.42111,
"longitude": -110.98509,
"formattedAddress": "10 Corporate Place South, Piscataway, NJ 08854, United States"
},
"qualification": [
{
"name": "CCIE Data Center",
"isMandatory": true,
"id": null
},
{
"name": "CCIE Collaboration",
"isMandatory": false,
"id": null
}
],
"routing": "PLATFORM_INTELLIGENCE",
"routingId": null,
"pay": {
"perHour": {
"rate": 85,
"hours": 1,
"minutes": 40,
"maxHours": 4,
"maxMinutes": 50
},
"fixed": null
},
"allowance": {
"type": "Fixed",
"amount": 10,
"numOfVisits": 0
},
"equipment": [
{
"id": "9d7cee3acc0f750bb89ded7af",
"name": "Digital Multi Meter"
},
{
"id": "233f61e058ad77aa5a5be4ffe",
"name": "Digital Camera"
}
],
"contact": [
{
"type": "PRIMARY",
"firstName": "Jenny",
"lastName": "Doe",
"email": "jenny@company.com",
"phone": "1234567890",
"extension": "12",
"mobile": "2222222222"
},
{
"type": "Onsite",
"firstName": "John",
"lastName": "Doe",
"email": "john@client.com",
"phone": "1234567890",
"extension": "2",
"mobile": "2222222222"
}
],
"description": "Rack Stack Power CPE - The router should always come preconfigured. The technician will mount the router and 66 block on the wall Adtran/Cisco Switches.SOW:Install ",
"task": [
{
"description": "Need to confirm if server room has space for the new router installation ",
"isMediaRequired": false,
"isSignatureRequired": false,
"isConfirmRequired": true
},
{
"description": "Rack & Stack Cisco router in Rack",
"isMediaRequired": true,
"isSignatureRequired": false,
"isConfirmRequired": false
},
{
"description": "Take signature of onsite contact",
"isMediaRequired": false,
"isSignatureRequired": true,
"isConfirmRequired": false
}
],
"planning": [
{
"description": "Review the attached documents before going onsite"
},
{
"description": "PORT HANDOFF INFO LEC circuit ID: 12/ABCD /123456ABSB Ord AB12B0C2 Media"
}
],
"confidentialData": {
"description": "PORT HANDOFF INFO LEC circuit ID 38KQGN638916SB"
},
"internalData": {
"description": "Billing details - 3*$50=$150"
},
"customFields": {
"groupName": "custom group 1",
"fields": [
{
"name": "Custom field 1",
"value": "Devices",
"private": true
},
{
"name": "Custom field 2",
"value": "Steps",
"private": true
}
]
},
"fundingSource": "cash"
}
}
],
"result": {
"code": "200",
"message": "success"
}
}
5. Enable Job in Marketplace
PATCH /workorder/status/marketplace?opportunityId=<value>
This API is used to enable/disable the active jobs into/from marketplace.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/marketplace?opportunityId=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{"action":<value>}'
iii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "success"
}
}
iv. Request Payload Details
Element Name | Datatype | Description |
---|---|---|
action | boolean | false to publish job to marketplace, true to remove it from marketplace and just keep back in active status |
v. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Job is not active - Job is cancelled - Job is completed or closed - Job is currently locked, please unlock to perform any actions. |
6. Lock Job
PATCH /workorder/status/lock?endClientOrderNumber=<value>
This API can be used to set a temporary lock on the active job. Once the job is locked, it will not be visible to engineers any more, no further activities/action can happen, it will just be frozen in the status it was in when locked until its unlocked.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/lock?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": {
"opportunityId": "<Opportunity_Id>"
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - You are not allowed to do this operation on current job - Job is cancelled - Job is completed or closed - Job can be locked only after job is contracted with engineer. |
7. Unlock Job
PATCH /workorder/status/unlock?endClientOrderNumber=<value>
Use this API to Unlock the job back to active status and resume normal actions on it such as it will now again be available for engineers to apply, can be assigned, and start working on visits till completion.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/unlock?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": {
"opportunityId": "<Opportunity_Id>"
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - You are not allowed to do this operation on current job - Job is cancelled - Job is completed or closed - Job is not locked |
8. Cancel Job
PATCH /workorder/status/cancel?endClientOrderNumber=<value>
This API will change the draft/active job to *cancel* status i.e. the job will be cancelled or discarded from job market from use.
i. Query Parameters
One of these parameters can be passed in the url to cancel the job:
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/cancel?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "Success"
}
}
Depending on the status of the job prior to calling this method, the success response messages are as follows:
Workorder Status | Message Code | Message |
---|---|---|
draft | 200 | 1 of 1 discarded |
active | 200 | Success |
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - You are not authorized to perform this action - Job is already cancelled - Job is completed or closed - Not allowed to erase job, visit exists. - Job is currently locked, please unlock it to perform any actions. - You are not allowed to do this operation on current job. |
9. Job Applicants Details
GET /workorder/applicants?endClientOrderNumber=<value>
Use this API to get the details of all the engineers applied to the job such as how many engineers have applied, each engineer details including how many clients they have worked for, personal details, skills details etc.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X GET \
https://sandboxapi.fieldengineer.io/v1/workorder/applicants?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": [
{
"id": "Pxxxxxxxxx",
"firstName": "John",
"lastName": "Doe",
"abountMe": "Lorem Ipsum",
"contacts": [
{
"type": "Cell-Phone",
"dialCode": "1",
"number": "1234567890"
},
{
"type": "Home-Phone",
"dialCode": "1",
"number": "1234567890"
}
],
"numOfClientsWorked": 3,
"numOfJobsWorked": 87,
"address": {
"city": "Piscataway",
"subDivision": "NJ",
"zip": "08854",
"country": {
"code": "US",
"name": "United States"
}
},
"skills": [
{
"name": {
"shortName": "CCNA",
"longName": "Cisco Certified Network Associate Wireless: CCNA Wireless"
},
"matched": false
},
{
"name": {
"shortName": "CCNA",
"longName": "Cisco Certified Network Associate Service Provider (CCNA SP)"
},
"matched": false
},
{
"name": {
"shortName": "CCNP",
"longName": "Cisco Certified Network Associate Voice: CCNA Voice"
},
"matched": false
}
]
},
{
"id": "Pxxxxxxxxx",
"firstName": "Jane",
"lastName": "Doe",
"abountMe": "search",
"contacts": [
{
"type": "Cell-Phone",
"dialCode": "1",
"number": "1234567890"
}
],
"numOfClientsWorked": 5,
"numOfJobsWorked": 180,
"address": {
"city": "Piscataway",
"subDivision": "NJ",
"zip": "08854",
"country": {
"code": "US",
"name": "United States"
}
},
"skills": [
{
"name": {
"shortName": "CCNA",
"longName": "Cisco Certified Network Associate Wireless: CCNA Wireless"
},
"matched": false
}
]
}
],
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Not a valid user - You are not allowed to do this operation on current job. |
10. Assign Job
PATCH /workorder/status/engineer/assign?endClientOrderNumber=<value>
With this API you can assign an active job to an engineer. If the engineers have applied to the job then you could select the best suited engineer and assign the job to him, else if you have a favorite engineer then you can directly assign it to him.
Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/engineer/assign?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{"engineerId":<value>}'
iii. Sample Response
{
"payload": {
"opportunityId": "<Opportunity Id>"
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Request Payload Details
Element Name | Datatype | Description |
---|---|---|
engineerId | string | The Engineer ID e.g:Pxxxxxxxxx |
v. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Not a valid user - You are not allowed to do this operation on current job. |
11. Unassign Job
PATCH /workorder/status/engineer/unassign?opportunityId=<value>
Use this API to unassign an engineer from particular job who was previously offered this job.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/engineer/unassign?opportunityId=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{"engineerId":<Engineer ID>}'
iii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Job is not active - Job is not in assigned status - There are visits present in the job. - Job is currently locked, please unlock it to perform any actions. |
12. Visit Details
GET /workorder/visit?endClientOrderNumber=<value>
Use this API to get the submitted visit's details by the engineer of the in-progress job.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/visit?endClientOrderNumber=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": {
"list": [
{
"opportunityUserVisitId": "123abxxxabcd12a1234ab12345",
"reportingDateTime": "2020-05-17T11:04:47.739Z",
"reportingLongitude": "0.0",
"reportingLatitude": "0.0",
"approvedDateTime": null,
"rejectedDateTime": "2020-05-17T11:04:47.739Z",
"jobTitle": "FieldEngineerJob1",
"workOrderNumber": "Wxxxxxxxxxxxx",
"routing": "platformIntelligence",
"opportunityId": "123ab123abcd12a1234ab12345",
"engineerName": "John Doe",
"rate": "100.00",
"payout": null,
"allowance": null,
"visit": {
"providerUnitCount": {
"minutes": 20
},
"closingNotes": "completed first visit for Site-survey. ",
"isAllowanceReported": false,
"reportingDateTime": "2020-05-17T11:04:47.739Z",
"reportedAllowanceAmount": null,
"reportedFixedAmount": null,
"visitExpense": [
{
"amount": null,
"description": null
}
]
}
},
{
"opportunityUserVisitId": "123abxxxabcd12a1234ab12345",
"reportingDateTime": "2020-04-17T11:04:47.739Z",
"reportingLongitude": "0.0",
"reportingLatitude": "0.0",
"approvedDateTime": "2020-04-17T11:04:47.739Z",
"rejectedDateTime": null,
"jobTitle": "FieldEngineer1",
"workOrderNumber": "Wxxxxxxxxxxxx",
"routing": "platformIntelligence",
"opportunityId": "123ab123abcd12a1234ab12345",
"engineerName": "Jane Doe",
"rate": "50.00",
"payout": null,
"allowance": null,
"visit": {
"providerUnitCount": {
"minutes": 20
},
"closingNotes": "Completed second visit to install first set of devices.",
"isAllowanceReported": false,
"reportingDateTime": "2020-04-17T11:04:47.739Z",
"reportedAllowanceAmount": null,
"reportedFixedAmount": null,
"visitExpense": [
{
"amount": null,
"description": null
}
]
}
}
],
"consumedHours": 20,
"reportedAllowanceCount": 0,
"consumedMinutes": 20,
"page": {
"number": 0,
"numberOfElements": 2,
"size": 20,
"totalElements": 2,
"totalPages": 1
}
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - You are not allowed to do this operation on current job. |
13. Visit Approve
PATCH /workorder/visit/status/approved
Use this API to approve individual visits i.e: worked hours submitted by the engineer on particular job.
i. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/visit/status/approved \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{
"visit": {
"approveExcessHours":true ,
"visitId": <Unique Visit ID>
}
}'
ii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "success"
}
}
iii. Request Payload Details
Element Name | Datatype | Description |
---|---|---|
approveExcessHours | boolean | true to approve the submitted hours if it is within the allotted maxHours, and also if exceeds the maxHours(additional hours than provided). false to reject reported hours. |
visitId | string | This is the unique visit ID i.e.opportunityUserVisitId field which can be found in the response generated by the Visit Details API |
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Job is currently locked, please unlock it to perform any actions. - You are not allowed to do this operation on current job. |
14. Reject Visit
PATCH /workorder/visit/status/rejected
Use this API to reject particular visit reported by engineer if you think you do not approve with the hours submitted or expenses reported or any other details regarding the visit.
i. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/visit/status/rejected \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>' \
-d '{
"visit": {
"visitId": <Unique Visit ID>
}
}'
ii. Sample Response
{
"payload": null,
"result": {
"code": "200",
"message": "success"
}
}
Message Code | Message |
---|---|
200 | Visit already approved |
iii. Request Payload Details
Element Name | Datatype | Description |
---|---|---|
visitId | string | This is the unique visit ID i.e.opportunityUserVisitId field which can be found in the response generated by the Visit Details API |
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Job is currently locked, please unlock it to perform any actions. - You are not allowed to do this operation on current job. |
15. Complete Job
PATCH /workorder/status/complete?opportunityId=<value>
Use this API to mark the job as complete once the posted job is completed by the assigned engineer.
All the visits must be approved before you mark a job as complete.
i. Query Parameters
This API takes any one of these parameters as input.
Element Name | Datatype | Description |
---|---|---|
opportunityId | string | The unique ID of the job generated on implementing Create Job API. E.g:123ab123abcd12a1234ab12345 |
workOrderNumber | string | The unique number of the job generated on implementing Create Job API. E.g:Wxxxxxxxxxxxx |
endClientOrderNumber | string | The unique number you wish to give to your job to identify easily. |
ii. Sample Request
curl -X PATCH \
https://sandboxapi.fieldengineer.io/v1/workorder/status/complete?opportunityId=<value> \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
iii. Sample Response
{
"payload": {
"opportunityId": "<Opportunity ID>"
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Response Status Codes
Status code | Message | Description |
---|---|---|
204 |
No Content | |
301 |
Invalid Company User | Possible reasons to get this status code are: - Invalid company user - Not a valid job - Job is currently locked, please unlock it to perform any actions. - Job is not active - Atleast one visit should exist for job to complete - Job is not in assigned status - There are unapproved visits present in the job. - Job is cancelled - Job is completed or closed. |
16. Equipment List
GET /equipments
Use this method to fetch list of all the equipments and their details.
i. Sample Request
curl -X GET \
https://sandboxapi.fieldengineer.io/v1/equipments \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
ii. Sample Response
{
"payload": [
{
"id": "84bfcd672e2021b2553ea5301",
"name": "Cat5e",
"details": "Cat5e cable is needed in Ethernet to adjust performance"
},
{
"id": "8343b0d4fe5d3ce634ba0a51d",
"name": "Cisco console cable",
"details": "This cable is required to console the hardware equipment."
},
{
"id": "233f61e058ad77aa5a5be4ffe",
"name": "Digital Camera",
"details": "Needed to capture images of installed equipments"
},
{
"id": "9d7cee3acc0f750bb89ded7af",
"name": "Digital Multi Meter",
"details": "Test Equipment is needed to measure resistance and adjust scaling network"
},
{
"id": "d02c33f7e92c471455b0abcb3",
"name": "Electrical Tape",
"details": "Needed to safe-tape wires/ insulate wires"
},
{
"id": "435d2d658caaef9ab11bf7f9b",
"name": "Fish Tapes",
"details": "Needed to pull through the guide string"
},
{
"id": "14afb6934530a340f22c479f3",
"name": "Optical Fiber Cable",
"details": "Fiber should be of high quality so that it can hold more load"
}
],
"result": {
"code": "200",
"message": "success"
}
}
17. Qualifications List
GET /qualifications
Use this method to get the list of all the qualifications and their details like id, its short Name if it falls under certification/skill category and who is the Issuing Authority
i. Sample Request
curl -X GET \
https://sandboxapi.fieldengineer.io/v1/qualifications \
-H 'Content-Type: application/json' \
-H 'apiKey: <API Key>' \
-H 'cache-control: no-cache' \
-H 'username: <Company eMail ID>'
ii. Sample Response
{
"payload": [
{
"id": "cb832667dd2044dd63e13c247",
"name": "Cisco Certified Network Associate: CCNA",
"shortName": "CCNA",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "3a72b5538d4787e8b6db00bb9",
"name": "Cisco Certified Network Associate Data Center (CCNA Data Center)",
"shortName": "CCNA",
"isCertification": true,
"issuingAuthority": null
},
{
"id": "804h7e1d4ij9125faf2ej7if",
"name": "Avaya Certified Implementation Specialist (ACIS)-Avaya ERS 8000 and VSP 9000",
"shortName": "CCNA",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "17144d272ac42ca2bf0ab1ebb",
"name": "CCNP Routing & Switching CCNP Security CCNP Cloud",
"shortName": "CCNA",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "50bb82a7bdacb4b414571ad87",
"name": "IBM Certified Specialist-Syste, Storage DS8000 Technical Solutions V3",
"shortName": "ABC",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "53b7d7426b3194b63af511064",
"name": "Advanced HP LoadRunner 12.x Software",
"shortName": "ABC",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "e4g5b2gi900dg043d22ie8c0",
"name": "Aerospace Fiber Optics Fabricator",
"shortName": "ABC",
"isCertification": false,
"issuingAuthority": null
},
{
"id": "244cd8615bbc290aee52d9511",
"name": "Architecting Multi-Site HPE Storage Solutions",
"shortName": "ABC",
"isCertification": true,
"issuingAuthority": null
},
{
"id": "64f03bfdea4a5496777f3b816",
"name": "Aryaka SDWAN Deployment",
"shortName": "ABC",
"isCertification": false,
"issuingAuthority": null
}
],
"result": {
"code": "200",
"message": "success"
}
}
18. Job Validate
POST /workorder/jobvalidate
This method is used to validate a given job if it is eligible to post to the marketplace.
i. Sample Request
curl -X POST "https://sandboxapi.fieldengineer.io/v1/workorder/jobvalidate"
-H "apiKey: <API Key>"
-H "username: <Company eMail ID>"
-H "cache-control: no-cache"
-H "Content-Type: application/json"
-d "{<Request Json>}"
ii. Sample Request Body
{
"address": {
"parsed": {
"address1": "10 Corporate Place South",
"address2": "Suite 105",
"city": "Piscataway",
"country": "US",
"subDivision": "NJ",
"zip": "08854"
},
"unParsed": "10 Corporate Place South, Piscataway, NJ 08854, USA"
},
"allowance": {
"amount": 250,
"numOfVisits": 2,
"type": "Per Visit"
},
"confidentialData": {
"description": "PORT HANDOFF INFO LEC circuit ID: 12/ABCD /123450//SB Ord: AB12A0A8 Media:"
},
"contact": [
{
"email": "john@company.com",
"extension": "10",
"firstName": "John",
"lastName": "Doe",
"mobile": "1234567890",
"phone": "2323242342",
"type": "PointOfContact"
}
],
"customFields": {
"fields": [
{
"isPrivate": true,
"name": "Custom field 1",
"value": "11abc1"
}
],
"groupName": "Custom group 1"
},
"description": "Rack Stack Power CPE - The router should always come preconfigured. The technician will mount the router and 66 block on the wall Adtran/Cisco Switches.SOW:Install ",
"endClientOrderNumber": "POST_K106",
"equipment": [
{
"id": "233f61e058ad77aa5a5be4ffe",
"name": "Cisco Console Cable"
}
],
"fundingSource": "CASH",
"internalData": {
"description": "Billing details - 3*$50=$150"
},
"jobType": "JOB",
"name": "Install adtran",
"pay": {
"fixed": {
"totalAmount": null
},
"perHour": {
"hours": 1,
"maxHours": 4,
"maxMinutes": 50,
"minutes": 40,
"rate": 85
}
},
"planning": [
{
"description": "PORT HANDOFF INFO LEC circuit ID: 12/ABCD /123456ABSB Ord AB12B0C2 Media"
}
],
"projectName": "ABCxxxx Inc",
"publishToMarketPlace": true,
"qualification": [
{
"isMandatory": true,
"name": "CCIE Data Center"
}
],
"routing": "PLATFORM_INTELLIGENCE",
"scheduledOn": "2021-10-07 05:58:59",
"source": "API",
"task": [
{
"description": "Need to confirm if server room has space for the new router installation",
"isConfirmRequired": true,
"isMediaRequired": false,
"isSignatureRequired": true
}
],
"title": "FieldEngineer"
}
iii. Sample Response
{
"payload": {
"isEligibleToActivate": true,
"amount": null
},
"result": {
"code": "200",
"message": "success"
}
}
The valid values for source key in the request body can be one of these: API
, EMAIL
, WWW
, BULK
, MOBILE
. For details on rest of the fields for this api please refer to 'Request Payload Details' documentation of Create/Update Job Api.
iv. Response Status Codes
Status code | Message |
---|---|
201 |
Created |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not Found |
18. Retrieve Routing Pools
POST /workorder/routing/retrieve
Use this method to retrieve the pool(s) details you created for routing types Marketplace pool, Private pool and Custom routing. This api is not applicable to Platform Intelligence routing type.
i. Sample Request
curl -X POST "https://sandboxapi.fieldengineer.io/v1/workorder/routing/retrieve"
-H "apiKey: <API Key>"
-H "<Company eMail ID>"
-H "Content-Type: application/json"
-d "{<Request Json>}"
ii. Sample Request Body
{
"routingType": "internalPool"
}
The valid values for each routing type to be given:
Routing Type | Valid value |
---|---|
Marketplace Pool | marketplacePool |
Private Pool | internalPool |
Custom Routing | customRouting |
iii. Sample Response
{
"payload": {
"talent": [
{
"talentId": "1c51b843ba3a6371154515209",
"name": "Private Pool 1",
"description": "Private Pool 1",
"isActive": true,
"isMarketplace": false,
"engineerCount": 1,
"recordCreated": 1601376414000
},
{
"talentId": "817f5b9cea44968587fd66e94",
"name": "PrivatePool 2",
"description": "PrivatePool 2",
"isActive": true,
"isMarketplace": false,
"engineerCount": 5,
"recordCreated": 1600874398000
},
{
"talentId": "9d4d15719671716cdaf62b14d",
"name": "PrivatePool 3",
"description": "PrivatePool 31",
"isActive": true,
"isMarketplace": false,
"engineerCount": 0,
"recordCreated": 1600874372000
}
]
},
"result": {
"code": "200",
"message": "success"
}
}
iv. Status Response Codes
Status code | Message |
---|---|
201 |
Created |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not Found |
19. Retrieve Subuser details
GET /subuser/retrieve
Use this method to get all the subusers details created in your company.
i. Sample Request
curl -X GET "https://sandboxapi.fieldengineer.io/v1/subuser/retrieve"
-H "apiKey: <API Key>"
-H "username: <Company eMail ID>"
-H "Content-Type: application/json"
ii. Sample Response
{
"payload": {
"subuser": [
{
"id": "105c906388302ca41c628fd0c",
"unumber": "CU161897848",
"firstName": "Johnny",
"lastName": "Doe",
"userName": "JohnnyDoe",
"email": "johnny.doe@mail.com",
"status": "active",
"role": {
"id": "zaq73wsxcde25rfvbgt18yhnm",
"name": "Operator",
"description": "An Operator can create and manage jobs, create projects, browse stats, and manage funds."
}
},
{
"id": "81da89f6e335bae36ce068e32",
"unumber": "CU673856299",
"firstName": "Jenny",
"lastName": "Doe",
"userName": "JennyDoe",
"email": "jenny.doe@mail.com",
"status": "active",
"role": {
"id": "zaq73wsxcde25rfvbgt18yhnm",
"name": "Administrator",
"description": "An administrator can create and manage jobs, create projects, browse stats, and manage funds."
}
},
{
"id": "92cr56g5y434ser45gn354b35",
"unumber": "CU66741652",
"firstName": "Chris",
"lastName": "Doe",
"userName": "ChrisDoe",
"email": "chris.doe@mail.com",
"status": "active",
"role": {
"id": "dwt24fsfhjv35gdfnnbd4irty",
"name": "Executive",
"description": "An Executive can create and manage jobs, create projects, browse stats, and manage funds"
}
}
],
"page": {
"number": 0,
"numberOfElements": 3,
"size": 20,
"totalElements": 3,
"totalPages": 1
}
},
"result": {
"code": "200",
"message": "success"
}
}
iii. Status Response Codes
Status code | Message |
---|---|
200 |
OK |
401 |
Unauthorized |
403 |
Forbidden |
404 |
Not Found |