Cloud Tuning API
Integrate our ECU processing engine directly into your platform. Your customer uploads an ECU file on your site; you send the file plus the solutions you want; we return the corrected file — checksum and RSA fixed automatically — with no manual handling of any web UI.
Base URL: https://www.davincideluxe.fr/api/v1/cloud
Authentication
Every request is authenticated with a secret API key sent as a Bearer token. Generate your key in your dashboard at /profile#api after activating an API plan. The raw key is shown once — store it securely; we only keep a hash.
Authorization: Bearer dvc_live_xxxxxxxxxxxxxxxxxxxxxxxx
401 / 403.Quick start
Submit a file with the solutions you want and a callback URL. You get a job_id back immediately, then a signed webhook when the corrected file is ready.
# 1. Submit a job (multipart) curl -X POST https://www.davincideluxe.fr/api/v1/cloud/jobs \ -H "Authorization: Bearer dvc_live_xxxxx" \ -F "file=@/path/to/original.bin" \ -F "ecu_brand=Bosch" \ -F "ecu_model=EDC17C64" \ -F "fuel_type=diesel" \ -F 'services=["DPF","EGR","ADBLUE","DTC"]' \ -F 'tuning_options=["Stage 1"]' \ -F "webhook_url=https://yourapp.com/hooks/davinci" # → { "ok": true, "job_id": 1234, "status": "uploaded", "webhook_will_fire": true }
Endpoints
Submit a job
/api/v1/cloud/jobsContent-Type: multipart/form-data. Send the binary in the file field.
| Field | Type | Required | Description |
|---|---|---|---|
file | file | required | The original (virgin) ECU dump. Max 50 MB. Do not upload a previously tuned output. |
ecu_brand | string | required | ECU manufacturer, e.g. Bosch, Continental, Delphi. |
ecu_family | string | family/model | ECU family, e.g. EDC17, MED17. |
ecu_model | string | family/model | Specific model, e.g. EDC17C64. |
fuel_type | string | optional | diesel or petrol. |
services | JSON array / CSV | services or tuning_options | Anti-pollution & correction solutions — see Solutions. |
tuning_options | JSON array / CSV | services or tuning_options | Performance tuning presets (Stage 1/2/3, Pops & Bangs, Hardcut, etc.). |
dtc_codes | string | optional | Specific DTC codes to remove, e.g. P2002,P0401. |
webhook_url | string (https) | recommended | Public HTTPS URL we POST to when the job finishes. Private / loopback / metadata addresses are rejected. |
metadata | string | optional | Up to 2 KB of your own reference data, echoed back in the webhook. |
// 200 OK { "ok": true, "job_id": 1234, "status": "uploaded", "webhook_will_fire": true }
Job status
/api/v1/cloud/jobs/{id}Poll for progress if you are not using webhooks. Status moves through uploaded → processing → done (or error).
{
"ok": true,
"job_id": 1234,
"status": "done",
"result_url": "https://www.davincideluxe.fr/api/v1/cloud/jobs/1234/result"
}
Download result
/api/v1/cloud/jobs/{id}/resultStreams the corrected binary (checksum + RSA already applied). Available once status = done.
List jobs
/api/v1/cloud/jobsReturns your recent jobs with status and timestamps.
Health
/api/v1/cloud/healthAuthenticated liveness check. Also returns your subscription status headers.
Solutions covered
Two families are available. Deletes / corrections go in the services array; performance tuning presets go in the tuning_options array. You can combine both in a single job.
Anti-pollution & corrections — services
- DPF / FAP
- EGR
- AdBlue / SCR
- DTC removal
- Lambda / O2
- Flaps / Swirl
- NOx
- Start & Stop
- Hot Start fix
- Readiness / OBD
Performance tuning — tuning_options
- Stage 1
- Stage 1+
- Stage 2
- Stage 3
- Eco Tune
- Pops & Bangs
- Pops & Bangs (switchable)
- Launch Control
- Hardcut / RPM limiter
- E85 conversion
tuning_options=["Stage 1","Pops & Bangs"] and services=["DPF","EGR","DTC"]. Availability of a given preset depends on the specific ECU; if a combination is not supported for a file, the job is rejected with a clear reason (and never silently charged).Supported ECUs & vehicles
ECU hardware
- Bosch EDC15 / EDC16 / EDC17
- Bosch MED9 / MED17 / ME17 / MEDC17
- Bosch MG1 / MD1
- Continental · Siemens SID (201–807 EVO)
- Continental SIMOS 8 / 12 / 18
- Continental PCR 2.1 / PPD 1.x
- BMW MSD80–90 / MSV / MEVD17
- Delphi DCM3.x / 6.x / 7.x
- Delphi CRD2 / CRD3 / DDCR
- Denso
- Magneti Marelli MJD / IAW / 8GMK
- Valeo VD46.x / VD56.x / J34 / V34
- Visteon DCU102
- ZF (transmission)
Vehicle brands
- Alfa Romeo
- Audi · VW · Seat · Skoda
- BMW · Mini
- Chery
- Chrysler · Dodge · Jeep
- Citroën · Peugeot · DS
- Dacia
- Deutz
- Ferrari
- Fiat · Lancia
- Ford
- Geely
- Great Wall
- Honda
- Hyundai · Kia
- Isuzu
- Iveco · CNH
- JAC
- Jaguar · Land Rover
- Kubota
- Mahindra
- MAN
- Maserati
- Maxus · LDV
- Mazda
- Mercedes-Benz · Smart
- Mitsubishi
- Nissan
- Opel · Chevrolet · Vauxhall
- Renault
- SsangYong
- Subaru
- Suzuki
- Toyota · Lexus
- Volvo
New ECUs are added continuously. If you do not see a specific ECU, submit it anyway — if we cannot process it, the job is rejected with a clear reason and no charge.
Webhooks (async callbacks)
If you set webhook_url, we POST a JSON event the moment the job reaches a terminal state — job.completed or job.failed. Delivery is retried automatically (60s, 5min, 30min, up to 4 attempts) on any non-2xx response.
POST https://yourapp.com/hooks/davinci X-DvC-Event: job.completed X-DvC-Signature: sha256=<hmac_hex> X-DvC-Delivery-Attempt: 1 { "event": "job.completed", "job_id": 1234, "status": "done", "ecu_brand": "Bosch", "ecu_model": "EDC17C64", "services_applied": ["DPF","EGR","Stage 1"], "result_url": "https://www.davincideluxe.fr/api/v1/cloud/jobs/1234/result", "completed_at": "2026-06-20T10:30:00.000Z", "metadata": "your-reference" }
Verifying the signature
Every webhook is signed with your per-key webhook secret (whsec_..., shown once when you create the key). Compute an HMAC-SHA256 of the raw request body with that secret and compare it to the X-DvC-Signature header.
// Node.js (Express) -- verify a DaVinci webhook const crypto = require('crypto'); app.post('/hooks/davinci', express.raw({ type: 'application/json' }), (req, res) => { const sig = req.headers['x-dvc-signature'] || ''; const expected = 'sha256=' + crypto .createHmac('sha256', process.env.DAVINCI_WEBHOOK_SECRET) .update(req.body) // raw Buffer, not parsed JSON .digest('hex'); if (sig !== expected) return res.sendStatus(400); const evt = JSON.parse(req.body.toString()); // evt.event === 'job.completed' -> download evt.result_url with your API key res.sendStatus(200); });
Rate limits & file size
| Limit | Value |
|---|---|
| Request burst | 60 requests / minute |
| Max file size | 50 MB |
| Daily volume | No hard cap on active plans — contact us to size high volume |
Your subscription state is returned on every authenticated call so your integration always knows access is live:
X-DvC-Subscription-Status: active X-DvC-Subscription-Period-End: 2026-07-20T00:00:00.000Z
Errors
| Status | Code | Meaning |
|---|---|---|
400 | missing_ecu_info / no_services_selected / invalid_webhook_url | Bad or incomplete request. |
401 | invalid_api_key / api_key_revoked | Missing, malformed, or revoked key. |
402 | no_active_api_subscription / subscription_payment_issue | No active API plan — renew to restore access. |
403 | account_suspended | Account suspended. |
429 | rate_limited | Burst limit exceeded — retry after a short delay. |
Pricing
API access is a dedicated plan, separate from the Workshop / desktop subscriptions.
API Unlimited — token auth, async webhooks, full solution set, no hard daily cap.
High-volume or white-label integration? Talk to us for tailored pricing.
Support
Integration help, sandbox keys, or volume pricing: [email protected] or message us on WhatsApp. We typically reply same-day.
All processing is performed on files you are authorized to modify.