Tenant setup guide

Let your AI help set up SplashIQ

The SplashIQ setup CLI lets an AI assistant help the owner organize one workspace. It can check setup progress, import approved records, and prepare email drafts. It cannot send mail, read billing information, or manage another company. You can follow the steps below yourself or use the optional copy-and-paste instruction at the end.

Start with an owner-controlled token

  1. Sign in as the tenant owner and open Settings → AI setup access.
  2. Create a named token. Leave it read-only, or separately allow imports and email drafts.
  3. Copy the token when it appears. SplashIQ stores only its hash and cannot show it again.
  4. Use a private secret setting only if your AI tool truly provides one. Otherwise set the token privately in your own terminal. Revoke it when setup is done.

Tokens expire after 30 days and can be revoked immediately. Never put a token in a public prompt, repository, screenshot, or shared document. The owner’s normal login and backend service keys are not CLI credentials.

What the CLI can do

PermissionAllowed work
Setup statusSee workspace setup counts, not customer records or billing.
ImportsPreview and, with an explicit confirmation, import customers, properties, service names and rates, and scheduled visits.
Email draftsPrepare a draft for an imported customer. The owner reviews it in SplashIQ; sending is disabled.

Imported rates are service-catalog reference data. They do not create invoices or change customer billing.

Use the fixed-origin CLI

Download and review the SplashIQ tenant CLI source. It connects only to splashiq.ai and has no arbitrary URL or billing command. Run it with Node.js 22 or newer.

node splashiq-tenant.mjs status
node splashiq-tenant.mjs import-preview setup.json
node splashiq-tenant.mjs import-commit BATCH_ID setup.json --confirm
node splashiq-tenant.mjs email-draft draft.json

These commands require SPLASHIQ_SETUP_TOKEN in the private environment. Never put the token itself in a command or chat message.

Preview accepts at most 100 total rows and returns a batch ID valid for one hour. Commit requires the same file and checks for duplicates and changed external IDs again. A failed batch writes no partial customer, property, service, or visit records.

Prepare import files

Use stable external IDs from your source system. Properties refer to a customer ID; scheduled visits refer to a property ID and a service ID. Times need an explicit UTC offset. Every import file has four arrays, even when some are empty:

{
  "customers": [{ "external_id": "customer-1", "full_name": "Example Customer", "email": "example@example.com" }],
  "properties": [{ "external_id": "pool-1", "customer_external_id": "customer-1", "address": "123 Example St", "city": "Austin", "state": "TX", "zip": "78701" }],
  "services": [{ "external_id": "weekly", "name": "Weekly cleaning", "rate_cents": 12500 }],
  "visits": [{ "external_id": "visit-1", "property_external_id": "pool-1", "service_external_id": "weekly", "scheduled_for": "2026-10-15T09:00:00-05:00" }]
}

Rates are USD cents. For an email draft, use a separate JSON file with customer_external_id, subject, and body_text. The customer must already have been imported with an email address.

The CLI is for initial setup only. It does not offer ongoing billing or customer-information access. A future MCP adapter would use the same narrow permissions, not a broader key.

Optional AI-assisted setup

Paste this into Grok or ChatGPT

Prefer to have an assistant walk you through the same steps above? Copy this instruction into a new conversation. It will ask about your setup goals and files, then guide you through the supported CLI process.

Keep your setup token out of the conversation.

There is no universal private secret box across AI chats. The instruction tells the assistant to use a private secret setting only when one is actually available, or to guide you through running the CLI on your own computer. Never paste a token into chat.

This is an additional way to use the guide, not a required step.

Help me, the owner, set up my own SplashIQ tenant at https://splashiq.ai. Be a careful setup assistant, not a billing or email-sending agent.

First ask what I want to set up: customers, pool properties, service names and rates, scheduled visits, email drafts, or a combination. Ask what source files I have. Check whether this chat has both a trusted terminal/CLI tool and a private secret-entry mechanism. Do not ask me to paste customer records or credentials into chat by default. Explain where customer data would go before requesting any upload or tool use.

Secret handling:
1. Guide me to sign in myself at https://splashiq.ai/settings/agent-access and create a named, revocable setup token. Ask me to enable only the needed permissions: status, imports, and/or email drafts. Tokens expire after 30 days.
2. Never ask for my SplashIQ password, a backend/service-role key, a billing credential, or the token in a chat message. Never print a token in a reply, command, log, URL, file, or screenshot.
3. If this product really has a private secret setting for a trusted terminal/CLI tool, tell me where to enter the token as SPLASHIQ_SETUP_TOKEN. Check that the value will not be echoed into the conversation or tool logs. Do not invent or promise a secure box that you cannot identify.
4. Otherwise, do not collect the token. Guide me to set SPLASHIQ_SETUP_TOKEN privately in my own local terminal and run commands myself. Show placeholders only, not a command containing the real token. Remind me to revoke the token after setup.

Use only SplashIQ's fixed-origin CLI from https://splashiq.ai/downloads/splashiq-tenant.mjs. Help me download and review that file from SplashIQ's website. It needs Node.js 22 or newer and connects only to https://splashiq.ai. Do not substitute another script, redirect requests to another host, or invent commands. The commands are:
  node splashiq-tenant.mjs status
  node splashiq-tenant.mjs import-preview setup.json
  node splashiq-tenant.mjs import-commit BATCH_ID setup.json --confirm
  node splashiq-tenant.mjs email-draft draft.json
The CLI reads SPLASHIQ_SETUP_TOKEN from the environment.

For imports, help me prepare local JSON with stable source IDs. Every file needs four top-level arrays: customers, properties, services, visits. A batch contains 1–100 rows total. Customer: external_id, full_name, optional email and phone. Property: external_id, customer_external_id, address, optional city, state and zip. Service: external_id, name, optional description, rate_cents as integer US cents. Visit: external_id, property_external_id, service_external_id, scheduled_for as an ISO date/time with a UTC offset, optional notes. Check references and duplicates before preview. Never invent customer details, locations, rates, appointments, or consent; ask me to resolve missing values.

Run or have me run import-preview first. Show counts, issues, and a privacy-conscious summary, not a dump of personal data. A successful preview returns a batch ID valid for one hour. Before import-commit, ask for my explicit approval of that exact batch and unchanged file; then use --confirm. A preview is not an import. Imported rates are reference data only; they do not create invoices or change billing.

For an email draft, prepare a separate local JSON file with customer_external_id, subject and body_text. The customer must already be imported with an email address. Ask whether the message is operational or marketing, and let me review the wording and recipient. The CLI only creates a draft for owner review inside SplashIQ; it cannot send email. Never claim a message or campaign has been sent.

Never access another tenant, billing data, invoices, payments, or arbitrary customer exports. At the end, distinguish what was prepared, previewed, committed, and drafted. Tell me what remains for my review in SplashIQ and remind me to revoke the token. Begin by asking my setup goal and what files I have, then explain the safe token path available in this chat. Do not ask for a secret in your reply.