This documentation aims to provide all the information you need to work with our API.
In this API, all datetime values are represented in Coordinated Universal Time (UTC) timezone. This ensures uniformity and accuracy across various time-related operations. Please note that regardless of the user's or system's local timezone, all datetime inputs and outputs are converted to and from UTC for consistent handling of time-related data.
In Pascal 6.2 we replaced the `jurisdiction` field with a `country` field in cases:
You can configure webhooks in the organization settings -> integrations page.
You can also see recent webhook calls and their payloads there.
Our webhooks are sent using the following IP address: 51.105.166.62
Although authenticity is commonly verified using IP addresses, we recommend against this approach. Instead we only send you an 'ID' of a resource (like a case) and you can use our authenticated API to fetch the resource.
Our IP address may change in the future, if this happens we will notify you.
In response to Pascal calling your webhook, you only have to return an HTTP status of 2xx.
Pascal then knows your system correctly processed the request. In case you return a different status we will keep trying for a few hours.
Our webhook calls time out after 15 seconds. Even if you return a 200 HTTP status code after 16 seconds, we mark the request as failed and try again later.
In total we will call your webhook 10 times with an increasing interval. If after the 10th call we still do not get a 2xx status response, we will stop trying. We use the following intervals between attempts while trying to call your webhook:
| Attempt | Interval | Time after initial call |
|---|---|---|
| 1st | - | 00:00 |
| 2nd | 1 minute | 00:01 |
| 3rd | 2 minutes | 00:03 |
| 4th | 4 minutes | 00:07 |
| 5th | 8 minutes | 00:15 |
| 6th | 16 minutes | 00:31 |
| 7th | 29 minutes | 01:00 |
| 8th | 1 hour | 02:00 |
| 9th | 2 hours | 04:00 |
| 10th | 22 hours | 26:00 |
Pascal sends POST requests with `Content-Type: application/json` to your configured URL. The following request body shows an example of all available webhook events that we can send:
{
"events": [
{
"event": "Case created",
"organization_id": 1,
"case_id": 1,
"case_uuid": "6e182844-727e-4f04-a2a1-e6096baacc1b"
},
{
"event": "Case searched",
"organization_id": 1,
"case_id": 1,
"case_uuid": "6e182844-727e-4f04-a2a1-e6096baacc1b"
},
{
"event": "Case hits found",
"organization_id": 1,
"case_id": 1,
"case_uuid": "6e182844-727e-4f04-a2a1-e6096baacc1b"
},
{
"event": "Case resolved",
"organization_id": 1,
"case_id": 1,
"case_uuid": "6e182844-727e-4f04-a2a1-e6096baacc1b"
}
]
}
We may or may not send multiple events in one webhook call. The `events` array contains one or more event objects. There is no guarantee that events are sent together or in order.
You may use our API to fetch the updated information after receiving a webhook call.
Our API returns 4xx status codes when there is something wrong with your request.
Common client errors are:
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by visiting your personal settings page and clicking Add API token.
Who this guide is for
This guide is intended for developers who wish to integrate Pascal into any onboarding, screening, or monitoring workflow.
Concepts
Case. In Pascal, a case is the central record used to screen a single entity, whether a person, business, or asset. It contains all associated searches, potential matches (hits), decisions, and monitoring activity.
Client. In Pascal, a client is a container used to group related cases. It represents an organisation-level view, for example a company that holds several directors and UBOs. Clients can be created, searched, and linked to cases, making it easier to manage relationships between multiple entities.
Hit. Hit - A hit in Pascal is a potential match against screening categories such as sanctions, PEPs, enforcements, or media. Hits may be unresolved (awaiting review) or resolved (classified as true or false positives). Pascal tracks hit counts per source on each case.
Unresolved hit. An unresolved hit is a potential match that still requires review, usually by a compliance officer. It indicates that further investigation is needed to determine whether it is relevant. The hits-key-information endpoint provides a compact overview of unresolved hits.
Resolved hit. A resolved hit is one that has been reviewed and classified as either a true positive (confirmed match) or a false positive (not relevant). Resolved hits remain recorded in the case history for audit purposes.
Monitoring. Monitoring in Pascal means automatically re-screening a case at defined intervals to detect new or updated hits. Monitoring frequency can be set per data source. Typically, a case status moves from In review during initial screening to Monitored when ongoing checks are required.
UUID. A UUID (Universal Unique Identifier) is the unique reference Pascal assigns to a case upon creation or import. It is used in API calls for searches, updates, and filtering, ensuring consistent identification across integrations.
Important things to know early
Everything begins with a Case - In Pascal, nearly all data, including hits, is tied to a case ID. Without a case, attempts to retrieve hits or screening results will not return anything.
search=true on Update Case - Adding search=true will perform a new search. All unresolved hits are cleared, resolved hits are kept, and both refound and new hits can appear again as unresolved. This is typically used when you want to restart the compliance review cycle.
Clients vs Cases - why both? - In Pascal, both clients and cases serve distinct but complementary purposes. A client provides the organisation-level view: it groups together all related cases for the same customer, such as a company with its directors and UBOs. Clients also let you link related customers and manage onboarding workflows in a structured way. A case, by contrast, is the detailed record of screening for one entity – person, business, or asset - It contains all associated searches, potential matches (hits), decisions, and monitoring activity.
Example onboarding flow
When no sanctions are found, the onboarding process might look like this:
Create a Client - e.g. “Acme Corp”.
Import a case for the entity you want to screen - person, business or asset. Import is asynchronous and returns UUIDs so you can track progress.
Check search status or fetch key hit info - cases/searches for list views, or cases/{id}/hits-key-information for a concise unresolved view while the reviewer decides.
Resolve hits in your process - once unresolved items are reviewed, set the case to Monitored and configure monitoring frequencies as needed.
Re-check later - when you need a new search (apart from monitoring), call Update Case with search=true. This resets the unresolved set for a new cycle without losing previous resolutions.
Example interpretation of "no hits"
A newly created case might return no hits, in which situation onboarding could simply continue. If unresolved hits appear instead, a compliance officer might review them and decide to include true positives (which could block onboarding) or exclude false positives (after which onboarding could proceed).
Quick start
Below is a minimal recipe to see the flow end-to-end.
Create a Client POST /api/v1/clients - returns the client id.
Import a case POST /api/v1/cases/import - send up to 200 entities; you get case UUIDs back and can deduplicate or update duplicates.
Poll for cases or search POST /api/v1/cases/searches - list cases and check source success and hit counts.
Retrieve unresolved items GET /api/v1/cases/{id}/hits-key-information - show what needs manual review.
Move to monitoring or re-check PATCH /api/v1/cases/{id} - set status to Monitored and monitoring frequencies; later, use search=true to start a fresh search cycle.
Webhooks
Pascal expects any 2xx to consider delivery successful. Calls time out after 15 seconds - a 200 after 16 seconds is treated as failed and retried. Up to 10 attempts are made using increasing intervals, then Pascal stops retrying.
You can subscribe from your organisation settings and you will receive a JSON events array per request.
This endpoint allows you to import a list of bank accounts asynchronously. You can provide up to 200 bank accounts per request.
Note: Access to transaction monitoring is required to use this endpoint.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/bank-accounts/import" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"bank_accounts\": [
{
\"name\": \"Main Business Account\",
\"account_number\": \"NL91ABNA0417164300\",
\"swift_code\": \"ABNANL2A\",
\"bank_name\": \"ABN AMRO Bank N.V.\",
\"currency\": \"EUR\",
\"account_type\": \"current\",
\"clients\": [
\"b\"
],
\"active\": false
}
],
\"batch_id\": \"99cbb5f6-49a7-492c-a1de-92ff356d98d8\",
\"count\": 150
}"
{
"id": "99cbb5f6-49a7-492c-a1de-92ff356d98d8",
"name": "Importing bank accounts...",
"totalJobs": 1,
"pendingJobs": 1,
"progress": 0,
"createdAt": "2023-08-02T18:48:22.000000Z",
"finishedAt": null,
}
This endpoint allows you to import and search a list of new cases asynchronously. After making a request, a list of case UUIDs will be returned in the same order as your request. A list of "imported" case UUIDs will also be returned. This allows you to distinguish between cases that were imported and those that were deduplicated. You can use the case search API to check the status of the imported cases.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/cases/import" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"cases\": [
{
\"type\": \"Person\",
\"status\": \"In review\",
\"name\": \"John Doe\",
\"confidence\": \"Relative\",
\"aliases\": [
\"J. Doe\"
],
\"additional_terms\": [
\"CEO\"
],
\"description\": \"Relation of a high risk client\",
\"clients\": [
\"b\"
],
\"sources\": [
\"sanctions\"
],
\"gender\": \"Male\",
\"nationalities\": [
\"NLD\"
],
\"country_of_birth\": \"NLD\",
\"country_of_residence\": \"NLD\",
\"date_of_birth\": \"2000-01-31\",
\"passportVerificationForm\": {
\"dateOfExpiry\": \"2025-10-22\",
\"documentNumber\": \"ngzmiyv\",
\"givenNames\": \"d\",
\"lastName\": \"l\",
\"optionalData\": \"jnikhwaykcmyuw\"
},
\"company_number\": \"NL123\",
\"country\": \"NL\",
\"address\": \"3721 West Fork Street, Montana\",
\"asset_type\": \"vessel\",
\"identifier\": \"123456\"
}
],
\"deduplicate\": false,
\"update_duplicates\": false,
\"update_duplicates_clients\": false,
\"batch_id\": \"99cbb5f6-49a7-492c-a1de-92ff356d98d8\",
\"count\": 150
}"
{
"id": "99cbb5f6-49a7-492c-a1de-92ff356d98d8",
"name": "Importing cases...",
"totalJobs": 1,
"pendingJobs": 1,
"progress": 0,
"createdAt": "2023-08-02T18:48:22.000000Z",
"finishedAt": null,
"uuids": [
"a2546955-de2d-4907-a533-0846ee46f719",
"d6253422-5197-429c-a8eb-4af7f6f7fffc",
"052c7db6-bdca-4b95-b872-363b4287200f",
],
"imported": [
"a2546955-de2d-4907-a533-0846ee46f719",
]
}
This endpoint allows you to search for cases using filters. Returning basic information on a list of cases. Paginating through results is possible using the per_page and page parameters.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/cases/searches" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 10,
\"page\": 1,
\"sort_by\": \"updated_at\",
\"sort_order\": \"desc\",
\"secondary_sort_by\": \"uuid\",
\"secondary_sort_order\": \"desc\",
\"with\": [
\"hitCountsPerSource\"
],
\"user_id\": [
1
],
\"group_id\": [
1
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"deleted\": false,
\"uuid\": [
\"a2546955-de2d-4907-a533-0846ee46f719\"
],
\"company_number\": \"b\",
\"address\": \"n\",
\"hit_resolution\": [
[
\"unresolved\",
\"positive\"
]
],
\"hit_source\": null,
\"hit_time_range\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"client_status\": [
[
\"Active\"
]
],
\"clients\": {
\"cases_count\": [
1
],
\"clients_count\": [
1
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"risk\": [
[
\"high\",
\"very high\"
]
],
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
]
}
}"
{
"data": [
{
"additional_terms": null,
"address": null,
"aliases": null,
"clients": [
{
"name": "John Doe",
"id": 1
}
],
"company_number": null,
"confidence": "Relative",
"country_of_birth": null,
"country_of_residence": null,
"created_at": "2023-08-02T18:48:22.000000Z",
"date_of_birth": null,
"deleted_at": null,
"description": "Voluptas ad rem illum est dignissimos aut provident vitae.",
"excluded_terms": [],
"gender": null,
"group_id": null,
"hit_counts": {
"negative": {
"enforcements": 0,
"news": 0,
"other": 0,
"peps": 0,
"sanctions": 0
},
"positive": {
"enforcements": 0,
"news": 0,
"other": 0,
"peps": 0,
"sanctions": 0
},
"unresolved": {
"enforcements": 0,
"news": 0,
"other": 0,
"peps": 0,
"sanctions": 0
}
},
"hits_unresolved_count": 0,
"id": 2049050,
"country": null,
"monitoring_frequency": 28,
"name": "My test case",
"nationalities": null,
"organization_id": 19,
"origin": "import",
"resolve_progress": 100,
"risk": 0,
"searched_at": "2023-08-02T18:48:32.000000Z",
"sources": [
{
"active": true,
"case_id": 2049050,
"data_source": {
"active": true,
"deactivated_at": "2023-02-21T12:57:31.000000Z",
"id": 409,
"source": "peps",
"vendor": "default"
},
"data_source_id": 409,
"id": 18320030,
"searched_at": "2023-08-02T18:48:22.000000Z",
"succeeded": true
},
{
"active": true,
"case_id": 2049050,
"data_source": {
"active": true,
"deactivated_at": "2023-02-21T12:57:31.000000Z",
"id": 413,
"source": "news",
"vendor": "default"
},
"data_source_id": 413,
"id": 18320031,
"searched_at": "2023-08-02T18:48:22.000000Z",
"succeeded": true
}
],
"status": "In review",
"type": "Person",
"unresolved_risk": 0,
"updated_at": "2023-08-02T18:48:22.000000Z",
"user_id": null,
"uuid": "a2546955-de2d-4907-a533-0846ee46f719"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 10,
"to": 1,
"total": 1
}
}
This endpoint allows you to edit the specifications or status of an existing case. Only fields provided will be updated, fields that are not provided will remain in the current state. Will return the updated case information.
The ID of the case.
curl --request PATCH \
"https://app.pascal.vartion.com/api/v1/cases/B3b1a0de-E464-0660-dEBB-cE54cDE1a84b|15" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"clients\": null,
\"status\": \"Monitored\",
\"monitoring_frequency\": \"365\",
\"name\": \"John Doe\",
\"confidence\": \"Relative\",
\"gender\": \"Male\",
\"nationalities\": [
\"NLD\"
],
\"country_of_birth\": \"NLD\",
\"country_of_residence\": \"NLD\",
\"date_of_birth\": \"2000-01-31\",
\"passportVerificationForm\": {
\"country\": \"b\",
\"dateOfExpiry\": \"n\",
\"documentNumber\": \"gzmiyvd\",
\"givenNames\": \"l\",
\"lastName\": \"j\",
\"nationality\": \"nik\",
\"optionalData\": \"hwaykcmyuwpwlv\"
},
\"company_number\": \"NL123\",
\"country\": \"NL\",
\"address\": \"3721 West Fork Street, Montana\",
\"asset_type\": \"vessel\",
\"identifier\": \"123456\"
}"
{
"additional_terms": null,
"address": null,
"aliases": null,
"asset_type": null,
"clients": [
{
"name": "John Doe",
"id": 1
}
],
"company_number": null,
"confidence": "Relative",
"country_of_birth": null,
"country_of_residence": null,
"created_at": "2023-08-02T18:48:22.000000Z",
"date_of_birth": null,
"deleted_at": null,
"description": "Voluptas ad rem illum est dignissimos aut provident vitae.",
"excluded_terms": [],
"gender": null,
"group_id": null,
"id": 2049050,
"identifier": null,
"country": null,
"monitoring_frequency_sanctions": 90,
"monitoring_frequency_peps": 90,
"monitoring_frequency_news": 90,
"monitoring_frequency_enforcements": 90,
"monitoring_frequency_other": 90,
"name": "My test case",
"nationalities": null,
"organization_id": 19,
"origin": "import",
"risk": 0,
"searched_at": "2023-08-02T18:48:32.000000Z",
"sources": [
{
"active": true,
"case_id": 2049050,
"data_source": {
"active": true,
"deactivated_at": "2023-02-21T12:57:31.000000Z",
"id": 409,
"source": "peps",
"vendor": "default"
},
"data_source_id": 409,
"id": 18320030,
"searched_at": "2023-08-02T18:48:22.000000Z",
"succeeded": true
},
{
"active": true,
"case_id": 2049050,
"data_source": {
"active": true,
"deactivated_at": "2023-02-21T12:57:31.000000Z",
"id": 413,
"source": "news",
"vendor": "default"
},
"data_source_id": 413,
"id": 18320031,
"searched_at": "2023-08-02T18:48:22.000000Z",
"succeeded": true
}
],
"status": "Monitored",
"type": "Person",
"unresolved_risk": 0,
"updated_at": "2023-08-02T18:48:22.000000Z",
"user_id": null,
"uuid": "a2546955-de2d-4907-a533-0846ee46f719"
}
This endpoint allows you to get the key information of a case's hits.
The ID of the case.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/cases/B3b1a0de-E464-0660-dEBB-cE54cDE1a84b|15/hits-key-information" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"unresolved": {
"enforcements": [
{
"data": {
"birth_dates": null,
"connections": null,
"name": "John Doe",
"nationalities": [
{
"country": "United States of America"
}
]
},
"resolution": "unresolved",
"source": "enforcements"
}
]
}
}
This endpoint allows you to create a new client.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/clients" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"b\",
\"description\": \"Et animi quos velit et fugiat.\"
}"
cache-control
: no-cache, private
content-type
: application/json
x-ratelimit-limit
: 1000
x-ratelimit-remaining
: 998
vary
: Precognition, Origin
{
"id": 95106,
"name": "b",
"organization_id": 1,
"created_at": "2025-09-29T14:43:22.000000Z",
"updated_at": "2025-09-29T14:43:22.000000Z",
"description": "",
"status": "Active",
"assignee_user_id": null,
"onboarding_status": null,
"onboarding_risk": null,
"cases_count": 2,
"risk": null,
"hits_total_count": 0,
"hits_unresolved_count": 0,
"resolve_progress": 100
}
This endpoint allows you to get detailed information on a specific client.
The ID of the client.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/clients/50031" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control
: no-cache, private
content-type
: application/json
x-ratelimit-limit
: 1000
x-ratelimit-remaining
: 997
vary
: Precognition, Origin
{
"message": "No query results for model [App\\Models\\Client]."
}
This endpoint allows you to search for clients using filters. Returning basic information on a list of clients. Paginating through results is possible using the per_page and page parameters.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/clients/searches" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"id\": null,
\"not_id\": [
16
],
\"assignee_user_id\": [
22
],
\"client_client_id\": [
67
],
\"not_client_client_id\": [
66
],
\"not_cases_id\": [
27
],
\"onboarding_status\": [
\"waiting for client\"
],
\"organization_id\": null,
\"page\": 1,
\"per_page\": 10,
\"sort_by\": \"updated_at\",
\"sort_order\": \"desc\",
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"risk\": [
[
\"high\",
\"very high\"
]
],
\"cases_count\": [
1
],
\"clients_count\": [
1
],
\"custom_filters\": [
\"has_onboarding_forms\"
],
\"cases\": {
\"group_id\": [
1
],
\"user_id\": [
1
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"status\": null,
\"type\": null,
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"hits\": {
\"resolution\": [
[
\"unresolved\",
\"positive\"
]
],
\"source\": null,
\"time_range\": [
\"2025-01-01\",
\"2025-01-31\"
]
}
}
}"
cache-control
: no-cache, private
content-type
: application/json
x-ratelimit-limit
: 1000
x-ratelimit-remaining
: 996
vary
: Precognition, Origin
{
"message": "The cases count length must be one of: 0, 2. (and 5 more errors)",
"errors": {
"cases_count": [
"The cases count length must be one of: 0, 2."
],
"clients_count": [
"The clients count length must be one of: 0, 2."
],
"risk.0": [
"This field must be a string.",
"The selected value is invalid."
],
"cases.hits.resolution.0": [
"This field must be a string.",
"The selected value is invalid."
]
}
}
This endpoint allows you to link a client to other clients.
The id of the client that you want to link to other clients.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/clients/1/clients" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"client_ids\": [
2,
3
]
}"
[Empty response]
This endpoint allows you to unlink a client from other clients.
The id of the client that you want to unlink from other clients.
curl --request DELETE \
"https://app.pascal.vartion.com/api/v1/clients/1/clients" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"client_ids\": [
2,
3
]
}"
[Empty response]
This endpoint allows you search for any created onboarding form templates.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/onboarding-form-templates/searches" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"page\": 1,
\"per_page\": 10,
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"sort_by\": \"updated_at\",
\"sort_order\": \"desc\"
}"
{
"data": [
{
"created_at": "2024-11-28T08:34:03.000000Z",
"external_name": "Standard Form",
"id": 88,
"name": "Standard Form",
"organization_id": 15,
"updated_at": "2024-11-28T08:34:03.000000Z"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"per_page": 10,
"to": 1,
"total": 1
}
}
This endpoint allows you to create an onboarding form for an existing client.
Adding an onboarding form to a client will make it visible in the Onboarding application.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/onboarding-forms" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"assignee_user_email\": \"[email protected]\",
\"external_users\": [
{
\"first_name\": \"g\",
\"last_name\": \"z\",
\"email\": \"[email protected]\"
}
],
\"onboarding_form_template_id\": 16,
\"client_id\": 22
}"
{
"assignee_user_id": 24,
"client_id": 2834,
"created_at": "2025-03-31T11:22:10.000000Z",
"external_name": "Standard Form",
"external_questions_open": 1,
"external_questions_total": 1,
"id": 273,
"name": "Standard Form",
"organization_id": 10240,
"questions_open": 1,
"questions_total": 1,
"status": "in progress",
"updated_at": "2025-03-31T11:22:10.000000Z"
}
This endpoint allows you to search for onboarding forms using filters. Returning basic information on a list of onboarding forms. Paginating through results is possible using the per_page and page parameters.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/onboarding-forms/searches" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"page\": 1,
\"per_page\": 10,
\"name\": \"b\",
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"sort_by\": \"updated_at\",
\"sort_order\": \"desc\",
\"external_user_ids\": [
22
],
\"client_id\": [
67
],
\"with\": [
\"user\"
]
}"
cache-control
: no-cache, private
content-type
: application/json
x-ratelimit-limit
: 1000
x-ratelimit-remaining
: 999
vary
: Precognition, Origin
{
"data": [],
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"per_page": 10,
"to": null,
"total": 0
}
}
This endpoint allows you to search for onboarding form questions using filters.
The following properties are always returned for each question:
curl --request POST \
"https://app.pascal.vartion.com/api/v1/onboarding-form-questions/searches" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"external_ids\": [
\"ABC123\"
],
\"page\": 1,
\"per_page\": 10,
\"onboarding_form_ids\": null
}"
{
"data": [
{
"id": 164,
"question_id": 2,
"parent_question_id": null,
"title": "Yes / No",
"answer": "Yes",
"type": "true_false",
"created_at": "2024-04-18T09:55:40.000000Z",
"updated_at": "2024-04-18T09:55:48.000000Z"
},
{
"id": 178,
"question_id": 3,
"parent_question_id": null,
"title": "Date of birth",
"answer": "2024-04-02",
"type": "datepicker",
"created_at": "2024-04-19T07:47:24.000000Z",
"updated_at": "2024-04-19T07:58:17.000000Z"
},
{
"id": 168,
"question_id": 4,
"parent_question_id": null,
"title": "True or false",
"answer": "Yes",
"type": "true_false",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-04-18T10:01:54.000000Z"
},
{
"id": 173,
"question_id": 5,
"parent_question_id": null,
"title": "Yes / No",
"answer": "Yes",
"type": "true_false",
"created_at": "2024-04-18T11:40:29.000000Z",
"updated_at": "2024-04-18T11:51:59.000000Z"
},
{
"id": 175,
"question_id": 6,
"parent_question_id": null,
"title": "Name",
"answer": "John Doe",
"type": "text",
"created_at": "2024-04-18T11:51:56.000000Z",
"updated_at": "2024-04-18T11:52:01.000000Z"
},
{
"id": 176,
"question_id": 7,
"parent_question_id": null,
"title": "E-mail",
"answer": "[email protected]",
"type": "text",
"created_at": "2024-04-18T11:51:56.000000Z",
"updated_at": "2024-04-18T11:52:04.000000Z"
},
{
"id": 548,
"question_id": 8,
"parent_question_id": null,
"title": "Name",
"answer": null,
"type": "text",
"created_at": "2024-05-28T11:15:07.000000Z",
"updated_at": "2024-05-28T11:15:07.000000Z"
},
{
"id": 170,
"question_id": 9,
"parent_question_id": null,
"title": "Website",
"answer": null,
"type": "url",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-05-07T07:39:07.000000Z"
},
{
"id": 166,
"question_id": 10,
"parent_question_id": null,
"title": "Please give a number",
"answer": "2",
"type": "number",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-04-23T12:42:32.000000Z"
},
{
"id": 167,
"question_id": 11,
"parent_question_id": null,
"title": "Website",
"answer": "http://example.com",
"type": "url",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-04-23T12:42:38.000000Z"
},
{
"id": 171,
"question_id": 12,
"parent_question_id": null,
"title": "Choose a fruit",
"answer": null,
"type": "dropdown",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-05-07T07:39:10.000000Z"
},
{
"id": 172,
"question_id": 13,
"parent_question_id": null,
"title": "Choose another fruit",
"answer": "a",
"type": "dropdown",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-04-23T12:42:40.000000Z"
},
{
"id": 177,
"question_id": 14,
"parent_question_id": null,
"title": "Please upload your document",
"answer": null,
"type": "upload",
"created_at": "2024-04-18T11:51:56.000000Z",
"updated_at": "2024-04-18T11:51:56.000000Z"
},
{
"id": 189,
"question_id": 15,
"parent_question_id": null,
"title": "Persons to email",
"answer": null,
"type": "repeater",
"created_at": "2024-04-22T08:11:43.000000Z",
"updated_at": "2024-04-23T14:28:48.000000Z"
},
{
"id": 185,
"question_id": 16,
"parent_question_id": 15,
"title": "E-mail",
"answer": null,
"type": "text",
"created_at": "2024-04-22T08:11:43.000000Z",
"updated_at": "2024-04-23T14:28:48.000000Z"
},
{
"id": 169,
"question_id": 17,
"parent_question_id": null,
"title": "Please choose another number",
"answer": "2",
"type": "number",
"created_at": "2024-04-18T10:01:46.000000Z",
"updated_at": "2024-04-23T12:43:29.000000Z"
}
],
"meta": {
"current_page": 1,
"from": 1,
"last_page": 13,
"per_page": 15,
"to": 15,
"total": 187
}
}
This endpoint allows you to download an uploaded file for a question in an onboarding form.
The ID of the onboarding form question.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/onboarding-form-question-uploads/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Accept: application/json" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json"
The usual flow for a one time case link is as follows:
This endpoint allows you to create one time case links.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/one-time-case-links" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"case_uuid\": \"ac6962da-4ff0-42ad-b5ee-35153d15e924\",
\"user_email\": \"[email protected]\",
\"return_url\": \"https:\\/\\/localhost\",
\"expires_at\": \"1970-01-31 23:00:00\",
\"interface_language\": \"en-gb\"
}"
{
"case_uuid": "ac6962da-4ff0-42ad-b5ee-35153d15e924",
"created_at": "2023-08-14T10:50:25.000000Z",
"created_by_id": 4,
"expires_at": "2099-01-31T23:00:00.000000Z",
"id": 11,
"return_url": "https://localhost",
"token": "ehgwKBKPPubqQ7CC",
"updated_at": "2023-08-14T10:50:25.000000Z",
"user_id": 13989
}
This endpoint allows you to view a one time case link.
The id of the one time case link.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/one-time-case-links/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"case_uuid": "ac6962da-4ff0-42ad-b5ee-35153d15e924",
"created_at": "2023-08-14T10:50:25.000000Z",
"created_by_id": 4,
"expires_at": "2099-01-31T23:00:00.000000Z",
"id": 11,
"return_url": "https://localhost",
"updated_at": "2023-08-14T10:50:25.000000Z",
"used_at": null,
"user_id": 13989
}
This endpoint allows you to delete a one time case link.
The id of the one time case link.
curl --request DELETE \
"https://app.pascal.vartion.com/api/v1/one-time-case-links/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control
: no-cache, private
content-type
: application/json
x-ratelimit-limit
: 1000
x-ratelimit-remaining
: 995
vary
: Precognition, Origin
{
"message": ""
}
This endpoint allows you to authenticate using a one time case link.
When successful, the user will be redirected to the page where they can resolve the linked case.
curl --request GET \
--get "https://app.pascal.vartion.com/v1/one-time-case-link-authentication" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"id\": 1,
\"token\": \"fpncIktnu0GfUKJl\"
}"
<!DOCTYPE html>
<html lang="en-gb">
...
</html>
This endpoint allows you to authenticate using a one time case link.
When successful, the user will be redirected to the page where they can resolve the linked case.
curl --request POST \
"https://app.pascal.vartion.com/v1/one-time-case-link-authentication" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"id\": 1,
\"token\": \"fpncIktnu0GfUKJl\"
}"
<!DOCTYPE html>
<html lang="en-gb">
...
</html>
This endpoint allows you to start the generation of one or more PDF case reports. Cases to be used are selected using the filter parameter. An id is returned which can be used to check if the download is finished and download the PDF when it is finished.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/pdf/case" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"batch_name\": \"b\",
\"filename\": \"n\",
\"detailed\": true,
\"language\": \"ru\",
\"pages\": [
\"overview\"
],
\"comment\": \"Automatically generated from the Pascal API\",
\"to_email\": false,
\"filters\": {
\"user_id\": [
1
],
\"group_id\": [
1
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"deleted\": false,
\"uuid\": [
\"a2546955-de2d-4907-a533-0846ee46f719\"
],
\"company_number\": \"g\",
\"address\": \"z\",
\"hit_resolution\": [
[
\"unresolved\",
\"positive\"
]
],
\"hit_source\": null,
\"hit_time_range\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"client_status\": [
[
\"Active\"
]
],
\"clients\": {
\"cases_count\": [
1
],
\"clients_count\": [
1
],
\"created_at\": [
\"2025-01-01\",
\"2025-01-31\"
],
\"risk\": [
[
\"high\",
\"very high\"
]
],
\"updated_at\": [
\"2025-01-01\",
\"2025-01-31\"
]
}
}
}"
{
"id": "99d92417-1264-4cce-9e86-e71a8357e044",
"name": "Generating case reports...",
"totalJobs": 1,
"pendingJobs": 1,
"progress": 0,
"createdAt": "2023-08-09T11:02:04.000000Z",
}
This endpoint allows you to download a previously generated report, using a report id or a report job id.
The ID of the report.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/reports/B3b1a0de-E464-0660-dEBB-cE54cDE1a84b|15/download" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Accept: application/json" \
--header "Content-Type: application/json" PDF report file
This endpoint returns the transaction monitoring risk configuration.
Note: Access to transaction monitoring is required to use this endpoint.
curl --request GET \
--get "https://app.pascal.vartion.com/api/v1/transaction-monitoring-risk-config" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
// A list of country codes (ISO 3166-1 alpha-3) that are currently blocked.
"blocked_countries": [
"NLD",
"USA",
"JPN"
]
}
This endpoint allows you to import a list of transactions asynchronously.
Note: Access to transaction monitoring is required to use this endpoint.
curl --request POST \
"https://app.pascal.vartion.com/api/v1/transactions/import" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "OrganizationId: 1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"transactions\": [
{
\"client_account_number\": \"1234567890\",
\"client_swift_code\": \"ABNANL2A\",
\"client_bank_account_country\": \"NL\",
\"identifier\": \"TXN123456\",
\"amount\": 1000.5,
\"currency\": \"EUR\",
\"direction\": \"incoming\",
\"counter_party_name\": \"John Doe\",
\"counter_party_currency\": \"USD\",
\"counter_party_account_number\": \"0987654321\",
\"counter_party_swift_code\": \"RABONL2U\",
\"counter_party_bank_name\": \"Rabobank\",
\"counter_party_bank_account_country\": \"NL\",
\"description\": \"Invoice payment #12345\",
\"transaction_date\": \"2023-08-02T14:30:00+02:00\",
\"type\": \"wire_transfer\",
\"balance_after_transaction\": 15000.75
}
],
\"batch_id\": \"99cbb5f6-49a7-492c-a1de-92ff356d98d8\",
\"count\": 150
}"
{
"id": "99cbb5f6-49a7-492c-a1de-92ff356d98d8",
"name": "Importing transactions...",
"totalJobs": 1,
"pendingJobs": 1,
"progress": 0,
"createdAt": "2023-08-02T18:48:22.000000Z",
"finishedAt": null
}