{"name":"KuruMesaju API","version":"1.0.0","description":"JSON HTTP API for outbound SMS and OTP to Maldives mobile numbers (+960). User routes use a Bearer API key; device routes use a Bearer device token.","base_url":"https:\/\/kurumesaju.rashydh.com\/api\/v1","content_type":"application\/json","machine_readable":{"html":"https:\/\/kurumesaju.rashydh.com\/docs","markdown":"https:\/\/kurumesaju.rashydh.com\/docs\/api.md","openapi":"https:\/\/kurumesaju.rashydh.com\/docs\/openapi.json","agent_index":"https:\/\/kurumesaju.rashydh.com\/docs\/api.json","llms_txt":"https:\/\/kurumesaju.rashydh.com\/llms.txt"},"authentication":{"user_api":{"type":"http","scheme":"bearer","header":"Authorization: Bearer {API_KEY}","note":"API keys are created in the operator dashboard. Keys are shown once at creation."},"device_api":{"type":"http","scheme":"bearer","header":"Authorization: Bearer {DEVICE_TOKEN}","note":"Device tokens are created in the operator dashboard. Tokens are shown once at creation."}},"phone_numbers":{"region":"Maldives","scope":"Maldives mobile numbers (+960) only. Accept national (7711097) or international (+9607711097) input; normalized to E.164 (+960\u2026).","format":"Normalized server-side to E.164-style (+960 then national digits).","examples":["+9607711097","9607711097","7711097"]},"rate_limits":{"note":"HTTP 429 when exceeded. Limits are per IP and per API key \/ device.","user_api_per_minute":60,"sms_per_minute":30,"otp_per_minute":10,"device_api_per_minute":240},"endpoints":[{"method":"POST","path":"\/sms","auth":"user_api","summary":"Queue outbound SMS"},{"method":"POST","path":"\/otp\/send","auth":"user_api","summary":"Send OTP via SMS"},{"method":"POST","path":"\/otp\/verify","auth":"user_api","summary":"Verify OTP code"},{"method":"GET","path":"\/device\/jobs\/next","auth":"device_api","summary":"Claim next pending SMS job (204 if empty)"},{"method":"POST","path":"\/device\/jobs\/{id}\/result","auth":"device_api","summary":"Report sent or failed"},{"method":"POST","path":"\/device\/ping","auth":"device_api","summary":"Heartbeat"}],"webhook_outbound":{"trigger":"Server POSTs to device.webhook_url when an SMS is assigned and ready.","payload":{"event":"sms_pending","id":"integer (sms_messages.id)","sms_message_id":"integer (same as id)","to":"string (E.164-style)","body":"string"}},"implementation_order":["Obtain API key from the service operator.","POST \/sms or POST \/otp\/send with Authorization header.","On the phone: configure device token; either receive webhook POST or poll GET \/device\/jobs\/next.","After sending SMS on device: POST \/device\/jobs\/{id}\/result with status sent or failed."]}