REST + webhooks, the platform on contract.
The Sustain360 API is the platform on contract. A versioned REST surface exposes vehicles, parts, orders, payments, and the audit trail; outbound webhooks deliver every state change as it happens. Authentication is per-tenant via API key or OAuth 2.0 client credentials, and every webhook payload is HMAC-signed.
OpenAPI / Swagger
The full machine-readable spec is hosted at /api/docs (coming soon). Enterprise customers can request the current spec against their tenant directly.
Webhook events on the wire.
Seven event families fire today. Every payload includes the tenant, the event id, the occurrence time, and a typed data block.
| Event | Description |
|---|---|
| order.created | A new order was created — counter, PrestaShop, NopCommerce, or PartVisor. |
| stock.updated | Part stock changed — bin-in, sale, refund, reservation, or manual adjustment. |
| vehicle.intake | A new vehicle entered the platform at the acquire stage. |
| vehicle.depolluted | Depollution completed for a specific VIN; the depollution certificate is available. |
| part.shelved | A part was binned and scan-confirmed against a shelf code. |
| part.sold | A part was sold and the stock event fired across every connected channel. |
| payment.received | A payment was captured against an order — PayPal capture, bank transfer, or counter. |
Sample payload · order.created
{
"event": "order.created",
"id": "evt_01HZP2W4...",
"occurred_at": "2026-05-12T09:31:02Z",
"tenant_id": "tnt_dismanto_yard_42",
"data": {
"order_id": "ord_8a3c1b...",
"channel": "prestashop",
"buyer": { "id": "buy_29...", "email": "buyer@example.com" },
"currency": "EUR",
"amount_total": 184.50,
"items": [
{ "part_id": "prt_001...", "vin": "WVWZZZ1KZ8W...", "grade": "B", "price": 184.50 }
]
}
}Sample payload · stock.updated
{
"event": "stock.updated",
"id": "evt_01HZP2W5...",
"occurred_at": "2026-05-12T09:31:03Z",
"tenant_id": "tnt_dismanto_yard_42",
"data": {
"part_id": "prt_001...",
"vin": "WVWZZZ1KZ8W...",
"previous_state": "shelved",
"new_state": "sold",
"shelf": null,
"operator_id": "usr_42..."
}
}List parts, three ways.
Pull a page of parts for a specific VIN, scoped to current shelf state. The same shape returns from GET /v1/parts regardless of language.
curl
curl https://api.dismanto.com/v1/parts \
-H "Authorization: Bearer $DISMANTO_API_KEY" \
-H "Accept: application/json" \
--data-urlencode "vin=WVWZZZ1KZ8W..." \
--data-urlencode "state=shelved" \
--data-urlencode "limit=50" \
-GNode
import { Sustain360 } from "@dismanto/sdk";
const client = new Sustain360({ apiKey: process.env.DISMANTO_API_KEY });
const { data } = await client.parts.list({
vin: "WVWZZZ1KZ8W...",
state: "shelved",
limit: 50,
});
console.log(data.length, "parts shelved against this VIN");Python
import os
import dismanto
client = dismanto.Client(api_key=os.environ["DISMANTO_API_KEY"])
resp = client.parts.list(
vin="WVWZZZ1KZ8W...",
state="shelved",
limit=50,
)
print(f"{len(resp.data)} parts shelved against this VIN")Create a vehicle, three ways.
POST a new vehicle at the acquire stage. The platform decodes the VIN, records the supplier, and returns the canonical vehicle record.
curl
curl https://api.dismanto.com/v1/vehicles \
-H "Authorization: Bearer $DISMANTO_API_KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"vin": "WVWZZZ1KZ8W...",
"source": "auction",
"supplier_id": "sup_29...",
"purchase_price": { "amount": 480.00, "currency": "EUR" }
}'Node
import { Sustain360 } from "@dismanto/sdk";
const client = new Sustain360({ apiKey: process.env.DISMANTO_API_KEY });
const vehicle = await client.vehicles.create({
vin: "WVWZZZ1KZ8W...",
source: "auction",
supplier_id: "sup_29...",
purchase_price: { amount: 480.0, currency: "EUR" },
});
console.log("Vehicle id:", vehicle.id);Python
import os
import dismanto
client = dismanto.Client(api_key=os.environ["DISMANTO_API_KEY"])
vehicle = client.vehicles.create(
vin="WVWZZZ1KZ8W...",
source="auction",
supplier_id="sup_29...",
purchase_price={"amount": 480.0, "currency": "EUR"},
)
print("Vehicle id:", vehicle.id)