Overview Install Files SecuritySummary This source did not publish a separate summary. Review SKILL.md before using the skill.
Biver Builder API Skill
Before You Install
Security Checklist
Before installing or supplying credentials, please review:
Credential Required : This skill requires BIVER_API_KEY to operate
Start with Test Keys : Use bvr_test_ prefix keys for initial testing — never use bvr_live_ keys until you trust the skill
Verify Scopes : Check required API key scopes below and use least-privilege principle
Rotate Keys : Periodically rotate your API keys for security
Inspect Source : If using manual installation, inspect the GitHub repository code before cloning
Installation
Via ClawdHub (Recommended)
clawdhub install biver-builder
Manual
Warning : Cloning external repositories can introduce arbitrary code. Inspect the repository first before running:
# Step 1: Review the source code
git clone https://github.com/RamaAditya49/biver-builder.git /tmp/biver-builder-review
# Review files in /tmp/biver-builder-review before proceeding
# Step 2: Only after review, install to your skills directory
git clone https://github.com/RamaAditya49/biver-builder.git ~/.openclaw/skills/biver-builder
Credential Configuration
Required Environment Variables
Variable Description Example BIVER_API_KEYYour Biver API key bvr_live_xxxxx or bvr_test_xxxxx
Optional Environment Variables
Variable Description Default BIVER_API_BASE_URLCustom API base URL https://api.biver.id
Setting Up Credentials
Navigate to Settings > Environment Variables
Add BIVER_API_KEY with your API key value
(Optional) Add BIVER_API_BASE_URL for custom endpoints
Use bvr_test_ prefix keys for development/testing
Use bvr_live_ prefix keys only in production after you trust the skill
Verify required scopes before creating your API key — only grant minimum permissions needed
Never commit API keys to version control
Rotate keys periodically
Do not supply credentials until you have reviewed the skill or confirmed it from a verified source
How to Get Your API Key
Log in to Biver Dashboard
Go to Settings > API Keys
Click Generate New Key
Select required scopes (see Required Scopes section below — grant only what you need)
Choose key type: bvr_test_ for testing, bvr_live_ for production
Copy and store securely (shown only once)
Scope Recommendation : Start with read-only scopes (*:read) for testing. Add write scopes only when needed.
Quick Reference
Base URL
Authentication Headers // Use environment variables for security
const apiKey = process.env.BIVER_API_KEY;
// Headers configuration
{
'X-API-Key': apiKey,
'Authorization': `Bearer ${apiKey}`
}
API Key Prefixes Prefix Environment Usage bvr_live_Production Real data operations bvr_test_Sandbox Testing without affecting real data
Endpoint Lookup Task Endpoint Method Auth Scope List pages /v1/pagesGET Yes pages:read Create page /v1/pagesPOST Yes pages:write Get page /v1/pages/:idGET Yes pages:read Update page /v1/pages/:idPATCH Yes pages:write Delete page /v1/pages/:idDELETE Yes pages:write Deploy page /v1/pages/:id/deployPOST Yes pages:write List subdomains /v1/subdomainsGET Yes pages:read Create subdomain /v1/subdomainsPOST Yes pages:write Update subdomain /v1/subdomains/:idPATCH Yes pages:write Delete subdomain /v1/subdomains/:idDELETE Yes pages:write List domains /v1/domainsGET Yes domains:read Add custom domain /v1/domainsPOST Yes domains:write Set primary domain /v1/domains/:id/primaryPOST Yes domains:write Delete domain /v1/domains/:idDELETE Yes domains:write List sections /v1/sectionsGET Yes sections:read Create section /v1/sectionsPOST Yes sections:write Update section /v1/sections/:idPATCH Yes sections:write Delete section /v1/sections/:idDELETE Yes sections:write List products /v1/productsGET Yes products:read Create product /v1/productsPOST Yes products:write Update product /v1/products/:idPATCH Yes products:write Delete product /v1/products/:idDELETE Yes products:write List forms /v1/formsGET Yes forms:read Create form /v1/formsPOST Yes forms:write Get submissions /v1/forms/:id/submissionsGET Yes forms:read Submit form /v1/forms/:id/submitPOST No - List gallery /v1/galleryGET Yes gallery:read Upload asset /v1/galleryPOST Yes gallery:read Delete asset /v1/gallery/:idDELETE Yes gallery:read Get workspace /v1/workspace/settingsGET Yes workspace:read Update workspace /v1/workspace/settingsPUT Yes workspace:write Update branding /v1/workspace/brandingPUT Yes workspace:write Update SEO /v1/workspace/seoPUT Yes workspace:write AI generate page /v1/ai/pagesPOST Yes ai:generate AI generate section /v1/ai/sectionsPOST Yes ai:generate Health check /healthGET No -
Authentication
Required Scopes Scope Description pages:readRead pages pages:writeCreate, update, delete pages sections:readRead sections sections:writeCreate, update, delete sections products:readRead products products:writeManage product catalog forms:readRead forms and submissions forms:writeCreate/update forms gallery:readAccess gallery assets domains:readView custom domains domains:writeAdd/remove custom domains subdomains:readView subdomains subdomains:writeCreate/update/delete subdomains workspace:readRead workspace settings workspace:writeUpdate workspace settings ai:generateGenerate pages/sections with AI
Common Workflows
Workflow 1: Create Landing Page with Subdomain const API_KEY = process.env.BIVER_API_KEY;
const BASE_URL = process.env.BIVER_API_BASE_URL || 'https://api.biver.id';
// Step 1: Create subdomain
const subdomain = await fetch(`${BASE_URL}/v1/subdomains`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
subdomain: 'my-store',
title: 'Summer Sale 2026',
description: 'Our biggest sale event',
pathSlug: 'summer-sale'
})
});
// Result: my-store.lp.biver.id/summer-sale
// Step 2: Create sections for the page
const section = await fetch(`${BASE_URL}/v1/sections?pageId=PAGE_ID`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
type: 'hero',
name: 'Hero Section',
htmlContent: '<div class="hero">...</div>',
cssContent: '.hero { ... }',
visible: true,
order: 0
})
});
// Step 3: Update subdomain status to publish
await fetch(`${BASE_URL}/v1/subdomains/${subdomainId}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
status: 'published'
})
});
Workflow 2: Setup Custom Domain const API_KEY = process.env.BIVER_API_KEY;
const BASE_URL = process.env.BIVER_API_BASE_URL || 'https://api.biver.id';
// Step 1: Add custom domain
const domain = await fetch(`${BASE_URL}/v1/domains`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
domain: 'example.com',
isPrimary: true,
landingPageId: 'page_123'
})
});
// Step 2: Configure DNS (outside API)
// Add verification token to DNS records
// Token provided in response: verificationToken
// Step 3: Set as primary (optional)
await fetch(`${BASE_URL}/v1/domains/${domainId}/primary`, {
method: 'POST',
headers: { 'X-API-Key': API_KEY }
});
Workflow 3: Generate Page with AI const API_KEY = process.env.BIVER_API_KEY;
const BASE_URL = process.env.BIVER_API_BASE_URL || 'https://api.biver.id';
const aiPage = await fetch(`${BASE_URL}/v1/ai/pages`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
prompt: 'Create a landing page for a coffee shop called Morning Brew',
style: 'modern',
industry: 'fnb',
language: 'en'
})
});
// Returns: title, content.sections[], suggestedSlug
Workflow 4: Upload Asset and Create Page const API_KEY = process.env.BIVER_API_KEY;
const BASE_URL = process.env.BIVER_API_BASE_URL || 'https://api.biver.id';
// Step 1: Upload image to gallery
const formData = new FormData();
formData.append('file', imageFile);
const asset = await fetch(`${BASE_URL}/v1/gallery`, {
method: 'POST',
headers: { 'X-API-Key': API_KEY },
body: formData
});
// Step 2: Use asset URL in page content
const page = await fetch(`${BASE_URL}/v1/pages`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY
},
body: JSON.stringify({
title: 'Product Catalog',
slug: 'catalog',
content: {
sections: [{
type: 'image',
imageUrl: asset.data.url
}]
}
})
});
API Reference
Pages API Base: /v1/pages | Scope: pages:read / pages:write
Endpoint Method Description Query Params / Body /v1/pagesGET List pages page, limit, status, search/v1/pagesPOST Create page title, slug, content, meta, status/v1/pages/:idGET Get page detail - /v1/pages/:idPATCH Update page Partial body /v1/pages/:idDELETE Delete page - /v1/pages/:id/deployPOST Publish page -
{
"id": "page_123",
"title": "Summer Sale",
"slug": "summer-sale",
"status": "published",
"publishedAt_ms": 1708704000000,
"createdAt_ms": 1708617600000
}
{
"title": "Page Title",
"slug": "page-slug",
"content": { "sections": [] },
"meta": {
"description": "SEO description",
"keywords": "keyword1, keyword2"
},
"status": "draft"
}
Sections API Base: /v1/sections | Scope: sections:read / sections:write
Endpoint Method Description /v1/sectionsGET List sections (?type=, ?pageId=) /v1/sectionsPOST Create section /v1/sections/:idGET Get section detail /v1/sections/:idPATCH Update section /v1/sections/:idDELETE Delete section
Section Types: hero, text, image, image_slider, faq, features, pricing, cta, testimonials, contact
{
"type": "hero",
"name": "Hero Section",
"htmlContent": "<div>...</div>",
"cssContent": ".class { ... }",
"visible": true,
"order": 0,
"customClass": "my-custom",
"anchorId": "hero"
}
Products API Base: /v1/products | Scope: products:read / products:write
Endpoint Method Description /v1/productsGET List products (?page, ?limit, ?category) /v1/productsPOST Create product /v1/products/:idGET Get product detail /v1/products/:idPATCH Update product /v1/products/:idDELETE Delete product
{
"name": "Product Name",
"description": "Full description",
"price": 99000,
"compareAtPrice": 149000,
"sku": "PROD-001",
"stock": 100,
"category": "electronics",
"images": ["url1", "url2"],
"isActive": true
}
Forms API Base: /v1/forms | Scope: forms:read / forms:write
Endpoint Method Description Auth /v1/formsGET List forms Yes /v1/formsPOST Create form Yes /v1/forms/:idGET Get form detail Yes /v1/forms/:idPATCH Update form Yes /v1/forms/:idDELETE Delete form Yes /v1/forms/:id/submitPOST Submit form No /v1/forms/:id/submissionsGET Get submissions Yes
Submit Form Body (Public - No Auth):
{
"data": {
"name": "John Doe",
"email": "[email protected] ",
"message": "Hello!"
}
}
Gallery API Base: /v1/gallery | Scope: gallery:read
Endpoint Method Description /v1/galleryGET List items (`?type=image /v1/galleryPOST Upload asset (multipart/form-data) /v1/gallery/:idGET Get asset detail /v1/gallery/:idDELETE Delete asset
{
"id": "gallery_123",
"filename": "hero-image.png",
"url": "https://cdn.biver.id/assets/xxx.png",
"type": "image",
"mimeType": "image/png",
"size": 102400,
"width": 1920,
"height": 1080
}
Subdomains API Base: /v1/subdomains | Scope: pages:read / pages:write
Subdomains create landing pages at {name}.lp.biver.id.
Endpoint Method Description /v1/subdomainsGET List subdomains (?page, ?limit, ?status) /v1/subdomainsPOST Create subdomain /v1/subdomains/:idGET Get subdomain detail /v1/subdomains/:idPATCH Update subdomain /v1/subdomains/:idDELETE Delete subdomain
{
"subdomain": "my-store",
"title": "My Store",
"description": "Store description",
"pathSlug": "promo"
}
subdomain: 3-63 chars, lowercase a-z, 0-9, hyphens
pathSlug: Optional, creates additional URL at {subdomain}.lp.biver.id/{pathSlug}
status: draft, published, archived
Field Type Description titlestring Page title descriptionstring Page description pathSlugstring | null URL path (null to remove) statusstring draft, published, archivedmetaTitlestring SEO title metaDescriptionstring SEO description faviconstring (URL) Favicon URL ogImagestring (URL) Open Graph image noIndexboolean Prevent indexing noFollowboolean Prevent link following
Domains API (Custom Domains) Base: /v1/domains | Scope: domains:read / domains:write
Endpoint Method Description /v1/domainsGET List custom domains /v1/domainsPOST Add custom domain /v1/domains/:idGET Get domain detail (includes DNS records) /v1/domains/:idPATCH Update domain /v1/domains/:idDELETE Remove domain /v1/domains/:id/primaryPOST Set as primary domain
{
"domain": "example.com",
"isPrimary": true,
"landingPageId": "page_123"
}
{
"id": "domain_123",
"domain": "example.com",
"isPrimary": true,
"isVerified": true,
"sslStatus": "active",
"verificationStatus": "verified",
"verificationToken": "bvr_verify_xxx",
"landingPageId": "page_123"
}
DNS Configuration (CNAME Setup):
AI Agent: When helping users set up custom domains, explain the following CNAME configuration steps clearly.
After adding a custom domain via the API, configure your DNS records with your DNS provider:
Point your CNAME record to:
custom.biver.id
Example Configuration:
Record Type Name/Host Value/Target CNAME shop (or www)custom.biver.id
What this does:
If your domain is shop.example.com, add a CNAME record with name shop pointing to custom.biver.id
If using apex domain (example.com), check if your DNS provider supports CNAME flattening or use A records as provided in the domain detail response
Propagation: DNS changes may take 5-60 minutes to propagate globally.
Workspace API Base: /v1/workspace | Scope: workspace:read / workspace:write
Endpoint Method Description /v1/workspace/settingsGET Get workspace settings /v1/workspace/settingsPUT Update settings /v1/workspace/brandingPUT Update branding /v1/workspace/seoPUT Update SEO settings /v1/workspace/publicGET Public workspace info (no auth)
{
"id": "workspace_123",
"name": "My Workspace",
"slug": "my-workspace",
"plan": "ARCHITECT",
"settings": {
"timezone": "Asia/Jakarta",
"language": "en",
"currency": "USD"
},
"branding": {
"logo": "https://cdn.biver.id/logos/xxx.png",
"primaryColor": "#3B82F6",
"fontFamily": "Inter"
},
"seo": {
"title": "My Business",
"description": "We build great landing pages",
"keywords": "landing page, builder"
}
}
AI Generation API Base: /v1/ai | Scope: ai:generate
Endpoint Method Description /v1/ai/pagesPOST Generate page with AI /v1/ai/sectionsPOST Generate section with AI /v1/ai/contextGET Get AI templates/context
{
"prompt": "Create a landing page for a coffee shop",
"style": "modern",
"industry": "fnb",
"language": "en"
}
Style Options: modern, minimal, bold, elegant, playful
Industry Options: saas, fnb, ecommerce, agency, healthcare, education, finance, realestate
Error Codes Code HTTP Description Solution UNAUTHORIZED401 Invalid or missing API key Check authentication header KEY_EXPIRED401 API key has expired Generate new key from dashboard KEY_REVOKED401 API key was revoked Generate new key from dashboard FORBIDDEN403 Insufficient scope permission Check API key scopes NOT_FOUND404 Resource not found Verify resource ID DUPLICATE_SUBDOMAIN409 Subdomain already taken Choose different subdomain DUPLICATE_DOMAIN409 Domain already exists Use different domain VALIDATION_ERROR422 Request validation failed Check request body format RATE_LIMIT_EXCEEDED429 Too many requests Wait for reset or upgrade plan INTERNAL_ERROR500 Server error Retry or contact support
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": {
"fields": [
{ "field": "title", "message": "Title is required", "code": "required" }
]
}
}
}
Rate Limits Plan Requests/Minute Target User SCOUT 30 Free tier CRAFTSMAN 60 Small businesses ARCHITECT 120 Growing businesses ENGINEER 300 Medium businesses FOUNDER 600 Agencies CHIEF 2000 Enterprise
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1708704000000
X-RateLimit-Plan: CRAFTSMAN
Response Format All responses follow this structure:
{
"success": true,
"data": { ... }
}
{
"success": true,
"data": {
"items": [...],
"pagination": {
"page": 1,
"limit": 10,
"total": 25,
"totalPages": 3
}
}
}
Security Considerations
API Key Safety
Never hardcode API keys in source code
Always use environment variables or secure secret stores
Use test keys (bvr_test_) for development
Limit scopes to minimum required for your use case
DNS Configuration
Custom domain setup requires DNS changes outside this API
Always verify domain ownership before making DNS changes
Keep DNS verification tokens secure
Rate Limiting
Respect rate limits based on your plan
Implement retry logic with exponential backoff
Monitor X-RateLimit-Remaining header
Support