This is the default path in the quickstart and the one the
setup-slideless marketplace skill uses. If you already have a key from the dashboard, slideless login --api-key cko_... is still available.When to use OTP
The OTP flow is two calls: one that emails a 6-digit code, one that consumes the code. No passwords, no dashboard visit. The resulting
cko_ key is saved to ~/.config/slideless/config.json and set as the active profile — so slideless share, slideless list, etc. work immediately after.
Signup
Minimal (email + code + first name)
--first-name is required — it’s stored as your display name and used in onboarding emails. If you omit it, the CLI fails fast with a clear error. The resulting organization is named "Alex's workspace" by default; pass --company to override or rename later from the dashboard.
With company details
Everything beyond--email + --code + --first-name is optional and mapped straight onto the new user / organization document.
JSON output
~/.config/slideless/config.json; it is not echoed to stdout in the JSON response.
Login
Use this when the email already has a Slideless account but the current machine has no valid key.login-complete mints a fresh cko_ key scoped to your existing organization and saves it as a new profile. Previous keys stay valid (you can revoke them from the dashboard if you want).
Options (signup-complete & login-complete)
Signup-specific:
Rate limits
- Resend cooldown: 30 seconds between OTP requests for the same email.
- Abuse caps: 20 OTP requests per email per hour; 60 per IP per hour.
- Code lifetime: 10 minutes.
- Brute-force lockout: after 5 bad codes, the server deletes the record and makes you request a fresh one.
Error codes
Every failure returns this shape (both in--json output and in the structured log of the human renderer):
nextAction field is designed to be acted on programmatically. For example:
What’s saved locally
After a successfulsignup-complete or login-complete:
- The raw
cko_key, its prefix, scopes,keyName, org id/name, andcreatedAtare written to~/.config/slideless/config.json(mode0600) as a new profile. - That profile is marked active.
- Subsequent commands (
slideless share,slideless whoami,slideless list, …) pick it up automatically.
Single-organization rule
A Slideless account has exactly one organization. Two consequences:signup-requestrefuses (USER_ALREADY_HAS_ORGANIZATION) if the email already owns one. The returnednextActiontells you to switch tologin-request.- Re-running
signup-completeafter an org exists would try to create a second one; the backend blocks it at both the endpoint and thecreateOrganizationlevel.
See also
- Quickstart — the full five-minute path that uses this.
cli/commands— compact syntax reference for the four subcommands.- HTTP API: CLI auth endpoints — the underlying
POST /cliRequestSignupOtp//cliCompleteSignup//cliRequestLoginOtp//cliCompleteLogin.