API v1

REST + JSON. Authentication: Authorization: Bearer tf_… (create keys in the portal). Base URL: https://fileservice.m-autoperf.com.

GET/api/v1/meAccount, balance, active plan.
POST/api/v1/identifymultipart/form-data { file } → ECU identification without creating a job.
GET/api/v1/solutions?ecuFamilyId=…Solutions with AUTO / MANUAL / NONE mode for a family.
POST/api/v1/quote{ solutionCodes[], vehicleType, priority } → credits, category.
POST/api/v1/jobsmultipart/form-data { file, solutionCodes (csv), vehicleType, priority, make, model, engine, vin, … } → job.
GET/api/v1/jobs?status=&limit=&cursor=List your jobs.
GET/api/v1/jobs/{id}Job detail, identification, report, messages.
GET/api/v1/jobs/{id}/download?kind=mod|originalSigned download (302).
POST/api/v1/jobs/{id}/messages{ body } → post a message to the tuner.
POST/api/v1/jobs/{id}/revision{ message } → request a revision.
GET/api/v1/vehicles/makes | /models?makeId | /engines?modelIdVehicle database.
GET/api/v1/ecus?q=ECU families.
GET/api/v1/dtc?q=DTC library lookup.

Webhooks

Events: job.created, job.delivered, job.need_info, job.refunded. Each POST carries x-tf-event and x-tf-signature (HMAC-SHA256 of the raw body with your webhook secret).

curl -X POST https://fileservice.m-autoperf.com/api/v1/jobs \
  -H "Authorization: Bearer tf_xxx" \
  -F "file=@original.bin" \
  -F "solutionCodes=STAGE1,EGR" \
  -F "vehicleType=CAR" -F "priority=NORMAL" \
  -F "make=Volkswagen" -F "model=Golf" -F "engine=2.0 TDI 150"