{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"0490415e-f59c-4557-99c2-ecbf686a6234","name":"Sikka APIs","description":"Sikka Platform Cloud provides APIs so you can quickly build secure apps\nfor over 96 % of dental, veterinary, audiology and optometry industries.Use our API to gain access to all the opt - in HIPAA / HITECH compliant rich data that a healthcare practice generates.\n> Join our Ecosystem and build your own Apps!The Sikka Ecosystem harnesses the power of over 36 unique apps\nfor you to gain full control of your practice,\nwhile viewing real - time industry metrics, securely - all at your fingertips!\n> Visit : [Sikka Marketplace](https://store.sikkasoft.com)\n\n# Getting Started\n\nWelcome to Sikka API. Here you will find the step-by-step guide that will help you build an application on the Sikka Platform and full listing of all the available APIs. As we add more APIs, they will automatically documented here and available to you as per your API plan. For more information about a particular endpoint, click on its name. You will be taken to the API’s documentation page, which includes what query parameters the API will accept, what the JSON or XML parameters will be in the response, and an example.\n\n###### Follow Below Steps\n\n* Step 1 : Register an app with Sikka\n* Step 2 : Add clients to your app\n* Step 3 : Get an authorization\n* Step 4 : Install SPC (Sikka Platform Cloud)\n* Step 5 : Fetching and displaying data\n\n\n> ###### What developers need to do?\n> ![sikka developer](https://api.sikkasoft.com/portal/images/DeveloperAppFlow.png)\n\n> ###### What your clients need to do to display data?\n> ![developer app](https://api.sikkasoft.com/portal/images/ClientAppFlow.png)\n\n\n>### Prerequisite\n>To fetch the data you will need to add practice to your app. SPC (Sikka Platform Cloud) must be installed on practice to fetch the data.\n\n\n### Step 1 : Register an app with Sikka\n\nRegister an App with Sikka\n\nPlease provide all necessary information about your App. It will help us to authorize your app.\n\nAfter successful App registration you will get an application id and application key. Keep these keys safe as it will require to fetch the data from practice.\n\n>Note : Do not disclose your keys.\n\n### Step 2 : Add clients to your app\nContact sikka software API team for detail information.\n\n### Step 3 : Get an authorization\n\nWe do support oAuth 2.0 \n\noAuth 2.0 is a protocol that lets your app access the practice details in a Sikka account without getting their password.\n\nYou'll need to register your app before getting started. A registered app is assigned a unique Application ID (Client ID) and Application Secret Key (Client Secret) which will be used in the OAuth flow. The Application ID and Application Secret Key should not be shared.\n\nSign in with Sikka ( You will find the url in API portal, under 'Application Details' as 'authorization link') is the best way to log individual user into your application.\n\n###### The oAuth Flow\n\n###### Step 1 - Authorization\n\nYour web or mobile app should redirect users to the following URL:\n\nhttps://api.sikkasoft.com/portal/authapp.aspx?response_type=code&client_id=APPLICATION_ID&redirect_uri=REDIRECT_URI&scope=*&state=123456\n\nThe following values should be passed as GET parameters:\n\n* client_id = Issued when you created your app (Application ID). (required)\n* response_type = code - Indicates that your server expects to receive an authorization code. (required)\n* redirect_uri = Indicates the URI to return the user to after authorization is complete. (optional)\n* scope = GLOBAL - It allows you to access client information based on your API licenses. (required)\n* state = A random string generated by your application, which you'll verify later. This parameter’s value should be an anti-forgery token to protect against cross-site request forgery (CSRF). (optional)\n\n\n###### Step 2 - Allow Access\n\nAfter successful login user sees the authorization prompt\n\n![oauth popup](https://api.sikkasoft.com/portal/images/Authorization_new.png)\n\nIf the user clicks \"Allow\", the service redirects the user back to redirect_uri site with an auth code. Sikka API server generate random AUTH_CODE.\n\nhttps://redirect_uri?code=AUTH_CODE_HERE&state=123456\n\n* code = The server returns the authorization code in the query string.\n* state = The server returns the same state value that client passed.\n\n**What developer/ API user should do ?**\n\nDeveloper should first compare this state value to ensure it matches the one you started with. You can typically store the state value in a cookie or session, and compare it when the user comes back. This ensures your redirection endpoint isn't able to be tricked into attempting to exchange arbitrary authorization codes.\n\n**Storing tokens and credentials**\n\nStore your application's credentials and user tokens with care.\n\n**Redirect URIs**\n\nThe redirect_uri parameter is optional. If left out, it will redirect users to the callback URL configured in your app's settings. If provided, the redirect URL's host and port must exactly match the callback URL. The redirect URL's path must reference a subdirectory of the callback URL.\n\nCALLBACK: http://example.com/path\n\n**GOOD**: https://example.com/path\n\n**GOOD**: http://example.com/path/subdir/other\n\n###### Step 3 - Token( request_key ) Issuing\n\nIf the user authorizes your app, Sikka will redirect back to your specified redirect_uri with a temporary code in a code GET parameter, as well as a state parameter if you provided one in the previous step. If the states don't match, the request may have been created by a third party and you should abort the process.\n\nYour server exchanges the auth code for an access token:\n\n**Sample request :**\n```javascript\nPOST https://api.sikkasoft.com/v2/token\nContent-Type : application/json\n{\n\"grant_type\":\"authorization_code\",\n\"code\":\"AUTH_CODE_HERE\",\n\"redirect_uri\":\"REDIRECT_URI\",\n\"client_id\":\"APPLICATION ID\",\n\"client_secret\":\"APPLICATION SECRET KEY\"\n}\n```\n* grant_type = authorization_code - The grant type for this flow is authorization_code.\n* code = AUTH_CODE_HERE - This is the code you received in the query string.\n* redirect_uri = REDIRECT_URI - Must be identical to the redirect URI provided in the original link.\n* client_id = CLIENT_ID - The Application ID you received when you first created the application.\n* client_secret = Application secret key - Since this request is made from server-side code, the secret is included.\nThe server replies with an access token and expiration time [Please note here: 'access_token' and 'request_key' are same.]\n\n**Response :**\n```javascript\n{ \n\"scope\": \"https://api.sikkasoft.com/v2/\",\n\"access_token\": \"d25c47ca453a42bc9133d76b1719eb18\",\n\"request_key\": \"d25c47ca453a42bc9133d76b1719eb18\",\n\"token_type\": \"Bearer\",\n\"expires_in\": \"86400\"\n\"refresh_token\":\"01234567-89ab-cdef-0123-456789abcdef\"\n}\n```\n\n**Token refresh**\n\nAccess tokens/request_keys expire 24 hours after they are issued. The refresh token can be used to make a request for a new access token/request_key, similar to the initial access token exchange. Refresh tokens don’t expire until you delete refresh token.\n\n**Sample Request :**\n\n```javascript\nPOST https://api.sikkasoft.com/v2/token\nContent-Type =Application/json\n{\n\"grant_type\":\"refresh_token\",\n\"refresh_token\":\"01234567-89ab-cdef-0123-456789abcdef\",\n\"client_id\":\"application id\",\n\"client_secret\":\"Application Secret Key\"\n}\n```\n\n**Response :**\n```javascript\n{ \n\"scope\": \"https://api.sikkasoft.com/v2/\",\n\"access_token\": \"d25c47ca453a42bc9133d76b1719eb18\",\n\"request_key\": \"d25c47ca453a42bc9133d76b1719eb18\",\n\"token_type\": \"Bearer\",\n\"expires_in\": \"86400\"\n\"refresh_token\":\"01234567-89ab-cdef-0123-456789abcdef\"\n}\n```\n\n**Revoking tokens**\n\nIf you want to dispose of an oAuth token, use delete refresh_token.\n\nBy revoking the last token associated between your application and a user, your application will not be able to access practice data.\n\nDELETE https://api.sikkasoft.com/v2/refresh_token/{refresh_token}?client_id={client_id}&client_secret={client_secret}\n\n* refresh_token = oAuth refresh_token you want to revoke. (required)\n* client_id = Application id - Issued when you created your app (Application ID). (required)\n* client_secret = Application secret key - Since this request is made from server-side code, the secret is included.\n\n### Step 4 : Install SPC\n\nDownload and Install SPC (Sikka Platform Cloud)\n\n\n> ##### Prerequisite\n\n>SPC should be install on practice management system server. In short SPC and practice management system should be on same machine\n>SPC will require username and password for sikka account\n\n\n### Step 5 : Fetching and displaying data\nTo fetch the data via Sikka API you will need request key. Sample API request to generate request key\n\nRequest\n\nhttps://api.sikkasoft.com/v2/start?app_id={appid}&app_key={appkey}&office_id={officeid}&secret_key={secret_key}\n\nResponse\n\n```javascript\n{\n\"scope\": \" https://api.sikkasoft.com/v2/ \"\n\"request_key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n\"token_type\":\"xxxxxx\",\n\"expires_in\":\"24 hours\"\n}\n```\n\nFor more information about a particular endpoint, go to API v2.0 documentation. You will be taken to the API’s documentation page, which includes what query parameters the API will accept, what the JSON or XML parameters will be in the response, and an example.\n\n\n# Quickstart\n\nIn this guide we will walk you through all necessary steps to start accessing data from practice.\n\n1.Authorized practices:\n\nThis API will give you the list of practices from which you can access data\n```javascript\nhttps://api.sikkasoft.com/auth/v2/authorized_practices?app_id={your application id}&app_key={ your application key }\n```\n\n* Returns 'office_id' and 'secret_key' \n\n2.Start call to get Request Key for practices:\n\nIn response of ‘authorized_practices’ API you have ‘office_id’ and ‘secret_key’. Use it in ‘start’ API\n```javascript\nhttps://api.sikkasoft.com/v2/start?app_id={your application id}&app_key={ your application key }&office_id={office_id}&secret_key={secret_key}\n```\n\n* Returns Request Key: i.e '52457c9dhgfttfk88798793a4c7e4fa54902' \n\n3.Patients API call:\n\nAPI to get the list of patients\n```javascript\nhttps://api.sikkasoft.com/v2/patients?request_key={request_key}\n```\nFor veterinary hospitals use ‘veterinary_patients’ API to get the list of pets\n```javascript\nhttps://api.sikkasoft.com/v2/patients/veterinary_patients?request_key={request_key}\n```    \nAfter step 3\n\n4.Pet Owners call:\n\nAPI to get the list of pet owners\n```javascript\nhttps://api.sikkasoft.com/v2/guarantors?request_key={request_key}&offset=0&limit=10\n```\nFor more information about a particular endpoint, go to API v2.0 documentation. You will be taken to the API’s documentation page, which includes what query parameters the API will accept, what the JSON or XML parameters will be in the response, and an example.\n\n\n\n\n\n# API Field Filtering\nThe default endpoints of the Sikka REST API are designed to be sensible defaults in terms of what data is returned.\nFields parameter provides a single way for modifying all responses for an object. For example, in patients API there are around 50 fields but your application needs only 5 of them, Fields parameter allows you to get only 5 fields.\n\n**Important Note about Field Filtering**\n\nThe API exposes many fields on API responses, including things you might not need, or might not fit into how your application works. While it's tempting to modify or remove fields from responses, this will cause problems with API clients that expect standard responses. This includes things like mobile clients or third party tools.\nYou may only need a small amount of data, but it's important to keep in mind that the API is about exposing an interface to all clients, not just the feature you're working on.\n\n**What fields Parameter Does**\n\nIn every Sikka API fields parameter allows to return only requested fields. Other fields will not be display in API response. Please note that there are certain fields which user can not remove from API response. Those are the mandatory fields. To get the whole list of mandatory fields please contact Sikka API team\n\n**How to Use Fields Parameter**\n\nSikka API accepts fields as parameters:\nIn fields parameters users needs to specify which fields API should return in response.\nThis means that if you specify \n```javascript\nhttps//api.sikkasoft.com/v2/patients?request_key={ }&fields= firstname,lastname, cell ```\nIt will return only first name , last name ,cell & mandatory fields only. It will skip / hide other fields.\n\nExamples\n```javascript\nURL : https://api.sikkasoft.com/v2/practices?request_key={valid request key}\n```\n\nResponse :\n```javascript\n{\n\"href\": \"https://api.sikkasoft.com/v2/practices/1\",\n\"practice_id\": \"1\",\n\"name\": \"Second Site Location\",\n\"address_line1\": \"12345 Any Street\",\n\"address_line2\": \"\",\n\"city\": \"Mt. Vernon\",\n\"state\": \"IL\",\n\"zipcode\": \"62864\",\n\"phone\": \"\",\n\"country\": \"\",\n\"email\": \"\",\n\"website\": \"\",\n\"providers\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/providers/\"},\n\"patients\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/patients/\"},\n\"guarantors\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/guarantors/\"},\n\"appointments\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/appointments/\"},\n\"transactions\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/transactions/\"}\n}\n```\n\nNow if user wants to see only “name” in response and skip other fields\n\n```javascript\nURL : https://api.sikkasoft.com/v2/practices?request_key={valid request key}&fields=name\n```\n\nResponse :\n```javascript\n{\n\"href\": \"https://api.sikkasoft.com/v2/practices/1\",\n\"practice_id\": \"1\",\n\"name\": \"Second Site Location\",\n\"providers\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/providers/\"},\n\"patients\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/patients/\"},\n\"guarantors\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/guarantors/\"},\n\"appointments\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/appointments/\"},\n\"transactions\": {\"href\": \"https://api.sikkasoft.com/v2/practices/1/transactions/\"}\n}\n```\n# Expanding Objects\nMany objects contain the ID of a related object in their response properties. For example, a patient may have an associated practice id, guarantor id, provider d. Those objects can be expanded in line with the expand request parameter. Objects that can be expanded are noted in this documentation. This parameter is available on all API requests, and applies to the response of that request only.\nYou can nest expand requests with the expand parameter. For example, requesting \"expand=practice\" on a patient will expand the patient object with practice object. Response will be patient API response, including practice object.\nYou can expand multiple objects at once by identifying multiple items in the expand parameter, separated by comma (\",\").\n\nRequest :\n```javascript\nURL : https://api.sikkasoft.com/v2/patients/76?request_key={valid request key}&expand=practice\n```\n\nResponse :\n```javascript\n\n{\n\"href\": \"https://api.sikkasoft.com/v2/practices/1/patients/76\",\n\"patient_id\": \"76\",\n\"guarantor_id\": \"76\",\n\"firstname\": \"Kvana\",\n\"middlename\": \"\",\n\"lastname\": \"Aws4\",\n.....\n\"practice_id\": \"1\",\n        \"practice\": {\n        \"href\": \"https://api.sikkasoft.com/v2/practices/1\",\n        \"practice_id\": \"1\",\n        \"name\": \"Test Dental\",\n        \"address_line1\": \"\",\n        \"address_line2\": \"\",\n        \"city\": \"San Jose\",\n        \"state\": \"CA\",\n        \"zipcode\": \"95110\",\n        \"phone\": \"xxx-xxx-xxxx\",\n        \"country\": \"\",\n        \"email\": \"\",\n        \"website\": \"\",\n        \"description\": \"\",\n        \"providers\": {\n        \"href\": \"https://api.sikkasoft.com/v2/practices/1/providers/\"\n        },\n\"hygienist\": \"\"\n}\n\n```\n# Pagination\n\nRequests for collections can return between 0 and 4999 results, controlled using the `limit` and `offset` query parameters. All end points are limited to 500 results by default.\n\n`GET /v2/patients?request_key={request_key}&offset=0&limit=4999`  Return rows from 0 to 4999 \n\nThe offset should be the page offset (not the item offset). Also, limit will denote page size, along with limit of rows returned.\n```\n offset = 0 and limit = 940 will return the 1st 940 rows\noffset = 1 and limit = 940 will return rows 941 to 1880\noffset = 1 and limit = 941 will return rows 942 to 1882 (Page offset = 1, page size = 941, limit rows = 941)\noffset = 2 and limit = 940 will return rows 1881 to 2820\n```\n\n# Modified Records\n\nHow to get only modified records ?\n\nThere are two ways to get modified records \n\n1. Use  [practice_events](#bad9ce36-3371-aed9-bc1f-b300b79faa69) API. It will return data with specific records with flag ( added , deleted or updated)\n\n2. Pass `loaded_startdate` and `loaded_enddate` to API . It will return change logs of records with flag ( added/deleted) . see below example \n\nThere are below parameters in Sikka API to get only modified records :\n\n|Parameter|Description|Required|\n|--- |--- |--- |\n|loaded_startdate|Start date for getting only changed record set. Date format : yyyy-mm-dd or yyyy-MM-ddTHH:mm:ss|No|\n|loaded_enddate|End date for getting only changed record set. Date format : yyyy-mm-dd or yyyy-MM-ddTHH:mm:ss|No|\n|flag|Flag for data changes (added, deleted)|No|\n|interval|Value must be integer.<br />'interval' parameter allows user to fetch records , which has been changed in last <interval> minutes.<br />This will be helpful when user does not know loaded_startdate/loaded_enddate and just want to fetch records which has been changed in last minutes (let say 5,10,15.. etc minutes). Maximun value for interval is 1440. You can fetch data which has been changed in last 24 hours (1440 minutes, interval=1440) without specifying loaded_startdate and loaded_enddate.<br /><b>Note : Make sure Sikka platform utility is up and running on client machine. To check when Sikka platform utility (SPU) has refreshed, call 'authorized_practices' and get 'data_insert_date'.</b>|No|\n\n`loaded_startdate` & `loaded_enddate` will help you to fetch modified records between given date time range.\n`flag` indicates whether record has been deleted or added. \n\n```javascript\nhttps://api.sikkasoft.com/v2/{api_name}?request_key={}&loaded_startdate={ }&loaded_enddate={ } \n```\n\nResponse :\n\n\n```javascript\n{\n\"href\": \"https://api.sikkasoft.com/v2/practices/1/appointments/3206e13d\",\n\"appointment_sr_no\": \"3206e13d\",\n\"patient_id\": \"1\",\n\"operatory\": \"\",\n\"date\": \"2015-11-02\",\n\"time\": \"08:40:00\",\n\"length\": \"60\",\n\"description\": \"testing1\",\n\"amount\": \"9999.0000\",\n\"status\": \"confirmed\",\n\"last_changed_date\": \"2015-12-21\",\n\"appointment_made_date\": \"2015-11-02\",\n\"provider_id\": \"LW\",\n\"flag\":\"Deleted/ Added\", [it will tell you record is deleted or added]\n\"patient_name\":\"Sat Yen\",\n\"guarantor_id\": \"1\",\n\"guarantor_name\": \"guarnator1\"\n} \n```\n\nExample : \n\n1.Sikka API (like patients, appointments etc... ) always shows live data; extracted from PMS. Whenever you call Sikka API it is latest data. \n\nHow to check latest data activity & retrieve modified records :\n \n1a. To check when Sikka has pulled data from PMS, you can use 'authorized_practices' API, instead keep calling Sikka APIs (patients, appointments, transactions etc... ). \n\n'authorized_practices' API will give you the status of each practice with refresh date & when last time data inserted.\n\n```javascript\nhttps://api.sikkasoft.com/auth/v2/authorized_practices?app_id={your application id }&app_key={your application key} \n```\n\nResponse :\n\n```javascript\n{\n\"office_id\": \"_D....\",\n\"domain\": \"Dental\",\n\"href\": \"https://api.sikkasoft.com/auth/v2/authorized_practices/D15\",\n\"secret_key\": \"_xxxx_.....\",\n\"practice_name\": \"\",\n\"address\": \"1650 B_f\",\n\"city\": \"Gettysburg\",\n\"state\": \"PA\",\n\"zip\": \"17325\",\n\"practice_management_system\": \"SoftDent\",\n\"financial_system\": \"\",\n\"practice_management_system_refresh_date\": \"2017-03-01 14:04:08\"\n\"data_synchronization_date\": \"2017-03-01 14:09:04\",\n\"data_insert_date\": \"2017-03-01 14:10:08\", [You need to check this time and it should be your trigger time to call APIs. If this time is greater than your last API call time then you can run APIs again to pull data.]\n\"practice_management_system_version\": \"V14.2\",\n\"practice_management_system_refresh_date_time_zone\": \"Eastern Standard Time\" [It shows above date time is in which time zone.]\n}\n```\n\n1b. For example :\n\nCurrent time is **2017-03-01 11:52:00** & last data_insert_time at **2017-03-01 10:52:00**. Now you want to get the list of  how many appointments inserted  and deleted from PMS. \n\n```javascript\nhttps://api.sikkasoft.com/v2/appointments?request_key={}&loaded_startdate=2017-03-01T10:52:00&loaded_enddate=2017-03-01T11:52:00\n```\n\nResponse :\n\n```javascript\n{\n\"href\": \"https://api.sikkasoft.com/v2/practices/1/appointments/3206e13d\",\n\"appointment_sr_no\": \"3206e13d\",\n\"patient_id\": \"1\",\n\"patient\": {\n    \"href\": \"https://api.sikkasoft.com/v2/practices/1/patients/1\"\n    },\n\"operatory\": \"\",\n\"flag\":\"Deleted/ Added\", [it will tell you record is deleted or added],\n\"patient_name\":\"Sat Yen\",\n\"guarantor_id\": \"1\",\n\"guarantor_name\": \"guarnator1\"\n}\n```\n\n# Output Formats\n\n\nThe Sikka API handles multiple output formats. Currently, the only supported formats are JSON and XML Output formats are selected with a specifier that is appended to the URL, like :\n\nJSON response : \n```javascript\nhttps://api.sikkasoft.com/v2/{api name}/json?request_key={ }\n```\n\n\n\nXML response :  \n```javascript\nhttps://api.sikkasoft.com/v2/{api name}/xml?request_key={ }\n```\n\nDefault response :  \n```javascript\nhttps://api.sikkasoft.com/v2/{api name}?request_key={ }\n```\nJSON is the default, and will be used if nothing is specified. \n\n# HTTP Compression\n\nSikka API supports HTTP compression of response bodies using standards defined by the HTTP 1.1 specification.  Enabling compression is recommended because it reduces bandwidth usage, and time spent retrieving data.\n\nTo enable compression, include the following HTTP header in the request:  \n```javascript\nGET        /patients         HTTP/1.1\nHost:     www.domain.com\nAccept-Encoding:     gzip,compress\n```\n\nThe server understands the compression algorithms from Accept-Encoding and use algorithm to compress the representation before serving it. When successfully compressed, server lets know the client of encoding scheme by another HTTP header i.e. `Content-Encoding`\n\n```javascript\n200 OK\nContent-Encoding:     gzip\n```\n\nCompression can save a lot of bandwidth, with very little cost in additional complexity. Also you may know that most web browsers automatically request compressed representations from website host servers – using above headers.\n\nReferences:\n\n<https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11>  \n<https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3>\n\n\n# Error Codes\n\n| Error Code | HTTP Code| HTTP Code Description | Short Message | Long Message | More Info |\n| ------ | ------ | ------ | ------ |------ |------ |\n|API0003|200|OK|OK|Request Session terminated successfully.||\n|API0004|200|OK|Email/Text message sent successfully.|||\n|API0005|200|OK|Email/Text message not sent.|||\n|API0006|200|OK|Call details logged successfully.|||\n|API0008|200|OK|Appointment status not logged.|||\n|API1001|400|BadRequest|Missing Parameter|ApplicationID is missing.|Please provide the applicationid.|\n|API1002|400|BadRequest|Missing Parameter|ApplicationKey is missing.|Please provide the applicationkey.|\n|API1003|400|BadRequest|Missing Parameter|MID is missing.|Please provide the mid.|\n|API1004|400|BadRequest|Missing Parameter|Requestkey is missing.|Please provide the requestkey.|\n|API1005|400|BadRequest|Missing Parameter|SecretKey is missing.|Please provide the secretkey.|\n|API1006|415|UnsupportedMediaType|Sikka API supports json/xml|Sikka API does not support response format.|Please request with json/xml.|\n|API1007|200|OK|Appointment status logged successfully|||\n|API1020|400|BadRequest|Missing Parameter|One of the parameter is missing.|Please provide all the parameters in syntax of service.|\n|API1025|400|BadRequest|Request key expired|Request key is not valid, it is expired.|Please generate new request key and make new request.|\n|API1026|400|BadRequest|Missing/Invalid Parameter|One of the parameter is missing or invalid.||\n|API1027|400|BadRequest||||\n|API2001|500|InternalServerError|Internal Error|Internal Error.|Please contact Sikka API Support.|\n|API2002|503|ServiceUnavailable|Try again later.|The Sikka APIs are up, but overloaded with requests. Try again later.||\n|API2003|401|Unauthorized|Authentication/Authorization Failed|ID or key is incorrect.|This error can be caused by an incorrect application id , application key. In case of provider_accounts & patient_accounts this error can be caused by incorrect username or password.|\n|API2004|401|Unauthorized|Authentication/Authorization Failed|You are not authorized to use this API.|This error can be caused when you try to access API not accessible by you, if you want to use this API contact SIKKA API SUPPORT.|\n|API2005|204|NoContent|No content found for given parameter|Request is processed successfully, but no data/content returned.||\n|API2006|500|InternalServerError|Error occured while processing request|The server encountered an error while processing your request and failed.|Please contact Sikka API Support.|\n|API2007|401|Unauthorized|Authentication/Authorization Failed|You are not authorized to access practice details with Sikka API.|This error can be caused when you try to access practice details not accessible by you. If you want to access this practice's details with Sikka API contact practice and ask to allow access.|\n|API2009|404|NotFound|Resource not found|The resource you requested does not exist.|The resource you requested does not exist.|\n|API4001|200|OK|||\n|API4002|200|OK|Error while decrypting string|Error occured due to invalid character in encrypted string or invalid passkey or bytekey.|Please check passkey/bytekey, encode encrypted string with URL Encoding to replace invalid characters.|\n|API4003|200|OK|Error while decrypting password|Error occured due to invalid character in encrypted password or length, invalid passkey or bytekey.|Please check passkey/bytekey, encode encrypted password with URL Encoding to replace invalid characters.|\n|API4004|200|OK|Error while decrypting email or username|Error occured due to invalid character in encrypted email/username or length, invalid passkey or bytekey.|Please check passkey/bytekey, encode encrypted email/username with URL Encoding to replace invalid characters.|\n|API4005|200|OK|Error while decrypting verification code|Error occured due to invalid character in encrypted verification code or length, invalid passkey or bytekey.|Please check passkey/bytekey, encode encrypted verification code with URL Encoding to replace invalid characters.|\n|API4001|200|OK|||\n|API4007|200|OK||||\n|API2010|500|InternalServerError|Data not uploaded for this customer|The data has not yet been uploaded for this customer. If it has been more than 4 hours since the installation, please contact Sikka Support for assistance.|Please contact Sikka Support.|\n|API2011|429|Too Many Requests|Data limit exceeded|Data size per practice per day exceeded|Please make request to the datalimit API for more information.|\n|API2012|429|Too Many Requests|Request limit exceeded|Requests per practice per day exceeded|Please make request to the datalimit API for more information.|\n|API2013|409|Conflict|Resource already exists|You attempted to do something which would leave a resource in an inconsistent state, such as create a resource with an already taken name or id.|Please check name or id and resubmit the request again.|\n|API2015|409|Conflict|Resource already exists|You attempted to do something which would leave a resource in an inconsistent state, such as create a resource with an already taken un or cell.|Please check un or cell and resubmit the request again.|\n|API2016|201|Created|New resource created successfully|||\n|API2018|410|Gone||||\n|API2019|422|Unprocessable||The request was unable to be processed due to it containing invalid parameters.||\n|API2014|405|Method Not Allowed|Method not allowed for the resource|Requested method not allowed for the resource|Please contact Sikka API support|\n|API2017|412|Precondition Failed|The server does not meet one of the preconditions that the requester put on the request.|--|--|\n\n# Webhooks\n\nWebhooks allow you to set up your Apps which subscribe to certain events on practice data or Sikka Platform Cloud. When one of those events is triggered, we'll send a HTTP POST payload to the webhook's configured URL. Webhooks can be used to update your production server or CI builds and let you know about latest activity. \nOnce webhook configured , the webhook will be triggered each time one or more subscribed events occurs.\nYou can create up to 2 webhooks for each event on each target\n\n> ![webhook flow](https://api.sikkasoft.com/portal/images/webhook-1.png)\n> ![webhook architechture](https://api.sikkasoft.com/portal/images/webhook-2.png)\n\nWebhooks require a few configuration options before you use of them. \n## Payload URL\nThis is your server endpoint that will receive the webhook payload.\nFor example , you want to received events on  \n`https://<yourwebsitename>/api/receieve_payload`\nOr \n`https://<yourwebsitename>/api/payload`\n## Content Type\nAt current Sikka Webhooks can be delivered using json format:\nThe `application/json` content type will deliver the JSON payload directly as the body of the POST.\n## Events\nWhen configuring a webhook, you can choose which events you would like to receive payloads for. Only subscribing to the specific events you plan on handling is useful for limiting the number of HTTP requests to your server. You can change the list of subscribed events through the UI anytime. \nEach event corresponds to a certain set of actions that can happen to practice data or Sikka Platform Cloud. \nFor example, if you subscribe to the  Data Refresh event you'll receive detailed payloads every time when Sikka Practice Utility data refresh completed\nTo create webhook , log in to [Sikka API portal](https://api.sikkasoft.com). Click on `webhook`. Enter required information and click on `Add Webhook`, it's time to check on your server to test the if events are receiving or not. \n\nThe available events are :\n\n| Name        | Description   |      \n| ------------- |:-------------|\n| `Data_Refresh`      | This indicates local SPC refresh is completed and data be available via API |\n| `patient`      | When practice chang patient records , new patient added or deleted , this event will trigger. |\n| `transaction`      | Coming Soon |\n| `appointments`      | Coming Soon |\n==Note : Sikka Practice Utility has to be up and running on server for all events==\n## Payloads\nEach event type has a specific payload format with the relevant event information. \nIn addition to the fields documented for each event, webhook payloads include the office_id , practice_id on which the event occurred on\n### Headers\n`HTTP POST` payloads that are delivered to your webhook's configured URL endpoint will contain several headers:\nExample delivery\n```\nPOST /payload HTTP/1.1\nHost: <host>\nX-API-callback-key: xxxxxxxxx\nContent-Type: application/json\nContent-Length: 6615\n{\n BODY\n}\n```\n### Webhook payload example\n#### Data_refresh :\n```\n{\n\t\"event\": \"Data_Refresh\",\n\t\"office_id\": \"D24710\",\n\t\"practice_id\": 1,\n\t\"data_synchronization_date\": \"2018-04-04 17:03:07\",\n\t\"practice_management_system_refresh_date\": \"2018-04-04 17:01:21\",\n\t\"financial_system_refresh_date\": \"1111-11-11\",\n\t\"web_upload_date\": \"2018-04-04 17:03:07\",\n\t\"data_insert_date\": \"2018-04-04 17:11:34\",\n\t\"practice_management_system_refresh_date_time_zone\": \"Eastern Standard Time\",\n\t\"practice_management_system\": \"Dentrix\",\n\t\"practice_management_system_version\": \"V16.6\",\n\t\"financial_system\": \"\",\n\t\"financial_system_version\": \"\",\n\t\"utc_difference_in_minutes\": \"240\",\n\t\"spc_schedule_time\": \"5:00 PM\",\n\t\"spc_schedule_type\": \"Daily\"\n}\n``` \n#### Patient :\n\n```\n{\n\t\"event\": \"patient\",\n\t\"office_id\": \"D20226\",\n\t\"practice_id\": \"1\",\n\t\"generated_time\": \"2018-04-04 17:06:00\"\n}\n```\n\n\n\n# List of APIs","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"3967924","collectionId":"0490415e-f59c-4557-99c2-ecbf686a6234","publishedId":"RW1dExDy","public":true,"publicUrl":"https://documenter-api.postman.tech/view/3967924/RW1dExDy","privateUrl":"https://go.postman.co/documentation/3967924-0490415e-f59c-4557-99c2-ecbf686a6234","customColor":null,"documentationLayout":"classic-double-column","version":"8.10.1","publishDate":"2018-05-01T17:20:41.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/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"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://documenter.gw.postman.com/view/metadata/RW1dExDy"}