{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"06ce89c9-cf6a-4621-b3c4-5e7cef57c27c","name":"ExpertflowCX Public APIs","description":"Welcome to our public APIs workspace. These APIs allow you to integrate with various components of Expertflow CX independently.\n\n# About Expertflow CX APIs\n\nExpertflow CX is a complete solution for automation of chat and voice interactions and to assist agents in real time in customer contact center space. With EF CX APIs, you can integrate with Twilio and 360Dialog or develop your own custom channel connector to integrate more than one channel. Your business can also use our Agent APIs to create a custom Agent Interface to manage agent conversations, conversation topics and queues. Expertflow CX further provides APIs for managing customers, identification of customers via KeyCloack and access reports. Our bot framework comes embedded with RASA, Dialogflow and Amazon LEX connectors. We also offer integration of indigenously developed bots via our custom connector APIs to the bot framework.\n\n# Request/Response Structure\n\nThe EF APIs follow HTTP request methods and the URI is made up of:\n\nhttp:// {URI-host} / {resource-path} ? {query-string}\n\nFollowing HTTP methods are in use:\n\n1. GET\n2. POST\n3. PUT\n4. DELETE\n    \n\nThe response is in JSON format and updated according to the content type in the response header.\n\n# Authentication\n\nWe use KeyCloak to secure Our APIs for Authentication and Authorization Mechanisms. Keycloak is an open-source software product that provides authentication and authorization services. It allows you to add secure user authentication and authorization to your web and mobile applications.\n\nSecuring an API with Keycloak involves protecting the API with an access token issued by Keycloak. The access token is obtained by the client application after the user is authenticated by Keycloak. The access token contains information about the user's identity and the permissions they have been granted to access specific resources. Protocol used for securing APIs with Keycloak is OAuth2. OAuth2 is an open standard for authorization that enables a user to grant a third-party application access to their resources without revealing their username and password. OAuth2 uses access tokens to protect resources and allows a user to grant or revoke access to their resources at any time.\n\nTo Get an Access token of user from Keycloak, we request to keycloak server with the following Arguments, below is the example of structure of Curl request to get Access token that we later pass to our EF Applications to secure them:\n\n`curl --location --request POST 'https:///auth/realms//protocol/openid-connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=password' --data-urlencode 'client_id=' --data-urlencode 'client_secret=' --data-urlencode 'username=' --data-urlencode 'password='`\n\nHere's an explanation of each of the parameters used in this request:\n\n- : The URL of your Keycloak server.\n- : The name of the realm where the client is configured.\n- `grant_type=password`: This specifies that we are using the ROPC grant type to obtain an access token.\n- : The client ID of the client that we are obtaining the access token for.\n- : The client secret of the client that we are obtaining the access token for.\n- : The username of the user that we are obtaining the access token for.\n- : The password of the user that we are obtaining the access token for.\n    \n\nTo pass the Keycloak access token with each client request, you need to include it in the request headers. The header name is usually `Authorization`, and the value is the access token preceded by the token type, which is typically \"Bearer\".\n\nSo the Authorization header would look something like this:\n\n`` Authorization: `Bearer ${token}` ``\n\n# Status Codes\n\nThe common error codes used in EF CX APIs are listed in the table below:\n\n| **Error Code** | **Description** |\n| --- | --- |\n| 200 | Ok or Success |\n| 201 | Created |\n| 202 | Accepted |\n| 400 | Bad Request |\n| 401 | Unauthorized |\n| 403 | Forbidden |\n| 404 | Not Found |\n| 409 | Conflict or Already exists |\n| 500 | Internal Server Error |\n\n# Rate limit\n\nThe EF CX APIs are not rate limited as of now. The update will be shared here once the rate limit is implemented.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"4288348","team":449764,"collectionId":"06ce89c9-cf6a-4621-b3c4-5e7cef57c27c","publishedId":"2s8ZDX2hVu","public":true,"publicUrl":"https://api.expertflow.com","privateUrl":"https://go.postman.co/documentation/4288348-06ce89c9-cf6a-4621-b3c4-5e7cef57c27c","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2023-01-19T08:28:47.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"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/d49ad9156b263f271d080df85a65cf9c0d7df93ed1df01a28ceff65e40382af6","favicon":"https://expertflow.com/favicon.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"}],"canonicalUrl":"https://api.expertflow.com/view/metadata/2s8ZDX2hVu"}