madeofus
How It WorksProtectionPricingFAQLegalDevelopersSign In
Protect My Face

Developer API Reference

Integrate with the Consented Identity Registry to verify consent before using someone's likeness in AI training or generation.

Feed this entire API reference to your LLM

Copy or download the full docs as markdown — paste into ChatGPT, Claude, or any AI assistant for integration help.

API Reference

Authentication

All API requests must include an API key in the Authorization header using the Bearer scheme.

API Key Format
mou_live_{64 hex characters}

API keys are issued per-platform and scoped to specific permissions. Store them securely and never expose them in client-side code.

Authorization Header
Authorization: Bearer mou_live_a1b2c3d4e5f6...
Available Scopes
registry:readLook up identities and registry statistics
registry:consent:readCheck consent status for a given identity
webhooks:manageCreate, update, and delete webhook subscriptions

Consent Oracle

GET/api/platform/v1/registry/consent/check

The primary endpoint for checking whether a specific identity has granted consent for a given use case. Use this before training on or generating content with a person's likeness.

Query Parameters
cidrequired
stringThe contributor identity ID to check consent for.
use_type
stringType of use: "commercial", "editorial", "entertainment", or "elearning".
region
stringISO 3166-1 alpha-2 region code (e.g. "US", "GB").
modality
stringContent modality: "face", "voice", or "body".
verify
booleanWhen true, performs on-chain consent verification. Defaults to false.
Example Request
curl -X GET \
  "https://api.madeofus.ai/api/platform/v1/registry/consent/check?cid=cid_abc123&use_type=commercial&region=US&modality=face" \
  -H "Authorization: Bearer mou_live_a1b2c3d4e5f6..."
Response
{
  "allowed": true,
  "cid": "cid_abc123",
  "use_type": "commercial",
  "region": "US",
  "modality": "face",
  "consent_status": "active",
  "checked_at": "2025-01-15T10:30:00Z",
  "chain_verified": false
}

Bulk Lookup

POST/api/platform/v1/registry/batch/lookup

Look up multiple identities in a single request. Useful for batch processing pipelines that need to verify whether identities exist in the registry.

Request Body
{
  "cids": ["cid_abc123", "cid_def456", "cid_ghi789"]
}

Maximum of 100 CIDs per request.

Response
{
  "results": {
    "cid_abc123": {
      "found": true,
      "status": "verified",
      "consent_status": "active"
    },
    "cid_def456": {
      "found": true,
      "status": "pending",
      "consent_status": "not_set"
    },
    "cid_ghi789": {
      "found": false
    }
  },
  "meta": {
    "total": 3,
    "found": 2,
    "not_found": 1
  }
}

Bulk Consent Check

POST/api/platform/v1/registry/batch/consent

Check consent for multiple identities at once. Accepts optional filtering by use type, region, and modality applied uniformly across all CIDs.

Request Body
{
  "cids": ["cid_abc123", "cid_def456"],
  "use_type": "commercial",
  "region": "US",
  "modality": "face"
}

Maximum of 100 CIDs per request. The use_type, region, and modality fields are optional.

Response
{
  "results": {
    "cid_abc123": {
      "allowed": true,
      "consent_status": "active"
    },
    "cid_def456": {
      "allowed": false,
      "consent_status": "revoked"
    }
  },
  "meta": {
    "total": 2,
    "allowed": 1,
    "denied": 1,
    "not_found": 0
  }
}

Single Identity

GET/api/registry/identity/{cid}

Retrieve details for a single registered identity, including verification status and timestamps.

Example Request
curl -X GET \
  "https://api.madeofus.ai/api/registry/identity/cid_abc123" \
  -H "Authorization: Bearer mou_live_a1b2c3d4e5f6..."
Response
{
  "cid": "cid_abc123",
  "status": "verified",
  "created_at": "2025-01-10T08:00:00Z",
  "verified_at": "2025-01-10T08:15:00Z",
  "updated_at": "2025-01-12T14:30:00Z"
}

Single Consent

GET/api/registry/identity/{cid}/consent

Retrieve the current consent scope and event history summary for a specific identity.

Example Request
curl -X GET \
  "https://api.madeofus.ai/api/registry/identity/cid_abc123/consent" \
  -H "Authorization: Bearer mou_live_a1b2c3d4e5f6..."
Response
{
  "cid": "cid_abc123",
  "consent_status": "active",
  "scope": {
    "use_types": {
      "commercial": true,
      "editorial": true,
      "entertainment": false,
      "elearning": true
    },
    "geographic_scope": {
      "type": "allowlist",
      "regions": ["US", "GB", "CA"]
    },
    "modalities": {
      "face": true,
      "voice": false,
      "body": true
    }
  },
  "event_count": 4,
  "last_updated": "2025-01-14T12:00:00Z"
}

Registry Stats

GET/api/platform/v1/registry/stats

Returns aggregate statistics about the registry, including total identities, verification counts, and consent event totals.

Example Request
curl -X GET \
  "https://api.madeofus.ai/api/platform/v1/registry/stats" \
  -H "Authorization: Bearer mou_live_a1b2c3d4e5f6..."
Response
{
  "total_identities": 12847,
  "verified_count": 11203,
  "claimed_count": 1644,
  "total_consent_events": 38291,
  "active_consents": 10856,
  "revoked_consents": 347
}

Webhooks

Subscribe to real-time events from the registry. Webhooks are delivered as POST requests to your specified endpoint with an HMAC-SHA256 signature for verification.

Event Types
registry.identity_createdA new identity has been registered in the system
registry.consent_updatedAn identity's consent scope has been modified
registry.consent_revokedAn identity has revoked their consent entirely
contributor.verifiedA contributor has completed identity verification
contributor.onboardedA contributor has completed the full onboarding flow
Signature Verification

Every webhook request includes an X-Webhook-Signature header containing an HMAC-SHA256 signature of the request body. Verify this signature using your webhook secret to ensure the request originated from Made Of Us.

const crypto = require("crypto");

function verifyWebhookSignature(body, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body, "utf8")
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}
Subscribe to Webhooks
POST/api/platform/v1/webhooks
curl -X POST \
  "https://api.madeofus.ai/api/platform/v1/webhooks" \
  -H "Authorization: Bearer mou_live_a1b2c3d4e5f6..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-platform.com/webhooks/madeofus",
    "events": [
      "registry.consent_updated",
      "registry.consent_revoked"
    ],
    "secret": "your_webhook_secret_here"
  }'
{
  "id": "wh_abc123",
  "url": "https://your-platform.com/webhooks/madeofus",
  "events": [
    "registry.consent_updated",
    "registry.consent_revoked"
  ],
  "active": true,
  "created_at": "2025-01-15T10:00:00Z"
}

Consent Spec v0.1

The ConsentScope object defines the full structure of a contributor's consent preferences. This is the canonical format used across all API responses and webhook payloads.

ConsentScope Structure
{
  "spec_version": "0.1",
  "use_types": {
    "commercial": true,
    "editorial": true,
    "entertainment": false,
    "elearning": true
  },
  "geographic_scope": {
    "type": "allowlist",   // "allowlist" | "blocklist"
    "regions": ["US", "GB", "CA", "AU"]
  },
  "content_exclusions": [
    "adult",
    "political",
    "tobacco"
  ],
  "modalities": {
    "face": true,
    "voice": false,
    "body": true
  },
  "temporal": {
    "valid_from": "2025-01-01T00:00:00Z",
    "valid_until": "2026-01-01T00:00:00Z",
    "auto_renew": true
  }
}
Field Reference
spec_versionrequired
stringThe version of the consent spec. Currently "0.1".
use_typesrequired
objectBoolean flags for each allowed use category: commercial, editorial, entertainment, elearning.
geographic_scoperequired
objectDefines allowed or blocked regions. "type" is either "allowlist" or "blocklist". "regions" is an array of ISO 3166-1 alpha-2 codes.
content_exclusionsrequired
string[]Categories of content the contributor has explicitly excluded (e.g. adult, political, tobacco, gambling).
modalitiesrequired
objectBoolean flags indicating which likeness modalities are consented: face, voice, body.
temporalrequired
objectTime-bound consent window. Includes valid_from (ISO 8601), valid_until (ISO 8601), and auto_renew (boolean).
madeofus

Protecting creators from unauthorized AI use.

How It WorksPricingLegal LandscapeSign UpLog In

© 2026 Made Of Us. All rights reserved.

AI likeness protection for everyone.