Claude API Customer Onboarding Assistant Guide
A customer onboarding assistant built on the Claude API is a conversational agent embedded in your app's setup flow that answers questions, walks users through configuration steps, and flags where someone is stuck — instead of making them read docs or file a support ticket. It works because onboarding questions are repetitive and predictable, which is exactly the kind of task a well-prompted language model handles reliably.
This guide covers the practical architecture: what context to feed Claude, how to structure the conversation so it stays on task, how to hand off to a human when needed, and how to get this running behind a stable API without building your own LLM infrastructure.
Why onboarding is a good fit for Claude
Most onboarding friction comes from a small set of repeated issues: users don't know which plan feature unlocks what they need, they get stuck on a config step, or they ask a question your docs already answer but in different words. A support team spends a lot of time restating the same answers. An assistant that has your product docs, your account schema, and the user's current onboarding step as context can resolve most of this without a human.
The key design decision is scope. An onboarding assistant should not try to be a general support bot. It should know:
- The onboarding steps and their order
- What "done" looks like for each step
- Common failure points and their fixes
- When to stop and escalate
Designing the onboarding assistant
1. Give it a narrow system prompt
Keep the assistant locked to onboarding tasks. A broad, helpful-everything prompt will drift into answering unrelated support questions poorly.
You are the onboarding assistant for Acme's dashboard setup.
You only help with: account setup, API key generation, connecting
the first data source, and inviting teammates.
If asked anything outside these topics, say you'll route them to
support and stop.
Always ask which step they're on before giving instructions.
2. Pass structured onboarding state
Don't rely on the model to infer where a user is. Pass it explicitly as part of the conversation context, pulled from your database:
{
"step": "connect_data_source",
"completed_steps": ["account_created", "api_key_generated"],
"plan": "team",
"last_error": "invalid_webhook_url"
}
Feeding this as a system or user message before the actual question means Claude doesn't have to guess, and your responses stay accurate even if the user describes their problem vaguely.
3. Use tool calls for live lookups
Onboarding questions often need real data: "why isn't my webhook working" needs the actual webhook logs, not a guess. Define a tool the model can call to fetch that:
{
"name": "get_webhook_status",
"description": "Returns the last delivery attempt and error for a webhook URL",
"input_schema": {
"type": "object",
"properties": {
"account_id": { "type": "string" }
},
"required": ["account_id"]
}
}
The model calls the tool, your backend returns the result, and Claude explains the fix in plain language instead of telling the user to "check their webhook configuration" in the abstract. Details on structuring this are in /docs/tools.
4. Stream the response
Onboarding happens inside your product UI, usually a chat widget or inline help panel. Streaming tokens as they're generated keeps the interaction feeling responsive instead of making users stare at a spinner while a multi-step explanation gets generated. See /docs/streaming for implementation details.
5. Build in an escalation path
Set a hard rule: if the assistant can't resolve the issue in two or three turns, or the user explicitly asks for a human, it should say so and trigger a handoff rather than keep guessing. This protects trust in the assistant — nothing kills adoption faster than a bot that confidently gives wrong instructions in a loop.
Example request
Here's a minimal onboarding call combining state and a tool definition, sent through SubToAPI's Claude-compatible endpoint:
curl https://api.subtoapi.app/v1/messages \
-H "Authorization: Bearer $SUBTOAPI_KEY" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4",
"max_tokens": 500,
"system": "You are the onboarding assistant for Acme. Only help with setup steps: account, api_key, data_source, invite_team.",
"messages": [
{
"role": "user",
"content": "Onboarding state: step=connect_data_source, completed=[account,api_key]. User question: my webhook keeps failing."
}
],
"tools": [
{
"name": "get_webhook_status",
"description": "Returns last webhook delivery attempt and error",
"input_schema": {
"type": "object",
"properties": { "account_id": { "type": "string" } },
"required": ["account_id"]
}
}
]
}'
Where SubToAPI fits
If you're already using Claude through a personal or team subscription, standing up an onboarding assistant in your product usually means you need a stable, application-level API key, usage visibility across your team, and streaming support — none of which a regular subscription gives you by default. SubToAPI turns your existing Claude access into an HTTPS API with sub_live_ keys, streaming, tool use, and per-key usage metadata, so you can embed the onboarding assistant directly in your product without separately managing a developer API account. Plans start at Solo €9, with Team (€19/seat) and Scale (€49/seat) tiers for products with multiple engineers or higher volume — see /pricing. There's a free trial at /signup, and /docs/quickstart walks through the first integration in a few minutes.
Measuring whether it's working
Track three things once it's live:
- Resolution rate — percentage of onboarding conversations that end without a support escalation
- Step completion time — whether users with assistant access finish onboarding faster than those without
- Escalation accuracy — whether the assistant escalates appropriately, not too early or too late
If resolution rate is low, the problem is usually missing context (the model doesn't have the data it needs) rather than a bad prompt. Add tools before you add more prompt instructions.
questions
Does the Claude API support streaming responses for a chat-style onboarding widget? Yes. Claude supports streaming natively, and SubToAPI passes this through so you can render tokens as they arrive instead of waiting for the full response. See /docs/streaming for setup.
How do I stop the assistant from answering unrelated support questions? Scope it tightly in the system prompt, list the exact topics it's allowed to handle, and instruct it to escalate anything outside that scope rather than attempt an answer.
Can the onboarding assistant take actions, like creating an API key for the user? Yes, through tool use. Define a tool for the action, let Claude call it with the right parameters, and execute it on your backend. See /docs/tools for schema design.