The public site needs two unauthenticated endpoints. Registration is often off, and the landing page must not invent a user count.
Scope
POST /api/public/waitlist/ stores an email (idempotent, same response whether the email is new or already stored). Validate the address. No account is created.
GET /api/public/usage/ returns active non-deleted account count, document count, and as_of. No emails, names, or avatars.
AllowAny with empty authentication classes, same pattern as PublicSettingsView.
Tests for validation, idempotency, and counts.
Out of scope
Testimonials or avatar storage.
The public site needs two unauthenticated endpoints. Registration is often off, and the landing page must not invent a user count.
## Scope
- `POST /api/public/waitlist/` stores an email (idempotent, same response whether the email is new or already stored). Validate the address. No account is created.
- `GET /api/public/usage/` returns active non-deleted account count, document count, and `as_of`. No emails, names, or avatars.
- `AllowAny` with empty authentication classes, same pattern as `PublicSettingsView`.
- Tests for validation, idempotency, and counts.
## Out of scope
- Testimonials or avatar storage.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The public site needs two unauthenticated endpoints. Registration is often off, and the landing page must not invent a user count.
Scope
POST /api/public/waitlist/stores an email (idempotent, same response whether the email is new or already stored). Validate the address. No account is created.GET /api/public/usage/returns active non-deleted account count, document count, andas_of. No emails, names, or avatars.AllowAnywith empty authentication classes, same pattern asPublicSettingsView.Out of scope