{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"02e3399f-b960-4428-a3f1-fff0d276f952","name":"Public API v2","description":"The public Sinpex API facilitates automating the KYC process for onboarding prospective customers. This is achieved by creating Cases with designated workflow automation configuration via Projects.\n\n## Purpose\n\n[Sinpex](https://www.sinpex.de) automates the [KYC](https://en.wikipedia.org/wiki/Know_your_customer) process for potential business clients.\n\nThis API enhances automation capabilities further by enabling the programmable creation and management of Cases, in addition to sending essential notifications through webhooks for important updates.\n\n## API Design\n\nThe Sinpex API is organized around [REST](https://www.codecademy.com/article/what-is-rest). Our API aims to provide predictable resource-oriented URLs, returns [JSON-encoded](https://www.json.org/json-en.html) responses, and uses standard HTTP [response codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) and [verbs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) and [OAuth](https://en.wikipedia.org/wiki/OAuth) authentication.\n\nIt is strongly recomended that a client sends `Accept: application/json` header with all the requests so it assures getting JSON encoded responses.\n\n# Resource Overview\n\nThis section will give an overview of the used concepts and resources that the Sinpex API uses to provide its functionality.\n\n## Cases\n\nWhen onboarding a potential customer for your organization, a **Case** for this potential customer or company needs to be created in order to download required official documents, track the progress and add essential information that is required by the relevant compliance laws.\n\nCreating a **Case** always needs to happen in the context of a specific **Project**, which determines what the required process for the potential customer should be.\n\n## Projects\n\n> **Note**: This resource is not available via the Sinpex API currently, however understanding the concept is relevant to understand how the Sinpex API works \n  \n\n**Projects** determine the process of how to onboard a **Case** by defining which information needs to be resolved (via **Questions**) and the required automation process (via **Workflow States**).\n\nThis configuration is typically done internally by Sinpex after a Target Operating Model (TOM) workshop to see which requirements are applicable for your use cases. Since the requirements for onboarding often depends on a lot of factors, this process is not automated and not available via the Sinpex API.\n\n## Workflow States\n\n> **Note**: This resource is not available via the Sinpex API currently, however understanding the concept is relevant to understand how the Sinpex API works \n  \n\nThe workflow automation defines the different stages of the onboarding by providing individual **Workflow States**. Sinpex provides a [Visual Management Board](https://kanbanize.com/blog/visual-management-board/) with vertical \"columns\" to keep track of the current state of a specific **Case**.\n\nEvery **Workflow State** can be configured with a number of automation rules to either halt or continue to another specific **Workflow State.** These are typically discussed in the Target Operating Model (TOM) workshop.\n\n## Workflow Automation Rules\n\n> **Note**: This resource is not available via the Sinpex API currently, however understanding the concept is relevant to understand how the Sinpex API works \n  \n\nA specific **Workflow State** can be configured with one or more **Automation Rules** which determine wether or not the **Case** can be moved to the next **Workflow State**.\n\nBelow is the complete list of currently supported Automation Rules, and for more information please contact Sinpex support as we won't go into too much detail here.\n\n- `complete_questions`\n    \n- `check_thresholds`\n    \n- `signatory_confirmation`\n    \n- `ownership_confirmation`\n    \n- `check_risks`\n    \n- `check_documents`\n    \n- `idv_profiles_verified`\n    \n- `single_answer_matches_values`\n    \n- `single_answer_forward_to_workflow_state`\n    \n- `single_answer_is_above`\n    \n- `single_answer_is_below`\n    \n- `self_declarations_verified`\n    \n- `idv_profiles_has_document`\n    \n- `check_idv_profiles_with_self_declarations`\n    \n- `ubo_drilldown`\n    \n- `child_ubo_drilldown`\n    \n- `check_idv`\n    \n\n## Questions\n\n> **Note**: This resource is not available via the Sinpex API currently, however understanding the concept is relevant to understand how the Sinpex API works \n  \n\nThe **Questions** define which information might be relevant for onboarding a potential customer. Some **Questions** can be indicated as required before continuing to a next **Workflow State** via automation rules.\n\nEvery **Question** can be configured with a specific \"alias\", so it can also be used via the Sinpex API. These alias values can be configured via the **Project** and **Question** settings and are typically defined during the Target Operating Model (TOM) workshop.\n\nThe Sinpex API uses [OAuth](https://en.wikipedia.org/wiki/OAuth) authentication to obtain access to the API functionality.\n\n## Answers\n\nIn order to onboard the potential customer, the most critical of the **Questions** need to be resolved, and this happens via the **Answer** resource. Typically, these are extracted from official documents, but can also be defined by the agents through the Sinpex UI.\n\nHere is an overview of the available attribute for the **Answer** resources.\n\n| **attribute** | **comments** |\n| --- | --- |\n| id | (integer) The `id` of the **Answer** |\n| question_id | (integer) The `id` of the **Question** the **Answer** is relevant for |\n| question | (string) The content of the **Question** |\n| type | (string) Supported values: `NO_ANSWER`, `MANUAL`, `DOCUMENT`, `TABLE`. Where `DOCUMENT` indicates that the **Answer** is resolved from an official document source. |\n| status | (string) Supported values: `PENDING` , `ACCEPTED` `REJECTED` |\n| content | (mixed) The format of the content depends on the **Answer** type; for `MANUAL` and `DOCUMENT` this will be a string, for `TABLE` a JSON object with the structure depending on the **Question** definition. |\n\n## Self-Declared Values\n\nIn specific KYC processes, the potential customer needs to provide some of their information ahead of time which needs to be verified. This is supported via **Self-Declared Value** resources, typically they are compared agains **Answers** (extracted from official documents) although other resources are also possible (e.g. **IDV Profiles**).\n\nHere is an overview of the Self-Declared Value attributes:\n\n| **attribute** | **comments** |\n| --- | --- |\n| id | (integer) The `id` of the **Self-Declared Value** |\n| question_id | (integer) The `id` of the **Question** the **Self-Declared Value** is relevant for |\n| question | (string) The content of the **Question** |\n| content | (mixed) The format of the content depends on the **Question** type; for `MANUAL` and `DOCUMENT` this will be a string, for `TABLE` a JSON object with the structure depending on the **Question** definition. |\n| answer_id | (integer) The id of the **Answer** |\n| answer_match_status | (string) Supported values: `PENDING` or `CONFIRMED` |\n\n## Risk Profiles\n\nIn order to onboard a potential customer, relevant parties may need to be screened for any suspicious activity. This is supported via the **Risk Profile** resources.\n\n| **attribute** | **comments** |\n| --- | --- |\n| id | (integer) The id of the **Risk Profile** |\n| type | (string) `person` or `organization` |\n| provider_name | (string) The 3rd party provider that performed the screening. Supported value: `ComplyAdvantage` |\n| provider_id | (string) The 3rd party identifier for the profile or screening instance |\n| name | (string) The full name of the organization or person |\n| first_name | (string) The first name of the person |\n| middle_name | (string) The middle name of the person |\n| last_name | (string) The last name of the person |\n| risk_levels | (object) Supported keys: `pep`, `warning`, `sanction` or `adverse_media`. Supported values: `low`, `medium` or `high` |\n\n## IDV Profiles\n\nIn order to onboard a potential customer, relevant persons of interest may need to be prompted for an identification and verification process. This is supported via the **IDV Profile** resources.\n\n| **attribute** | **comments** |\n| --- | --- |\n| id | (integer) The id of the **IDV Profile** |\n| email | (string) The email of the person |\n| name | (string) The full name of the person |\n| first_name | (string) The first of the person |\n| middle_name | (string) The middle of the person |\n| last_name | (string) The last of the person |\n| date_of_birth | (string) The ISO 8601 date format for the date of birth of the person (`YYYY-MM-DD`) |\n| place_of_birth | (string) The email of the person |\n| nationalities | (array-of-strings) The ISO 3166 alfa-2 country codes representing the persons nationality |\n| residence_address | (object) Details about where the person is currently living (format see below) |\n| state | (string) Supported values: `suggestion`, `in_progress`, `verified` |\n| resolution | (string) Supported values: `todo`, `done` or `discarded` |\n\n### IDV Profile Residence Address\n\nAs part of the **IDV Profile** mentioned above:\n\n| **attribute** | **comment** |\n| --- | --- |\n| city | (string) The name of the city of the address |\n| street | (string) The name of the city of the address |\n| postal_code | (string) The postal code of the city of the address |\n| country_code | (string) The ISO 3166 alfa-2 country code of the address |\n| street_number | (string) The street number of the address |\n\n# Obtaining access\n\nIn order to perform API requests, a Bearer token needs to be passed along with every API request. This is done via the `Authorization` header, in the format of `Authorization: Bearer {{access_token}}`. This access token can be obtained as shown by the [Request Access Token request.](#4850297b-af57-42f3-bed5-15f0a96ad86e)\n\nReach out to the Sinpex support to obtain the client credentials for your specific environment.\n\nThey should provide you with the `client_id` and `client_secret` which allow you to request access tokens.\n\nIf wanted, a complete Postman environment can also be provided to try out the requests in this documentation more easily.\n\n# Validation Rules\n\nIn some requests the \"validation rules\" section shows which validation is applied with a number of readable rule names. These are based on the [Laravel Validation Rules](https://laravel.com/docs/10.x/validation#available-validation-rules).","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"25915288","team":2116445,"collectionId":"02e3399f-b960-4428-a3f1-fff0d276f952","publishedId":"2s9Y5ZwNRe","public":true,"publicUrl":"https://docs.sinpex.io","privateUrl":"https://go.postman.co/documentation/25915288-02e3399f-b960-4428-a3f1-fff0d276f952","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2023-08-29T19:12:05.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"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/5fc941c42ec6dad1df7c13264c2bb580f6c35302151f7bb3213dee9502813586","favicon":"https://res.cloudinary.com/postman/image/upload/v1653318562/team/tjvfciecqy9oyhuy01gc.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://docs.sinpex.io/view/metadata/2s9Y5ZwNRe"}