Non-consuming OTP check (POST /api/auth/check-otp). Powers the SPA's two-step register / reset flows where the OTP is validated in step 1 so the user gets immediate feedback, and the real consume happens at the final submit in step 2. `purpose` is constrained to the two OTP flows the SPA owns — pinning the literal here means a typo (`"reset"` vs `"reset_password"`) is caught by Pydantic, not by a silent 400 from the OTP lookup.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/monacloud/json-schema/monacloud-check-otp-request-schema.json",
"title": "CheckOtpRequest",
"description": "Non-consuming OTP check (POST /api/auth/check-otp).\n\nPowers the SPA's two-step register / reset flows where the OTP is\nvalidated in step 1 so the user gets immediate feedback, and the\nreal consume happens at the final submit in step 2.\n\n`purpose` is constrained to the two OTP flows the SPA owns — pinning\nthe literal here means a typo (`\"reset\"` vs `\"reset_password\"`) is\ncaught by Pydantic, not by a silent 400 from the OTP lookup.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/monacloud-auth-api-openapi.yml#/components/schemas/CheckOtpRequest",
"properties": {
"email": {
"type": "string",
"title": "Email"
},
"otp": {
"type": "string",
"maxLength": 6,
"minLength": 6,
"title": "Otp"
},
"purpose": {
"type": "string",
"enum": [
"register",
"reset_password"
],
"title": "Purpose"
}
},
"type": "object",
"required": [
"email",
"otp",
"purpose"
]
}
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.