Modei
PricingDocsBlog

Documentation

Issuers API

Endpoints for creating and managing issuer identities, the signing roots that authorize passports.

··

POST /issuers: Create an Issuer

bash
curl -X POST https://modei.ai/api/v1/issuers \
  -H "Authorization: Bearer mod_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "domain": "acmecorp.com",
    "trust_tier": "L2",
    "metadata": {
      "team": "platform-engineering",
      "environment": "production"
    }
  }'
201 Created
{
  "issuer_id": "iss_01HXYZ...",
  "name": "Acme Corp",
  "domain": "acmecorp.com",
  "trust_tier": "L2",
  "public_key": "ed25519:PUBKEY...",
  "passport_count": 0,
  "created_at": "2026-02-24T10:00:00Z",
  "status": "active",
  "metadata": {
    "team": "platform-engineering"
  }
}

GET /issuers: List Issuers

bash
curl https://modei.ai/api/v1/issuers \
  -H "Authorization: Bearer mod_live_xxxxxxxx" \
  -G --data-urlencode "trust_tier=L2"
200 OK
{
  "items": [
    {
      "issuer_id": "iss_01HXYZ...",
      "name": "Acme Corp",
      "domain": "acmecorp.com",
      "trust_tier": "L2",
      "passport_count": 14,
      "created_at": "2026-02-24T10:00:00Z"
    }
  ],
  "total": 1,
  "limit": 50
}

GET /issuers/:id: Get an Issuer

bash
curl https://modei.ai/api/v1/issuers/iss_01HXYZ... \
  -H "Authorization: Bearer mod_live_xxxxxxxx"
200 OK
{
  "issuer_id": "iss_01HXYZ...",
  "name": "Acme Corp",
  "domain": "acmecorp.com",
  "trust_tier": "L2",
  "public_key": "ed25519:PUBKEY...",
  "passport_count": 14,
  "active_passports": 12,
  "revoked_passports": 2,
  "created_at": "2026-02-24T10:00:00Z",
  "last_passport_issued_at": "2026-02-24T14:00:00Z",
  "metadata": {}
}

PUT /issuers/:id: Update an Issuer

bash
curl -X PUT https://modei.ai/api/v1/issuers/iss_01HXYZ... \
  -H "Authorization: Bearer mod_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp (Updated)",
    "metadata": {
      "team": "security-engineering"
    }
  }'
200 OK
{
  "issuer_id": "iss_01HXYZ...",
  "name": "Acme Corp (Updated)",
  "domain": "acmecorp.com",
  "updated_at": "2026-02-24T16:00:00Z"
}

Note: Changing the domain after passports have been issued will not retroactively update existing passports. The domain field is immutable after initial passport issuance.

Related