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

> ## Agent Instructions
> These docs target Mesh SDK v0.27.0. Match the installed package and binding before generating code. Start at /getting-started/agents for task-specific reading paths.
> Call the company and product Offline Protocol, never Offline alone. Current packages: @offline-protocol/mesh-sdk 0.27.0 (React Native), @offline-protocol/id-react 0.2.0, @offline-protocol/id-react-native 0.3.3, @offline-protocol/pol 0.1.2 and @offline-protocol/cli 0.2.6. Canonical docs URLs start with https://www.offlineprotocol.com/docs.
> The Mesh SDK runs in a native app or gateway. A browser OfflineID SDK integration does not provide browser mesh transport. Local mesh operation does not require a portal API key.
> Service RPC is signed plaintext in v0.27.0. Message delivery, durable local acceptance and backend commit are distinct outcomes. Use the workflow guide for the required application logic.
> Offline Protocol CLI 0.2.6 is on npm (@offline-protocol/cli, command offline). Its local MCP server runs with offline mcp serve and requires no login or key. Hosted MCP is at https://mcp.offlineprotocol.com/mcp with an application API key in Authorization: Bearer and a matching x-app-id; organization keys are rejected. Follow /tools/overview for setup and do not invent commands beyond it. MCP provides integration context and planning, not mesh execution; file-writing tools are local only.
> Phone Wi-Fi Direct and MultipeerConnectivity carry no data in v0.27.0. Use BLE or a provisioned relay. The receiver core ACKs before application persistence; use application acceptance for durable workflows.
> Proof of Location is Sepolia testnet witness evidence, not zero-knowledge proof or proof of presence. The geohash is public onchain. Read /proof-of-location/security before integration.

# Licensing and hosted services

> Mesh SDK licensing (AGPL-3.0-only or commercial), App Store distribution, hosted plans, usage quotas and integration support from Offline Protocol.

The Offline Protocol mesh SDK is AGPL-3.0-only, with a commercial license available; the OfflineID and Proof of Location client packages are MIT or ISC. The [mesh SDK license](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.27.0/LICENSE) and [commercial license notice](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.27.0/LICENSE-COMMERCIAL.md) define the mesh SDK options.

## Package licenses

| Package | License |
| - | - |
| `@offline-protocol/mesh-sdk` and the `offline-protocol-*` Rust crates | AGPL-3.0-only, or a commercial license from Offline Protocol, Inc. |
| `@offline-protocol/id-react` (0.2.0 and later), `@offline-protocol/id-react-native`, `@offline-protocol/pol` | MIT |
| `@offline-protocol/core`, `@offline-protocol/identicons`, `@offline-protocol/identicons-native`, and `@offline-protocol/id-react` 0.1.x | ISC |
| `@offline-protocol/cli` | Apache-2.0 |
| CLI starter templates | MIT-0 |

## Choose the offer you need

| Offer | What it covers |
| - | - |
| Open-source mesh SDK | Use under the published AGPL-3.0-only terms. |
| Commercial mesh SDK license | For products that cannot meet the AGPL obligations: proprietary apps, closed-source firmware, hosted services that do not release their source, and Apple App Store distribution. |
| Hosted services | The identity, telemetry or relay services included in your plan or agreement. |
| Integration and support | The engineering, deployment and support scope in your agreement. |
| OEM / distribution | Rights and responsibilities for embedding or distributing Offline Protocol through your products. |

A portal account or hosted subscription does not by itself grant proprietary mesh SDK distribution rights. Local peer-to-peer traffic is never metered on any plan. Hosted relay deliveries, telemetry and other hosted products have separate quotas and charges.

A hosted relay delivery is one message the Offline Protocol hosted relay accepts for one recipient and then delivers or holds for delivery. A group message counts once for each member it reaches, and a retry of the same message counts once. Delivery acknowledgements and messages that reach no one are not counted. Messages that devices forward for each other over Bluetooth LE or another local transport (mesh relays) never pass through the hosted relay and are never metered, even though Mesh SDK telemetry reports them.

## Apple App Store distribution

The commercial license is the supported option for Apple App Store distribution. Review the [versioned licensing FAQ](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.27.0/docs/licensing-faq.md) before choosing a distribution route. AGPL-3.0-only use is free, including in production and in commercial products, as long as you meet its obligations: the combined work is licensed under AGPL-3.0, and you offer its corresponding source to its users, including users who interact with it over a network (section 13).

Upgrade from the Billing tab in the portal, or contact [sales@offlineprotocol.com](mailto:sales@offlineprotocol.com) for Enterprise. For SDK licensing and OEM distribution rights, contact [legal@offlineprotocol.com](mailto:legal@offlineprotocol.com).

Use the [production checklist](/docs/operations/production) to prepare the device, workflow and support requirements for your deployment.

## Hosted plans and usage

Self-service plans use Stripe Checkout in the portal's **Billing** tab. Monthly quotas and analytics history are:

| Allowance | Free | Pro | Scale | Enterprise |
| - | - | - | - | - |
| Price | \$0 | \$99/month | \$499/month | Annual, invoiced |
| MAU | 1,000 | 10,000 | 50,000 | By agreement |
| Hosted relay deliveries | 10,000 | 100,000 | 1 million | By agreement |
| Telemetry events | 250,000 | 2 million | 10 million | By agreement |
| PoL verifications | 250 | 2,500 | 10,000 | By agreement |
| Seats | 3 | 10 | Unlimited | By agreement |
| Analytics history | 7 days | 30 days | 90 days | By agreement |

MAU means monthly active users. Proof of Location runs on the Ethereum Sepolia testnet; a plan allowance or overage charge does not change its release status.

Usage beyond a plan's quotas is billed at the end of each month:

| Meter | Overage rate |
| - | - |
| Monthly active users | \$0.02 per MAU |
| Hosted relay deliveries | \$0.50 per 1,000 |
| Telemetry events | \$0.05 per 1,000 |
| Proof of Location | \$0.03 per verification |

### Usage warnings, billing limits and pauses

Owners, admins and billing members get an email, and the portal shows a banner, when a meter reaches 80% and 100% of its monthly quota. What happens next depends on how the organization pays:

| Organization | At 80% of a quota | At 100% of a quota | Billing limit reached | Payment failed |
| - | - | - | - | - |
| Free, no card on file | Warning | All metered hosted services pause | Not applicable | Not applicable |
| Card on file (Free with a card, Pro, Scale) | Warning that you are approaching your included usage | Warning; additional usage is billed at the published overage rates, up to your billing limit if you set one. Never paused for quota. | The service for that meter pauses | All metered hosted services pause |
| Enterprise contract | No warning | Never paused; usage is governed by your agreement | Not applicable | Never paused |

The metered hosted services are OfflineID sign-ins (every method: email codes, Google, Privy and guest sessions), hosted relay deliveries, telemetry ingest and Proof of Location verifications.

* **Free without a card.** When any meter uses its full quota, all metered hosted services pause. They resume as soon as you add a card or choose a paid plan in **Billing**, or when the next billing period starts.
* **Billing limits.** With a card on file you can set a billing limit for each meter in **Billing**. Charges for that meter never exceed the limit. When usage reaches it, that meter's service pauses (other services keep running) until you raise or remove the limit, or the next billing period starts. You get an email when this happens.
* **Failed payments.** While Stripe retries a failed payment, services keep running. If the payment still fails after the retries, all metered hosted services pause until you update the card in **Billing** and the invoice is paid.
* **Monthly active users** count each end user who signs in to an application at least once in the calendar month (UTC), whichever sign-in method they use. Each guest session counts as one user in the month it starts. Sign-ins sent with the application's older `proj_` ID count toward the same application as its `app_` ID. A person who signs in to two of your applications counts once in each.

While a service is paused, requests are refused rather than queued, so paused usage is never billed:

| Service | What callers see |
| - | - |
| OfflineID sign-in and code requests | HTTP 402 with the message "Sign-in is paused for this app. Please contact the app's developer." |
| Telemetry ingest | HTTP 402 with error `usage_limit_reached`; the batch is not stored |
| Hosted relay | The send is refused with an error message on the relay connection |
| Proof of Location commitments | HTTP 402 with a message naming the cause (plan limit, billing limit or failed payment) |

OfflineID, hosted relay and Proof of Location usage is counted within minutes, so their pauses start within a few minutes of the quota or limit being reached. Telemetry events are counted once a day, so a telemetry pause can start up to a day later. A pause lifts within a minute or two of adding a card, choosing a plan or raising a limit. Data is never deleted because of a pause. The [developer terms](https://www.offlineprotocol.com/legal/developer-terms#fees) govern plans and billing.

Local peer-to-peer traffic is never metered or paused. Hosted subscriptions and usage charges remain separate from SDK licensing.

## Subscriptions, invoices and refunds

Owners, admins and billing members manage the plan in **Billing**. Subscribing, adding a card and upgrading each require accepting the [Developer Terms](https://www.offlineprotocol.com/legal/developer-terms) in the portal, and Stripe Checkout asks for the same acceptance with its own checkbox. Checkout shows the billing terms above the subscribe button: "Billed monthly, cancel anytime. All subscriptions are non-refundable." Adding a card on Free shows "No charge today. Usage beyond the Free plan's quotas is billed monthly." We record each acceptance with the account, time, IP address, terms version and the billing summary shown.

* **Billing period.** Plans bill by calendar month (UTC). The first invoice is prorated to the end of the month.
* **Upgrades** are charged the prorated difference immediately and take effect once it is paid.
* **Downgrades and cancellation.** To cancel a paid plan, downgrade to Free. A downgrade takes effect at the end of the current billing period, and the current plan continues until then. **Keep plan** in Billing undoes a scheduled downgrade.
* **Overage** for a month is invoiced at the start of the next month, rounded to the nearest cent. When a paid plan ends, the final month's overage is invoiced separately.
* **Refunds.** Fees are non-refundable, including for partial months and unused quota. Billing errors and duplicate charges are corrected by refund or credit.
* **Invoices, receipts and cards** are in the Stripe customer portal, opened from Billing.

If you believe a charge is wrong, email [support@offlineprotocol.com](mailto:support@offlineprotocol.com) with the organization name and invoice number before disputing it with your card issuer. Enterprise agreements are invoiced under their own terms.
