EMO APIs Documentation
EMO APIs are AI-powered business intelligence endpoints for forecasting, website audits, offer analysis, and creative performance. They return structured JSON designed to plug directly into apps, automations, and AI workflows.
Base URL
https://ericmoore.online/api
Format
REST · JSON · UTF-8
Auth
Bearer Token (API Key)
Response time
< 2s median
Authentication
All API requests require a Bearer token passed in the Authorization header. Your API key is generated when you request access and can be found in your dashboard.
Never expose your API key in client-side code. Use server-side functions, environment variables, or Supabase Edge Functions.
curl -X #f87171">POST https://ericmoore.online/api/oracle/forecast \ -H #86efac">"Authorization: Bearer emo_live_sk_••••••••••••••••" \ -H #86efac">"Content-Type: application/json" \ -d '{#86efac">"url": "https://example.com", "goal": "conversion"}'
Base URL & Versioning
All endpoints are rooted at the base URL below. API versioning is handled via path prefix.
# Production https:#71717a">//ericmoore.online/api # All endpoints follow the pattern: #f87171">POST https://ericmoore.online/api/{endpoint} # Examples: #f87171">POST https://ericmoore.online/api/oracle/forecast #f87171">POST https://ericmoore.online/api/website/audit #f87171">POST https://ericmoore.online/api/offer/analyze #f87171">POST https://ericmoore.online/api/creative/analyze
Error Codes
All errors return a consistent JSON envelope with a machine-readable code, human message, and HTTP status.
#71717a">// All errors return a consistent JSON structure { #86efac">"error": { #86efac">"code": "INVALID_API_KEY", // machine-readable code #86efac">"message": "API key is invalid", // human-readable message #86efac">"status": 401 // HTTP status } } #71717a">// Error codes: #71717a">// 400 INVALID_REQUEST - Missing or malformed params #71717a">// 401 INVALID_API_KEY - Key not recognized #71717a">// 402 INSUFFICIENT_CREDITS - Out of API credits #71717a">// 422 UNPROCESSABLE_URL - URL returned no content #71717a">// 429 RATE_LIMIT_EXCEEDED - Slow down #71717a">// 500 SERVER_ERROR - Something broke on our end
Rate Limits
Rate limits are applied per API key per minute. Exceeding limits returns a 429 response.
| Plan | Req / min | Monthly credits | Burst |
|---|---|---|---|
| Sandbox | 5 | 250 | No |
| Growth | 30 | 5,000 | Yes (60 rpm) |
| Pro | 120 | 25,000 | Yes (240 rpm) |
| Enterprise | Custom | Custom | Yes |
/api/oracle/forecast1 creditOracle Forecast API
Runs probability-based forecasting on any URL, copy, or content using multi-agent simulation. Returns a structured confidence score, top risks, opportunities, and a recommended next move.
Request Body
urlstringrequiredFull URL of the target website or landing page to analyze.
goalstringrequiredWhat you want to predict. E.g. 'conversion rate', 'campaign success', 'pricing viability'.
contextstringOptional context about your business, audience, or constraints. Improves forecast accuracy.
Response Schema
{
#86efac">"success_probability": 64,
#86efac">"confidence": "medium",
#86efac">"top_risks": [
#86efac">"weak trust positioning",
#86efac">"unclear CTA"
],
#86efac">"top_opportunities": [
#86efac">"improve pricing anchor",
#86efac">"add testimonials"
],
#86efac">"recommended_next_move": "restructure hero and trust sequence",
#86efac">"signal_breakdown": {
#86efac">"trust": 42,
#86efac">"conversion": 61,
#86efac">"clarity": 57,
#86efac">"urgency": 38
},
#86efac">"credits_used": 1
}curl -X #f87171">POST https://ericmoore.online/api/oracle/forecast \ -H #86efac">"Authorization: Bearer YOUR_API_KEY" \ -H #86efac">"Content-Type: application/json" \ -d '{ #86efac">"url": "https://example.com", #86efac">"goal": "predict conversion performance" }'
/api/website/audit1 creditWebsite Audit API
Deep-scans a website URL for conversion friction, trust gaps, CTA weaknesses, and UX issues. Returns scored insights and prioritized fixes.
Request Body
urlstringrequiredFull URL of the website to audit.
depthstring'shallow' (homepage only) or 'deep' (multi-page scan). Default: 'shallow'.
Response Schema
{
#86efac">"overall_score": 58,
#86efac">"conversion_issues": [
#86efac">"Hero CTA is below fold on mobile",
#86efac">"No social proof visible above fold"
],
#86efac">"trust_gaps": [
#86efac">"Missing SSL indicators",
#86efac">"No testimonials or reviews"
],
#86efac">"ux_friction": [
#86efac">"Form has 8 fields (reduce to 3)",
#86efac">"Page load > 4.2s"
],
#86efac">"quick_wins": [
#86efac">"Add one testimonial to hero",
#86efac">"Move primary CTA above fold"
],
#86efac">"scores": {
#86efac">"trust": 44,
#86efac">"ux": 61,
#86efac">"conversion": 52,
#86efac">"mobile": 70,
#86efac">"seo": 65
},
#86efac">"credits_used": 1
}curl -X #f87171">POST https://ericmoore.online/api/website/audit \ -H #86efac">"Authorization: Bearer YOUR_API_KEY" \ -H #86efac">"Content-Type: application/json" \ -d '{#86efac">"url": "https://yoursite.com"}'
/api/offer/analyze1 creditOffer Strength API
Evaluates copy, messaging, and offers for clarity, perceived value, and objection risk before you launch.
Request Body
copystringrequiredThe sales copy, headline, or offer description to analyze.
typestring'landing_page', 'email', 'ad_copy', or 'product_description'. Improves scoring context.
pricenumberOptional. The price point being offered. Helps evaluate price-to-value alignment.
Response Schema
{
#86efac">"value_score": 72,
#86efac">"clarity_score": 68,
#86efac">"objection_risks": [
#86efac">"Price not anchored to outcome",
#86efac">"No urgency or deadline signal"
],
#86efac">"messaging_improvements": [
#86efac">"Lead with the transformation, not the feature",
#86efac">"Add a specific result (e.g. '2x revenue in 90 days')"
],
#86efac">"strongest_element": "Clear problem statement",
#86efac">"weakest_element": "Missing proof or social validation",
#86efac">"credits_used": 1
}curl -X #f87171">POST https://ericmoore.online/api/offer/analyze \ -H #86efac">"Authorization: Bearer YOUR_API_KEY" \ -H #86efac">"Content-Type: application/json" \ -d '{ #86efac">"copy": "Get 3 months of coaching for $997...", #86efac">"type": "landing_page" }'
/api/creative/analyze2 creditsCreative Performance API
Analyzes ad copy, social content, and creative assets to estimate engagement rate, hook strength, and scroll-stopping power.
Request Body
typestringrequired'ad_copy', 'social_post', 'video_script', or 'image_url'.
contentstringrequiredThe creative content string to analyze. For images, provide a publicly accessible URL.
platformstring'instagram', 'facebook', 'tiktok', 'linkedin', or 'youtube'. Tailors scoring to platform norms.
Response Schema
{
#86efac">"hook_strength": 81,
#86efac">"engagement_probability": 74,
#86efac">"scroll_stop_score": 78,
#86efac">"emotional_triggers": [
#86efac">"fear of missing out",
#86efac">"curiosity gap",
#86efac">"social proof signal"
],
#86efac">"improvement_suggestions": [
#86efac">"Introduce a pattern interrupt in line 1",
#86efac">"Add a concrete number or stat",
#86efac">"Close with a direct CTA"
],
#86efac">"platform_fit": {
#86efac">"instagram": 79,
#86efac">"tiktok": 85,
#86efac">"linkedin": 52
},
#86efac">"credits_used": 2
}curl -X #f87171">POST https://ericmoore.online/api/creative/analyze \ -H #86efac">"Authorization: Bearer YOUR_API_KEY" \ -H #86efac">"Content-Type: application/json" \ -d '{ #86efac">"type": "ad_copy", #86efac">"content": "Stop scrolling. Your competitor already uses AI...", #86efac">"platform": "instagram" }'
Try it live
INTERACTIVERun a live Oracle Forecast call directly from the browser. Enter any URL below — the API will crawl it, extract behavioral signals, and return a structured forecast. No API key required for the playground.
Automation Workflows
Wire the Oracle Forecast API into your automation stack in minutes. Pick your platform for step-by-step setup and copy-ready configs.
Import the workflow JSON directly into n8n to wire Oracle Forecast into any automation.
Create API Key credential
In n8n → Credentials, add a new "Header Auth" credential. Set name to Authorization and value to Bearer YOUR_KEY.
Add HTTP Request node
Drag an HTTP Request node onto the canvas. Set method to POST and URL to https://ericmoore.online/api/oracle/forecast.
Configure the body
Set body type to JSON. Map your input field (e.g. website_url from a form trigger) into the url parameter.
Process the response
Add a Code or Set node to extract success_probability, recommended_next_move, and signal_breakdown for downstream routing.
{
#86efac">"name": "EMO Oracle Forecast",
#86efac">"nodes": [
{
#86efac">"name": "Trigger",
#86efac">"type": "n8n-nodes-base.manualTrigger",
#86efac">"position": [240, 300]
},
{
#86efac">"name": "EMO Oracle Forecast",
#86efac">"type": "n8n-nodes-base.httpRequest",
#86efac">"position": [460, 300],
#86efac">"parameters": {
#86efac">"method": "POST",
#86efac">"url": "https://ericmoore.online/api/oracle/forecast",
#86efac">"sendHeaders": true,
#86efac">"headerParameters": {
#86efac">"parameters": [
{
#86efac">"name": "Authorization",
#86efac">"value": "Bearer {{ $env.EMO_API_KEY }}"
},
{
#86efac">"name": "Content-Type",
#86efac">"value": "application/json"
}
]
},
#86efac">"sendBody": true,
#86efac">"bodyContentType": "json",
#86efac">"jsonBody": {
#86efac">"url": "={{ $json.website_url }}",
#86efac">"goal": "predict conversion performance"
}
}
},
{
#86efac">"name": "Process Results",
#86efac">"type": "n8n-nodes-base.set",
#86efac">"position": [680, 300],
#86efac">"parameters": {
#86efac">"values": {
#86efac">"number": [
{
#86efac">"name": "probability",
#86efac">"value": "={{ $json.success_probability }}"
}
],
#86efac">"string": [
{
#86efac">"name": "next_move",
#86efac">"value": "={{ $json.recommended_next_move }}"
}
]
}
}
}
],
#86efac">"connections": {
#86efac">"Trigger": { "main": [[{ "node": "EMO Oracle Forecast" }]] },
#86efac">"EMO Oracle Forecast": { "main": [[{ "node": "Process Results" }]] }
}
}Pro tip: Use webhooks for async flows
Pass a webhook_url in your request body (Growth/Pro plans) to receive results via POST callback instead of waiting inline — perfect for long-running automation chains.
Webhooks
Growth and Pro plans support webhook callbacks for async analysis. Pass a webhook_url in any request body to receive the result via POST when processing completes.
const res = await fetch('https:#71717a">//ericmoore.online/api/oracle/forecast', {
method: '#f87171">POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: 'https:#71717a">//example.com',
goal: 'conversion',
webhook_url: 'https:#71717a">//yourdomain.com/webhooks/emo', // async callback
}),
});
#71717a">// Immediate response: { "job_id": "job_abc123", "status": "queued" }
#71717a">// Webhook fires when complete with full result payloadCredits & Usage
Every API call consumes credits based on the endpoint and analysis depth. Credits are returned in every response under credits_used.
| Endpoint | Credits | Notes |
|---|---|---|
| /api/oracle/forecast | 1 | Standard forecast |
| /api/website/audit | 1 | 2 for deep scan |
| /api/offer/analyze | 1 | Standard analysis |
| /api/creative/analyze | 2 | Image analysis: 3 credits |
Ready to build?
Request API access and get your key within 24 hours.