Complete reference for the YodAI REST API. Create API keys in your dashboard Settings > API tab.
Public download for Apple silicon Macs (M1 or newer). No API key or GitHub login is needed to download.
Download Mac installer · Installation instructions · Release metadata and checksum
Check the metadata for the current version and signing status. The pilot is unsigned and unnotarized; updates are installed manually.
Authorization: Bearer ym_live_xxxxxxxxxxxxxcurl
curl -H "Authorization: Bearer ym_live_xxxxx" \
https://yodai.app/api/v1/clientsJavaScript
const res = await fetch('https://yodai.app/api/v1/clients', {
headers: { 'Authorization': 'Bearer ym_live_xxxxx' }
});
const { data } = await res.json();Python
import requests
r = requests.get('https://yodai.app/api/v1/clients',
headers={'Authorization': 'Bearer ym_live_xxxxx'})
data = r.json()['data']// Success
{ "data": { ... }, "meta": { "timestamp": "...", "request_id": "..." } }
// Paginated
{ "data": [...], "pagination": { "total": 50, "page": 1, "per_page": 20, "total_pages": 3 }, "meta": {...} }
// Error
{ "error": { "code": "VALIDATION_ERROR", "message": "..." }, "meta": {...} }Read operations: 100 req/min | Write operations: 30 req/min | AI operations: 10 req/min. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (unix seconds); 429 responses also carry Retry-After (seconds).
Keep the two credentials separate
Management endpoints under /api/v1 require a scoped ym_live_ agency API key. Published storefront endpoints under /api/site-commerce require only the short-lived published-site capability delivered with that site. Never put an agency API key, provider credential or connector secret in browser code.
Configure WooCommerce hosted handoff, validate readiness, then queue an idempotent catalogue sync.
curl -X PUT https://yodai.app/api/v1/sites/SITE_ID/commerce \
-H "Authorization: Bearer ym_live_xxxxx" -H "Content-Type: application/json" \
-d '{"provider":"woocommerce","checkoutStrategy":"woo_hosted_handoff","integrationId":"33333333-3333-4333-8333-333333333333","catalogueSource":"hybrid","defaultCurrency":"NZD","enabled":true}'
curl -X POST https://yodai.app/api/v1/sites/SITE_ID/commerce/test \
-H "Authorization: Bearer ym_live_xxxxx"
curl -X POST https://yodai.app/api/v1/sites/SITE_ID/commerce/sync \
-H "Authorization: Bearer ym_live_xxxxx" -H "Content-Type: application/json" \
-d '{"resource":"catalogue","reason":"Initial WooCommerce import","idempotencyKey":"agent-run-00000001"}'
# Poll sanitized integration, webhook, sync, connector and job status.
curl -H "Authorization: Bearer ym_live_xxxxx" \
https://yodai.app/api/v1/integrations/INTEGRATION_ID/commerce/statusManagement rate limits: reads 100/min, writes 30/min, AI 10/min per API key.
Storefront rates are separately enforced per published capability, trusted IP and cart capability; inspect its OpenAPI extensions for exact limits.
Handle 409 as an idempotency/configuration conflict, 422 as validation or unsupported capability, 429 using Retry-After, and 503 as a temporary provider degradation.
Connect any MCP-compatible client to YodAI over HTTP using the Streamable HTTP transport. No local setup required.
POST https://yodai.app/api/mcpAuthentication uses the same Bearer token as the REST API. The endpoint is stateless — each request is independent with no session management.
tools/list returns the complete catalogue by default. When server-side paging is enabled the response includes a nextCursor; repeat tools/list with that cursor until it is absent. Neither the JavaScript nor the Python MCP SDK pages automatically, so follow the cursor yourself as shown below.
Claude Desktop / Claude Code
// .mcp.json or claude_desktop_config.json
{
"mcpServers": {
"yodai": {
"type": "url",
"url": "https://yodai.app/api/mcp",
"headers": {
"Authorization": "Bearer ym_live_xxxxx"
}
}
}
}curl (raw MCP protocol)
# One request — returns the whole catalogue unless paging is enabled
curl -X POST https://yodai.app/api/mcp \
-H "Authorization: Bearer ym_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Forward-compatible: page until nextCursor is absent (needs jq)
cursor=''
while :; do
params='{}'; [ -n "$cursor" ] && params='{"cursor":"'"$cursor"'"}'
page=$(curl -s -X POST https://yodai.app/api/mcp \
-H "Authorization: Bearer ym_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":'"$params"'}')
echo "$page" | jq -r '.result.tools[].name'
cursor=$(echo "$page" | jq -r '.result.nextCursor // empty')
[ -z "$cursor" ] && break
doneJavaScript (MCP SDK)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://yodai.app/api/mcp"),
{ requestInit: { headers: { "Authorization": "Bearer ym_live_xxxxx" } } }
);
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);
// listTools() does not auto-paginate — follow nextCursor until it is absent
const tools = [];
let cursor;
do {
const page = await client.listTools(cursor ? { cursor } : {});
tools.push(...page.tools);
cursor = page.nextCursor;
} while (cursor);
const result = await client.callTool({ name: "list_clients", arguments: {} });Python (MCP SDK)
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client(
"https://yodai.app/api/mcp",
headers={"Authorization": "Bearer ym_live_xxxxx"}
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# list_tools() does not auto-paginate — follow nextCursor until absent
tools = []
cursor = None
while True:
page = await session.list_tools(cursor=cursor)
tools.extend(page.tools)
cursor = page.nextCursor
if not cursor:
break
result = await session.call_tool("list_clients", {})Rate limits: 100 requests/min per API key. Individual tool calls that hit the REST API internally are subject to their own per-endpoint rate limits (read: 100/min, write: 30/min, AI: 10/min).
Both transports expose the same complete tool registry for use with Claude, ChatGPT, and other AI agents.
Chatbot lead destination tools:
list_chatbot_lead_destinations, set_chatbot_lead_destinations, create_chatbot_lead_destination, update_chatbot_lead_destination, delete_chatbot_lead_destination, test_chatbot_lead_destination, list_chatbot_leads, get_chatbot_lead, update_chatbot_lead_status, list_chatbot_lead_deliveries, retry_chatbot_lead_deliveryChatbot configuration tools:
list_client_chatbots, create_client_chatbot, get_client_chatbot, update_client_chatbot, configure_client_chatbot, update_client_chatbot_brain, configure_client_chatbot_voice, configure_client_chatbot_lead_capture, set_client_chatbot_active, regenerate_client_chatbot_key, delete_client_chatbot, list_client_knowledge_sourcesKnowledge Bank tools (agency + client + facets):
list_agency_knowledge_sources, get_agency_knowledge_source, create_agency_knowledge_source, update_agency_knowledge_source, delete_agency_knowledge_source, reindex_agency_knowledge_source, get_agency_knowledge_source_clients, set_agency_knowledge_source_clients, list_agency_knowledge_folders, create_agency_knowledge_folder, update_agency_knowledge_folder, delete_agency_knowledge_folder, list_client_knowledge_sources, create_client_knowledge_source, get_client_knowledge_source, update_client_knowledge_source, delete_client_knowledge_source, reindex_client_knowledge_source, list_knowledge_facets, get_knowledge_facet, delete_knowledge_facet, merge_knowledge_facet, delete_knowledge_facet_value, merge_knowledge_facet_valueMemory security and temporal-chat tools:
list_agent_memories, get_agent_memory, list_memory_security_incidents, get_memory_security_incident, preview_memory_lifecycle_operation, execute_memory_lifecycle_operation, review_client_knowledge_source, get_chatbot_chat_session_config, update_chatbot_chat_session_config, get_agent_chat_session_config, update_agent_chat_session_config, list_chatbot_chat_sessions, get_chatbot_chat_session, list_agent_chat_sessions, get_agent_chat_sessionAgent voice tools:
get_agent_voice_options, create_agent_voice_session, execute_agent_voice_tool_call, persist_agent_voice_transcriptCoupon tools:
list_coupon_offers, get_coupon_offer, create_coupon_offer, update_coupon_offer, delete_coupon_offer, generate_coupon_code, list_coupon_codes, get_coupon_code, revoke_coupon_code, delete_coupon_code, update_coupon_code, set_coupon_code_enabledImage Tool MCP tools (generation is generate_image; image + folder CRUD live in the generated-media / media tools):
generate_image, get_image_tool_settings, update_image_tool_settings, get_image_branding_context, remove_image_background, autocrop_image, decompose_image_layers, ai_edit_image, apply_image_border, strip_image_metadata, list_image_studio_documents, get_image_studio_document, delete_image_studio_document, list_media_folders, create_media_folder, update_media_folder, delete_media_folder, reorder_media_foldersThe SKILL.md follows Anthropic's agent skill standard and provides AI agents with structured documentation for the entire YodAI API surface. It includes complete tool references, step-by-step workflows, and important behavioral notes.
Fetch via curl:
curl https://yodai.app/api/v1/skill-reference -o SKILL.mdBoard settings uses default_task_type (general or coding). New tasks inherit it when task_type is omitted. Changing board type leaves existing tasks unchanged. The task editor can convert a task separately.
Within a Coding task, coding_task_type selects the category below. The editor autosaves after a short pause and flushes on close. API and MCP clients read coding details first, then send expected_version (0 for a new brief). Omitted fields are retained; type_details replaces the whole object, so merge inactive fields before writing. Each brief value is optional text up to 4,000 characters.
| Category / API value | Brief fields (type_details) |
|---|---|
New featurenew_feature | feature_problem: Problem and user goalfeature_users: Users and workflowfeature_requirements: Functional requirementsfeature_integrations: Data and integrationsfeature_rollout: Rollout and success measures |
Bugbug | bug_expected: Expected behaviourbug_actual: Actual behaviourbug_environment: Affected versions and environmentbug_impact: Frequency and impactbug_evidence: Diagnostic evidence |
Update Featureupdate_feature | update_current: Current feature behaviourupdate_proposed: Requested changesupdate_reason: Reason for the updateupdate_compatibility: Compatibility and migrationupdate_regression: Regression coverage and rollout |
Design Changedesign_change | design_scope: Screens and componentsdesign_references: Design referencesdesign_behaviour: Layout and interactionsdesign_states: Responsive layouts and statesdesign_accessibility: Accessibility and visual checks |
Otherother | other_objective: Objective and contextother_scope: Work scopeother_output: Expected outputother_validation: Verification approach |
Planningplanning | planning_question: Goal or decision to resolveplanning_context: Current state and assumptionsplanning_options: Options to evaluateplanning_risks: Dependencies and risksplanning_output: Plan format and level of detail |
Testingtesting | testing_target: Test target and scopetesting_approach: Test approachtesting_scenarios: Scenarios and expected resultstesting_setup: Test environment and datatesting_evidence: Pass criteria and evidence |
Deploymentdeployment | deployment_release: Release and targetdeployment_prechecks: Pre-deployment checksdeployment_rollout: Rollout steps and windowdeployment_health: Health checks and abort criteriadeployment_rollback: Rollback and recovery |
Securitysecurity | security_finding: Finding or threatsecurity_impact: Severity and impactsecurity_scope: Authorised assessment scopesecurity_remediation: Remediation requirementssecurity_verification: Verification and evidence |
Sys Adminsys_admin | admin_systems: Systems and desired stateadmin_change: Change procedure and dependenciesadmin_impact: Impact and maintenance windowadmin_recovery: Backup and recoveryadmin_validation: Post-change verification |
Shared fields include repository/environment, base branch, responsible person/reviewer, acceptance criteria, constraints, paths, reproduction steps, priority, start/deadline, deliverable/completion policy, budget and attempts. The interactive OpenAPI schema lists their exact types and limits. The Bug category uses the shared reproduction_steps field.
MCP: use create_board_label/update_board_label for board type, create_card/update_card for task type, and get_coding_details/update_coding_details for coding briefs. Saving a brief never starts a run. Starting execution and human review use separate scoped operations below.
/api/v1/clientsList all clients
/api/v1/clientsCreate a new client
{ "name": "Acme Corp", "website": "https://acme.com", "persona": "B2B SaaS company" }/api/v1/clients/:idGet client details
/api/v1/clients/:idUpdate client
{ "name": "New Name" }/api/v1/clients/:idArchive client