Skip to main content

API Getting Started

This page shows the shortest useful Integration API flow: create a token, test it with a quick VAT ID lookup, then start a retry-safe VAT validation run.

1. Choose A Base URL

EnvironmentBase URL
Productionhttps://app.optimussoftware.de
Testhttps://dev.app.optimussoftware.de

The examples below use production. Replace the host with the test base URL when you are validating a test integration.

2. Create A Token

Create a Personal Access Token in the Optimus web app under Settings > API Interface > API Tokens.

Copy the token immediately. The full secret is shown only once.

3. Resolve One VAT ID

Use the quick lookup endpoint to verify that authentication, networking, and the selected environment are working:

curl -X GET "https://app.optimussoftware.de/api/v1/integration/vat/resolve?vatId=DE284700631" \
-H "Authorization: Bearer <token>"

A successful response returns the VAT ID status and, when available, normalized company data:

{
"vatId": "DE284700631",
"status": "Valid",
"resolvedData": {
"companyName": "Optimus Software GmbH",
"street": "Tal 44",
"city": "München",
"zip": "80331"
},
"checkedAt": "2026-04-19T10:17:26.4359867Z"
}

When you need the resolved street split into street name and house number, request those fields with include:

curl -X GET "https://app.optimussoftware.de/api/v1/integration/vat/resolve?vatId=DE284700631&include=addressStreetName,addressHouseNumber" \
-H "Authorization: Bearer <token>"

The additional fields are returned in included only when the data can be resolved:

{
"vatId": "DE284700631",
"status": "Valid",
"resolvedData": {
"companyName": "Optimus Software GmbH",
"street": "Tal 44",
"city": "München",
"zip": "80331"
},
"included": {
"addressStreetName": "Tal",
"addressHouseNumber": "44"
},
"checkedAt": "2026-04-19T10:17:26.4359867Z"
}

4. Start An Asynchronous Validation

Use asynchronous validation for imports, larger batches, retry-safe jobs, and PDF-producing workflows.

Create validation-request.json:

{
"records": [
{
"vatId": "DE284700631",
"companyName": "Optimus Software GmbH",
"street": "Tal 44",
"zip": "80331",
"city": "München",
"customerNumber": "C-1001"
}
],
"options": {
"checkType": "Standard",
"retryDuration": "None"
}
}

Send the request with an idempotency key from your own system, such as an import job ID:

curl -X POST "https://app.optimussoftware.de/api/v1/integration/vat/validations/async" \
-H "Authorization: Bearer <token>" \
-H "Idempotency-Key: customer-import-2026-05-13-001" \
-H "Content-Type: application/json" \
-d @validation-request.json

The response contains an operationId. If the status is Running, wait for the Retry-After value before polling.

5. Poll The Result

curl -X GET "https://app.optimussoftware.de/api/v1/integration/vat/validations/{operationId}" \
-H "Authorization: Bearer <token>"

When the run completes, the response includes per-record statuses and field comparison results.