Arbiter developer documentation

Integrate the evidence behind the decision.

Register a webhook, upload a bank statement, receive its completion event, retrieve the financial analysis and submit a proposed loan for a transparent affordability assessment.

Authentication

Simple, header-based API key authentication.

All programmatic API endpoints—including statement upload, transaction inspection, financial profiling, affordability assessments, policies, and webhooks—authenticate via your organisation's API key passed in the x-api-key request header. Request and response properties strictly use snake_case.

API key header · all endpoints
x-api-key: <your_api_key>

Quickstart

Start with the original statement.

01

Register the event endpoint

request
curl --request POST \
  --url https://api.arbiterlogic.com/v1/webhooks \
  --header "Content-Type: application/json" \
  --header "x-api-key: <api_key>" \
  --data '{
  "url": "https://example.com/webhooks/arbiter",
  "subscribed_events": [
    "statement.completed",
    "statement.requires_review",
    "statement.failed",
    "affordability.assessed"
  ]
}'
02

Upload a PDF, CSV or XLSX statement

multipart/form-data
curl --request POST \
  --url https://api.arbiterlogic.com/v1/statements \
  --header "x-api-key: <api_key>" \
  --form "file=@statement.pdf" \
  --form "password=optional_pdf_password"
03

Handle the completion event

webhook payload
{
  "statement_id": "01955b9e-0000-7000-8000-000000000001",
  "customer_id": "01955b9e-0000-7000-8000-000000000002",
  "status": "completed",
  "confidence_score": 0.98,
  "flags": [],
  "summary": {
    "stable_monthly_income": "450000.00",
    "average_monthly_income": "462500.00",
    "essential_monthly_expenses": "170000.00",
    "existing_monthly_debt_repayment": "65000.00",
    "average_monthly_surplus": "215000.00"
  }
}
04

Retrieve analysis, then assess affordability

request
curl -X GET "https://api.arbiterlogic.com/v1/statements/{statement_id}/analysis" \
  -H "x-api-key: <api_key>"
05

Submit the proposed loan for assessment

request
curl --request POST \
  --url https://api.arbiterlogic.com/v1/affordability \
  --header "Content-Type: application/json" \
  --header "x-api-key: <api_key>" \
  --data '{
  "statement_id": "01955b9e-0000-7000-8000-000000000001",
  "requested_loan_amount": 500000,
  "requested_tenure_months": 12,
  "interest_rate": 0.035,
  "interest_period": "monthly"
}'

Webhooks

Receive the change; do not poll for it.

Create a subscription before submitting statements. Arbiter sends a signed delivery for every subscribed event. Store the signing secret returned at creation—it is shown once and cannot be retrieved later.

Events

  • statement.processing
  • statement.completed
  • statement.requires_review
  • statement.failed
  • affordability.assessed

Verify every delivery

Validate the HMAC-SHA256 signature in X-Signature-SHA256 against the raw request body.

POST
/v1/webhooks

Register an HTTPS endpoint and the events it receives.

POST
/v1/webhooks/{webhook_id}/test

Send a signed test delivery to the registered endpoint.

Statements

Follow the evidence through processing.

GET
/v1/metadata/banks

Optional preflight check for supported banks.

POST
/v1/statements

Upload a statement for a customer.

GET
/v1/statements/{statement_id}

Retrieve processing status and statement metadata.

GET
/v1/statements/{statement_id}/analysis

Retrieve the financial profile generated from the statement.

Affordability

Receive a decision with its reasoning.

An assessment returns the affordability decision together with capacity metrics, reason codes, warnings and the policy context used in the calculation.

Decision

AFFORDABLE, NOT_AFFORDABLE or MANUAL_REVIEW.

Reasons & warnings

Machine-readable context for the outcome.

%

Metrics

Income, DTI, capacity and residual income.

POST
/v1/affordability

Create an affordability assessment from a completed statement.

GET
/v1/affordability/{assessment_id}

Retrieve the decision, reasons, warnings and policy snapshot.