Skip to content

Let customers sign in

Say "let my customers sign in" and get a private workspace per customer, passkey and email-link sign-in on your domain, and invites for their team.

Each Customer gets a private workspace, its Tenant, and its people sign in on your Domain with the Role you give them.

Needs Customer

What you get

  • 1private workspace per customer, kept apart from every otherTenant
  • 1sign-in by passkey or email link on your domainPortal
  • 1invite email from your domain, with your brandMessage
  • 1member with a role inside that workspacePerson
  • 1seat added to the bill when the plan prices per personSubscription
  • 1seat count kept in step with the billSubscription
  • 1single sign-on and directory sync, off until a customer asksSSO Connection

Your agent does

Tenant.provision → Tenant.invite
You, to your agent

Let my customers sign in.

Let a property manager invite their team.

Turn on single sign-on for customers who need it.

# 1. Tenant.provision
TENANT=$(curl -X POST https://api.sb/leaseline.app/tenants/provision \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer":"customer_harbor"}' | jq -r '.tenant["$id"] | split("/") | last')

# 2. Tenant.invite
curl -X POST https://api.sb/leaseline.app/tenants/$TENANT/invite \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"maria@harborlets.com"}'
import { $ } from 'startup-builder'

const tenant = await $.Tenant.provision({ customer: 'customer_harbor' })
await $.Tenant.invite({ tenant: tenant.$id, email: 'maria@harborlets.com' })
TENANT=$(npx startup-builder do Tenant.provision --json '{"customer":"customer_harbor"}' | jq -r '.tenant["$id"] | split("/") | last')
npx startup-builder do Tenant.invite --json '{"tenant":"'"$TENANT"'","email":"maria@harborlets.com"}'
{
  "name": "do",
  "arguments": {
    "code": "const tenant = await $.Tenant.provision({ customer: 'customer_harbor' })\nreturn await $.Tenant.invite({ tenant: tenant.$id, email: 'maria@harborlets.com' })"
  }
}

Change it

  • Require single sign-on for every customer above 50 seats.
  • Let a customer admin remove members.
  • Sign people out after 12 hours.

Under the hood

Systems
Customer access
Nouns
Tenant, Customer, Person, Role, SSO Connection
Events
Tenant.provisioned, Tenant.invited
Stripe objects
Subscription Item