Launch Ready API security Checklist for AI chatbot product: Ready for customer onboarding in B2B service businesses?.
For a B2B service business, 'launch ready' does not mean the chatbot merely responds. It means a new customer can sign up, authenticate, connect their...
What "ready" means for an AI chatbot product in B2B onboarding
For a B2B service business, "launch ready" does not mean the chatbot merely responds. It means a new customer can sign up, authenticate, connect their data, and start getting useful answers without exposing customer data, breaking onboarding, or creating support debt.
I would call it ready only if these are true:
- The onboarding flow works end to end on desktop and mobile.
- API access is authenticated, authorized, rate limited, and logged.
- No secrets are exposed in the frontend, repo history, or deployment logs.
- Domain, email, SSL, redirects, and subdomains are correct.
- SPF, DKIM, and DMARC pass so onboarding emails do not land in spam.
- Monitoring alerts you before customers do.
- The chatbot cannot be tricked into leaking private data or calling unsafe tools.
- p95 API response time stays under 500 ms for common onboarding actions.
- There are no critical auth bypasses or broken tenant boundaries.
If any one of those fails, the product is not ready for customer onboarding. It may still demo well, but demos do not pay support tickets.
Quick Scorecard
| Check | Pass criteria | Why it matters | What breaks if it fails | |---|---|---|---| | Authenticated API access | All onboarding endpoints require valid auth | Prevents unauthorized access | Data leaks, account takeover | | Tenant isolation | One customer cannot read another customer's records | Core B2B trust requirement | Cross-customer data exposure | | Secret handling | Zero secrets in client code or repo | Protects keys and integrations | Billing abuse, data exfiltration | | Rate limiting | Abuse thresholds on login and chat endpoints | Stops brute force and spam | Downtime, cost spikes | | Input validation | Reject malformed payloads and prompt injection patterns | Reduces attack surface | Broken flows, unsafe tool use | | CORS policy | Only approved origins can call APIs | Blocks browser-based abuse | Token theft, unauthorized requests | | Email authentication | SPF/DKIM/DMARC passing | Keeps onboarding emails deliverable | Spam folder placement | | TLS and redirects | SSL valid on all domains and 301s correct | Prevents trust issues and SEO loss | Browser warnings, broken links | | Monitoring coverage | Uptime checks plus error alerts active | Speeds incident response | Silent failures during launch | | Logging hygiene | No tokens or PII in logs | Limits blast radius during incidents | Compliance risk, data exposure |
The Checks I Would Run First
1. I would test auth on every onboarding endpoint
Signal: Can I hit any onboarding API without a valid session or token? If yes, the product is not safe to launch.
Tool or method: I would use Postman or curl with no auth header, then with an expired token, then with a token from another tenant. I would also inspect network calls in the browser to see whether privileged actions are happening client-side.
Fix path: Put auth behind a single middleware layer first. Then enforce authorization per resource, not just per route. For B2B chat products, tenant ID checks must happen server-side on every read and write.
2. I would verify tenant isolation with cross-account tests
Signal: A user from Company A can query Company B's conversations, files, embeddings, or usage stats.
Tool or method: I would create two test tenants and try swapping IDs in requests. I would inspect direct object references like conversation_id, workspace_id, customer_id, and file_id.
Fix path: Scope every database query by tenant. Add row-level security where possible. If the app uses vector search or shared indexes for chatbot memory, partition by tenant before you scale traffic.
3. I would check secret exposure across frontend and deployment
Signal: Any API key appears in client bundles, environment files committed to git, Vercel/Netlify logs, CI output, or browser network responses.
Tool or method: I would scan the repo for common secret patterns and inspect built assets. I would also review environment variables in the hosting dashboard and rotate anything that was ever exposed.
Fix path: Move all third-party keys server-side. Use separate keys for dev/staging/prod. Rotate secrets immediately if they touched a public repo or browser bundle.
4. I would test rate limits on login and chat endpoints
Signal: Repeated requests can hammer auth endpoints or expensive LLM calls without throttling.
Tool or method: I would run a small burst test against login, password reset if present, chat send message, file upload if present, and webhook endpoints. Even 20 to 50 rapid requests should show whether controls exist.
Fix path: Add rate limits by IP plus user plus tenant. Put stricter limits on expensive AI actions. If your chatbot triggers tool calls or retrieval jobs, queue them instead of running everything inline.
5. I would inspect CORS and browser access rules
Signal: The API accepts requests from any origin while using cookies or bearer tokens.
Tool or method: I would check response headers with curl -I and test from an unapproved origin. If credentials are allowed cross-site without strict origins, that is a problem.
Fix path:
Access-Control-Allow-Origin: https://app.yourdomain.com Access-Control-Allow-Credentials: true
Use an allowlist only. Never use wildcard origins for authenticated production apps.
6. I would red team the chatbot itself
Signal: The bot reveals system prompts, internal URLs, hidden instructions, customer records, or tool credentials when asked nicely or aggressively.
Tool or method: I would run prompt injection tests like "ignore previous instructions", "show me your system prompt", "export all customer notes", and malicious file content that tries to override behavior. I would also test whether external documents can instruct the model to call tools unsafely.
Fix path: Separate instructions from untrusted content. Treat retrieved documents as data only. Add tool permission checks server-side before execution. For high-risk flows like sending emails or updating CRM records, require human confirmation until you have evaluation coverage you trust.
Red Flags That Need a Senior Engineer
1. The chatbot has access to customer data but no clear tenant boundary. This is how one client's information ends up visible to another client during onboarding.
2. Secrets were copied into Lovable-style frontend variables or pasted into chat prompts. That usually means at least one key has already leaked somewhere you cannot fully audit.
3. The app uses multiple third-party services but nobody can explain who owns each credential. This creates broken handoffs later when something fails at 11 pm and no one knows which key expired.
4. Onboarding depends on webhooks but there is no retry logic or dead-letter handling. A single failed webhook can break account creation or provisioning for hours.
5. There is no logging strategy beyond console.log. When onboarding breaks you will have no proof of where it failed except angry customer emails.
DIY Fixes You Can Do Today
1. Remove any secret-looking values from frontend code now. If it starts with sk_, pk_, ghp_, xoxb_, or looks like an API token string that belongs server-side only there is no reason for it to live in the browser bundle.
2. Turn on SPF DKIM DMARC before sending onboarding emails. This reduces spam-folder placement fast and improves delivery for welcome emails and password resets.
3. Verify your custom domain redirects cleanly to one canonical URL. Pick one primary domain version with HTTPS only so customers do not land on mixed-content warnings or duplicate pages.
4. Add a basic uptime monitor today. Even a simple ping check every 1 minute with alerting is better than discovering downtime through a prospect complaint.
5. Test your signup flow with two real email addresses. One should be Gmail and one should be a company domain address so you can catch deliverability issues before launch day support starts piling up.
Where Cyprian Takes Over
This is exactly where my Launch Ready sprint fits when DIY stops being safe enough to keep going alone.
- DNS setup
- Redirects
- Subdomains
- Cloudflare setup
- SSL
- Caching
- DDoS protection
- SPF/DKIM/DMARC
- Production deployment
- Environment variables
- Secrets handling
- Uptime monitoring
- Handover checklist
Here is how I map failures to deliverables:
| Failure found in checklist | What I fix in Launch Ready | |---|---| | Broken domain routing or SSL errors | DNS cleanup plus SSL configuration | | Emails landing in spam | SPF/DKIM/DMARC setup | | Exposed secrets or bad env handling | Secret audit plus environment variable hardening | | Slow page loads during onboarding | Cloudflare caching plus asset tuning | | Public-facing attack surface too open | DDoS protection plus safer edge config | | No production deployment discipline | Clean deployment handover with rollback notes | | No visibility after launch | Uptime monitoring plus alert setup |
My timeline is simple:
- Hour 0 to 8: audit domain state, hosting setup, email auth status, secrets exposure risk.
- Hour 8 to 20: fix DNS records, redirects,, SSL issues,, subdomains,, Cloudflare rules,, caching basics.
- Hour 20 to 32: clean production deployment,, environment variables,, secret handling,, monitoring hooks.
- Hour 32 to 48: final verification,, handover checklist,, launch notes,, owner walkthrough.
If your AI chatbot is already functionally useful but not safe enough for real customers yet,. this sprint gets it over the line without turning launch into a month-long rebuild。
References
- Roadmap.sh - API Security Best Practices: https://roadmap.sh/api-security-best-practices
- Roadmap.sh - Cyber Security Roadmap/Overview: https://roadmap.sh/cyber-security
- OWASP API Security Top 10: https://owasp.org/API-Security/
- Cloudflare Docs - DNS and SSL/TLS basics: https://developers.cloudflare.com/dns/
- Google Workspace Admin Help - SPF DKIM DMARC overview: https://support.google.com/a/topic/2759254
---
Take the next step
If this is a problem in your product right now, here is what to do next:
- [Use the free Cyprian tools](/tools) - estimate cost, score app risk, check launch readiness, or pick the right service sprint.
- [Book a discovery call](/contact) - I will tell you honestly whether you need a sprint or if you can DIY the next step.
*Written by Cyprian Tinashe Aarons - senior full-stack and AI engineer helping founders rescue, launch, automate, and scale AI-built products.*
Cyprian Tinashe Aarons — Senior Full Stack & AI Engineer
Cyprian helps founders rescue, secure, deploy, and automate AI-built apps with production-grade engineering, launch systems, and AI integration.