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.

Upcoming changes

In Pascal 6.2 we are replacing the `jurisdiction` field with a `country` field in cases:

  • The `country` field will be an ISO 3166-1 alpha-3 country code string.
  • The `jurisdiction` field will be removed in Pascal 6.2.
  • These changes apply to the "Import cases", "Search cases", and "Update case" endpoints.
You can update your requests to use the new `country` field before Pascal 6.2 is released.
If your requests contain both the `country` field and `jurisdiction` field, Pascal will use `jurisdiction` in 6.1 and `country` in 6.2.

Webhooks

You can configure webhooks in the organization settings -> integrations page. 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

Webhook example

Pascal sends POST requests with `Content-Type: application/json` to your configured URL. The request body looks like:

{
    "events": [
        {
            "event": "Case created",
            "organization_id": 1,
            "case_id": 1,
            "case_uuid": "6e182844-727e-4f04-a2a1-e6096baacc1b"
        }
    ]
}

Client errors

Our API returns 4xx status codes when there is something wrong with your request.
Common client errors are:

  • 401 Unauthorized. You are either missing the `Authorization` header or the specified `Authorization` header is incorrect.
  • 403 Forbidden. This usually means that your account is not allowed to access the given resource. Maybe you forgot to add the `OrganizationId` header.
  • 404 Not Found. The resource you are trying to access does not exist.
  • 419 Session Expired. Your session has expired. This can happen if you use a session cookie to authenticate with the API. We recommend you use `API tokens` instead as described under `Authenticating requests`.
  • 422 Unprocessable Entity. Something in the request body is incorrect. Every endpoint has its own validation rules. This error means that the request did not comply with those rules. The response usually contains information about what fields are incorrect.
  • 429 Too Many Requests. Our API has a global rate limit of 1.000 requests per minute per user. This error means that that limit was reached.

Authenticating requests

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.

Cases

Import cases

POST
https://app.pascal.vartion.com
/api/v1/cases/import
requires authentication

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. You can use the case search API to check the status of the imported cases.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/cases/import" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --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\": [
                \"vtjeylyexrevncudxt\"
            ],
            \"gender\": \"Male\",
            \"nationalities\": [
                \"NLD\"
            ],
            \"country_of_birth\": \"NLD\",
            \"country_of_residence\": \"NLD\",
            \"date_of_birth\": \"2000-01-31\",
            \"passportVerificationForm\": {
                \"country\": \"egrlysnhtkuwkv\",
                \"dateOfExpiry\": \"2024-09-27\",
                \"documentNumber\": \"q\",
                \"givenNames\": \"pxhuovvbytb\",
                \"lastName\": \"omqsiaqnfhgwoxgwenasqmk\",
                \"optionalData\": \"uuz\"
            },
            \"company_number\": \"NL123\",
            \"jurisdiction\": \"NL\",
            \"address\": \"3721 West Fork Street, Montana\"
        }
    ],
    \"deduplicate\": false,
    \"update_duplicates\": false,
    \"batch_id\": \"9cc24219-1e71-3ab3-a947-5045d6233e7d\",
    \"count\": 36
}"
Example response:
{
    "id": "99cbb5f6-49a7-492c-a1de-92ff356d98d8",
    "totalJobs": 1,
    "pendingJobs": 1,
    "progress": 0,
    "createdAt": "2023-08-02T18:48:22.000000Z",
    "uuids": [
        "a2546955-de2d-4907-a533-0846ee46f719"
    ]
}

Search cases

POST
https://app.pascal.vartion.com
/api/v1/cases/searches
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/cases/searches" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"per_page\": 10,
    \"page\": 1,
    \"sort_by\": \"updated_at\",
    \"sort_order\": \"asc\",
    \"secondary_sort_order\": \"desc\",
    \"with\": [
        \"hitCountsPerSource\"
    ],
    \"deleted\": false,
    \"uuid\": [
        \"a2546955-de2d-4907-a533-0846ee46f719\"
    ],
    \"nationalities\": null,
    \"jurisdiction\": null
}"
Example response:
{
    "data": [
        {
            "additional_terms": null,
            "address": null,
            "aliases": null,
            "case_groups": [],
            "case_users": [],
            "clients": [],
            "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": 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,
            "jurisdiction": 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": null,
            "user_id": null,
            "uuid": "a2546955-de2d-4907-a533-0846ee46f719"
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "http://pascal.vartion.com/api/v1/cases/searches",
        "per_page": 10,
        "to": 1,
        "total": 1
    }
}

Update case

PATCH
https://app.pascal.vartion.com
/api/v1/cases/{id}
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

URL Parameters

id
string
required

The ID of the case.

Example:
0c53C286-28e6-9dE9-cAde-2Fc9f2Dd4F8c|835

Body Parameters

Example request:
curl --request PATCH \
    "https://app.pascal.vartion.com/api/v1/cases/0c53C286-28e6-9dE9-cAde-2Fc9f2Dd4F8c|835" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"status\": \"Monitored\",
    \"monitoring_frequency\": \"365\",
    \"gender\": \"Male\",
    \"nationalities\": [
        \"NLD\"
    ],
    \"country_of_birth\": \"NLD\",
    \"country_of_residence\": \"NLD\",
    \"date_of_birth\": \"2000-01-31\",
    \"passportVerificationForm\": {
        \"country\": \"mvtgxfglh\",
        \"dateOfExpiry\": \"ysbxzdeqdheypwbs\",
        \"documentNumber\": \"nflrattk\",
        \"givenNames\": \"knz\",
        \"lastName\": \"hfgv\",
        \"nationality\": \"mtg\",
        \"optionalData\": \"hpvatvujfixwr\"
    },
    \"company_number\": \"NL123\",
    \"jurisdiction\": \"NL\",
    \"address\": \"3721 West Fork Street, Montana\"
}"
Example response:
{
    "additional_terms": null,
    "address": null,
    "aliases": null,
    "case_groups": [],
    "case_users": [],
    "clients": [],
    "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": null,
    "group_id": null,
    "id": 2049050,
    "jurisdiction": null,
    "monitoring_frequency": 28,
    "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": null,
    "user_id": null,
    "uuid": "a2546955-de2d-4907-a533-0846ee46f719"
}

Case hits key information

GET
https://app.pascal.vartion.com
/api/v1/cases/{id}/hits-key-information
requires authentication

This endpoint allows you to get the key information of a case's hits.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

URL Parameters

id
string
required

The ID of the case.

Example:
b34Ae24B-c461-5AE0-b7fE-bAfF1dBBEF67|59545
Example request:
curl --request GET \
    --get "https://app.pascal.vartion.com/api/v1/cases/b34Ae24B-c461-5AE0-b7fE-bAfF1dBBEF67|59545/hits-key-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1"
Example response:
{
    "unresolved": {
        "enforcements": [
            {
                "data": {
                    "birth_dates": null,
                    "connections": null,
                    "jurisdiction_code": "gb",
                    "name": "John Doe",
                    "nationalities": [
                        {
                            "country": "United States of America"
                        }
                    ]
                },
                "resolution": "unresolved",
                "source": "enforcements"
            }
        ]
    }
}

Clients

Create client

POST
https://app.pascal.vartion.com
/api/v1/clients
requires authentication

This endpoint allows you to create a new client.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/clients" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"name\": \"yyceqp\",
    \"description\": \"Quo labore ad sit dolorem sed aut praesentium.\",
    \"assignee_user_id\": 1,
    \"collaborator_user_ids\": [
        17
    ]
}"

Get client

GET
https://app.pascal.vartion.com
/api/v1/clients/{id}
requires authentication

This endpoint allows you to get detailed information on a specific client.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

URL Parameters

id
string
required

The ID of the client.

Example:
544
Example request:
curl --request GET \
    --get "https://app.pascal.vartion.com/api/v1/clients/544" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1"
Example response:

Search clients

POST
https://app.pascal.vartion.com
/api/v1/clients/searches
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/clients/searches" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"page\": 1,
    \"per_page\": 10,
    \"onboarding_status\": [
        \"completed\"
    ],
    \"sort_by\": \"updated_at\",
    \"sort_order\": \"asc\",
    \"custom_filters\": [
        \"has_onboarding_forms\"
    ]
}"

Onboarding forms

Search onboarding forms

POST
https://app.pascal.vartion.com
/api/v1/onboarding-forms/searches
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/onboarding-forms/searches" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"page\": 1,
    \"per_page\": 10,
    \"sort_by\": \"created_at\",
    \"sort_order\": \"desc\",
    \"external_user_ids\": [
        75
    ],
    \"client_id\": [
        27
    ],
    \"with\": [
        \"user\"
    ]
}"

One time case links

The usual flow for a one time case link is as follows:

  1. Create a one time case link using your personal access token.
  2. Store the generated one time case link id and token somewhere secure.
  3. Use a one time case link (this is done by your user). See: Authenticate using a one time case link
POST
https://app.pascal.vartion.com
/api/v1/one-time-case-links
requires authentication

This endpoint allows you to create one time case links.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/one-time-case-links" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"case_uuid\": \"ac6962da-4ff0-42ad-b5ee-35153d15e924\",
    \"user_email\": \"example@vartion.com\",
    \"return_url\": \"https:\\/\\/localhost\",
    \"expires_at\": \"1970-01-31 23:00:00\",
    \"interface_language\": \"en-gb\"
}"
Example response:
GET
https://app.pascal.vartion.com
/api/v1/one-time-case-links/{id}
requires authentication

This endpoint allows you to view a one time case link.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

URL Parameters

id
integer
required

The id of the one time case link.

Example:
1
Example request:
curl --request GET \
    --get "https://app.pascal.vartion.com/api/v1/one-time-case-links/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1"
Example response:
DELETE
https://app.pascal.vartion.com
/api/v1/one-time-case-links/{id}
requires authentication

This endpoint allows you to delete a one time case link.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

URL Parameters

id
integer
required

The id of the one time case link.

Example:
1
Example request:
curl --request DELETE \
    "https://app.pascal.vartion.com/api/v1/one-time-case-links/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1"
GET
https://app.pascal.vartion.com
/v1/one-time-case-link-authentication

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.

Headers

Content-Type
Example:
application/x-www-form-urlencoded
Accept
Example:
text/html

Body Parameters

Example request:
curl --request GET \
    --get "https://app.pascal.vartion.com/v1/one-time-case-link-authentication" \
    --header "Content-Type: application/x-www-form-urlencoded" \
    --header "Accept: text/html" \
    --data "id=1&token=fpncIktnu0GfUKJl"
Example response:
POST
https://app.pascal.vartion.com
/v1/one-time-case-link-authentication

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.

Headers

Content-Type
Example:
application/x-www-form-urlencoded
Accept
Example:
text/html

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/v1/one-time-case-link-authentication" \
    --header "Content-Type: application/x-www-form-urlencoded" \
    --header "Accept: text/html" \
    --data "id=1&token=fpncIktnu0GfUKJl"
Example response:

Reports

Generate case reports

POST
https://app.pascal.vartion.com
/api/v1/pdf/case
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/json
OrganizationId
Example:
1

Body Parameters

Example request:
curl --request POST \
    "https://app.pascal.vartion.com/api/v1/pdf/case" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "OrganizationId: 1" \
    --data "{
    \"filename\": \"becnbu\",
    \"detailed\": false,
    \"pages\": [
        \"overview\"
    ],
    \"comment\": \"Automatically generated from the Pascal API\",
    \"to_email\": false,
    \"filters\": {
        \"deleted\": false,
        \"uuid\": [
            \"a2546955-de2d-4907-a533-0846ee46f719\"
        ],
        \"nationalities\": null,
        \"jurisdiction\": null
    }
}"
Example response:
{
    "id": "99d92417-1264-4cce-9e86-e71a8357e044",
    "name": "Generating case reports...",
    "totalJobs": 1,
    "pendingJobs": 1,
    "progress": 0,
    "createdAt": "2023-08-09T11:02:04.000000Z",
}

Download reports

GET
https://app.pascal.vartion.com
/api/v1/reports/{id}/download
requires authentication

This endpoint allows you to download a previously generated report, using a report id or a report job id.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_KEY}
Content-Type
Example:
application/json
Accept
Example:
application/pdf
OrganizationId
Example:
1

URL Parameters

id
string
required

The ID of the report.

Example:
CaCa2bCF-EDFE-FC99-BdEB-6857261493bf|5
Example request:
curl --request GET \
    --get "https://app.pascal.vartion.com/api/v1/reports/CaCa2bCF-EDFE-FC99-BdEB-6857261493bf|5/download" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/pdf" \
    --header "OrganizationId: 1"
Example response:
PDF report file
Report is not (yet) generated