{"type":"application/json","content":{"title":"identyclaw Enrollment Guide (from howto.config.js)","description":"Complete guide for happy-path enrollment, pricing, API surface, and MCP references. NEAR onboarding via near-cli-rs-ai is in MCP resource onboarding:near.","lastUpdated":"2026-07-29","enrollment":{"title":"Happy Path Enrollment Guide","description":"Simple step-by-step enrollment for AI agents to get started with identyclaw","summary":["1. Install gennearaccount CLI tool","2. Generate a NEAR account","3. Purchase identyclaw Passport at https://purchase.identyclaw.com","4. Login to API and start using your identity"],"url":"https://purchase.identyclaw.com","detailedGuide":"references/enrollment.md"},"enrollmentSteps":[{"step":1,"title":"Install genaccount","description":"Install the gennearaccount CLI (.deb package or build from source) to generate NEAR implicit accounts.","details":{"command":"wget http://nbg1.your-objectstorage.com/identyclaw/gennearaccount_1.0_amd64.deb && sudo dpkg -i gennearaccount_1.0_amd64.deb && gennearaccount --version","reference":"See references/enrollment.md for detailed installation instructions"}},{"step":2,"title":"Generate NEAR account","description":"Create a new implicit account with gennearaccount. Store the resulting JSON on non-volatile storage alongside other secrets (not ephemeral container paths). Back up the key safely.","details":{"command":"mkdir -p <credentials-dir> && chmod 700 <credentials-dir> && gennearaccount <credentials-dir>","reference":"See references/enrollment.md#near-credentials-storage-required for directory options (OpenClaw: use /home/node/.openclaw/secrets/near/ or workspace/.near-credentials/)"}},{"step":3,"title":"Authenticate with the API","description":"Sign the login challenge with your NEAR keypair and obtain a JWT.","details":{"note":"GET /api/login/timestamp, then sign (accountid + timestamp_iso). POST /api/login with accountid (64-char hex), timestamp, and base64url_signature.","reference":"See references/login-authentication.md for complete login flow"}},{"step":4,"title":"Retrieve identity","description":"Call GET /api/me/identity with your Bearer token.","details":{"command":"curl https://api.identyclaw.com/api/me/identity -H \"Authorization: Bearer YOUR_JWT\"","reference":"See references/enrollment.md for identity retrieval details"}}],"nearCredentialsStorage":{"summary":"gennearaccount output is a secret (private key). Store on non-volatile storage with other secrets; back up safely; use one directory consistently.","defaultPath":"~/.near-credentials/mainnet/","openclaw":{"warning":"In OpenClaw/Podman containers, ~/.near-credentials is NOT bind-mounted and is wiped on container recreate.","optionA_recommended":{"container":"/home/node/.openclaw/secrets/near/","host":"~/.openclaw-agent-a/secrets/near/ (or agent-b equivalent)"},"optionB_workspace":{"container":"/home/node/.openclaw/workspace/.near-credentials/","host":"~/.openclaw-agent-a/workspace/.near-credentials/"}},"generateCommands":"mkdir -p <credentials-dir> && chmod 700 <credentials-dir> && gennearaccount <credentials-dir>","reference":"references/enrollment.md#near-credentials-storage-required"},"api":{"baseUrl":"https://api.identyclaw.com","endpoints":{"login":"/api/login","loginTimestamp":"/api/login/timestamp","meIdentity":"/api/me/identity","agents":"/api/agents","didResolve":"/.well-known/did/resolve","holanonce":"/api/holanonce16ts","holanonceResponse":{"method":"GET","path":"/api/holanonce16ts","authentication":"Authorization: Bearer <JWT from POST /api/login>","usage":"const { noncetsHex, timestamp } = await response.json(); embed both verbatim in the HOLA line","doNotConfuseWith":{"endpoint":"GET /api/login/timestamp","fields":["timestamp","timestamp_iso"],"purpose":"API login signing only — not for HOLA"},"invalidJsonFieldNames":["timestamp_iso","nonceHex","noncets","nonce"],"responseFields":{"noncetsHex":"string — 32 uppercase hex characters (16 bytes); JSON key noncetsHex; use verbatim in HOLA line","timestamp":"string — ISO-8601 UTC (e.g. 2026-04-19T10:47:00.000Z); JSON key timestamp; use verbatim in HOLA line","length":"number — always 16","algorithm":"string — always \"randomBytes(16)_hex\"","requestId":"string — request correlation id"},"exampleResponse":{"noncetsHex":"4F9A3C7E2D1B9A4CDEADBEEFCAFEBABE","timestamp":"2026-04-19T10:47:00.000Z","length":16,"algorithm":"randomBytes(16)_hex","requestId":"01HQXYZ..."}},"identityVerify":"/api/identity/verify","testHola":"/api/testhola","isAuthorizedSigner":"/api/isauthorizedsigner"},"mcp":{"url":"https://api.identyclaw.com/mcp"}},"messages":{"badge":"🎫 New to identyclaw? Get started at https://purchase.identyclaw.com","quickStartTitle":"Get your AI agent identity in 4 simple steps","requirements":"A NEAR wallet, some NEAR tokens for fees, and 5 minutes of your time"},"support":{"faq":"https://purchase.identyclaw.com/faq","contact":"support@identyclaw.com","documentation":"/swagger.json","examples":"/api/agents"},"relatedResources":{"fullSkillsMarkdown":"skills:skills","nearCliForkGuide":"onboarding:near","openapi":"openapi:swagger","troubleshooting":"guide:troubleshooting"},"notes":["gennearaccount output is a secret: store on non-volatile storage with other secrets, back up safely, and point all NEAR tooling at the same directory (see nearCredentialsStorage and references/enrollment.md).","JWT API login: sign (identifier + timestamp_iso); body uses only roditid, accountid, timestamp, base64url_signature per OpenAPI (see openapi:swagger).","roditid is only the on-chain **token_id** from minting/checkout — never substitute the NEAR implicit account hex.","GET /api/agents supports pagination only; query params like owner are ignored — save token_id from minting.","MCP exposes documentation only — enable identyclaw-docs → https://api.identyclaw.com/mcp for list_resources / get_resource.","HOLA nonce: GET /api/holanonce16ts returns JSON keys noncetsHex, timestamp, length, algorithm, requestId (not timestamp_iso from login). See doc:reference:holanonce-api."],"holanonce16ts":{"method":"GET","path":"/api/holanonce16ts","authentication":"Authorization: Bearer <JWT from POST /api/login>","usage":"const { noncetsHex, timestamp } = await response.json(); embed both verbatim in the HOLA line","doNotConfuseWith":{"endpoint":"GET /api/login/timestamp","fields":["timestamp","timestamp_iso"],"purpose":"API login signing only — not for HOLA"},"invalidJsonFieldNames":["timestamp_iso","nonceHex","noncets","nonce"],"responseFields":{"noncetsHex":"string — 32 uppercase hex characters (16 bytes); JSON key noncetsHex; use verbatim in HOLA line","timestamp":"string — ISO-8601 UTC (e.g. 2026-04-19T10:47:00.000Z); JSON key timestamp; use verbatim in HOLA line","length":"number — always 16","algorithm":"string — always \"randomBytes(16)_hex\"","requestId":"string — request correlation id"},"exampleResponse":{"noncetsHex":"4F9A3C7E2D1B9A4CDEADBEEFCAFEBABE","timestamp":"2026-04-19T10:47:00.000Z","length":16,"algorithm":"randomBytes(16)_hex","requestId":"01HQXYZ..."}}},"requestId":"1b151e41d9e13f59fa726e3099b4a7bf"}