§ — Developer API

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.

EventDescription
order.createdA new order was created — counter, PrestaShop, NopCommerce, or PartVisor.
stock.updatedPart stock changed — bin-in, sale, refund, reservation, or manual adjustment.
vehicle.intakeA new vehicle entered the platform at the acquire stage.
vehicle.depollutedDepollution completed for a specific VIN; the depollution certificate is available.
part.shelvedA part was binned and scan-confirmed against a shelf code.
part.soldA part was sold and the stock event fired across every connected channel.
payment.receivedA 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" \
  -G

Node

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)

Questions about the API.

Related reading

§ — Build against Sustain360

Need the spec?
We share it with your tenant.

A short walk-through of the configurable workflow, the aggregator–yard tenant model, and the integrations relevant to your stack.