Valuation & Damage Analysis API

Valuation API

Base URL

/api/valuation/v1

Rate Limit

60 requests / minute

Authentication

None required

Create a new valuation. The valuation is processed asynchronously — poll the returned status_url for the result.

Headers

Header Required Description
Idempotency-Key Optional Unique key to prevent duplicate submissions on retry. Same key returns the original valuation.

Request Body

Field Type Required Description
reference string Optional Your internal reference (max 100 chars).
source string Optional Origin system or integration name (max 100 chars).
vehicle object
vehicle.mileage integer Required Odometer reading (0–9,999,999).
vehicle.make string Optional Manufacturer (e.g. "Volkswagen").
vehicle.model string Optional Model name (e.g. "Golf").
vehicle.build_year integer Optional 4-digit year of manufacture.
vehicle.fuel enum Optional Fuel type enum value.
vehicle.transmission enum Optional Transmission type enum value.
vehicle.body_type enum Optional Body type enum value.
vehicle.mileage_type enum Optional Unit for mileage (km / miles).
vehicle.power_kw integer Optional Engine power in kW.
vehicle.new_price integer Optional Original new price in the smallest currency unit (cents).
vehicle.date_first_admission date Optional First registration date (Y-m-d).
vehicle.vat_margin enum Optional VAT or margin scheme indicator.
vehicle.options string[] Optional List of factory option codes or names.
condition object
condition.general enum Optional Overall condition level.
condition.body enum Optional Body / exterior condition level.
condition.interior enum Optional Interior condition level.
damage object
damage.written_description string Optional Free-text damage description (max 5000 chars).
damage.drivable boolean Optional Whether the vehicle is still drivable.
images array of objects
images[].url string (URL) Required Publicly accessible image URL.
images[].position string Optional Shot position label (e.g. "front-left").
config object
config.mode enum Optional Valuation processing mode.
config.include_comparables boolean Optional Include comparable vehicles in the response.
config.include_image_analysis boolean Optional Run AI image damage analysis.
callback object
callback.url string (URL) Required with callback Webhook URL to POST the result to when completed.
callback.secret string Optional Secret included in the webhook payload for verification.

Response — 202 Accepted

{
  "error": false,
  "message": "Valuation created",
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "queued",
    "status_url": "/api/valuation/v1/valuations/{uuid}",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

Retrieve the status and result of a valuation. Poll this endpoint after creation until status is completed or failed.

Path Parameters

Parameter Type Description
uuid string (UUID) The UUID returned by the create endpoint.

Response — 200 OK

{
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "completed",        // queued | processing | completed | failed
    "progress": {
      "current_stage": "...",
      "completed_stages": [...],
      "percent": 100
    },
    "latest_result": {
      "trade_value": 12500,
      "currency": "EUR",
      "range": { "low": 11800, "high": 13200 },
      "confidence": 0.87,
      "review_required": false,
      "market": { ... },
      "adjustments": [...],
      "signals": [...],
      "warnings": [...]
    },
    "comparables": [
      {
        "id": "...",
        "similarity_score": 0.94,
        "comparable_value": 12400,
        "currency": "EUR",
        "vehicle_data": { ... }
      }
    ],
    "stage_outputs": [...],
    "created_at": "...",
    "completed_at": "..."
  }
}

Apply manual price corrections to an existing valuation. Triggers an async recalculation.

Request Body

Field Type Required Description
replace_existing boolean Optional When true, removes all existing manual corrections before applying. Defaults to false.
corrections array of objects — required, min 1
corrections[].type enum Required Correction type enum value.
corrections[].amount numeric Required Correction value (can be negative for deductions).
corrections[].code string Required Short identifier for this correction (max 100 chars).
corrections[].reason string Optional Human-readable reason (max 500 chars).

Response — 202 Accepted

{
  "error": false,
  "message": "Valuation created",
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "queued",
    "status_url": "/api/valuation/v1/valuations/{uuid}",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

List and filter valuations with pagination support.

Query Parameters

Parameter Type Description
status string Filter by valuation status (e.g., completed, queued).
reference string Search by reference (partial match, case-insensitive).
page integer Page number. Defaults to 1.

Response — 200 OK

{
  "error": false,
  "message": "Ok",
  "data": [
    {
      "uuid": "...",
      "reference": "...",
      "status": "completed",
      "source": "portal",
      "review_required": false,
      "started_at": "2026-01-01T00:00:00+00:00",
      "completed_at": "2026-01-01T00:05:00+00:00",
      "duration_ms": 300000,
      "created_at": "2026-01-01T00:00:00+00:00",
      "updated_at": "2026-01-01T00:05:00+00:00"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 2,
    "per_page": 30,
    "total": 45,
    "from": 1,
    "to": 30
  },
  "links": {
    "first": "...",
    "last": "...",
    "prev": null,
    "next": "..."
  }
}

Retrieve the status and result of a valuation. Poll this endpoint after creation until status is completed or failed.

Path Parameters

Parameter Type Description
uuid string (UUID) The UUID returned by the create endpoint.

Response — 200 OK

{
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "completed",        // queued | processing | completed | failed
    "progress": {
      "current_stage": "...",
      "completed_stages": [...],
      "percent": 100
    },
    "latest_result": {
      "trade_value": 12500,
      "currency": "EUR",
      "range": { "low": 11800, "high": 13200 },
      "confidence": 0.87,
      "review_required": false,
      "market": { ... },
      "adjustments": [...],
      "signals": [...],
      "warnings": [...]
    },
    "comparables": [
      {
        "id": "...",
        "similarity_score": 0.94,
        "comparable_value": 12400,
        "currency": "EUR",
        "vehicle_data": { ... }
      }
    ],
    "stage_outputs": [...],
    "created_at": "...",
    "completed_at": "..."
  }
}

Trigger a synchronous recalculation of a valuation. Re-runs the full valuation pipeline and returns the updated valuation data.

Path Parameters

Parameter Type Description
uuid string (UUID) The valuation UUID to recalculate.

Response — 200 OK

{
  "error": false,
  "message": "Valuation recalculated successfully",
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "completed",
    "current_stage": null,
    "normalized_input": { ... },
    "warnings": [],
    "comparables": [ ... ],
    "latest_result": { ... },
    "stage_outputs": [ ... ],
    "created_at": "2026-01-01T00:00:00+00:00",
    "updated_at": "2026-01-01T00:05:30+00:00"
  }
}

Error Response (500): If recalculation fails, returns {"error": true, "message": "Failed to recalculate valuation: ..."}

Apply manual price corrections to an existing valuation. Triggers an async recalculation.

Request Body

Field Type Required Description
replace_existing boolean Optional When true, removes all existing manual corrections before applying. Defaults to false.
corrections array of objects — required, min 1
corrections[].type enum Required Correction type enum value.
corrections[].amount numeric Required Correction value (can be negative for deductions).
corrections[].code string Required Short identifier for this correction (max 100 chars).
corrections[].reason string Optional Human-readable reason (max 500 chars).

Response — 202 Accepted

{
  "error": false,
  "message": "Valuation created",
  "data": {
    "uuid": "...",
    "reference": "...",
    "status": "queued",
    "status_url": "/api/valuation/v1/valuations/{uuid}",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

Record outcome feedback for a valuation (realized sale price, days to sale, etc.). Used to improve future model accuracy.

Request Body

Field Type Required Description
realized_value integer Optional Actual sale price achieved.
currency string (ISO 4217) Optional 3-letter currency code (e.g. "EUR").
sold boolean Optional Whether the vehicle was sold.
sold_at date Required if sold Date of sale.
days_to_sale integer Optional Number of days from listing to sale.
notes string Optional Free-text notes (max 2000 chars).
used_for_training boolean Optional Consent to use this feedback for model training.

Response — 200 OK

{
  "error": false,
  "message": "Feedback recorded",
  "data": {
    "uuid": "..."
  }
}

Damage Analysis API

Base URL

/api/damage-analysis/v1

Rate Limit

60 requests / minute

Authentication

None required

Submit images for AI-powered damage analysis. Supports file uploads or public image URLs. Analysis is processed asynchronously — poll the returned status_url for results.

Request Body

Field Type Required Description
input_mode string Optional Input method: files or urls. Defaults to files.
File Upload Mode (input_mode=files)
images file[] Required* Array of 1-10 image files (max 10MB each). Supported formats: jpg, jpeg, png, webp, gif.
URL Mode (input_mode=urls)
image_urls string[] Required* Array of 1-10 publicly accessible image URLs (max 2048 chars each).

* Required when the corresponding input_mode is selected. Either images or image_urls must be provided.

Response — 202 Accepted

{
  "error": false,
  "message": "Damage analysis created",
  "data": {
    "uuid": "...",
    "status": "queued",
    "status_url": "/api/damage-analysis/v1/damage-analysis/{uuid}",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

Retrieve the status and results of a damage analysis. Poll this endpoint after creation until status is completed or failed.

Path Parameters

Parameter Type Description
uuid string (UUID) The UUID returned by the create endpoint.

Response — 200 OK

{
  "data": {
    "uuid": "...",
    "status": "completed",        // queued | processing | completed | failed
    "progress": {                 // Present when status is queued or processing
      "status": "queued",
      "queued_at": "2026-01-01T00:00:00+00:00"
    },
    "results": {                  // Present when status is completed
      "overall_condition_score": 0.85,
      "detected_damages": ["scratch", "dent"],
      "warnings": [],
      "image_signals": [
        {
          "image_url": "https://...",
          "confidence": 0.92,
          "condition_score": 0.85,
          "detected_damages": ["scratch"],
          "description": "Minor scratch visible on rear bumper",
          "damage_boxes": [
            {
              "x": 0.65,
              "y": 0.42,
              "width": 0.15,
              "height": 0.08,
              "damage_type": "scratch",
              "confidence": 0.88
            }
          ]
        }
      ]
    },
    "error": {                    // Present when status is failed
      "message": "AI service unavailable",
      "failed_at": "2026-01-01T00:00:00+00:00"
    },
    "created_at": "...",
    "queued_at": "...",
    "completed_at": "...",
    "failed_at": "..."
  }
}

List and filter damage analyses with pagination support.

Query Parameters

Parameter Type Description
status string Filter by status: queued, processing, completed, or failed.
sort string Sort field: created_at, completed_at, or queued_at. Defaults to created_at.
direction string Sort direction: asc or desc. Defaults to desc.
per_page integer Results per page (1-100). Defaults to 15.
page integer Page number. Defaults to 1.

Response — 200 OK

{
  "data": [...],              // Array of damage analysis objects
  "meta": {
    "current_page": 1,
    "per_page": 15,
    "total": 150,
    "last_page": 10
  },
  "links": {
    "first": "...",
    "last": "...",
    "prev": null,
    "next": "..."
  }
}

Retry a failed damage analysis. Resets error state and re-queues the job for processing.

Response — 202 Accepted

{
  "error": false,
  "message": "Damage analysis created",
  "data": {
    "uuid": "...",
    "status": "queued",
    "status_url": "/api/damage-analysis/v1/damage-analysis/{uuid}",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

Error Response (400): Only analyses with status failed can be retried. Returns {"error": true, "message": "Only failed analyses can be retried"} for other statuses.