Terms of Service

Last updated: October 8, 2026. Effective: October 8, 2026.

DRAFT — This document requires owner/legal review before publication. It reflects the current code behavior as of the date above.

1. What SMSly Is

SMSly is an Android application (package com.apexmobile.smsservice) that sells one-time virtual phone numbers for receiving SMS verification codes from online services (e.g., WhatsApp, Telegram, ChatGPT). You choose a service and a country, pay from an in-app wallet, receive the code, and are refunded automatically if no SMS arrives within the allocation window.

The service is provided by Timotty Two LLC ("we", "us", "our"). By using the app, you agree to these Terms.

2. Eligibility

You must be at least 13 years old (or the minimum age required in your jurisdiction) to use SMSly. The app is not directed to children under 13. If you are a parent or guardian and believe your child has provided personal information, contact us at support@edgpt.site.

3. Accounts and Identity

3.1 Anonymous device accounts

On first launch, the app generates a 32-byte device secret stored in the Android Keystore (or iOS Keychain). The server stores only the SHA-256 hash of this secret. One device = one account. This account is anonymous: it has no email, no display name, and no password. Your Activations balance is tied to this device. If you reinstall the app without linking Google or Apple, the balance is lost.

3.2 Optional Google / Apple sign-in

You may link a Google account (Android) or Apple account (iOS) via Firebase Authentication. This attaches the provider's stable subject identifier to your SMSly account, allowing you to recover your balance on a new device or after reinstall. Linking is optional. We receive only the Firebase UID, the provider subject ID, the email (or private-relay address for Apple), and the display name. We never see your Google/Apple password.

3.3 Account merging

If you link a provider that already has an SMSly account, you may choose to move your anonymous balance into that existing account (one direction only: anonymous → linked). This is a zero-sum ledger transfer; the anonymous account is then marked merged and its device credential revoked.

4. Purchases, Wallet, and Activations

4.1 Activations

The wallet unit is an integer count of Activations. One Activation is the price of one standard number. Balances, prices, grants, debits, and refunds are all integer Activations — never fractional, never in USD.

4.2 Packs

Activations are sold in fixed packs through Google Play Billing (RevenueCat):

Product IDGrantsReference price (US)
activations_55 Activations$0.99
activations_1515 Activations$2.49
activations_4040 Activations$5.99
activations_100100 Activations$12.99

The price you pay is the store's price in your currency. The reference prices above are used only to compute per-Activation value and "Best value" marking (which applies only to the 15-Activation pack). No bonus Activations, no promotional multipliers.

4.3 Refund rule

If a number receives no SMS before it expires, its cost is automatically refunded to your Activations balance. Once a verification code has been delivered, no refund is issued — not on cancel, not on expiry, not via support. This is the "Golden Rule of Refund" enforced by the server.

4.4 No cash value

Activations have no monetary value outside the app. They cannot be withdrawn, transferred to another user (except via the account-merge flow), or exchanged for cash.

5. Phone Numbers and SMS Delivery

Numbers and SMS text are supplied by a third-party provider (TemporaSMS in production; a sandbox provider in development). When you order a number, we request a line from the provider for the chosen service and country. The provider returns a phone number and an activation ID. We poll the provider for incoming SMS. The SMS text (including the verification code) is delivered to you in the app and stored in our database linked to your account.

We do not control carrier delivery rates or latency. The app shows a delivery-rate indicator (green ≥ 95%, amber < 95%) based on historical data from the provider.

6. Data We Collect and Why

Device secret (SHA-256 hash)
To identify your anonymous account across sessions. The raw secret never leaves your device.
Firebase UID, provider subject ID, email, display name
Only if you link Google or Apple. Used to authenticate you and enable account recovery.
Activation records
Service, country, phone number, provider activation ID, cost, status, timestamps, and the received SMS text (code + raw message). Required to deliver the service and for audit.
Wallet ledger
Every debit/credit (purchases, refunds, forfeitures, merges) with idempotency keys. Immutable double-entry ledger for financial integrity.
Device label
First 8 hex chars of SHA-256(user ID). Shown in-app and included in support emails so we can locate your account. Not a hardware identifier.
Metrics (aggregated, no PII)
Activation counts, durations, delivery rates, wallet events, provider API latency, error rates. Sent to CloudWatch via EMF logs.

7. Third Parties

We do not sell personal data. Third parties process data only as needed to provide their specific service.

8. Retention

Account data (email, display name, Firebase UID, provider identities)
Retained while the account is active. On deletion: email and display name are nulled, display name set to "Deleted User", Firebase UID cleared, provider identities deleted. The users row remains with status = 'deleted'.
Wallet ledger (wallet_transactions)
Retained permanently (ON DELETE RESTRICT) for tax, accounting, and anti-fraud compliance. Never deleted.
Activations and SMS messages
Retained permanently (ON DELETE RESTRICT) for audit and dispute resolution. Never deleted.
Rentals
Retained permanently (ON DELETE RESTRICT).
Webhook events (RevenueCat)
Retained permanently.
Device credentials
Revoked on deletion (marked revoked_at, revoke_reason = 'account_deleted'), row retained.
Metrics logs (CloudWatch)
Kept only as long as necessary for the purposes described in this document and as required by applicable law. CloudWatch retention settings apply.

Note — Metrics logs and backups are retained only as long as necessary for operational, security, and compliance purposes, and as required by applicable law.

9. Account Deletion

You may delete your account from the app: Profile → Delete account and all data. This triggers DELETE /api/auth/account, which runs in a single transaction:

  1. Cancel any WAITING_SMS activations with their usual refund (refund added to balance).
  2. Forfeit the entire balance (including those refunds) via an ACCOUNT_DELETION_FORFEITURE ledger entry; wallet set to 0.
  3. Soft-delete the user: status = 'deleted', email = NULL, display_name = 'Deleted User', firebase_uid = NULL, token_version + 1 (revokes all sessions).
  4. Delete linked identities (user_identities).
  5. Revoke all device credentials (revoke_reason = 'account_deleted').
  6. After commit: ask provider to cancel the numbers; delete the Firebase user (if linked).

Money that reaches a deleted account later (redelivered purchase, in-flight refund) is credited to the deleted account's ledger where support can find it; it is not refused or redirected. A subsequent deletion would forfeit it.

For users who cannot access the app, contact support@edgpt.site with your device label (shown in Profile) to request deletion.

10. Sign-out (Linked Accounts Only)

If you have linked Google or Apple, you may sign out from Profile. This revokes only the current device's credential; the account, its balance, and other devices remain. Anonymous accounts cannot sign out (the device is the only credential).

11. Disclaimers

12. Changes to These Terms

We may update these Terms. Material changes will be notified in-app. Continued use after the effective date constitutes acceptance.

13. Governing Law and Contact

These Terms are governed by the laws of the United States. Disputes will be resolved in the competent courts of the United States.

Questions? Contact support@edgpt.site.