{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"adc463e3-bba7-44c2-b8c4-b25fedb494c9","name":"Joblogic API","description":"Welcome to the Joblogic Developer Platform. The Joblogic API operates as a REST API. This documentation provides a comprehensive guide on utilizing Joblogic's API. Kindly review it attentively.\n\n# API Reference\n\n---\n\nPlease note the tenant id and data provided throughout this document is from Joblogic's test data account. This has been included to help demonstrate examples for your understanding.\n\n# Getting Started Guide\n\n---\n\n## Setup\n\nOur API access is secured behind our firewall, to enable access to this could please supply public IP addresses that will require access. We will also create a Joblogic account on our UAT server for you to test against it, to do this we will require a contact name, email address and phone number.\n\nOn receipt of the above information we will whitelist your IP’s and provide you with the necessary documentation and instructions which will allow you to connect to and develop your integration within our UAT environment.\n\nThe steps below demonstrates how to gain access to the API and UAT environment.\n\n1. Provide [IP](https://) address and user details for access to the API and UAT environment.\n    \n    1. [Click here](https://) to find your IP address.\n        \n    2. Provide the following details:\n        \n        1. Contact name\n            \n        2. Email address\n            \n        3. Phone number\n            \n2. Once processed access to [uat.joblogic.com](https://) will be granted. Where you will be able access from your IP address.\n    \n3. API details which will be provided:\n    \n    1. Client ID = xxx\n        \n    2. Client Secret = xxx\n        \n    3. Tenant ID = xxx\n        \n4. Joblogic UAT test system details which will be provided:  \n    URL = [https://uat.joblogic.com](https://)  \n    Username = xxx  \n    Password = xxx\n    \n\n_The UAT Tenant that has been created for you will not have any data within it, we would suggest that you export a number of Customers / Sites / Assets from your live data so that you can import them, alternatively you can manually create items within your UAT tenant to test against._\n\n# Joblogic's Integration Service\n\n---\n\n- Requirements required for costs estimation. A 50% deposit will need to be processed for the integration to be started.\n    \n- A Specification will be written on the Integration.\n    \n- Customer will need to sign off the Specification.\n    \n- Development takes place with QC testing.\n    \n- API/ Integration is delivered to the customer.\n    \n- Customer tests the integration.\n    \n\n# Authentication\n\n---\n\nEach request to Joblogic API must be signed with an access token. Get authentication details from Joblogic Support, use these details to generate an access token, and ensure that each token is used within the 1-hour timeframe, after which it will expire. This process ensures secure and authorized access to the Joblogic API.\n\nYou must have the client_Id and client_secret in your hand. Please contact JobLogic to get those information.\n\n**Access Token Endpoint**\n\nAccess Token can be acquired from our token endpoint\n\n``` csharp\ncurl --location --request POST 'https://uatidentityserver.joblogic.com/connect/token' \\ --header 'Content-Type: application/x-www-form-urlencoded' \\ \n--data-urlencode 'client_id=' \\ \n--data-urlencode 'client_secret=' \\ \n--data-urlencode 'grant_type=client_credentials' \\ \n--data-urlencode 'scope=JL.Api' \n{ \n\"access_token\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjQ2QjQ1MjRG...\", \n\"expires_in\": 2592000, \n\"token_type\": \"Bearer\", \n\"scope\": \"JL.Api\" \n} \n\n ```\n\nYou can set this bearer token to `Authorization` header value for each request, for example:\n\n```\ncurl\n-H \"Authorization: access_token\" \\n...\n\n ```\n\n# **IP Restrication**\n\n---\n\nFor security reasons, only requests from whitelisted IPs are accepted by JobLogic Resource Servers. Clients must provide the IPs from which they are making the requests before integrating with JobLogic.\n\nIf Client IPs are being changed, it’s the responsibility of clients to inform JobLogic about the changes so we can update in our back-end server.\n\n# **Request Rate Limit**\n\n---\n\nFor security and performance control reasons, each endpoint of JobLogic Resource Servers are all applied rate limits. Client code could not access these endpoints for a period of time if the limit is exceeded.\n\nBy default, all endpoints are limited upto 100 requests per minute. This Rate Limit is vary for each client and is supposed to be changed without notice.\n\nJobLogic Resource Servers will respond with **429 Too Many Requests** HTTP Status code in this case. Client code should take this into account when making requests to JobLogic Resource Servers.\n\n# Supported Datetime Format\n\n---\n\nPlease note that our Webhook & API **only** accepts **UTC** DateTime format for the Create, Update, and Get data endpoints for Request/Response payload. It is the responsibility of the end user to handle the localization of DateTime values on their coding side.\n\nWhen interacting with the API, please ensure that all DateTime values are provided in UTC format. Any DateTime values provided in a different time zone or format may result in incorrect data processing or unexpected behavior.\n\nWe recommend that you carefully review and implement the necessary logic to convert DateTime values to UTC format before sending requests to our API. It is essential to adhere to this requirement to ensure accurate data handling and consistency across the system.\n\nShould you have any questions or require further clarification regarding the usage of DateTime values in our API, please refer to our documentation or contact our support team for assistance.\n\n# Supported HTTP Methods\n\n---\n\nUse the below-given information to find a suitable HTTP method for the action performed by API.\n\n| **Method** | **Description** |\n| --- | --- |\n| GET | This type of API is used to retrieve information from the server. In the context of job management, a GET API call could be used to retrieve details about a specific job, such as its status, site location, contacts and etc. For example, a GET request to the JobLogic API could be made to retrieve details about a job with an ID of \"f10a9e09-ab09-49b9-9e40-44086764d52d\". |\n| POST | This type of API is used to submit data to the server for processing. In the context of job management, a POST API call could be used to create a new job, assigning it a job number and adding details such as the customer name, location, and job description. For example, a POST request to the JobLogic API could be made to create a new job with the details provided in the request. In some cases, a search query may require a large number of parameters to be passed in the request, which may exceed the maximum length of a URL. In such cases, it may be necessary to use POST instead of GET to submit the search query. |\n| PUT | This type of API is used to update an existing resource on the server, if you wish to update job details using this method, you will need to retrieve the details first and then replace all the properties with the new values. Please keep in mind that all necessary properties and their corresponding values must be provided when updating job details using the PUT API method. |\n| DELETE | This type of API is used to delete a resource from the server. In the context of job management, a DELETE API call could be used to remove a specific job. For example, a DELETE request to the JobLogic API could be made to delete a job with an ID of \"f10a9e09-ab09-49b9-9e40-44086764d52d\" |\n| PATCH | We currently do not support the PATCH method for existing entity and we have made the decision to limit the use of the PATCH method in our API, which is commonly used for making partial updates to resources. We encourage developers to use of the PUT method for updating resources, which requires the entire resource to be sent in the request body. |\n\n# HTTP Status Code\n\n---\n\n| CODE | ERROR | **WHAT TO DO** |\n| --- | --- | --- |\n| 200 - OK | Everything worked as expected. | \\- |\n| 400 - Bad Request | The request was unacceptable, often due to missing a required parameter.  <br>  <br>A 400 status code means that the server could not process an API request due to invalid syntax. ... A typo or mistake while building out the request manually, such as mistyping the API endpoint, a header name or value, or a query parameter. | Check the Submitted URL.  <br>Clear Browser Cache.  <br>Clear Browser Cookies.  <br>File Upload Exceeds Server Limit.  <br>Clear DNS Cache.  <br>Deactivate Browser Extensions. |\n| 401 - Unauthorized | No valid API key provided. | Request for a new API key. |\n| 402 - Request Failed | The parameters were valid but the request failed.  <br>  <br>402 Payment Required is a nonstandard response status code that is reserved for future use. ... Sometimes, this status code indicates that the request cannot be processed until the client makes a payment. |  |\n| 403 - Forbidden | The API key doesn't have permissions to perform the request.  <br>  <br>A 403 error response indicates that the client's request is formed correctly, but the REST API refuses to honor it, i.e., the user does not have the necessary permissions for the resource. A 403 response is not a case of insufficient client credentials; that would be 401 (“Unauthorized”). | HTTP APIs don't support execution logging. To troubleshoot 403 errors returned by a custom domain name that requires mutual TLS and invokes an HTTP API, you must do the following: 1. Create a new API mapping for your custom domain name that invokes a REST API for testing only |\n| 404 - Not Found | The requested resource doesn't exist. | Log Out and Log In. If the application you're using has some form of user authentication, the last client-side step to try is to log out and then log back in. |\n| 409 - Conflict | The request conflicts with another request (perhaps due to using the same idempotent key). | Conflicts are most likely to occur in response to a PUT request |\n| 429 - Too Many Requests | Too many requests hit the API too quickly. We recommend an exponential backoff of your requests. | The simplest way to fix an HTTP 429 error is to wait to send another request. Often, this status code is sent with a “Retry-after” header that specifies a period of time to wait before sending another request. It may specify only a few seconds or minutes. |\n| 500, 502, 503, 504 - Server Errors | Something went wrong on Joblogic's end. (These are rare.) | Check the availability of the resource on the backend server. ...  <br>Fix the backend server URL in the Service Callout policy to point to a valid and existing resource.  <br>If the resource is only temporarily unavailable, then try making the API request once the resource is available. |\n\nERROR TYPES\n\napi_error - API errors cover any other type of problem (e.g., a temporary problem with Joblogic's servers), and are extremely uncommon.\n\n# 401 Request\n\n---\n\n**Token’s expiration**\n\nThe expires_in (in seconds) in the response payload and encoded in the _access_token_ itself as exp claim, may vary for each client credential and is supposed to be changed without notice. This may be because of changes in our security policy, or other compliance that we would be following in the future.\n\nJoblogic Resource Servers will respond with **401 - Unauthorized** HTTP Status Code if the token expired at the time they receive the requests.\n\nClient code accessing Joblogic Resource Servers using this _access_token_ is responsible to manage this expiration and request new token if it’s exceeded.\n\n# 400 REQUEST\n\n---\n\n| **Message** | **Method** | **Reasons** |\n| --- | --- | --- |\n| \"Customer does not exist\" | GET, DEL, UPDATE | Customer (customer id) may have been deleted or the customer id is not valid. Therefore a valid customer id will need to be presented. |\n| \"Contact does not exist\" | GET, UPDATE | Contact (contact id) may not be correct. Therefore double check the contact id. |\n| \"Asset does not exist\" | GET, DEL, UPDATE | Asset (asset id) may have been deleted or the asset id is not valid. Therefore a valid asset id will need to be presented. |\n| \"Site does not exist\" | GET, DEL, UPDATE | Site (site id) may have been deleted or the site id is not valid. Therefore a valid site id will need to be presented. |\n| \"Supplier does not exist\" | GET, DEL, UPDATE | Supplier (supplier id) may have been deleted or the supplier id is not valid. Therefore a valid supplier id will need to be presented. |\n| \"Job does not exist\" | GET, DEL, UPDATE | Job (job id) may have been deleted or the job id is not valid. Therefore a valid job id will need to be presented. |\n| \"Part does not exist\" | GET, DEL, UPDATE | Part (part id) may have been deleted or the part id is not valid. Therefore a valid part id will need to be presented. |\n| \"Purchase Order does not exist\" | GET, DEL, UPDATE | Purchase order (purchase order id) may have been deleted or the purchase order id is not valid. Therefore a valid purchase order id will need to be presented. |\n| \"Purchase Order Line does not exist\" | GET, DEL, UPDATE | Purchase order line (purchase order line id) may have been deleted or the purchase order line id is not valid. Therefore a valid purchase order line id will need to be presented. |\n\n# API Error\n\n``` csharp\nusing System;\nusing System.ComponentModel.DataAnnotations;\nnamespace Joblogic.API.Models\n{\n    public class BaseSearchApiRequest : BaseApiRequest\n    {\n        public string SearchTerm { get; set; }\n        public string TagIds { get; set; } = null;\n        public bool IncludeInactive { get; set; } = false;\n        [Range(1, int.MaxValue, ErrorMessage = \"Invalid page index (>0)\")]\n        public int PageIndex { get; set; } = 1;\n        [Range(5, 50, ErrorMessage = \"Invalid page size: 5-50 items.\")]\n        public int PageSize { get; set; } = 10;\n    }\n    public class BaseApiRequest\n    {\n        /// \n        /// Contractor Id in Joblogic\n        /// \n        [Required]\n        public Guid TenantId { get; set; }\n        //public Dictionary Meta { get; set; }\n    }\n    public class BaseSearchApiResponse : BaseApiResponse\n    {\n        public int TotalCount { get; set; }\n        public int PageIndex { get; set; }\n        public int PageSize { get; set; }\n    }\n    public class BaseApiResponse\n    {\n        public const string invalid_id = \"Invalid Id\";\n        public const string invalid_tenant = \"Invalid Tenant\";\n        public const string invalid_provider = \"Invalid Provider\";\n        public const string empty_message = \"Message Empty\";\n        public const string invalid_message = \"Invalid Message\";\n        public const string header_dateTime_missing = \"DateTime Missing\";\n        public const string header_messagetype_missing = \"Message Type Missing\";\n        public const string header_deploymentnumber_missing = \"Deployment number Missing\";\n        public const string header_providercode_missing = \"Provider Code Missing\";\n        public const string job_customer_name_or_id_missing = \"Customer Name or Customer Id  Missing\";\n        public const string job_site_name_or_id_missing = \"Site Name or Site Id Missing\";\n    }\n    public class NoteRequest\n    {\n        public string NoteText { get; set; }\n        public string Author { get; set; }\n        public DateTime DateAdded { get; set; }\n        public bool IsPrivate { get; set; }\n    }\n}\n\n ```\n\n# Handling Errors\n\n``` dotnet\ntry {\n  // Use Joblogic's library to make request} catch (JoblogicException e) {\n  switch (e.JoblogicError.Type)\n  {\n    case \"card_error\":\n      Console.WriteLine(\"Code: \" + e.JoblogicError.Code);\n      Console.WriteLine(\"Message: \" + e.JoblogicError.Message);\n      break;\n    case \"api_connection_error\":\n      break;\n    case \"api_error\":\n      break;\n    case \"authentication_error\":\n      break;\n    case \"invalid_request_error\":\n      break;\n    case \"rate_limit_error\":\n      break;\n    case \"validation_error\":\n      break;\n    default:\n      // Unknown Error Type\n      break;\n  }}\n\n ```\n\n# API Constants\n\n``` csharp\nnamespace Joblogic.API.Constants\n{\n    public class APIConstants\n    {\n        public const string RequiredTenantPolicy = \"RequiredTenantId\";\n        public const string ClientTenantIdClaim = \"client_TenantId\";\n        public const string TenantIdParam = \"tenantId\";\n    }\n}\n\n ```\n\n---\n\n# Gloassary\n\nParam - A parameter is a special kind of variable in computer programming language that is used to pass information between functions or procedures. The actual information passed is called an argument.\n\nConstants - Are the fixed values that are used in a program, and its value remains the same during the entire execution of the program.\n\n---","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"18108455","collectionId":"adc463e3-bba7-44c2-b8c4-b25fedb494c9","publishedId":"UVXknaaY","public":true,"publicUrl":"https://apidocs.joblogic.com","privateUrl":"https://go.postman.co/documentation/18108455-adc463e3-bba7-44c2-b8c4-b25fedb494c9","customColor":{"top-bar":"FFFFFF","right-sidebar":"073948","highlight":"0099A5"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.0","publishDate":"2023-02-07T14:48:52.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"API - UAT","id":"3e64ab29-f110-4e8e-b2f5-7cef97d77ea7","owner":"25662849","values":[{"key":"api-url","value":"https://uatapi.joblogic.com","enabled":true,"type":"default"},{"key":"identifyserver-url","value":"https://uatidentityserver.joblogic.com","enabled":true,"type":"default"},{"key":"tenantId","value":"1c477c3b-5e77-4e4e-91f2-3f9538d5b947","enabled":true,"type":"default"},{"key":"access_token","value":"<token>","enabled":true,"type":"default"},{"key":"public_storage_secure_url","value":"<secure-url>","enabled":true,"type":"default"},{"key":"api_client_id","value":"hareesh","enabled":true,"type":"default"},{"key":"api_client_secret","value":"H@rish2208","enabled":true,"type":"default"},{"key":"api_scope","value":"JL.Api","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/acd0e3cd6190f9c485b592ef2fda98da821155c00b8f31fdd2061521a3121e0c","favicon":"https://res.cloudinary.com/postman/image/upload/v1644852291/team/ujxev9d1xgdwpertnlzt.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"API - UAT","value":"25662849-3e64ab29-f110-4e8e-b2f5-7cef97d77ea7"}],"canonicalUrl":"https://apidocs.joblogic.com/view/metadata/UVXknaaY"}