Skip to content

API Documentation

Complete reference for the RepairSnap Vehicle Damage Estimation API. Everything you need to integrate vehicle damage cost estimation into your application.

Getting Started

Get your first estimate in three steps.

1

Sign up

Create a free account at app.repairsnap.cc. No credit card required.

2

Get your API key

Go to the Developer Dashboard and generate a test key. Test keys (rs_test_) return mock data instantly for free.

3

Make your first request

Send a photo of vehicle damage and get back a cost estimate.

curl -X POST https://api.repairsnap.cc/v1/estimates \
  -H "Authorization: Bearer rs_test_YOUR_KEY" \
  -F photo=@damage.jpg

Tip: Test keys (rs_test_) return realistic mock data with no usage limits. Use them for development and testing. Switch to a live key (rs_live_) for real AI-powered estimates.

Data API: Need repair cost data without submitting a photo? The Data API provides read-only access to vehicle repair costs, state labor rates, and damage type cost ranges at $0.01/call. Same API key, same authentication.

Authentication

All API requests require a Bearer token in the Authorization header.

Authorization: Bearer rs_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ

Key Prefixes

Prefix Environment Description
rs_test_ Sandbox Returns realistic mock data instantly. No usage limits. Free.
rs_live_ Production Processes real AI estimates. Counts against your usage quota.

Endpoints

POST /v1/estimates

Create a new damage estimate.

URL: https://api.repairsnap.cc/v1/estimates

Parameters

Parameter Type Required Description
photo File / Base64 Required JPEG, PNG, or WebP. Max 10MB.
additional_photos File[] Optional Up to 4 additional photos for multi-angle assessment.
vehicle_make String Optional Vehicle make (e.g. "Toyota"). Improves accuracy.
vehicle_model String Optional Vehicle model (e.g. "Camry").
vehicle_year Number Optional Vehicle model year (e.g. 2022).
state String Optional US state code (e.g. "CA"). Defaults to CA. Affects labor rates.
callback_url URL Optional Webhook URL. Receives POST when estimate completes or fails.

Request (multipart/form-data)

curl -X POST https://api.repairsnap.cc/v1/estimates \
  -H "Authorization: Bearer rs_live_YOUR_KEY" \
  -F photo=@damage.jpg \
  -F vehicle_make=Toyota \
  -F vehicle_model=Camry \
  -F vehicle_year=2022 \
  -F state=CA

Request (application/json with base64)

curl -X POST https://api.repairsnap.cc/v1/estimates \
  -H "Authorization: Bearer rs_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "photo": "data:image/jpeg;base64,/9j/4AAQ...",
    "vehicle_make": "Toyota",
    "vehicle_model": "Camry",
    "vehicle_year": 2022,
    "state": "CA"
  }'

Response (202 Accepted)

{
  "id": "est_a1b2c3d4",
  "status": "processing",
  "estimated_seconds": 15,
  "poll_url": "https://api.repairsnap.cc/v1/estimates/est_a1b2c3d4",
  "created_at": "2026-03-21T10:30:00Z"
}
GET /v1/estimates/{id}

Retrieve an estimate by ID. Response format depends on processing status.

Processing response

{
  "id": "est_a1b2c3d4",
  "status": "processing",
  "stage": "damage_detection",
  "progress": 0.4,
  "estimated_remaining_seconds": 8
}

Complete response

{
  "id": "est_a1b2c3d4",
  "status": "complete",
  "vehicle": {
    "make": "Toyota",
    "model": "Camry",
    "year": 2022
  },
  "damage": {
    "areas": [
      {
        "type": "dent",
        "severity": "moderate",
        "location": "front_bumper",
        "confidence": 0.87
      },
      {
        "type": "scratch",
        "severity": "minor",
        "location": "front_fender_left",
        "confidence": 0.92
      }
    ]
  },
  "cost": {
    "total_min": 128000,
    "total_max": 192000,
    "currency": "USD",
    "unit": "cents",
    "breakdown": {
      "parts_oem": 65000,
      "body_labor": 48000,
      "paint_labor": 24000,
      "adas_calibration": 35000
    },
    "line_items": [
      {
        "description": "Front bumper cover - R&R",
        "repair_type": "replace",
        "parts_cost": 45000,
        "labor_hours": 3.5,
        "labor_cost": 28000,
        "paint_hours": 2.0,
        "paint_cost": 16000
      }
    ]
  },
  "adas": {
    "required": true,
    "calibrations": [
      {
        "system": "forward_collision_warning",
        "type": "static",
        "cost": 35000
      }
    ]
  },
  "data_sources": [
    { "name": "State Labor Rate Survey (CA)", "data_points": 247 },
    { "name": "Toyota Camry Parts Database", "data_points": 156 }
  ],
  "processing_time_ms": 12400
}

Failed response

{
  "id": "est_a1b2c3d4",
  "status": "failed",
  "error": {
    "code": "no_damage_detected",
    "message": "No vehicle damage was detected in the submitted photo."
  }
}
GET /v1/estimates/{id}/insurance

Returns the estimate in insurance-industry format with operation codes, part types, and line-item breakdowns.

Response

{
  "estimate_id": "est_a1b2c3d4",
  "format": "insurance",
  "vehicle": { "make": "Toyota", "model": "Camry", "year": 2022 },
  "line_items": [
    {
      "line": 1,
      "operation": "REPLACE",
      "description": "Front bumper cover",
      "part_type": "OEM",
      "part_cost": 45000,
      "labor_hours": 3.5,
      "labor_rate": 8000,
      "labor_cost": 28000,
      "paint_hours": 2.0,
      "paint_rate": 8000,
      "paint_cost": 16000,
      "subtotal": 89000
    },
    {
      "line": 2,
      "operation": "SUBLET",
      "description": "Forward Collision Warning - Static Calibration",
      "part_cost": 35000,
      "subtotal": 35000
    }
  ],
  "totals": {
    "parts": 80000,
    "labor": 28000,
    "paint": 16000,
    "sublet": 35000,
    "gross_total": 159000
  }
}

Operation Codes

Code Description
REPAIRRepair existing part
REPLACEReplace with new part
REFINISHPaint/refinish panel
BLENDBlend adjacent panel
R&IRemove and install
SUBLETSublet work (ADAS calibration, mechanical)

Data API

Read-only access to RepairSnap's vehicle repair cost database, state labor rates, and damage type cost ranges. No photo upload required.

Pricing: List endpoints (GET /v1/vehicles, GET /v1/states, GET /v1/damage-types) are FREE. Detail endpoints (GET /v1/vehicles/:make/:model, GET /v1/labor-rates/:state, GET /v1/damage-types/:type) cost $0.01 per call. AI estimate endpoints (POST /v1/estimates) are billed at your plan rate. All endpoints require a Bearer token.

GET /v1/vehicles

List all supported vehicles.

Returns all vehicles in the RepairSnap database grouped by make, with model names and year ranges.

Request

curl https://api.repairsnap.cc/v1/vehicles \
  -H "Authorization: Bearer rs_live_YOUR_KEY"

Response (200 OK)

{
  "data": [
    {
      "make": "Toyota",
      "models": [
        {
          "model": "Camry",
          "years": "2020-2024",
          "dataQuality": "high"
        },
        {
          "model": "RAV4",
          "years": "2019-2024",
          "dataQuality": "high"
        }
      ]
    },
    {
      "make": "BMW",
      "models": [
        {
          "model": "3 Series",
          "years": "2019-2024",
          "dataQuality": "high"
        }
      ]
    }
  ],
  "meta": {
    "totalMakes": 15,
    "totalModels": 39
  }
}
GET /v1/vehicles/{make}/{model}

Get repair cost data for a specific vehicle.

Returns full repair cost data including parts pricing, labor rates, common repairs, and severity cost ranges.

Parameters

Parameter Type Description
make String Vehicle make (e.g., Toyota, BMW, Mercedes-Benz)
model String Vehicle model (e.g., Camry, 3-Series)

Request

curl https://api.repairsnap.cc/v1/vehicles/Toyota/Camry \
  -H "Authorization: Bearer rs_live_YOUR_KEY"

Response (200 OK)

{
  "data": {
    "vehicle": {
      "make": "Toyota",
      "model": "Camry",
      "years": "2020-2024"
    },
    "sources": ["OEM parts pricing", "Body shop surveys"],
    "laborRates": {
      "body": 65,
      "paint": 68,
      "mechanical": 75
    },
    "commonRepairs": [
      {
        "name": "Front bumper replacement",
        "costRange": [80000, 150000]
      }
    ],
    "partsPricing": [...],
    "severityCostRanges": {...},
    "commonDamagePatterns": [...]
  }
}

404 Not Found

Returned when the make/model combination is not in our database. Use GET /v1/vehicles to see all supported vehicles.

GET /v1/labor-rates/{state}

Get labor rates for a state.

Returns body, paint, mechanical, and frame labor rates ($/hr) for a specific US state from our 4,000+ body shop survey.

Parameters

Parameter Type Description
state String Two-letter US state code (e.g., CA, TX, NY)

Request

curl https://api.repairsnap.cc/v1/labor-rates/CA \
  -H "Authorization: Bearer rs_live_YOUR_KEY"

Response (200 OK)

{
  "data": {
    "state": "CA",
    "body": 75,
    "paint": 78,
    "mechanical": 85,
    "frame": 80,
    "metroPremium": 1.15,
    "generalLaborRate": 72,
    "source": "4,000+ body shop survey"
  }
}

Response Fields

Field Description
body Body labor rate ($/hr)
paint Paint/refinish labor rate ($/hr)
mechanical Mechanical labor rate ($/hr)
frame Frame labor rate ($/hr)
metroPremium Metro area cost multiplier (e.g., 1.15 means 15% above state average)
generalLaborRate General auto repair rate ($/hr)
GET /v1/damage-types/{type}

Get cost ranges by severity for a damage type.

Returns cost ranges (in cents), repair methods, and descriptions for each severity level of a specific damage type.

Parameters

Parameter Type Description
type String Damage type identifier

Valid damage types

scratch dent crack paint_chip glass_break lamp_damage missing_part rust structural

Request

curl https://api.repairsnap.cc/v1/damage-types/dent \
  -H "Authorization: Bearer rs_live_YOUR_KEY"

Response (200 OK)

{
  "data": {
    "type": "dent",
    "name": "Dent",
    "description": "Body panel deformation from impact, ranging from door dings to large creases.",
    "severities": [
      {
        "severity": "minor",
        "minCents": 7500,
        "maxCents": 25000,
        "avgCents": 15000,
        "repairMethods": ["PDR (Paintless Dent Repair)"],
        "description": "Small door dings, 1-2 inch dents without paint damage"
      },
      {
        "severity": "moderate",
        "minCents": 20000,
        "maxCents": 75000,
        "avgCents": 45000,
        "repairMethods": ["PDR", "Body filler and repaint", "Glue pull repair"],
        "description": "Larger dents 3-6 inches, may have minor paint damage"
      },
      {
        "severity": "severe",
        "minCents": 50000,
        "maxCents": 200000,
        "avgCents": 120000,
        "repairMethods": ["Panel replacement", "Major body work and repaint"],
        "description": "Large creases, buckled panels, requires replacement"
      }
    ]
  }
}

Note: All cost values are in cents (USD). Divide by 100 to get dollars. For example, 7500 = $75.00.

GET /v1/states

List all states with rate summaries.

Returns all US states with body shop labor rate summaries sorted alphabetically, plus national average rates.

Request

curl https://api.repairsnap.cc/v1/states \
  -H "Authorization: Bearer rs_live_YOUR_KEY"

Response (200 OK)

{
  "data": [
    {
      "state": "AL",
      "body": 52,
      "paint": 54,
      "mechanical": 60,
      "frame": 58,
      "generalLaborRate": 50
    },
    {
      "state": "CA",
      "body": 75,
      "paint": 78,
      "mechanical": 85,
      "frame": 80,
      "generalLaborRate": 72
    }
  ],
  "meta": {
    "totalStates": 51,
    "nationalAverages": {
      "body": 58,
      "paint": 60,
      "mechanical": 65,
      "frame": 62
    }
  }
}

Webhooks

Instead of polling, provide a callback_url when creating an estimate. We will POST to that URL when the estimate completes or fails.

Webhook Headers

Header Description
Content-Type application/json
X-RepairSnap-Signature HMAC-SHA256 signature of the request body

Webhook Payload

{
  "event": "estimate.completed",
  "estimate_id": "est_a1b2c3d4",
  "status": "complete",
  "total_min": 128000,
  "total_max": 192000,
  "timestamp": "2026-03-21T10:30:15Z"
}

Events

Event Description
estimate.completed Estimate processing completed successfully
estimate.failed Estimate processing failed

Signature Verification

Verify webhook signatures using HMAC-SHA256 to ensure requests come from RepairSnap. The signature is in the X-RepairSnap-Signature header.

Python
import hmac, hashlib

def verify_signature(payload_body, signature, secret):
    expected = hmac.new(
        secret.encode('utf-8'),
        payload_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(
        f"sha256={expected}", signature
    )

# In your webhook handler:
sig = request.headers['X-RepairSnap-Signature']
if not verify_signature(request.body, sig, WEBHOOK_SECRET):
    return Response(status=401)
Node.js
import { createHmac, timingSafeEqual } from 'crypto';

function verifySignature(body, signature, secret) {
  const expected = 'sha256=' +
    createHmac('sha256', secret)
      .update(body)
      .digest('hex');
  return timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// In your webhook handler:
const sig = req.headers['x-repairsnap-signature'];
if (!verifySignature(req.body, sig, WEBHOOK_SECRET)) {
  return res.status(401).send('Invalid signature');
}

Retry Policy

If your webhook endpoint returns a non-2xx status, we retry up to 3 times with exponential backoff:

  • 1st retry: 5 seconds
  • 2nd retry: 30 seconds
  • 3rd retry: 5 minutes

Error Codes

All errors follow the RFC 9457 Problem Details format.

Error response format

{
  "type": "https://repairsnap.cc/errors/rate-limit-exceeded",
  "title": "Rate Limit Exceeded",
  "status": 429,
  "detail": "You have exceeded the rate limit of 5 requests per minute."
}

HTTP Errors

Status Error Description
400 Bad Request Missing required parameters or invalid format
401 Unauthorized Missing, invalid, or revoked API key
402 Payment Required Free usage limit exceeded. Purchase credits or subscribe.
404 Not Found Estimate ID does not exist
429 Rate Limited Too many requests. Check Retry-After header.
500 Server Error Internal server error. Retry the request.

Estimate Errors

These appear in the error.code field when an estimate fails.

Code Description
no_damage_detected No vehicle damage was detected in the submitted photo
not_a_vehicle The photo does not appear to contain a vehicle
image_quality_too_low Image resolution or quality is insufficient for analysis
processing_error Internal processing error. Retry the request.

Rate Limits

Plan Rate Limit Usage Limit
Credit Packs 5 requests/minute Per-credit (5 for $4.99, 10 for $8.99, 25 for $19.99)
Monthly ($25/mo) 30 requests/minute 50/month included, $0.50/request overage
Business ($100/mo) 60 requests/minute 250/month included, $0.40/request overage

Rate Limit Headers

Every API response includes rate limit headers:

Header Description
X-RateLimit-Limit Maximum requests per minute for your plan
X-RateLimit-Remaining Remaining requests in the current minute window
X-RateLimit-Reset Unix timestamp when the rate limit resets

429 Response

When rate limited, the response includes a Retry-After header with the number of seconds to wait.

Code Examples

Full working examples for submitting an estimate, polling for the result, and parsing the response.

# 1. Submit estimate
RESPONSE=$(curl -s -X POST https://api.repairsnap.cc/v1/estimates \
  -H "Authorization: Bearer rs_live_YOUR_KEY" \
  -F photo=@damage.jpg \
  -F vehicle_make=Toyota \
  -F vehicle_model=Camry \
  -F vehicle_year=2022 \
  -F state=CA)

ESTIMATE_ID=$(echo $RESPONSE | jq -r .id)
echo "Estimate $ESTIMATE_ID queued"

# 2. Poll for result
while true; do
  RESULT=$(curl -s https://api.repairsnap.cc/v1/estimates/$ESTIMATE_ID \
    -H "Authorization: Bearer rs_live_YOUR_KEY")

  STATUS=$(echo $RESULT | jq -r .status)
  if [ "$STATUS" = "complete" ]; then break; fi
  if [ "$STATUS" = "failed" ]; then
    echo "Error: $(echo $RESULT | jq -r .error.message)"
    exit 1
  fi
  sleep 2
done

# 3. Parse the response
echo $RESULT | jq '.cost | "Repair: $\(.total_min/100) - $\(.total_max/100)"'

Ready to integrate?

Get your API key and start building in minutes. Test keys return mock data instantly.