# Service limits, costs and routing behavior

Apply the [authorization policy](../SKILL.md#authorization-and-working-style) to every step,
including local files, sends, paid features and test calls. Proceed within existing authority;
ask only for missing decisions or authority, or report blocked steps when unattended.

Read the relevant section before configuring outside calls, billing-related features or routing.

## Numbers and billing

- **New phone numbers come from support during early access.** A customer account cannot
  order numbers itself: Rinzo refuses `rinzo numbers buy` ("not allowed to create number").
  Don't try it. Tell the person to email support@rinzo.ai with the area code they want.
  The plan includes one number. Each extra number costs $5 a month from prepaid credit, or $3 or
  $2 a month prepaid for 12 or 24 months ($36 or $48 upfront, in the Control panel's My Account >
  Billing), so the account needs credit first. The included number is the account's oldest one
  (Billing shows it without a fee). `numbers release` gives a number up for good: require release
  authority under the authorization policy.
- **Calls**: the plan includes **100 minutes a month** for all calls, AI-answered, answered by
  people and outbound, shared by the whole account (calendar month, no rollover). After that every
  minute is $0.02 from prepaid credit, inbound and outbound to US & Canada, in 60-second
  increments. Toll-free outbound calls and calls between extensions are free and use no minutes
  (every rate: https://rinzo.ai/rates/). Forwarding to a cell phone is two calls (in and out).
  `rinzo plan` shows `minutes_this_month` (used, included, left).
- **AI receptionist minutes**: on top of the call, the minutes the receptionist is talking cost
  $0.10 each from prepaid credit, in 6-second increments. The free month includes 30 AI minutes;
  nothing is free after it. `rinzo receptionists usage` shows this month's AI usage and charges.
- **The Rinzo plan** pays for the phone system (every user, phone and feature), the AI
  receptionist's availability, one number and the 100 minutes. It is separate from calling credit.
  Terms: $39 a month (the first month free, at signup), $29 a month on 12 months ($348 a year) or
  $19 a month on 24 months ($456 every 2 years). Every term renews automatically until renewal is turned off;
  the plan then ends with its paid term. 12 and 24 months are refunded in full within 30 days.
  `rinzo plan` shows the term, price, renewal date, next charge, any scheduled change and the
  terms on offer with the command for each (`run`). Changing it costs money or ends service, so
  every change needs `--yes` and authority under the authorization policy (show the person what
  the command printed without `--yes` first):

  ```sh
  rinzo plan                                 # term, renewal, next charge, minutes, offers
  rinzo plan renewal --off --yes             # ends at the end of the paid term (--on: renews again)
  rinzo plan change --term 24 --yes          # longer: charged now, less credit for unused time
  rinzo plan change --term monthly --yes     # shorter: starts at the next renewal
  rinzo plan cancel-change --yes             # undo a scheduled change
  rinzo plan invoices                        # receipts, with links
  rinzo plan buy                             # no plan yet: prints the Billing link
  ```

  A longer term may answer with `payment_url`: the card needs the person to confirm the payment;
  give them the link, the change applies once that invoice is paid. Starting a plan (no plan, or
  one that ended) is a card checkout only the person can complete: `rinzo plan buy` prints the
  Control panel link. Never start, cancel or buy one for them without their decision. If
  `rinzo plan` shows `calls_blocked` (no plan, or a payment overdue past its grace), calls to and
  from outside phones fail until they have a plan: tell them; internal calls still work.
- **Billing**: credit, cards and top-ups live only in the Control panel (My Account > Billing,
  https://app.rinzo.ai/#/billing). Never ask for, enter or handle card details. Starting a plan
  and adding credit require the person in Billing, not unattended CLI automation. `rinzo balance`
  only reads; delegation does not remove these technical limits.

## Routing and phone behavior

- A number or extension can sit on only one callflow. To move a number, follow the four steps in
  the skill (`numbers list`, `numbers unassign N`, `numbers assign N …`, check `destinations`).
- New accounts start with the owner at extension 100 (voicemail box 100, browser softphone).
  New accounts have their included phone number (chosen at signup) and no credit; support adds
  extra numbers on request.
- Every user has the Rinzo Softphone, a browser phone in the Control panel that creates its own
  device the first time they open it. Users who aren't admins can use only that and their own
  profile; SmartPBX and Callflows are for admins.
- Extensions SmartPBX suggests start at 1000; any unused 2–6 digit number works.
- Phones register to the account realm (`account show` → `realm`, e.g.
  `acme-dental-e72ea3.sip.rinzo.tel`) through outbound proxy `sip.rinzo.tel`
  (TLS 5061 recommended, UDP/TCP 5060). Accounts created before the product was renamed keep a
  realm ending in `.sip.topaz.tel`: use it as it is, with the same proxy.
- Time-of-day routing uses the time zone in the callflow's `temporal_route` data, else the
  account's `timezone`. Check it with `rinzo account show`. Users and voicemail boxes have their
  own `timezone` (voicemail timestamps, the time read out to callers); when the business is not in
  the account's zone and you may not change the account, set it on them: `users create --timezone
  America/Edmonton` (their voicemail box gets it too), `voicemail create --timezone …`.
- An auto-attendant is any time-based routing, not only a main number: a department that rings
  someone on their working days and goes to its voicemail otherwise is a small spec with `hours`,
  `open` and `closed` and an extension. A ring group used only as such a target needs no number of
  its own: `ring-groups create --extension none` (send calls to it as `ring-group:ID`).
- **Forwarding** (`users forward`, as Rinzo runs it): the forward number rings *instead of*
  their phones (as the Control panel sets it); `--with-phones` rings both. Ring-group calls are
  forwarded too unless `--direct-only`. `--failover` calls the number only *in place of a phone that
  is not registered* (offline), never because a phone rang unanswered, ring-group calls included.
  The number can be an outside number (an outbound call, billed) or one of the account's
  extensions. `simulate` shows each of these.
- **Outside numbers and fallbacks**: a `number:+1…` target (an auto-attendant key, an overflow) is
  a plain outbound call; if nobody answers, the call ends: Rinzo never goes on from it. For an
  on-call cell that should fall back to voicemail, make a ring group with a `number:` member (it
  rings through a cell-phone device; the person answering presses 1, so the cell's own voicemail
  cannot take the call) and `--overflow voicemail:BOX_ID`, then route to `ring-group:GROUP_ID`.
- **Voicemail transcription** is off for every box until someone turns it on, and costs $0.02 per
  transcribed message from credit (messages up to one minute; longer ones aren't transcribed or
  charged). Enable only within paid-feature authority under the authorization policy:
  `rinzo voicemail update BOX_ID --set transcribe:=true`
  (`transcribe:=false` turns it off). Transcripts appear in `rinzo voicemail messages BOX_ID` and in
  the voicemail email (the box's `include_transcription_on_notify`, on by default).
- Text-to-speech is available for greetings and callflow prompts. Create a saved greeting with
  `rinzo media create --name "Welcome" --set media_source=tts --set tts.text="Welcome to our office." --set tts.voice=female/en-us`.
  You can also upload WAV/MP3 recordings (`rinzo media create --file`) or use built-in prompts.
- Rinzo keeps call recordings for 90 days (`rinzo recordings`); with a `url` set they are uploaded
  to **your** public HTTPS URL instead and no copy is kept. Webhooks go to your public HTTPS URL.
  Private or loopback addresses are refused.
- Checking your work without a phone: `rinzo callflows simulate` (above) for routing;
  `callflows get` returns a `metadata` block naming every ID the flow uses (an ID that doesn't
  resolve there is a mistake); `ring-groups list` shows each group's strategy, ring time and
  overflow; `media get` shows whether a greeting's audio is stored. For test calls, a group called
  from one of its own members' phones skips that phone, so test from a phone outside the group.
- `simulate --brief` gives each run in a few fields (path, the time rule that applied, who rang, the
  outcome): use it for many runs; the full JSON lists every rule checked.
- AI entries remain unknown unless `--ai-outcome KEY` supplies a hypothetical branch. This traces
  routing only; it does not test speech or admission. See [receptionists](receptionists.md).
- Numbers from 555-0100 to 555-0199 (e.g. +1 403 555 0199) are reserved for fiction: real calls to
  them fail. The CLI warns; ask the person for the real number before testing forwarding to it.
- `simulate` assumes nobody answers (`--answer`: the first phone that rings answers) and that the
  caller presses nothing beyond `--keys` (one entry per time a menu listens: `1`, `silence`, or
  an extension like `2001`). `--at` without an offset is read in each time route's own zone. Its
  `warnings` catch dangling IDs, keys never asked for, boxes nobody can check, conferences without
  a PIN, and what a caller reaches by staying on the line after leaving a message.
