API Reference v1.0.0 SANDBOX
Support Main Site

AutoSync API

Welcome to the AutoSync REST API. Build integrations, sync data, automate workflows — everything from work orders to payments.

Base URLs
Sandbox: https://sandbox.api.autosyncshopmanager.com/v1
Live: https://api.autosyncshopmanager.com/v1

The API is RESTful. All requests and responses use JSON. Every list endpoint supports pagination, sorting, and filtering.

Quick Start

Quick Start
curl -X GET "https://sandbox.api.autosyncshopmanager.com/v1/shops" \
  -H "Authorization: Bearer sk_sandbox_abc123..." \
  -H "Content-Type: application/json"
const res = await fetch('https://sandbox.api.autosyncshopmanager.com/v1/shops', {
  headers: { 'Authorization': 'Bearer sk_sandbox_abc123...' }
});
const data = await res.json();
$ch = curl_init('https://sandbox.api.autosyncshopmanager.com/v1/shops');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_sandbox_abc123...'],
    CURLOPT_RETURNTRANSFER => true
]);
$data = json_decode(curl_exec($ch), true);
import requests
r = requests.get('https://sandbox.api.autosyncshopmanager.com/v1/shops',
    headers={'Authorization': 'Bearer sk_sandbox_abc123...'})
data = r.json()

Environments

AutoSync provides two fully independent environments. Use sandbox for development and testing, live for production.

SandboxLive
Base URLsandbox.api.autosyncshopmanager.com/v1api.autosyncshopmanager.com/v1
Key Prefixsk_sandbox_sk_live_
DataTest data — safe to experimentReal production data
Rate Limit300 req/min100 req/min
PaymentsStripe test mode (no real charges)Real charges processed
WebhooksTest events firedReal events fired
Sandbox keys cannot access live data and vice versa. Mixing keys and environments will return 401 Unauthorized.

Authentication

Include your API key in the Authorization header:

Header
Authorization: Bearer sk_sandbox_a1b2c3d4e5f6...

API Key Types

Key TypePrefixUse Case
Sandboxsk_sandbox_Development & testing
Livesk_live_Production integrations

Generate keys in your AutoSync Admin → Settings → API Keys. You can create multiple keys per store and revoke them independently.

Never expose API keys in client-side code. Use server-to-server calls only. Rotate keys immediately if compromised.

OAuth 2.0 — Client Credentials

For platform-level integrations that act on behalf of multiple shops, use the OAuth 2.0 client credentials flow.

1. Request Token

Token Request
curl -X POST "https://sandbox.api.autosyncshopmanager.com/v1/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -u "CLIENT_ID:CLIENT_SECRET" \
  -d "grant_type=client_credentials&scope=shops:read workorders:write"
const res = await fetch('https://sandbox.api.autosyncshopmanager.com/v1/oauth/token', {
  method: 'POST',
  headers: {
    'Authorization': 'Basic ' + btoa(CLIENT_ID + ':' + CLIENT_SECRET),
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  body: 'grant_type=client_credentials&scope=shops:read workorders:write'
});

2. Token Response

200 OK
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "shops:read workorders:write"
}

Available Scopes

ScopeDescription
shops:readView shop details
customers:readView customers
customers:writeCreate/update customers
vehicles:readView vehicles
vehicles:writeCreate/update vehicles
workorders:readView work orders + jobs
workorders:writeCreate/update work orders
payments:readView payments
payments:chargeProcess charges + refunds
inventory:readView inventory
inventory:writeUpdate stock
employees:readView employees
webhooks:manageCreate/delete webhooks

Errors

Error Response
{
  "success": false,
  "error": {
    "code": "validation_error",
    "message": "The 'email' field must be a valid email address.",
    "field": "email",
    "status": 422
  },
  "request_id": "req_7f3a8b2c..."
}
CodeMeaning
200OK
201Created
204No content (successful delete)
400Bad request
401Unauthorized — missing/invalid key
403Forbidden — insufficient scope
404Not found
409Conflict — duplicate resource
422Validation failed
429Rate limited
500Server error

Rate Limits

EnvironmentLimitWindow
Sandbox300 requestsPer minute
Live100 requestsPer minute
Rate Limit Headers
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1710432060
Retry-After: 12  // only present when rate limited


API Explorer

Test API endpoints directly from this page. Requests go to your selected environment.

Send a Request

KeyENV
MethodPath

GET List Shops

Returns all shops accessible with the current API key.

GET/v1/shops
200 OK
{
  "data": [{
    "id": 1, "name": "Johnson's Auto Care",
    "slug": "johnsons-auto-care", "status": "active",
    "phone": "(555) 123-4567", "email": "info@johnsonsauto.com",
    "address": { "street": "123 Main St", "city": "North Canton", "state": "OH", "zip": "44720" },
    "settings": { "tax_rate": 7.25, "labor_rate": 125.00 },
    "created_at": "2024-01-15T10:30:00Z"
  }]
}

GET Get Shop

GET/v1/shops/{shop_id}

GET List Customers

GET/v1/shops/{shop_id}/customers
ParamTypeDescription
searchstringoptionalSearch name, email, phone
is_businessbooleanoptionalFilter business accounts
created_afterdatetimeoptionalISO 8601
updated_afterdatetimeoptionalISO 8601 — delta sync

GET Get Customer

GET/v1/shops/{shop_id}/customers/{id}

POST Create Customer

POST/v1/shops/{shop_id}/customers
FieldTypeDescription
first_namestringrequiredFirst name
last_namestringrequiredLast name
emailstringoptionalEmail
phonestringoptionalPhone
is_businessbooleanoptionalBusiness flag
addressobjectoptional{street, city, state, zip}
notesstringoptionalInternal notes
Request
curl -X POST "https://sandbox.api.autosyncshopmanager.com/v1/shops/1/customers" \
  -H "Authorization: Bearer sk_sandbox_..." \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Mike","last_name":"Rodriguez","email":"mike@example.com","phone":"(555) 123-4567"}'
const res = await fetch('.../v1/shops/1/customers', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer sk_sandbox_...', 'Content-Type': 'application/json' },
  body: JSON.stringify({ first_name: 'Mike', last_name: 'Rodriguez' })
});

PUT Update Customer

PUT/v1/shops/{shop_id}/customers/{id}

Same body as Create. Only include fields to update.

DEL Delete Customer

DELETE/v1/shops/{shop_id}/customers/{id}

Returns 204 No Content on success. Deletion is permanent.


GET List Vehicles

GET/v1/shops/{shop_id}/vehicles
ParamTypeDescription
customer_idintegeroptionalFilter by owner
vinstringoptionalSearch by VIN
makestringoptionalFilter by make

GET Get Vehicle

GET/v1/shops/{shop_id}/vehicles/{id}

POST Create Vehicle

POST/v1/shops/{shop_id}/vehicles
FieldType
customer_idintegerrequiredOwner
yearintegerrequired
makestringrequired
modelstringrequired
vinstringoptional17 characters
mileageintegeroptional

GET VIN Decode

GET/v1/vin/{vin}/decode

Decodes a VIN using NHTSA data. Returns year, make, model, engine, trim, drive type.

200 OK
{
  "vin": "1HGCM82633A123456",
  "year": 2003, "make": "Honda", "model": "Accord",
  "trim": "EX", "engine": "2.4L 4-Cyl",
  "drive_type": "FWD", "body_style": "Sedan"
}

GET List Work Orders

GET/v1/shops/{shop_id}/workorders
ParamType
statusstringoptdraft in_progress waiting_parts completed invoiced
customer_idintegeroptFilter
vehicle_idintegeroptFilter
technician_idintegeroptFilter
created_afterdatetimeoptDelta sync
updated_afterdatetimeoptDelta sync

GET Get Work Order

GET/v1/shops/{shop_id}/workorders/{id}

Returns the full work order with embedded jobs, line items, and payment history.

POST Create Work Order

POST/v1/shops/{shop_id}/workorders
FieldType
customer_idintegerrequired
vehicle_idintegerrequired
technician_idintegeroptional
notesstringoptional
jobsarrayoptionalArray of job objects to create inline

PUT Update Work Order

PUT/v1/shops/{shop_id}/workorders/{id}

PATCH Update Status

PATCH/v1/shops/{shop_id}/workorders/{id}/status
Request
{ "status": "completed" }

GET List Jobs

GET/v1/shops/{shop_id}/workorders/{wo_id}/jobs

POST Create Job

POST/v1/shops/{shop_id}/workorders/{wo_id}/jobs
FieldType
namestringrequiredJob name
line_itemsarrayoptionalParts + labor items

DEL Delete Job

DELETE/v1/shops/{shop_id}/workorders/{wo_id}/jobs/{id}

GET List Appointments

GET/v1/shops/{shop_id}/appointments

POST Create Appointment

POST/v1/shops/{shop_id}/appointments

PUT Update Appointment

PUT/v1/shops/{shop_id}/appointments/{id}

DEL Delete Appointment

DELETE/v1/shops/{shop_id}/appointments/{id}

GET List Payments

GET/v1/shops/{shop_id}/payments

GET Get Payment

GET/v1/shops/{shop_id}/payments/{id}

POST Charge Payment

POST/v1/shops/{shop_id}/payments/charge
FieldType
work_order_idintegerrequired
amountfloatrequiredAmount in dollars
methodstringrequiredcard cash check text_to_pay
Sandbox: Card charges use Stripe test mode. No real money is processed. Use 4242424242424242 for testing.

POST Refund Payment

POST/v1/shops/{shop_id}/payments/{id}/refund

GET List Parts

GET/v1/shops/{shop_id}/inventory

GET Get Part

GET/v1/shops/{shop_id}/inventory/{id}

PATCH Update Stock

PATCH/v1/shops/{shop_id}/inventory/{id}

GET List Employees

GET/v1/shops/{shop_id}/employees

GET Get Employee

GET/v1/shops/{shop_id}/employees/{id}

GET List Inspections

GET/v1/shops/{shop_id}/inspections

GET Get Inspection

GET/v1/shops/{shop_id}/inspections/{id}

Returns full DVI with condition items (green/yellow/red), photos, notes, and customer approval status.

POST Create Inspection

POST/v1/shops/{shop_id}/inspections

Webhook Events

AutoSync fires webhooks in real-time when events occur. Configure endpoints in Admin → Settings → Webhooks.

EventFired When
workorder.createdNew WO created
workorder.updatedWO modified
workorder.completedStatus → completed
workorder.invoicedInvoice generated
payment.receivedPayment processed
payment.refundedRefund issued
customer.createdNew customer
customer.updatedCustomer modified
appointment.createdNew appointment
inspection.completedDVI sent to customer
inspection.approvedCustomer approved repairs
inventory.low_stockPart below reorder point

Manage Webhooks

POST/v1/shops/{shop_id}/webhooks
Create Webhook
{
  "url": "https://yourapp.com/webhooks/autosync",
  "events": ["workorder.completed", "payment.received"],
  "secret": "whsec_your_secret_key"
}
DELETE/v1/shops/{shop_id}/webhooks/{id}

Verify Signatures

Every webhook includes an X-AutoSync-Signature header. Verify it using HMAC-SHA256.

Verification
const crypto = require('crypto');
const sig = req.headers['x-autosync-signature'];
const expected = crypto.createHmac('sha256', WEBHOOK_SECRET)
  .update(req.rawBody).digest('hex');
if (sig !== expected) throw new Error('Invalid signature');
$sig = $_SERVER['HTTP_X_AUTOSYNC_SIGNATURE'];
$expected = hash_hmac('sha256', file_get_contents('php://input'), WEBHOOK_SECRET);
if (!hash_equals($expected, $sig)) abort(403);
import hmac, hashlib
sig = request.headers.get('X-AutoSync-Signature')
expected = hmac.new(WEBHOOK_SECRET.encode(), request.data, hashlib.sha256).hexdigest()
assert hmac.compare_digest(sig, expected)

Changelog

March 2026
v1.0.0 — General Availability
NEW
  • Full REST API with 40+ endpoints
  • Sandbox + Live environments
  • OAuth 2.0 client credentials flow
  • Webhook system with 12 event types
  • VIN decode endpoint via NHTSA
  • API Explorer for live testing
  • Rate limiting with headers
February 2026
v0.9.0 — Beta
NEWFIX
  • Sandbox environment launched
  • Payment charge/refund endpoints
  • Digital inspection endpoints
  • Fixed pagination off-by-one on last page

SDKs & Libraries

Official and community client libraries.

LanguagePackageInstall
PHPautosync/api-clientcomposer require autosync/api-client
Node.js@autosync/apinpm install @autosync/api
Pythonautosync-apipip install autosync-api
PostmanDownload Collection →

Status & Uptime

99.9%
Uptime (30d)
45ms
Avg Response
Operational
Current Status