ANIMA Identity Docs

Wallet-bound identity APIs

Using the other product? See ANIMA Verify docs.

OpenAPI: /openapi.yaml

SDK include (canonical path)

Identity SDK path:

<script src="https://animaid.to/sdk/identity/v3/anima-identity.js"
        integrity="sha384-/I2OIez4AhoSlu+zKw7gFXlQzaez6ZaP4Yi/tevVOHG185goJNXJ2St4+vFcYRPx"
        crossorigin="anonymous"></script>

Verify SDK lives at https://animaid.to/sdk/verify/v3/anima-verify.js.

Auth options

  • Bearer token for end-user account routes.
  • X-Api-Key + X-Api-Secret for platform server-to-server routes.
  • X-ANIMA-Signature for ANIMA webhook verification.

Rate-limit headers

Always backoff and retry with jitter for 429 responses.

Core endpoints

EndpointPurpose
POST /api/embed/sessionCreate Identity embed session.
POST /api/embed/completeFinalize session and mint result token.
GET /api/embed/result/:tokenExchange one-time result token.
POST /api/v1/wallet/bindBind wallet to ANIMA DID.
POST /api/v1/accreditation/submitSubmit accreditation tier.
POST /api/v1/compliance/checkEvaluate offering/buyer compliance.
GET /api/v1/attestation/onchain/:walletRead attestation status.

Node example: create embed session

const response = await fetch('https://animaid.to/api/embed/session', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Api-Key': process.env.ANIMA_SITE_KEY,
    'X-Api-Secret': process.env.ANIMA_SECRET_KEY
  },
  body: JSON.stringify({
    required_level: 'accredited',
    steps: ['wallet', 'accreditation'],
    chain: 'ethereum'
  })
});

Python example: compliance check

import requests

r = requests.post(
    "https://animaid.to/api/v1/compliance/check",
    headers={"Authorization": f"Bearer {token}"},
    json={
        "anima_did": "did:anima:ethereum:0x123...",
        "asset_class": "equity",
        "offering_jurisdiction": "US",
        "buyer_jurisdiction": "DE"
    },
    timeout=10
)

PHP example: create embed session

$payload = json_encode([
  "required_level" => "accredited",
  "steps" => ["wallet", "accreditation"],
  "chain" => "ethereum"
]);

$ch = curl_init("https://animaid.to/api/embed/session");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  "Content-Type: application/json",
  "X-Api-Key: " . getenv("ANIMA_SITE_KEY"),
  "X-Api-Secret: " . getenv("ANIMA_SECRET_KEY")
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);

OpenAPI

Machine-readable API contract: /openapi.yaml

Auth flow diagrams (Mermaid)

sequenceDiagram
  participant Client
  participant Platform
  participant ANIMA
  Client->>Platform: start identity flow
  Platform->>ANIMA: POST /api/embed/session (X-Api-Key + X-Api-Secret)
  ANIMA-->>Platform: session_id + verify_url
  Client->>ANIMA: complete wallet + accreditation
  ANIMA-->>Platform: webhook (X-ANIMA-Signature)
  Platform->>ANIMA: GET /api/embed/result/:token
  ANIMA-->>Platform: signed result payload