Skip to main content
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.
Logo rules: PNG, JPEG, WebP, or SVG; max 2 MB. The CLI base64-encodes it for you.

JSON output

The raw key is stored in ~/.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.
Each 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):
The nextAction field is designed to be acted on programmatically. For example:

What’s saved locally

After a successful signup-complete or login-complete:
  • The raw cko_ key, its prefix, scopes, keyName, org id/name, and createdAt are written to ~/.config/slideless/config.json (mode 0600) as a new profile.
  • That profile is marked active.
  • Subsequent commands (slideless share, slideless whoami, slideless list, …) pick it up automatically.
Nothing is logged to shell history (the OTP code is an argument, not an env var, so it only appears in your terminal scrollback until you clear it).

Single-organization rule

A Slideless account has exactly one organization. Two consequences:
  1. signup-request refuses (USER_ALREADY_HAS_ORGANIZATION) if the email already owns one. The returned nextAction tells you to switch to login-request.
  2. Re-running signup-complete after an org exists would try to create a second one; the backend blocks it at both the endpoint and the createOrganization level.
If you need access to the same org from a different email, use the dashboard’s team-invite flow.

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.