Register a new user and organisation
POST
https://app.speybooks.com/api/v1/registration/registerRegister a new user and provision their organisation. This is a multi-step atomic operation:
- Validate input and check email uniqueness
- Determine trial length (first 50 signups: 90 days, then 30)
- Create organisation with UUID, slug, and default UK settings
- Create user with Argon2id-hashed password
- Link user to organisation as owner
- Seed chart of accounts (Sole Trader or Limited Company variant)
- Seed default categorisation rules (TMADD Phase 4c)
- Create default financial period (current UK tax year)
- Create default invoice settings
- Commit transaction
- Create Stripe customer and checkout session (non-blocking)
- Send verification and welcome emails (non-blocking)
Returns a JWT for immediate authentication (token) and optionally a Stripe checkout URL for payment setup (checkoutUrl, present when Stripe is configured). The user object includes emailVerified: false and createdAt for immediate UI hydration.
Public endpoint with rate limiting. Returns 409 if the email is already registered (without revealing which email).
Body parameters
email string requiredEmail address for the new account. Must be unique across all users.
fullName string requiredFull name of the user (1-255 characters).
organisationName string requiredName of the organisation to create (1-255 characters).
password string requiredplan string optionalBusiness type. Determines the chart of accounts seeded and the Stripe plan. Defaults to limited-company.
sole-traderlimited-companyResponse
201 User and organisation created successfully. Returns a JWT token for immediate authentication and optionally a Stripe Checkout URL.
Show response fields
checkoutUrl stringStripe Checkout URL to collect payment. Null if Stripe setup failed (user can complete later).
organisation objectThe newly created organisation.
Show child attributes
id stringOrganisation UUID.
name stringOrganisation name.
slug stringURL-friendly slug derived from the organisation name.
token stringJWT authentication token. Use in Authorization: Bearer header.
user objectThe newly created user.
Show child attributes
createdAt string date-timeISO 8601 creation timestamp.
email stringUser email address.
emailVerified booleanAlways false at registration. Verification email is sent automatically.
fullName stringUser full name.
id integerInternal user ID.
Error codes
400 Validation error. Check the details field for per-field errors.
409 Email address already registered.
429 Rate limit exceeded. Try again later.