Business Orchestrator
Launch a complete online business with one prompt. Website, domain, email, webshop, bookings, voice agent and SEO — all in one API call.
Business Orchestrator
The create_business tool sets up a fully operational online business in a single call: website, domain, email, webshop, bookings, voice agent, chatbot, loyalty program, SEO, and publication.
How it works
The orchestrator executes up to 10 steps sequentially:
| Step | Action | Required |
|---|---|---|
| 1 | Generate website (AI) | Always (hard blocker) |
| 2 | Register domain + DNS | Only if domain is provided |
| 3 | Create mailbox (info@) | Only if domain was registered |
| 4 | Activate bookings | Only if "booking" in features |
| 5 | Activate webshop | Only if "ecommerce" in features |
| 6 | Configure voice agent | Only if "voice_agent" in features |
| 7 | Activate chatbot | Only if "chatbot" in features |
| 8 | Activate loyalty program | Only if "loyalty" in features |
| 9 | Configure SEO | Always |
| 10 | Publish site | Always |
Example: dental practice in Valencia
Prompt:
Create a dental practice in Valencia with online bookings and a voice agent.
Register the domain tandarts-valencia.es.MCP tool call:
{
"tool": "create_business",
"arguments": {
"businessName": "Tandarts Valencia",
"businessType": "dental_practice",
"language": "es",
"domain": "tandarts-valencia.es",
"features": ["booking", "voice_agent"],
"registrant": {
"first_name": "María",
"last_name": "García",
"email": "maria@tandarts-valencia.es",
"phone": "+34612345678",
"address1": "Calle de la Paz 12",
"city": "Valencia",
"country": "ES",
"postal_code": "46002"
},
"style": "corporate"
}
}Response:
{
"siteId": "site_abc123",
"siteUrl": "https://tandarts-valencia.es",
"steps": [
{ "step": "GENERATE_SITE", "status": "success", "duration": 45200 },
{ "step": "REGISTER_DOMAIN", "status": "success", "duration": 8100 },
{ "step": "CREATE_MAILBOX", "status": "success", "duration": 3200 },
{ "step": "SETUP_BOOKING", "status": "success", "duration": 850 },
{ "step": "SETUP_ECOMMERCE", "status": "skipped", "duration": 0 },
{ "step": "SETUP_VOICE_AGENT", "status": "success", "duration": 1200 },
{ "step": "SETUP_CHATBOT", "status": "skipped", "duration": 0 },
{ "step": "SETUP_LOYALTY", "status": "skipped", "duration": 0 },
{ "step": "CONFIGURE_SEO", "status": "success", "duration": 420 },
{ "step": "PUBLISH", "status": "success", "duration": 2800 }
],
"summary": {
"pagesCreated": true,
"domainRegistered": true,
"mailboxCreated": true,
"bookingEnabled": true,
"voiceAgentEnabled": true,
"ecommerceEnabled": false,
"chatbotEnabled": false,
"loyaltyEnabled": false,
"seoConfigured": true,
"published": true
}
}Input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
businessName | string | Yes | Name of the business |
businessType | string | Yes | Business type: dental_practice, restaurant, hair_salon, webshop, real_estate, hotel, gym, bakery |
language | string | No | Content language: nl, en, de, fr, es (default: nl) |
domain | string | No | Domain to register (e.g. bakery-amsterdam.nl) |
features | string[] | No | Features to activate: booking, voice_agent, ecommerce, chatbot, loyalty, push |
registrant | object | No | Contact details for domain registration |
style | string | No | Visual style: minimalist, corporate, playful, elegant |
Registrant object
Required when domain is provided:
| Field | Type | Required | Description |
|---|---|---|---|
first_name | string | Yes | First name |
last_name | string | Yes | Last name |
email | string | Yes | Email address |
phone | string | Yes | Phone number |
address1 | string | Yes | Address |
city | string | Yes | City |
country | string | Yes | ISO 3166-1 alpha-2 country code |
postal_code | string | Yes | Postal code |
org_name | string | No | Organization name |
state | string | No | Province/state |
Error handling
The orchestrator uses best-effort per step:
- GENERATE_SITE is the only hard blocker. If it fails, the entire process stops.
- All other steps continue on failure. A failed step is marked as
"failed"with an error message. - The site is always usable, even if domain or email fails.
Example: domain not available
{
"step": "REGISTER_DOMAIN",
"status": "failed",
"duration": 2100,
"error": "Domain \"tandarts-valencia.es\" is not available (status: taken)"
}Subsequent steps (mailbox, SEO, publish) are still executed. Only steps dependent on the domain (like mailbox) are skipped.
Tier requirements per feature
| Feature | Starter | Professional | Agency |
|---|---|---|---|
| Website generation | ✅ | ✅ | ✅ |
| Domain registration | ❌ (trial) | ✅ (1 free) | ✅ (5 free) |
| Mailbox creation | ❌ (trial) | ✅ | ✅ |
| Bookings | ✅ | ✅ | ✅ |
| Webshop | ✅ | ✅ | ✅ |
| Voice agent | ❌ | ✅ | ✅ |
| Chatbot | ✅ | ✅ | ✅ |
| Loyalty | ✅ | ✅ | ✅ |
| SEO | ✅ | ✅ | ✅ |
Domain registration and mailbox creation are not available during the trial period. The site is still generated and published.
Permissions
create_business requires two permissions on the API key:
"write"— for creating resources"ai"— for AI site generation
Minimal example
Generate a website only, without domain or extra features:
{
"tool": "create_business",
"arguments": {
"businessName": "Golden Crust Bakery",
"businessType": "bakery"
}
}This generates a site, configures basic SEO, and publishes on a *.optimocms.com subdomain.
Timing
| Step | Expected duration |
|---|---|
| Website generation (AI) | 30–60 seconds |
| Domain registration | 5–10 seconds |
| Other steps | < 5 seconds each |
| Total | 60–120 seconds |
The Cloud Function timeout is 540 seconds (9 minutes), more than sufficient.