Compliance-grade passports with public verification and simple APIs.
Built by engineers for a greener, compliant Europe
Upload BOM & footprint → get a regulation-ready passport. We track schema updates so you don’t have to.
15-min automated flow vs 6 h manual Excel + PDF stitching.
Chain anchor + public verification API = instant trust with customers & regulators.
CSV, REST API, or UI forms.
Generate JSON-LD, QR, blockchain anchor.
QR on product + live SoH/usage updates.
Request access and we’ll create a brand-scoped token for you.
Create models, then mint units (each with a public QR and verify URL).
Bulk upload production runs. See Onboard for a template.
export BASE="https://opendpphub.com"
export TOKEN="<YOUR_BRAND_TOKEN>" # Authorization: Token $TOKEN
# Optional model/unit names
export BRAND_SLUG="yourbrand"
export MODEL_NAME="Li-Ion 4Ah"
export MODEL_NO="BC-4000"
export UNIT_UID="BC-UNIT-$(date +%s)"
MODEL_ID=$(curl -sS -X POST "$BASE/api/models/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary "$(jq -n --arg brand "$BRAND_SLUG" --arg mn "$MODEL_NAME" --arg mno "$MODEL_NO" \
'{brand_slug:$brand,model_name:$mn,model_number:$mno,chemistry_family:"NMC",rated_capacity_ah:"4.000",nominal_voltage_v:"3.700",rated_energy_kwh:"0.0148"}')" \
| jq -r .id); echo "$MODEL_ID"
curl -sS -X POST "$BASE/api/units/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary "$(jq -n --arg uid "$UNIT_UID" --arg model "$MODEL_ID" \
'{uid:$uid,model:$model,serial_number:"SN-001",batch_number:"BATCH-001",date_of_manufacture:"2025-08-01",place_of_manufacture:"Berlin, DE"}')" \
| jq .
# Flat endpoint with unit_uid
curl -sS -X POST "$BASE/api/telemetry/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary "$(jq -n --arg uid "$UNIT_UID" --arg soh "98.5" --argjson cc 10 \
'{unit_uid:$uid,state_of_health_pct:$soh,cycle_count:$cc}')" | jq .
# or nested endpoint
curl -sS -X POST "$BASE/api/units/$UNIT_UID/telemetry/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary '{"state_of_health_pct":"98.5","cycle_count":10}' | jq .
# Flat
curl -sS -X POST "$BASE/api/status-changes/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary "$(jq -n --arg uid "$UNIT_UID" --arg from original --arg to reused --arg reason 'Sold for reuse' \
'{unit_uid:$uid,from_status:$from,to_status:$to,reason:$reason}')" | jq .
# Nested
curl -sS -X POST "$BASE/api/units/$UNIT_UID/status-change/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary '{"from_status":"original","to_status":"reused","reason":"Sold for reuse"}' | jq .
curl -sS -X POST "$BASE/api/units/$UNIT_UID/anchor/" \
-H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \
--data-binary '{"anchor_tx":"0x2222...2222","anchored":true}' | jq .
curl -sS "$BASE/api/verify/$UNIT_UID/" | jq .
# or open: https://opendpphub.com/verify/$UNIT_UID/
curl -sS -X POST "$BASE/api/units/$UNIT_UID/revoke/" \
-H "Authorization: Token $TOKEN" | jq .
curl -sS -X POST "$BASE/api/units/bulk_upload/" \
-H "Authorization: Token $TOKEN" \
-F "file=@units.csv" | jq .
Choose CSV or the Onboard UI. CSV is best for larger batches; the UI walks you through small runs step-by-step (models → units → print labels).
Create a brand token and at least one model. Note your model UUID.
Use the CSV template or export from your MES/ERP. Keep required columns.
Upload via the Onboard UI to review and mint, or use the API below.
Anyone can scan the QR or open the verify URL to see a redacted, read-only passport and revocation state. No login required.
/media/
or S3Email us at info@mintdpp.com — we’ll help you get set up fast.