Meimo ID

Documentation

Meimo ID — API reference

Meimo ID covers two distinct integrations. Continue with Meimo ID verifies an individual person (face + PIN, scope-gated identity claims). Continue with Meimo Business IDverifies an organization for KYB purposes (business email + password login, full KYB snapshot). They use separate hosted pages, separate credentials, and separate token endpoints — pick the one that matches what you're verifying.


Continue with Meimo ID (individuals)

Verifies a person. Face capture + PIN, scope-gated claims.

Quick start

  1. Register your organization and complete business verification.
  2. Create an application from your dashboard — you'll receive a client_id and client_secret.
  3. Redirect users to app.meimoid.com/oauth-authorize with your parameters.
  4. Exchange the returned code for tokens at POST /v1/oauth/token.

Authorization flow

Standard OAuth 2.0 authorization code grant with PKCE (S256 only — plain is not accepted).

# 1. Redirect the user's browser
GET https://app.meimoid.com/oauth-authorize
  ?response_type=code&client_id=...&redirect_uri=...
  &scope=identity+profile+phone&state=...
  &code_challenge=...&code_challenge_method=S256

# 2. User approves. Browser is redirected back:
GET https://yourapp.com/callback?code=AUTH_CODE&state=...

# 3. Your backend exchanges the code (server-to-server):
POST https://api.meimoid.com/v1/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTH_CODE
&redirect_uri=https://yourapp.com/callback
&client_id=...&client_secret=...
&code_verifier=...

# 4. Fetch claims:
GET https://api.meimoid.com/v1/oauth/userinfo
Authorization: Bearer ACCESS_TOKEN

Endpoints

GET/v1/oauth/clients/:clientId

Public application info (name, organization, requested scopes) — used to render the consent screen before the user does anything.

Auth: None

POST/v1/oauth/token

Server-to-server code/refresh-token exchange. Called by your backend, never the browser.

Auth: client_id + client_secret

GET/v1/oauth/userinfo

Returns the claims granted at consent. Filtered strictly by the scopes actually approved — never more.

Auth: Bearer access_token

GET/v1/oauth/picture

The URL returned in userinfo's picture claim — the user's live-captured profile photo, as bytes.

Auth: Bearer access_token

Error codes

CodeMeaning
invalid_requestA required parameter is missing or malformed.
access_deniedThe user declined consent.
invalid_grantThe authorization code is invalid, expired, or already used — codes are single-use.
invalid_clientclient_id/client_secret don't match a registered, non-revoked application.

Continue with Meimo Business ID (KYB)

Verifies an organization for KYB purposes. Business email + password login, full KYB snapshot.

Not the individual flow.

If you're verifying a business, don't redirect to app.meimoid.com/oauth-authorize— that's the individual flow (face scan + PIN) and will only ever authenticate a person, never an organization. A kyb_... client ID only works against the endpoints on this page.

Quick start

  1. Contact Meimo to be issued a KYB Verify Partner credential — this is staff-issued, not self-serve. You'll receive a kyb_... client ID and a client secret, shown once.
  2. Collect the business's Meimo Business IDon your own onboarding form — a 10-digit number starting with 7, 8, or 9 (individual Meimo IDs always start with 0-6, so the first digit alone tells you which kind of ID you've been given).
  3. Redirect the business to meimoid.com/business/kyb-verify with your parameters, including meimo_business_idif you already collected it — this skips Meimo's manual entry step and takes the business straight to login.
  4. The business logs in with its Meimo Business email + password (not a face scan) and confirms.
  5. Exchange the returned code for tokens at POST /v1/kyb-verify/token — no PKCE required.
  6. Fetch the KYB snapshot at GET /v1/kyb-verify/business-info.

Authorization flow

OAuth 2.0-style authorization code grant, without PKCE — token exchange is always server-to-server, authenticated with your client secret.

# 1. Redirect the business's browser
GET https://meimoid.com/business/kyb-verify
  ?client_id=kyb_...&redirect_uri=...
  &meimo_business_id=7000000123&state=...

# 2. Business logs in with its Meimo Business email + password
#    and confirms. Browser is redirected back:
GET https://yourapp.com/callback?code=AUTH_CODE&state=...

# 3. Your backend exchanges the code (server-to-server):
POST https://api.meimoid.com/v1/kyb-verify/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTH_CODE
&redirect_uri=https://yourapp.com/callback
&client_id=kyb_...&client_secret=...

# 4. Fetch the KYB snapshot:
GET https://api.meimoid.com/v1/kyb-verify/business-info
Authorization: Bearer ACCESS_TOKEN

Endpoints

GET/v1/kyb-verify/clients/:clientId

Public partner info (name, registered redirect URIs) — optional, useful if you want to render your own pre-redirect confirmation copy.

Auth: None

POST/v1/kyb-verify/token

Server-to-server code/refresh-token exchange. Called by your backend, never the browser. No PKCE — authenticated with client_secret instead.

Auth: client_id + client_secret

GET/v1/kyb-verify/business-info

The full KYB snapshot for the verified organization — name, legal name, registration number, country, website, verification status, verified date. Not scope-gated: a successful token means the full snapshot.

Auth: Bearer access_token

Error codes

CodeMeaning
invalid_client (401)client_id/client_secret don't match an active, non-revoked KYB Verify Partner credential.
invalid_grant (401)The code is invalid, expired, already used, or was issued for a different redirect_uri.
invalid_refresh_token (401)The refresh token is invalid, revoked, or was rotated out by a later refresh.
invalid_token (401)The access token used against /business-info is invalid or expired.
access_denied (redirect)The business declined to confirm — sent back on your redirect_uri as ?error=access_denied&state=..., same as the individual flow.
not_kyb_approved (403)The organization exists but hasn't completed Meimo's own KYB review yet — nothing to verify.
not_a_member (403)The person who logged in isn't a member of the organization behind the Meimo Business ID they entered.