Overview

The two integration surfaces, environments, base URLs, response format, and error handling for the Call+ Simulation API.

The Call+ Simulation API lets you run financial simulations for the Call+ stock option plan and generate PDF reports for beneficiaries.

Two integration surfaces

Call+ provides two ways to integrate, and most partners use both:

  1. The Simulation API — synchronous REST endpoints that your system calls to run simulations and download PDF reports.
  2. Outbound webhooks — signed HTTPS POST requests that Call+ sends to an endpoint you register when real business events occur, starting with plan.launched.

Running a simulation does not emit a webhook. A simulation is a hypothetical calculation; plan.launched is sent only if and when an actual Call+ plan is launched. See the Webhooks overview.

You want to…Use
Run a simulation and get the figuresPOST /simulations
Retrieve a previously created simulationGET /simulations/{id}
Download the PDF reportGET /simulations/{id}/pdf
React when a Call+ plan is launchedThe plan.launched webhook — start with the Webhooks overview
Implement and test your webhook endpointBuilding a webhook receiver

Environments

Sandbox and production expose the same endpoints and response envelope, and the sandbox never produces real records.

Temporary schema caveat. The sandbox currently runs an older revision of the request schema: it does not accept sourceReferenceId or companyFiscalData, names the national-register field nationalRegisterNumber (production uses nrn), and caps benefitInKind at €100,000. An aligned sandbox running the exact production schema is planned. Until it ships, use the sandbox to exercise authentication, headers, and the general flow — and validate your final integration against production with a test API key agreed with us.

EnvironmentPurposeBase URLAPI key prefix
SandboxThe test base URL — point your client here while you build. Never produces real records; see the schema caveat above.https://sandbox-api.callplus.be/api/v1sk_sbx_…
ProductionReal beneficiary simulations and reports.https://api.callplus.be/api/v1sk_prod_…

_meta.environment in every response is "sandbox" or "production" depending on which base URL you called — use it as a runtime sanity check.

Endpoints

MethodPathDescription
POST/simulationsRun a simulation
GET/simulations/{id}Retrieve a previously created simulation
GET/simulations/{id}/pdfDownload the PDF report

Response format

Every response follows the same envelope structure:

{
  "success": true,
  "requestId": "550e8400-e29b-41d4-a716-446655440000",
  "data": { ... },
  "_meta": {
    "timestamp": "2026-02-10T10:30:00.123Z",
    "environment": "sandbox"
  }
}
FieldTypeDescription
successbooleantrue on success, false on error
requestIdstringUnique ID for tracing — include this when contacting support
dataobjectResponse payload (only on success)
errorobjectError details (only on failure)
_metaobjectTimestamp and environment identifier

Error format

When success is false, the error object contains:

{
  "success": false,
  "requestId": "550e8400-e29b-41d4-a716-446655440000",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The request contains invalid parameters.",
    "details": [
      {
        "field": "benefitInKind",
        "code": "VALUE_TOO_LARGE",
        "message": "Value exceeds maximum allowed",
        "received": 150000,
        "constraint": { "max": 50000, "inclusive": true }
      }
    ]
  },
  "_meta": {
    "timestamp": "2026-02-10T10:30:00.123Z",
    "environment": "sandbox"
  }
}

Error codes

CodeHTTPWhat to do
VALIDATION_ERROR400Check the details array for specific field issues
INVALID_REQUEST400Fix malformed JSON, unknown fields, or type mismatches
UNAUTHORIZED401Verify the X-API-Key header is present and correct
FORBIDDEN403Contact support — account may be suspended
NOT_FOUND404Verify the simulation ID
METHOD_NOT_ALLOWED405Use the correct HTTP method for the endpoint
RATE_LIMIT_EXCEEDED429Wait for Retry-After seconds and retry
INTERNAL_ERROR500Retry later or contact support with requestId

The same codes apply in both environments.

Request ID

Every response echoes an X-Correlation-Id header, and the body's requestId carries the same value. You may send your own X-Correlation-Id on the request to correlate it with your own logs; if you don't, one is generated for you. Always log this value — it's the fastest way to debug issues with the Call+ team.

The machine-readable contract

The API Reference — including the plan.launched webhook — is generated from a canonical OpenAPI 3.1 document, and every example in these docs validates against it. If you want the file itself — to generate a client, mock the API, or run contract tests — ask us during onboarding and we'll provide the current version.

If you spot a mismatch between this documentation and the API's actual behavior, report it with your requestId — discrepancies are resolved through a tracked change on our side, never something you should have to guess around.


Did this page help you?