emem · Authentication Profile

Emem Dev Authentication

Authentication

emem declares 4 security scheme(s) across its OpenAPI definitions.

CompanyArtificial IntelligenceAI AgentsAgent MemoryGeospatialEarth ObservationSatellite ImageryProvenanceCryptographyMCPOpen SourceIndiaA2A
Methods: Schemes: 4 OAuth flows: API key in:

Security Schemes

none
custom (per-request detached signature, ed25519 over blake3 of a domain-separated preimage)
· in: request body (attester block - pubkey_b32 + signature over the canonical bytes) ()
oauth2
· flows:
custom (ed25519 signature over blake3("emem.vault_open|" + path + "|" + nonce))

Source

Authentication Profile

Raw ↑
generated: '2026-09-19'
method: searched
source: >-
  https://emem.dev/.well-known/oauth-protected-resource, https://emem.dev/.well-known/oauth-authorization-server,
  https://emem.dev/oauth/status, https://emem.dev/v1/enlist, https://emem.dev/v1/verifier_spec (caller_signed_objects),
  https://emem.dev/llms.txt (Connect + Writing to the shared memory), https://emem.dev/docs/security.html,
  the agent card's emem.authentication block, and openapi/emem-dev-openapi.json (which declares no
  securitySchemes and no security requirements - the provider states that absence is deliberate).
docs: https://emem.dev/docs/security.html
summary: >-
  Every read is anonymous: no API key, no account, no bearer token on any REST endpoint, MCP tool
  or A2A skill (oauth-protected-resource: auth_required false, authorization_servers []). Writes
  are authenticated per request by an ed25519 attester signature over a domain-separated blake3
  preimage carried in the request body; there is no session. An OAuth 2.1 authorization server is
  published for brokers that refuse to connect without one, but it registers anyone, approves
  everyone and its tokens grant nothing an anonymous caller lacks. Write REACH, not identity, is
  tiered by a T0-T5 enlistment ladder whose rungs are checks a third party can re-run.
schemes:
- id: anonymous-read
  type: none
  applies_to: all GET endpoints, every read/introspect/verify/plan MCP tool (86 of 110 tools are readOnlyHint true), A2A message/send and skill queries
  evidence: '"L0 / L1 reads are anonymous ... no OAuth is involved in any flow" (oauth-protected-resource.notes); "every read is anonymous and no endpoint requires a bearer token" (/oauth/status).'
- id: ed25519-attester-signature
  type: custom (per-request detached signature, ed25519 over blake3 of a domain-separated preimage)
  in: request body (attester block - pubkey_b32 + signature over the canonical bytes)
  applies_to: writes - emem_memory_create / str_replace / insert / rename / delete / supersede, emem_entity, emem_entity_link, emem_derive, POST /v1/attest*, /v1/edges, /v1/enroll_*, /v1/device_publish, /v1/log/witness
  key_issuance: caller-generated locally (emem keygen or any ed25519 library); nobody issues or can revoke it; the responder never sees the private half
  discovery: omit the attester block on any write and the 401 returns details.how_to_sign with the exact digest to sign, the byte rules and a worked example; the full construction is at https://emem.dev/v1/verifier_spec (caller_signed_objects)
  namespace: /memories/by_attester/<pubkey8>/ is the key's own; elsewhere the first attester to create a path owns it (403 memory_namespace_violation otherwise)
  revocation: attester_revoked error code (-12) for keys in the revocation set
  evidence: llms.txt "Writing to the shared memory"; mcp.json security_posture.every_write_is.signed; /v1/errors unauthorized (-13), bad_signature (-15)
- id: oauth2-optional
  type: oauth2
  flows:
    authorizationCode:
      authorizationUrl: https://emem.dev/oauth/authorize
      tokenUrl: https://emem.dev/oauth/token
      refreshUrl: https://emem.dev/oauth/token
      scopes: {}
  pkce: S256
  dynamic_client_registration: https://emem.dev/oauth/register (always succeeds)
  token_endpoint_auth_methods: [none]
  scopes_supported: []
  grants_access_to: nothing beyond anonymous access; session status is always open_unverified
  evidence: >-
    RFC 8414 metadata emem_note: "Authorization here is OPTIONAL and open: registration always succeeds,
    authorization auto-approves, and the token adds nothing to anonymous access. It exists so brokers
    that insist on OAuth can connect to an open protocol." The provider's /v1/enlist explains why OAuth
    was not chosen for agent identity ("DCR degrades to a bearer token proving possession").
  discovery:
    authorization_server_metadata: well-known/emem-dev-oauth-authorization-server.json
    protected_resource_metadata: well-known/emem-dev-oauth-protected-resource.json
    openid_configuration: well-known/emem-dev-openid-configuration.json (same document; not OIDC Discovery - no jwks_uri / userinfo)
- id: vault-capability
  type: custom (ed25519 signature over blake3("emem.vault_open|" + path + "|" + nonce))
  applies_to: reading a memory entry written with kind "vault"
  evidence: mcp.json security_posture.read_isolation.opt_in; the operator can decrypt any vault entry (key derived from the responder's own secret) and says so.
enlistment_ladder:
  url: https://emem.dev/v1/enlist
  principle: '"Tier on what a write can REACH, never on who is asking. A tier records which check passed; it is not a score."'
  tiers:
  - {tier: T0_anonymous, requirement: a signed note}
  - {tier: T1_keyed, requirement: full key resolvable; namespace proven by a caller signature}
  - {tier: T2_named, requirement: a signed profile.md carrying a unique nick}
  - {tier: T3_declared, requirement: a reachable endpoint with declared skills}
  - {tier: T4_affiliated, requirement: 'an organisation vouches for the key by dns (_emem-agent.<domain> TXT), well_known (/.well-known/emem-agents.json) or cross_sig'}
  - {tier: T5_corroborated, requirement: 3 distinct peer keys confirmed one of its tokens matched (not yet computed)}
  reads: never gated at any tier
  not_an_auth_wall: no account, no bearer token that grants anything, no payment anywhere in the ladder
responder_identity:
  signature_alg: ed25519
  hash_alg: blake3
  pubkey_b32: 777er3yihgifqmv5hmc2wwmyszgddzderzhsx6rex4yoakwomvka
  published_at: [https://emem.dev/.well-known/emem.json, https://emem.dev/.well-known/jwks.json (kid = pubkey), https://emem.dev/.well-known/did.json]
  every_read_returns: a signed receipt (x-emem-receipt-cid header; body receipt) verifiable offline at POST /v1/verify_receipt, /verify in the browser, or `emem verify`
openapi_security_schemes: none declared (components.securitySchemes absent, no security requirements); the agent card's emem.authentication block states this is intentional for an open-read surface.
scopes: none (scopes_supported [] in both RFC 8414 and RFC 9728 metadata); no scopes/ artifact is wired for that reason.

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/emem-dev-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.