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": "[email protected]",
"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.
|
Element Name | Datatype | Description |
---|---|---|
address1 | string | address line 1 |
address2 | string | address line 2 |
city | string | city |
country | string | country, in any format like 2 or 3 char code or full country name |
subDivision | string | state, 2 char or full state name |
zip | string | Zip/postal code |
Unparsed address details
Element Name | Datatype | Description |
---|---|---|
unParsed | string | Entire address in a single line. For e.g: 10 Corporate Place South, Suite 1-05, Piscataway, NJ 08854 |
Fields
Element Name | Datatype | Description |
---|---|---|
isMandatory | boolean | true if qualification is mandatory else false |
name | string | Qualification name |
id | string | Unique ID of the qualification. This ID can be found from the Qualifications List Api. |
Fields
Element Name | Datatype | Description |
---|---|---|
name | string | Name of the equipment needed to perform the job |
id | string | Unique ID of the equipment. The ID can be found from the Equipments List Api for specific equipments. |
Valid values
Routing type | Value |
---|---|
Platform Intelligence | PLATFORM_INTELLIGENCE |
Marketplace Pool | marketplacePool |
Private Pool | internalPool |
Custom Routing | customRouting |
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.
Per Hour pay details
The datatype
of Per Hour pay is object
. Select this type of payment if you want to pay per hour. Following are its fields.
Element Name | Datatype | Description |
---|---|---|
hours | numeric | Number of hours |
maxHours | numeric | Maximum number of hours you want to allocate for this job |
rate | numeric | Rate per hour |
Fixed pay details
The datatype
of Fixed pay is object
. Select this type of payment if you want to pay fixed amount for the job no matter how many visits/hours the job took to complete. Following are its fields.
Element Name | Datatype | Description |
---|---|---|
totalAmount | numeric | Total fixed cost amount |
Fields
Element Name | Datatype | Description |
---|---|---|
type | string | Allowance type Valid values: - Fixed - Per Visit |
amount | number | Allowance amount |
numOfVisits | number | Number of visits for allowed amount. Applicable when allowance type is Per Visit |
Fields
Element Name | Datatype | Description |
---|---|---|
string | ||
extension | string | |
firstName | string | |
lastName | string | |
mobile | string | |
phone | string | |
type | string | Contact type - for e.g. onsite, point of contact |
Fields
Element Name | Datatype | Description |
---|---|---|
description | string | task description |
isMediaRequired | boolean | Indicator if any media is required to be uploaded to complete this task |
isSignatureRequired | boolean | Indicator if signature is required to complete this task |
isConfirmRequired | boolean | Indicator if confirmation is required after completing the job |
Fields
Element Name | Datatype | Description |
---|---|---|
description | string | Planning items is, all information pertinent to the job pror to beginning. For example, equipment availability, shipping information |
Fields
Element Name | Datatype | Description |
---|---|---|
description | string | Provide if any confidential information associated to the job which will be visible to an engineer who accepts the job |
Fields
Element Name | Datatype | Description |
---|---|---|
description | string | Provide any information associated to the job which will be visible only to your company internal team |
Fields
Element Name | Datatype | Description |
---|---|---|
groupName | string | Group name associated with custom fields. Reusable group with set of custom fields can be created and reused for future jobs. API will take care of creating/modifying a group. Name a group with set of custom fields and reuse the same group every time you have same set of custom fields else create new |
fields | array | Array of custom fields |
Element Name | Datatype | Description |
---|---|---|
name | string | Name of the custom field |
value | string | Value of the custom field |
isPrivate | boolean | true/false true, if this field is not to be displayed to assigned engineer |
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.
|
Values |
---|
CREDIT |
CASH |
Fields
Element Name | Datatype | Description |
---|---|---|
marketPlace | boolean | If set to 'true' the job will be posted to marketplace and will be seen by engineers, if set to 'false' then it will not be posted to marketplace, will remain in the status(draft/active) it was in when created and will not be seen by engineers to apply. |
talentId | string | The talent pool id generated when either Marketplace pool or Private pool is created and engineers are added to these pools. Example: 1dbb8e6abd153226703333b19. This field is not applicable if the job was posted using Platform Intelligence as routing type. Field only applicable for jobs with routing type: Marketplace Pool, Private pool and Custom routing. |
waitTimeInSec | numeric | The time period for which you want the job to be seen by the engineers of selected talent id (marketplace pool/ private pool). Example: 120. After the time expires the job will automatically use Platform Intelligence routing type and be seen by all engineers. Field only applicable for jobs with routing type: Marketplace Pool, Private pool and Custom routing. |
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 [email protected] - 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": "[email protected]",
"phone": "1234567890",
"extension": "12",
"mobile": "2222222222"
},
{
"type": "Onsite",
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"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:
Success Response Messages
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"
}
}
Response message if the visit was already approved previously
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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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 |