> ## Documentation Index
> Fetch the complete documentation index at: https://docs.robase.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> For chatbots and coding agents, start at /guides/ai-agents.
> Hosted MCP: POST https://api.robase.dev/mcp (Streamable HTTP). Auth: Authorization: Bearer robe_… or robe_agent_….
> Phase 1 tools: get_pricing, send_otp, verify_otp, get_otp, send_sms, get_sms. No payment or top-up tools.
> Call get_pricing; treat listed:true as marketed markets (NG, GH, KE, ZA, GB, BJ, CI, US). Do not invent countries or delivery percentages.
> Prefer OTP-shaped tests such as "Your Robase test OTP is 123456". Do not send Hello or Good morning as tests. Match errors on error.type.

# Business verification (KYC)

> What to upload on /app/kyc, how review works, and how a kyc_required hold clears.

[Business verification](https://robase.dev/app/kyc) is the KYB pack for a workspace whose messages were read as bank transaction alerts. Sending on behalf of a financial service needs this approval.

Robase is OTP and transactional SMS only. Marketing content is blocked with **403** `content_blocked`. This page is the separate hold for financial transaction alerts.

## When sending pauses

The classifier reads an outbound message as a bank transaction alert. The workspace banner says sending is paused, and the API refuses later sends with **403** `kyc_required`. Nothing is charged.

The hold states you can see:

| State | Meaning | Sends |
| - | - | - |
| Not required | Nothing has flagged the workspace. | Allowed |
| Verification needed | We stopped sending and want a pack. | Refused with `kyc_required` |
| Under review | A pack is with the reviewers. | Refused with `kyc_required` |
| Verified | Review passed. | Allowed |
| Rejected | Review failed. File a new pack. | Refused with `kyc_required` |
| Hold lifted | Staff lifted a hold without a KYB review, because the classifier was wrong that day. | Allowed |

Review is not a grace period. A flagged workspace stays stopped until a reviewer approves it. A pack that is under review does not turn sending back on.

The product does not publish a review time. Do not promise a number of hours or days.

Reading the documents and the owner details needs the `kyc.read` permission. That is the owner and the admin. See [Team](https://docs.robase.dev/dashboard/team.md).

## What to upload

The form has five steps: **Business**, **Licence**, **Owners**, **Documents**, and **Review**.

**Business.** Country of incorporation, registered company name, trading name if it differs, date of incorporation, entity type, registered address, city, country, website, and one or two sentences on the service these messages support. If you already filed a sender ID request, the page can reuse those company details. Check them before you continue.

**Licence.** Either you hold the licence, or you act for a licensed institution. Give the issuing authority, licence number, licence type, the date it was issued, and the date it expires. If you act for someone else, name that institution. The form lists regulators for the country you picked.

**Owners.** Every person who holds 25% or more, and anyone who controls the company. For each person: full name, role, nationality, date of birth, ownership percent, ID type, ID number, and residential address.

**Documents.** PDF, PNG, JPEG, or WebP, up to 10 MB each.

| Document | Required |
| - | - |
| Certificate of incorporation | Yes |
| Proof of business address | Yes |
| Licence or mandate | Yes |
| Government ID of the owners | Yes |
| Anything else | No |

**Review.** You confirm the details are true and that you may file them, and you type your full name and title. Submit for review. You can save a draft and come back.

## How review works

After you submit, the pack moves through **Submitted** and **Under review**. You can follow it on the verification page. The activity list and the reference stay on that page.

A reviewer either approves or rejects.

* **Approved.** The workspace state becomes verified. The page says the business is verified and sending is on.
* **Rejected.** The hold stays. The page shows the reason. File a new verification with the documents the reason asks for. You do not edit the refused pack in place.

Automatic checks can refuse a pack for completeness. They do not approve one. Approval is a person.

## How `kyc_required` clears

`kyc_required` clears when the hold is no longer paused.

* A reviewer **approves** the pack. The state becomes verified, and the next send is no longer refused for this reason.
* Staff **lift** the hold without a KYB review. Sending resumes. The workspace is still screened later, because a lift means the classifier was wrong that day, not that financial alerts are approved.

A rejected pack does not clear the hold. A new pack under review does not clear it either. Only approval, or a staff lift, does.

A message accepted before the hold, and then stopped, shows the timeline reason `kyc_required` and is not sent. Open the row in [SMS logs](https://docs.robase.dev/dashboard/logs.md) or [OTP logs](https://docs.robase.dev/dashboard/logs.md). The credit for a stopped message is handled on that timeline. The `refunded` flag is the ledger, not a guess.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.