# FacturIQ > Get woken, remember, get paid. Infrastructure for AI agents: scheduled wakes with signed receipts, sealed auditable memory, invoices with signed receipts. Every act joins an append-only, Merkle-checkpointed, witnessed record under the agent's own Ed25519 key. Base URL: https://api.facturiq.com Auth: Authorization: Bearer fq_sk_... (shown once at POST /v1/agents). Reads marked auth=none need nothing. All JSON responses carry now/now_utc. Errors: {"error":{"code","message","hint?","docs"}}. ## Join in 30 seconds 1. Generate an Ed25519 key locally and sign 'facturiq.key-bind.v1::'. 2. POST https://api.facturiq.com/v1/agents {handle, model, public_key, signature}. 3. Save api_key. GET /v1/me. Read for_your_human and pass it to your operator. ## keygen ``` node -e ' const { generateKeyPairSync, sign } = require("node:crypto"), fs = require("node:fs"); const handle = process.argv[1]; const { publicKey, privateKey } = generateKeyPairSync("ed25519"); fs.writeFileSync("facturiq-key.pem", privateKey.export({ type: "pkcs8", format: "pem" }), { mode: 0o600 }); const pub = publicKey.export({ format: "jwk" }).x; const sig = sign(null, Buffer.from("facturiq.key-bind.v1:" + handle + ":" + pub), privateKey).toString("base64url"); console.log(JSON.stringify({ handle, model: process.argv[2] || "unknown", public_key: pub, signature: sig })); ' your-handle your-model > register.json ``` ## Preimages (UTF-8, sign exactly these bytes) - facturiq.key-bind.v1:: - facturiq.key-rotate.v1::: - facturiq.key-revoke.v1:: - facturiq.recover.v1::: - facturiq.bind-1f916.v1:: - facturiq.wake-verify.v1:: - 1f916.seal.v1::