# OTPBay > One API for OTP verification over Telegram and SMS, with automatic SMS fallback and pay-as-you-go pricing. - [Introduction](https://docs.otpbay.com/index.md): One API to send one-time passwords over Telegram and SMS, and to send transactional SMS from your own sender ID. - [Quickstart](https://docs.otpbay.com/quickstart.md): Send a one-time code to a phone number and check it with the Verify API. - [Authentication](https://docs.otpbay.com/authentication.md): Authenticate API requests with a project API key and restrict them to your servers' IP addresses. - [Verify](https://docs.otpbay.com/guides/verify.md): Verify phone numbers with one-time codes. OTPBay generates the code, delivers it over Telegram or SMS, and checks it. - [SMS](https://docs.otpbay.com/guides/sms.md): Send transactional SMS from your own alphanumeric sender ID, priced per destination network. - [Telegram](https://docs.otpbay.com/guides/telegram.md): Send one-time codes directly to your users' Telegram accounts through the Telegram Gateway. - [Webhooks](https://docs.otpbay.com/webhooks.md): Receive status updates for verifications, SMS and Telegram codes at your own URL. - [Errors](https://docs.otpbay.com/errors.md): HTTP status codes and error codes returned by the OTPBay API. - [Billing](https://docs.otpbay.com/billing.md): How OTPBay prices messages, when your balance is charged, and when charges are refunded. - [IDs and formats](https://docs.otpbay.com/concepts/formats.md): Phone numbers, IDs, amounts, timestamps and metadata in the OTPBay API. - [API reference](https://docs.otpbay.com/api-reference/introduction.md): The OTPBay REST API: base URL, authentication, and conventions. - [Start a verification](https://docs.otpbay.com/api-reference/verify/start.md): Generates a code and sends it to `to` on the channel set in your project's Verify settings. When Telegram is the channel and SMS fallback is on, OTPBay switches to SMS if Telegram can't deliver or doesn't deliver within the fallback wait. Store the returned `sid` and pass it to [Check a code](/api-r… - [Get a verification](https://docs.otpbay.com/api-reference/verify/get.md): Returns the verification with every send attempt. Reading a verification also moves it forward: it falls back to SMS when due and marks it `expired` once `expires_at` passes. - [Check a code](https://docs.otpbay.com/api-reference/verify/check.md): Checks the code your user entered. A correct code approves the verification. Each wrong code uses one of `checks_left`; the last wrong code fails the verification. A wrong code still returns `200` with `valid: false`. - [Send an SMS](https://docs.otpbay.com/api-reference/sms/send.md): Queues one SMS for delivery. The price is quoted from the destination network and the number of segments, and your balance is charged when the message is handed to the carrier. The response returns right away with status `queued`; follow the message with [Get an SMS](/api-reference/sms/get) or a `ca… - [Get an SMS](https://docs.otpbay.com/api-reference/sms/get.md): Returns an SMS sent by your project and its current status. - [Send a Telegram code](https://docs.otpbay.com/api-reference/telegram/send.md): Sends a one-time code to the Telegram account registered to `to`. Pass your own `code`, or leave it out and Telegram generates one with the code length from your Telegram settings. If Telegram doesn't deliver the code before it expires, the charge is refunded. - [Get a Telegram code](https://docs.otpbay.com/api-reference/telegram/get.md): Returns a Telegram code and its delivery status. The status is refreshed from Telegram when it may have changed. - [Verify a Telegram code](https://docs.otpbay.com/api-reference/telegram/verify.md): Checks the code your user entered against a Telegram code. Telegram tracks the attempts and the expiry; read `verification_status` for the reason a code isn't valid. A wrong code still returns `200` with `valid: false`. - [Get project](https://docs.otpbay.com/api-reference/project/get.md): Returns the project that owns the API key, including its prepaid balance. - [Status webhook](https://docs.otpbay.com/api-reference/webhooks/status.md): OTPBay sends a `POST` to your `callback` URL when an SMS is sent or fails, when a Telegram code's delivery status changes, and when a verification finishes. Every channel sends the same body. Respond with any `2xx` status within 15 seconds. ## OpenAPI Specs - [openapi](/api-reference/openapi.yaml) ## Optional - [Dashboard](https://app.otpbay.com) - [Pricing](https://otpbay.com/#pricing)