You should use the Request method to avoid exposing sensitive information, such as API keys or user credentials, when you make HTTP requests to third-party domains as agents will be able to inspect these values in a browser and access them. The other benefit is Cross-Origin Resource Sharing (CORS) support as requests are routed through a proxy.
Notes:
1. All apps that make requests to third-party domains must use the Request method
or they will not be published in the Freshworks Marketplace.
2. The timeout for requests is six seconds.
3. There is a rate limit of 50 requests per minute per app per account.
4. In the response of a request call made using the Request method, the Content-Type header attribute specifies the
response
format. The accepted response formats are:
- application/json
- application/jsonp
- application/vnd.api+json
- application/xml
- text/plain
- text/html
- text/xml
- text/javascript
Usage
The Request method should be defined in the app.js file by using the following syntax.
Copied Copy1 2 3 4 5 6 7 8 9 10 | client.request.get("URL", options) .then( function(data) { //handle "data" //"data" is a json string with status, headers, and response. }, function(error) { //handle failure } ); |
The Request method should be defined in the server.js file by using the following syntax.
Copied Copy1 2 3 4 5 6 7 8 9 10 | $request.get("URL", options) .then( function(data) { //handle "data" //"data" is a json string with status, headers, and response. }, function(error) { //handle failure } ); |
The following table lists the parameters and their description.
PARAMETER | DESCRIPTION |
---|---|
URL | Is mandatory to make the Request method call. |
options |
Is a JSON object and can include the following properties:
|
data | Data received from the Request method if the request is successful. |
err | Message received from the request if an error is encountered. |
Using iparams
Iparams can be used in requests as part of the following:
- Header
- URL
Copied
Copy
1
https://passport-office.com/user?id=<%= iparam.passport %> - Body
Copied
Copy
EXPAND ↓123456789101112client.request.post("https://helloworld.freshservice.com/api/tickets", { headers: { Authorization: "Basic <%= encode(iparam.username + \":\" + iparam.password) %>" }, body: JSON.stringify({ status: 2, priority: 1, description: "Test", subject: "<%= iparam.subjectPrefix %> Hello there", email: "tom@outerspace.com" }) });
Sample Requests
For API requests that require authentication, you may need to encode the auth header in base64 format.
1. GET request with authentication Copied Copy
1 2 3 4 5 6 7 8 9 10 11 | var headers = {"Authorization": "Basic <%= encode(iparam.api_key) %>"}; var options = { headers: headers }; var url = "https://sample.freshservice.com/itil/requesters/5.json"; client.request.get(url, options) .then ( function(data) { console.log(data); }, function(error) { console.log(error); }); |
If the request is successful, data is returned in the following format. In case a network or 429/5xx HTTP error occurs, the app will retry the request a number of times to obtain the response. Here, attempts is the number of times after which the request has returned a response.
Copied Copy1 2 3 4 5 6 7 8 9 10 | { status : 200, headers: { "Content-Length": 20, "Content-Type": "application/json;charset=utf-8" }, response: "{ "Name": "Rachel"}", "attempts": 1 } |
If the request fails, an error response is returned in the following format.
Copied Copy1 2 3 4 5 6 7 8 9 | { status : 401, headers: { "Content-Type": "application/json;charset=utf-8" }, response: [{"message": "Session expired or invalid", "attempts": 1, "errorCode": "INVALID_SESSION_ID"}] } |
If the request fails due to an error from the app, the error response is returned in the following format. Here, attempts is the number of times after which the request has returned a response.
Copied Copy1 2 3 4 5 6 7 8 9 10 | { "status" : 400, "headers": { "Content-Type": "application/json;charset=utf-8" }, "response": "This domain has not been whitelisted.", "attempts": 2, "errorSource": "APP" } |
2. GET request without authentication Copied Copy
1 2 3 4 5 6 7 8 9 10 | var options = {}; var url = "https://httpbin.org/get?arg1=hello_world"; client.request.get(url, options) .then ( function(data) { console.log(data); }, function(error) { console.log(error); }); |
3. POST request with authentication Copied Copy
1 2 3 4 5 6 7 8 9 10 11 | var headers = {"Authorization": "Basic <%= encode(iparam.api_key) %>"}; var options = { headers: headers, body: "Hello world"}; var url = "https://sample.freshservice.com/tickets.json"; client.request.post(url, options) .then ( function(data) { console.log(data); }, function(error) { console.log(error); }); |
For information on how to make an OAuth request, see Usage in the OAuth section.
Testing
For information on how to test an app that uses the Request method feature, see Test your App.
IP Ranges
Here is the list of IPs you must whitelist when using Request APIs if IP whitelisting is enabled on the Freshservice support portal or you wish to whitelist requests from your app.
Region | IPs |
---|---|
United States |
18.233.117.211 and 35.168.222.30 |
Europe-Central | 18.197.138.225 and 52.57.69.21 |
India | 13.232.159.149 and 13.233.170.242 |
Australia | 13.211.182.225 and 52.63.187.64 |
Errors
In case of failure when making requests, a status code is displayed along with a message to help troubleshoot the issue.
An example of a status code and message is as follows.
Copied Copy1 2 3 4 5 6 7 8 9 10 11 | { "status": 401, "headers": { "Content-Type": "text/plain" }, "response": [{ "message": "Session expired or invalid", "errorCode": "INVALID_SESSION_ID" }] } |
The following table lists all the supported status code.
STATUS | DESCRIPTION |
---|---|
400 | Is returned due to invalid input. For example, if you are making a request to a domain that has not been whitelisted, you will receive this status. |
401 | Is returned if you performed an unauthorized request. |
429 | Is returned when the number of requests exceeds the threshold. |
500 | Is returned if the server encountered an unexpected error. If this error persists, contact us at support@freshservice.com. |
502 | Is returned when there is a network error. If this error persists, contact us at support@freshservice.com. |
503 | Is returned when the service is temporarily unavailable. |
504 | Is returned when there is a timeout error while processing the request. |