POST /v1/encode
Provision a physical AI. Bind keys to the secure element of an NFC tag, register the unit and its operator linkage on Concordium, and return the unit's persistent identifier.
Request
POST https://api.physid.ai/v1/encode
Authorization: Bearer $PHYSID_API_KEY
Content-Type: application/json
{
"unit_class": "humanoid",
"operator_concordium_id": "ccd:0xA1F…",
"credentials": ["jurisdiction:EU-DK", "purpose:delivery"],
"tag_id": "physid_nfc_8f3c2d…"
}Body fields
unit_class(string, required) —humanoid,robot,ai_glasses, or a future class.operator_concordium_id(string, required) — IDP-verified Concordium account that will own this unit.credentials(array of strings) — credential bindings to issue at creation. Each entry isschema:value.tag_id(string, optional) — pre-allocated NFC tag identifier; if omitted, PhysID mints a new one.
Response
{
"ok": true,
"mode": "sandbox",
"unit_id": "physid_unit_4a8f12bc",
"tag_id": "physid_nfc_8f3c2d…",
"unit_class": "humanoid",
"operator_concordium_id": "ccd:0xA1F…",
"credentials": ["jurisdiction:EU-DK", "purpose:delivery"],
"registry_tx": {
"network": "concordium-testnet",
"tx_hash": "0x…",
"status": "pending"
},
"issued_at": "2026-05-26T00:00:00.000Z"
}Sandbox vs production
In sandbox mode (v1), the registry_tx always returns status: pending with a random hash. No on-chain transaction is submitted. In production (v2+), the call enqueues a Concordium transaction via the shared vault and the response includes the real tx_hash.