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
- Register your organization and complete business verification.
- Create an application from your dashboard — you'll receive a
client_idandclient_secret. - Redirect users to
app.meimoid.com/oauth-authorizewith your parameters. - 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
/v1/oauth/clients/:clientIdPublic application info (name, organization, requested scopes) — used to render the consent screen before the user does anything.
Auth: None
/v1/oauth/tokenServer-to-server code/refresh-token exchange. Called by your backend, never the browser.
Auth: client_id + client_secret
/v1/oauth/userinfoReturns the claims granted at consent. Filtered strictly by the scopes actually approved — never more.
Auth: Bearer access_token
/v1/oauth/pictureThe URL returned in userinfo's picture claim — the user's live-captured profile photo, as bytes.
Auth: Bearer access_token
Error codes
| Code | Meaning |
|---|---|
| invalid_request | A required parameter is missing or malformed. |
| access_denied | The user declined consent. |
| invalid_grant | The authorization code is invalid, expired, or already used — codes are single-use. |
| invalid_client | client_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
- 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. - 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).
- Redirect the business to
meimoid.com/business/kyb-verifywith your parameters, includingmeimo_business_idif you already collected it — this skips Meimo's manual entry step and takes the business straight to login. - The business logs in with its Meimo Business email + password (not a face scan) and confirms.
- Exchange the returned code for tokens at
POST /v1/kyb-verify/token— no PKCE required. - 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
/v1/kyb-verify/clients/:clientIdPublic partner info (name, registered redirect URIs) — optional, useful if you want to render your own pre-redirect confirmation copy.
Auth: None
/v1/kyb-verify/tokenServer-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
/v1/kyb-verify/business-infoThe 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
| Code | Meaning |
|---|---|
| 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. |

