The key decides the environment
account.signup creates a live and a test environment for every project, each with its own secret and publishable key. Which one a request acts in is decided by the key it carries — there is no mode flag to set, and so none to forget.
A key says which it is. Secret keys start lath_live_ or lath_test_; publishable keys start lath_live_pk or lath_test_pk. The two environments hold separate data, so the same person in live and in test is two records.
Email reaches your own team, and nobody else
A test environment can send email only to the account’s own members — people who have accepted an invitation. Any other address is refused withtest_mode_recipient (403), and the refusal names account.member.invite as the way to add a colleague.
A member’s address with a plus-tag counts as that member, so dev+welcome@yourco.com and dev+bounce@yourco.com both reach dev@yourco.com. One member can stand in for every case in a test suite.
Being invited is not enough. An address that was sent an invitation but has not accepted it is refused too, because nothing yet shows that anyone reads that mailbox.
SMS is not sent from test
A test environment refuses every text withtest_mode_recipient. An account’s members are identified by email address, and nothing in the account proves control of a phone number — so rather than pretend, there is no test allow-list for SMS.
Send texts from the live environment, where the spending cap and the carrier registration both apply.
Fifty messages a day
A test environment may create 50 messages in any 24 hours. The next is refused withtest_mode_limit (429) until the window moves.
It is not a billing control — test sends are never billed — it is the difference between a loop that wastes a morning and one that costs a sending domain its reputation.

