Synchronex Developer Hub
The AI memory layer. Three ways to connect.
REST API, MCP server, and OAuth for hosted AI. Your Identity Kernel, Product State, and Decision Index - available in any AI session, on any client.
MCP
For AI clients. Claude Code, Cursor, Windsurf, Codex CLI, Gemini CLI.
REST
For your code. sx_live_* keys. OpenAPI 3.1 spec available.
OAuth
For hosted AI. Claude.ai, ChatGPT, Gemini. No API key needed.
Machine-readable discovery
AI agents discover Synchronex automatically via llms.txt and /.well-known/mcp.
Quick Start
Step 1 - Get an API key
Dashboard > Settings > API Keys > New Key. Keys are prefixed sx_live_. Store it in your environment because it is shown once.
# Verify your key
curl https://synchronex.ai/api/v1/memory/identity \
-H "Authorization: Bearer sx_live_YOUR_KEY"Step 2 - Install the SDK
npm install @synchronex/sdkStep 3 - Read your Identity Kernel
import { Synchronex } from '@synchronex/sdk'
const sx = new Synchronex({ apiKey: process.env.SYNCHRONEX_API_KEY })
const kernel = await sx.memory.identity.get()
console.log(kernel.injection_block)Authentication
| Token prefix | Type | Used for |
|---|---|---|
| sx_live_* | REST API key | Direct API calls, MCP --api-key mode, SDK |
| sxo_* | OAuth access token | Issued after OAuth flow; used by Claude.ai, ChatGPT, Gemini |
- Keys are shown once at creation. Store immediately.
- Keys can be rotated without downtime. The old key stays valid for 60 seconds after rotation.
- REST API keys use the
sx_live_*prefix. - OAuth tokens expire after 1 hour. Refresh tokens rotate on use.
curl -X DELETE https://synchronex.ai/api/v1/byok/KEY_ID \
-H "Authorization: Bearer sx_live_YOUR_KEY"MCP Server
A standard MCP server exposes tools derived from the canonical registry. Connect once; every AI client on that machine can access the scope you grant.
// .claude/mcp.json or ~/.claude/settings.json
{
"synchronex": {
"command": "npx",
"args": [
"-y",
"@synchronex/memory-mcp"
],
"env": {
"SYNCHRONEX_API_KEY": "sx_live_YOUR_KEY"
}
}
}MCP Tool Reference
| Tool | Scope | Group | Description |
|---|---|---|---|
| create_brand | write | Brands & brand kit | Create a non-default brand in a workspace. |
| get_brand_asset_counts | read | Brands & brand kit | Read media, voice, and generated-asset quality counts for a product. |
| list_brand_assets | read | Brands & brand kit | Browse brand media assets, optionally filtering to one asset id. |
| list_brand_dna_documents | read | Brands & brand kit | List Brand DNA source documents for a workspace brand. |
| list_brand_kernels | read | Brands & brand kit | List brand kernel metadata or read one brand kernel by id. |
| list_brands | read | Brands & brand kit | List brands in a workspace and identify the active brand. |
| reclassify_brand_asset | write | Brands & brand kit | Change the library classification of a brand asset. |
| rename_brand_asset | write | Brands & brand kit | Rename a brand asset or move it to another library folder. |
| resolve_brand | read | Brands & brand kit | Resolve the effective brand for a product, connection, or workspace surface. |
| set_active_brand | write | Brands & brand kit | Set the active brand for the authenticated user in a workspace. |
| update_brand_kit | write | Brands & brand kit | Preview or apply a versioned brand kit update from a brand document. |
| ceo_approve | full | CEO / decisions | Approve a CEO proposal or escalated worker run. Requires full-scope MCP credentials. |
| ceo_ask | write | CEO / decisions | Ask the Synchronex crew for a status answer or start a task. Approval remains in Synchronex. |
| ceo_brief | read | CEO / decisions | List pending CEO proposals and escalated worker runs awaiting review. |
| ceo_reject | full | CEO / decisions | Reject a CEO proposal or escalated worker run with feedback. Requires full-scope MCP credentials. |
| approve_inbound_command | full | Command intake | Accepts or rejects a pending inbound command proposal. Approval is a recorded decision only; execution is separately gated. Requires full-scope MCP credentials. |
| get_inbound_commands | read | Command intake | Lists inbound command proposals for the authenticated user. |
| intake_command | write | Command intake | Submit an inbound command through the intake spine. The command is recorded to the immutable command ledger and queued as a PENDING proposal for human approval; nothing executes directly. |
| chief_of_staff_brief | read | Companion agents | Answer what needs attention using CEO/systems-orchestrator context, worker recommendations, approvals, and jurisdiction routing. |
| create_opportunity | write | Companion agents | Create a normalized companion-worker opportunity in worker_signal_ledger. |
| draft_worker_action | write | Companion agents | Draft a worker action for user approval. Alias of submit_proposed_action_for_approval. |
| read_approval_status | read | Companion agents | Read pending approval status for worker outputs and CEO briefings. |
| read_attention_feed | read | Companion agents | Read the companion-worker attention feed: today, approvals, worker feed, and watching lanes. |
| read_feed_items | read | Companion agents | Read normalized external feed items available to workers and the attention system. |
| read_feed_sources | read | Companion agents | List external feed subscriptions and their latest fetch state. |
| read_opportunities | read | Companion agents | Read ranked companion-worker opportunities from worker_signal_ledger. |
| read_watch_config | read | Companion agents | Read companion-watch configuration stored on workers.config.companion_watch. |
| read_worker_outputs | read | Companion agents | Read approval-bound worker outputs for a connected agent. |
| submit_proposed_action_for_approval | write | Companion agents | Submit a companion-worker proposed action into the existing approval-first deliverable flow. |
| subscribe_to_feed | write | Companion agents | Attach a public HTTPS feed to a worker for periodic ingestion and attention recommendations. |
| trigger_feed_fetch | write | Companion agents | Fetch one owned feed source now, deduplicate its items, and emit worker attention opportunities. |
| unsubscribe_from_feed | write | Companion agents | Remove a worker feed subscription and its ingested items. |
| update_watch_config | write | Companion agents | Update companion-watch configuration for an existing worker. |
| ack_agent_message | write | Connected agents | Acknowledge a delivered message addressed to the calling connected agent. |
| list_agents | read | Connected agents | List live local bridge agents and active connected-agent identities for this account. |
| read_agent_messages | read | Connected agents | Read durable messages addressed to the calling connected agent. |
| send_agent_message | write | Connected agents | Send a durable notification to another connected agent on this account. |
| get_connector_health | read | Connections & connectors | Report the checked health state of each connected connector account. |
| list_connections | read | Connections & connectors | Read the canonical unified connection status for this account. |
| list_connectors | read | Connections & connectors | List connector statuses, optionally narrowed to one provider. |
| list_datasets | read | Data ingress | Lists normalized business datasets available to the authenticated user. |
| query_dataset | read | Data ingress | Queries rows from a normalized business dataset by exact-match filters. |
| codebase_apply_diff | full | Developer tools | Apply a prepared file-set diff to a GitHub-backed registered project by writing complete file contents. Requires full MCP scope. |
| codebase_list_pull_requests | read | Developer tools | List Synchronex-tracked pull requests for a GitHub-backed registered project. |
| codebase_open_pull_request | full | Developer tools | Open a GitHub pull request for a registered project and track it in Synchronex. Requires full MCP scope. |
| codebase_read_file | read | Developer tools | Read a UTF-8 file from a GitHub-backed registered project. Use before proposing code edits. |
| codebase_write_file | full | Developer tools | Create or update one UTF-8 file in a GitHub-backed registered project. Requires full MCP scope. |
| gmail_read | read | Gmail | Read a full Gmail thread from one explicitly labeled connected account. |
| gmail_search | read | Gmail | Search Gmail threads in one explicitly labeled connected account. |
| gmail_send | write | Gmail | Propose a new Gmail message from one explicitly labeled account. The message is not sent until a human approves the connector write decision. |
| kernel_get | read | Kernel management | Read the authenticated user Identity Kernel. |
| kernel_list_products | read | Kernel management | List products managed by the authenticated user. |
| kernel_update_slice | write | Kernel management | Merge a validated partial update into one Identity Kernel slice. |
| check_memory_confidence | read | Memory & context | Audits a session context block for stale data, constraint violations, and overall confidence score. Paste your CLAUDE.md or any injected memory block to validate it before relying on it. |
| export_kernel | read | Memory & context | Exports the authenticated user's active kernel into client-specific formats or a registered scaffold template. |
| get_identity_kernel | read | Memory & context | Returns the user's Identity Kernel — identity, product portfolio, standing constraints, and model preferences. Inject the returned injection_block at the start of every session to restore persistent identity context. |
| get_product_state | read | Memory & context | Returns the current Product State Document, including session summary, handoff note, what works, blockers, and open questions. Look up by exact product_name in the selected or active workspace (workspace_id), or by product_id, which takes precedence. workspace_id constrains an ID lookup when supplied. Ambiguous names return workspace and product ids. |
| get_session_handoff | read | Memory & context | Returns the handoff note (next_session_starts_here) for a product. Use this at the very start of a session to orient before loading full state. The lightest memory call available. |
| how_to | read | Memory & context | Find runnable Synchronex recipes from a goal in plain words. Returns tool steps, example arguments, prerequisites, limitations, and completion checks. Does not execute the steps. |
| log_decision | write | Memory & context | Writes a new architectural or product decision to the cross-product decision index. Auto-tags, generates an embedding, and calculates temporal weight. Use this when a significant decision is made during a session. |
| log_project_event | write | Memory & context | Record a project signal or event into the Synchronex command center. Use for deployments, errors, decisions, and any notable state change. |
| memory_decision_log | write | Memory & context | Appends a cross-product decision to the decision index. |
| memory_kernel_attest | read | Memory & context | Confirms that the AI agent loaded the Synchronex Identity Kernel for this session. Call once after reading the exported kernel or receiving kernel context. |
| memory_kernel_read | read | Memory & context | Returns the authenticated user Identity Kernel as structured JSON. |
| memory_kernel_update | write | Memory & context | Merges a partial update into the authenticated user Identity Kernel. |
| memory_product_state_read | read | Memory & context | Returns the current state document for a product by name. |
| memory_product_state_write | write | Memory & context | Applies partial updates to a product state document. |
| memory_search | read | Memory & context | Searches memory layers (kernel, product state, decisions, free-form memories); decisions and free-form memories use semantic pgvector search. |
| memory_session_summary | write | Memory & context | Stores a cross-AI session summary with attribution. |
| recall_free_form | read | Memory & context | Searches free-form cloud memories by semantic or keyword match. |
| remember_free_form | write | Memory & context | Stores a free-form note in cloud memory with optional tags and workspace scope. |
| search_decisions | read | Memory & context | Semantic search over the cross-product decision history. Returns ranked, relevant decisions trimmed to a token budget. Falls back to keyword search if embeddings are unavailable. |
| update_product_state | write | Memory & context | Updates the Product State Document for a specific product. Accepts partial updates — only provided fields are changed. Creates the state document if it doesn't exist yet. |
| answer_product_interview | write | Product interview | Record one answer in a product interview and return the next question or completed brief. |
| create_products_from_brief | write | Product interview | Create products, brands, an optional brand kit, and optional first assets from a completed interview. |
| start_product_interview | write | Product interview | Start a persisted interview that turns one or more product ideas into a creation-ready brief. |
| create_product | write | Products | Create a product in the selected or active workspace. |
| get_product | read | Products | Read one product by exact name in the selected or active workspace (workspace_id), or by product_id. product_id takes precedence; workspace_id constrains an ID lookup when supplied. Ambiguous names return workspace and product ids. |
| get_product_health | read | Products | Read configured product health metrics and their latest checked states. |
| list_products | read | Products | List products in the selected or active workspace. |
| call_sendinel_tool | write | Sendinel | Call a real Sendinel MCP tool (e.g. segments_list, templates_list, launch_campaign) using the caller's own connected Sendinel account. Sendinel applies its own 3-tier approval system to every call: Tier 0 (reads/drafts) executes immediately; Tier 1/2 (real sends, bulk ops, irreversible ops) queue for approval in Sendinel's own dashboard/Slack, separate from Synchronex's Attention tab. Use submit_proposed_action_for_approval to also surface a proposal in Synchronex's own Attention tab. |
| end_session | write | Sessions | Signal that this IDE session has ended. Synchronex will summarize decisions made during the session, update the Product State Document, and write a handoff note for the next session. Call this in your IDE teardown hook or at the end of each session. Returns decisions_captured and handoff_note for confirmation. |
| register_session | write | Sessions | Register this AI session with Synchronex so it appears in the pane picker. Call this at the very start of every session. If you have a remote share URL (Claude Code: /share), pass it as session_url — Synchronex will offer it as a live pane in the terminal grid. Returns a session_id to use in subsequent calls. |
| studio_generate | write | Studio / generation | Queue brand-aware content generation. Video requests use the async studio job pattern; poll with studio_get_job. |
| studio_get_job | read | Studio / generation | Poll a studio generation job or async media job. |
| studio_plan | write | Studio / generation | Queue a brand-aware content lane plan from a brief. |
| studio_propose | write | Studio / generation | Queue content variants for approval from an existing generation request. |
| pending_approvals | read | Workers | Read worker runs waiting for your decision in Synchronex. Approval happens on the first-party preview. |
| send_message | write | Workers | Send a team message or direct message to a teammate. Use this when the user explicitly asks you to message someone on their team. |
| worker_approve | full | Workers | Approve an escalated worker run and resume execution. Requires full-scope MCP credentials. |
| worker_get_run | read | Workers | Read the status and output of a worker run. |
| worker_get_schedule | read | Workers | Read a worker's current run schedule (cadence/cron, timezone, next_fire_at, active state). Resolves the worker by worker_id, or by worker_type + workspace_id when unambiguous. |
| worker_list | read | Workers | List active Synchronex workers and recent run state. |
| worker_run | write | Workers | Trigger an active worker run. Returns immediately with a run id; poll with worker_get_run. |
| worker_set_schedule | write | Workers | Set, change, or disable a worker's run schedule. Accepts a cadence preset (daily/weekly/biweekly/monthly) or an arbitrary 5-field cron expression (minimum interval: hourly). Resolves the worker by worker_id, or by worker_type + workspace_id when unambiguous. Returns the resulting schedule with next_fire_at so the companion can confirm it to the user in plain language. |
| approve_inbound_change | write | Workspaces | Accepts or rejects a pending workspace drift event. |
| get_drift_events | read | Workspaces | Lists workspace drift events for the authenticated user. |
| list_registered_workspaces | read | Workspaces | Lists registered Synchronex workspace sync targets for the authenticated user. |
| sync_workspace_state | write | Workspaces | Renders the current kernel export for a registered workspace. The MCP client writes the returned file content locally. |
Connection Registry
Connection names, categories, auth type, and live status sources come from the canonical registry used by Settings, the guide, and consent-adjacent labels.
| Connection | Category | Auth | Status source |
|---|---|---|---|
| ActiveCampaign | Business tools | Observer | esp_observer_connections |
| Ahrefs | Connected services | API key | connector_tokens |
| Amplitude | Connected services | OAuth 2.0 | connector_tokens |
| Asana | Connected services | OAuth 2.0 | connector_tokens |
| AWS CloudWatch | API key connections | OAuth 2.0 | connector_tokens |
| BambooHR | Business tools | OAuth 2.0 | connector_tokens |
| Baremetrics | API key connections | OAuth 2.0 | connector_tokens |
| Brand24 | Connected services | OAuth 2.0 | connector_tokens |
| Calendly | Connected services | OAuth 2.0 | connector_tokens |
| Calendly Observer | Connected services | Observer | esp_observer_connections |
| Canva | Connected services | OAuth 2.0 | connector_tokens |
| ChartMogul | API key connections | OAuth 2.0 | connector_tokens |
| ChatGPT | AI Assistants | OAuth 2.0 | oauth_clients |
| Claude.ai | AI Assistants | OAuth 2.0 | oauth_clients |
| Cloudflare | Connected services | OAuth 2.0 | connector_tokens |
| Competitor Pricing | Business tools | OAuth 2.0 | connector_tokens |
| DocuSign | Connected services | OAuth 2.0 | connector_tokens |
| Dropbox | Connected services | OAuth 2.0 | connector_tokens |
| Fathom | API key connections | API key | connector_tokens |
| Figma | Connected services | API key | connector_tokens |
| Firecrawl | Business tools | OAuth 2.0 | connector_tokens |
| Freshdesk | API key connections | OAuth 2.0 | connector_tokens |
| GA4 | Business tools | OAuth 2.0 | connector_tokens |
| Gemini | AI Assistants | API key | byok_credentials |
| Ghost | API key connections | OAuth 2.0 | connector_tokens |
| GitHub | Connected services | OAuth 2.0 | connector_tokens |
| Gmail | Business tools | OAuth 2.0 | connector_tokens |
| Google Ads | Business tools | OAuth 2.0 | connector_tokens |
| Google Calendar | Business tools | OAuth 2.0 | connector_tokens |
| Google Drive | Business tools | OAuth 2.0 | connector_tokens |
| Google Search Console | Business tools | OAuth 2.0 | connector_tokens |
| Greenhouse | API key connections | OAuth 2.0 | connector_tokens |
| Gusto | Business tools | OAuth 2.0 | connector_tokens |
| HubSpot | Connected services | OAuth 2.0 | connector_tokens |
| HubSpot Observer | Connected services | Observer | esp_observer_connections |
| Intercom | Connected services | OAuth 2.0 | connector_tokens |
| Jira | Connected services | OAuth 2.0 | connector_tokens |
| Kit | Business tools | Observer | esp_observer_connections |
| Klaviyo | Business tools | Observer | esp_observer_connections |
| Linear | Connected services | OAuth 2.0 | connector_tokens |
| Business tools | OAuth 2.0 | connector_tokens | |
| Local Agent Bridge | AI Assistants | Local bridge | agent_bridge_tokens |
| Looker | Connected services | OAuth 2.0 | connector_tokens |
| Mailchimp | Business tools | Observer | esp_observer_connections |
| Make | Connected services | OAuth 2.0 | connector_tokens |
| Meta Ads | Business tools | OAuth 2.0 | connector_tokens |
| Mixpanel | Connected services | OAuth 2.0 | connector_tokens |
| Monday | Connected services | OAuth 2.0 | connector_tokens |
| Notion | Connected services | OAuth 2.0 | connector_tokens |
| OneDrive / Excel Online | Business tools | OAuth 2.0 | connector_tokens |
| PagerDuty | Connected services | API key | connector_tokens |
| PandaDoc | Connected services | OAuth 2.0 | connector_tokens |
| Pipedrive | Business tools | OAuth 2.0 | connector_tokens |
| Plaid | API key connections | OAuth 2.0 | connector_tokens |
| PostHog | Connected services | OAuth 2.0 | connector_tokens |
| ProfitWell / Paddle | API key connections | OAuth 2.0 | connector_tokens |
| QuickBooks Online | API key connections | OAuth 2.0 | connector_tokens |
| Rippling | Unavailable | OAuth 2.0 | connector_tokens |
| RSS | Unavailable | OAuth 2.0 | connector_tokens |
| Salesforce | API key connections | OAuth 2.0 | connector_tokens |
| SEMrush | Connected services | API key | connector_tokens |
| Sendinel | Connected services | HTTP OAuth | sendinel_oauth |
| Sendinel Observer | Connected services | Observer | esp_observer_connections |
| Sentry | Connected services | OAuth 2.0 | connector_tokens |
| Shopify Observer | Business tools | Observer | esp_observer_connections |
| Slack | Connected services | OAuth 2.0 | connector_tokens |
| Snyk | API key connections | OAuth 2.0 | connector_tokens |
| Stripe | API key connections | API key | connector_tokens |
| Stripe Observer | API key connections | Observer | esp_observer_connections |
| Substack | Unavailable | OAuth 2.0 | connector_tokens |
| USPTO | API key connections | OAuth 2.0 | connector_tokens |
| Vercel | Connected services | OAuth 2.0 | connector_tokens |
| Webflow | Connected services | API key | connector_tokens |
| WordPress | API key connections | OAuth 2.0 | connector_tokens |
| Xero | API key connections | OAuth 2.0 | connector_tokens |
| Zapier | Connected services | OAuth 2.0 | connector_tokens |
| Zendesk | Business tools | OAuth 2.0 | connector_tokens |
| Zoom | Business tools | OAuth 2.0 | connector_tokens |
| MCP capability registry | MCP | OAuth scopes | Brands & brand kit (workspace-bound), CEO / decisions (mixed), Command intake (account-wide), Companion agents (workspace-bound), Connected agents (account-wide), Connections & connectors (account-wide), Data ingress (workspace-bound), Developer tools (account-wide), Gmail (workspace-bound), Kernel management (account-wide), Memory & context (mixed), Product interview (mixed), Products (mixed), Sendinel (account-wide), Sessions (account-wide), Studio / generation (mixed), Workers (mixed), Workspaces (account-wide) |
Example agent conversation
User: "What database did I decide on?"
Agent calls: search_decisions(q: "database decision")
Agent: "You chose Supabase (Postgres + pgvector) for native RLS and auth.uid() integration. Decision logged 2026-04-21."Clients that support MCP auto-discovery can locate the server at GET https://synchronex.ai/.well-known/mcp.
Agent Bridge
Agent Bridge lets Synchronex dispatch work to a locally running AI CLI on your machine. The bridge streams execution events back over HTTP polling. Use it when you need cloud-triggered local AI execution, such as automated PR reviews or scheduled kernel refreshes that must run in your local dev context.
New here? The bridge setup guide walks through installing and running the daemon (npx, one-line script, or standalone binary) and serving multiple accounts from one machine. The REST reference below is for triggering bridge work programmatically.
Prerequisites
The bridge requires the synchronex bridge start daemon running locally, packaged with @synchronex/memory-mcp. No cloud compute is used; the work runs on the developer's machine.
| Endpoint | Method | Purpose |
|---|---|---|
| /api/agent-bridge/requests | POST | Create a bridge request |
| /api/agent-bridge/requests/:id/events | GET | Poll for events; pass after=N for cursor |
# 1. Create a bridge request
curl -X POST https://synchronex.ai/api/agent-bridge/requests \
-H "Authorization: Bearer sx_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"Summarize open decisions for my-app","product_name":"my-app"}'
# 2. Poll for events (replace REQUEST_ID)
curl "https://synchronex.ai/api/agent-bridge/requests/REQUEST_ID/events?after=0" \
-H "Authorization: Bearer sx_live_YOUR_KEY"SDK methods for Agent Bridge, such as sx.bridge.run(), are planned. The current path is direct REST as shown above.
REST API - Memory
Base URL: https://synchronex.ai/api/v1. Auth: Authorization: Bearer sx_live_YOUR_KEY.
GET /v1/memory/identity
{
"id": "uuid",
"user_id": "uuid",
"injection_block": "# Identity\nName: ...\n...",
"confidence": 0.94,
"token_count": 312,
"updated_at": "2026-05-01T00:00:00Z"
}PUT /v1/memory/identity
curl -X PUT https://synchronex.ai/api/v1/memory/identity \
-H "Authorization: Bearer sx_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Kevin Desler","role":"Solo founder","timezone":"Pacific/Honolulu"}'| Endpoint | Method | Purpose |
|---|---|---|
| /v1/memory/product/:name/state | GET | Return the Product State Document for a named product. |
| /v1/memory/product/:name/state | POST | Create or replace a Product State Document. |
| /v1/memory/decisions | POST | Log a decision. |
| /v1/memory/decisions/search | GET | Semantic search over the Decision Index. |
| /v1/memory/decisions/:id | DELETE | Permanently delete a decision record. |
{
"decision": "Chose Supabase over PlanetScale for multi-tenant DB",
"reasoning": "Native RLS, auth.uid() integration, pgvector bundled",
"product_name": "synchronex",
"affects_products": []
}curl "https://synchronex.ai/api/v1/memory/decisions/search?q=database+choice&limit=5" \
-H "Authorization: Bearer sx_live_YOUR_KEY"REST API - Kernel Export
GET /v1/kernel/export
| Param | Default | Description |
|---|---|---|
| format | claude-md | claude-md, agents-md, gemini-md, cursorrules, chatgpt-instructions, raw |
| budget | 500 | Max token budget |
| download | false | Set true to receive as file download |
curl "https://synchronex.ai/api/v1/kernel/export?format=claude-md&budget=400" \
-H "Authorization: Bearer sx_live_YOUR_KEY"
curl "https://synchronex.ai/api/v1/kernel/export?format=gemini-md" \
-H "Authorization: Bearer sx_live_YOUR_KEY"REST API - BYOK
Bring Your Own Key stores encrypted credentials for AI providers and third-party APIs. Requires Pro tier or above. Keys are stored AES-256-GCM encrypted and never returned in plaintext after submission.
| Endpoint | Method | Purpose |
|---|---|---|
| /v1/byok | GET | List registered credentials by name and hint only. |
| /v1/byok | POST | Register a new key. |
| /v1/byok/:id | DELETE | Permanently revoke the credential. |
{
"service": "anthropic",
"label": "Primary Claude API key",
"key": "sk-ant-..."
}Supported providers: anthropic openai google openrouter resend linear sentry stripe custom
REST API - AI Costs
Requires Pro tier or above.
| Endpoint | Purpose |
|---|---|
| /v1/ai/costs | Returns AI cost totals across all products for the billing period. |
| /v1/ai/costs/:product | Returns per-product AI cost breakdown for a product slug. |
REST API - Scope
Controls the active workspace context.
| Endpoint | Method | Purpose |
|---|---|---|
| /v1/scope | GET | Return current active workspace ID and available workspaces. |
| /v1/scope | PATCH | Set active_workspace_id after workspace membership validation. |
{
"active_workspace_id": "workspace-uuid"
}OAuth Integration
Connect Synchronex to hosted AI tools via OAuth with no API key in the AI client. Supported clients include Claude.ai, ChatGPT Apps, and Gemini. Supported flows are Authorization Code + PKCE and Dynamic Client Registration.
| Endpoint | Purpose |
|---|---|
| GET /.well-known/oauth-authorization-server | OAuth 2.0 server metadata (RFC 8414) |
| GET /.well-known/oauth-protected-resource | Protected resource metadata (RFC 9728) |
| POST /api/oauth/register | Dynamic Client Registration (RFC 7591) |
| POST /api/oauth/authorize | Authorization endpoint |
| POST /api/oauth/token | Token endpoint |
| POST /api/oauth/revoke | Token revocation |
Available scopes
| Scope | Access |
|---|---|
| read | Read Identity Kernel, Product State, and Decision Index |
| write | Read scope, plus write to memory, product state, and decisions |
| full | Write scope, plus approval decisions and codebase-changing MCP tools |
Access tokens last 1 hour. Refresh tokens last 30 days, rotate on use, and have a 60 second grace window.
Connecting Claude.ai
In Claude.ai > Integrations > Add Integration, paste https://synchronex.ai/.well-known/oauth-authorization-server.
Connecting ChatGPT
| Field | Value |
|---|---|
| Auth URL | https://synchronex.ai/api/oauth/authorize |
| Token URL | https://synchronex.ai/api/oauth/token |
| Scope | read write |
Project Signal Ingestion
Push events from external tools into Synchronex for the cross-project command center.
Path 1 - Native webhook receivers
| Platform | Webhook URL | Signature mechanism |
|---|---|---|
| Sentry | https://synchronex.ai/api/webhooks/sentry | sentry-signature (HMAC-SHA256) |
| PostHog | https://synchronex.ai/api/webhooks/posthog | Authorization: Bearer |
| GitHub | https://synchronex.ai/api/webhooks/github | X-Hub-Signature-256 |
| Stripe | https://synchronex.ai/api/webhooks/stripe | Stripe SDK stripe-signature |
Path 2 - MCP log_project_event tool
{
"name": "log_project_event",
"arguments": {
"project_id": "uuid",
"event_type": "deployment.completed",
"title": "Deployed v2.3.1 to production",
"severity": "info",
"body": {
"sha": "abc123",
"environment": "production"
}
}
}Path 3 - Generic REST endpoint
Send HMAC-signed events to /api/v1/ingest/:projectId when a native webhook receiver is not available.
curl -X POST https://synchronex.ai/api/v1/ingest/PROJECT_ID \
-H "X-Synchronex-Signature: sha256=COMPUTED_HMAC" \
-H "X-Synchronex-Timestamp: 1746057600" \
-H "Content-Type: application/json" \
-d '{"event_type":"build.failed","title":"CI build failed on main","severity":"error","body":{"branch":"main"},"external_id":"ci-run-9876"}'Signed payload format is {timestamp}.{rawBody}. Timestamp tolerance is +/- 5 minutes. Pass external_id for idempotency; duplicate delivery returns 200 with no duplicate row.
Rate Limits
All limits are per-user, not per-IP, for authenticated calls.
| Tier | Requests / minute | Requests / day |
|---|---|---|
| Free | 10 | 100 |
| Pro | 60 | 5,000 |
| Team | 120 per user | 20,000 per user |
| Enterprise | Unlimited | Unlimited |
| Endpoint group | Limit |
|---|---|
| Auth attempts | 10 per 5 minutes |
| Kernel export | 5 per 5 minutes |
| Public unauthenticated | 60 per minute per IP |
| Header | Value |
|---|---|
| X-RateLimit-Limit | Tier request limit |
| X-RateLimit-Remaining | Requests remaining in current window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
| Retry-After | Seconds to wait; 429 responses only |
{
"error": "rate_limit_exceeded",
"retry_after": 30,
"limit": 60,
"remaining": 0,
"reset_at": "2026-05-03T12:01:00.000Z"
}SDK retry behavior: 3 attempts, exponential backoff starting at 1 second, respects the Retry-After header.
Error Reference
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description."
}
}| HTTP Status | Code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | Request body failed schema validation. error.details contains field errors. |
| 401 | UNAUTHORIZED | Missing or invalid API key or OAuth token. |
| 403 | FORBIDDEN | Valid auth but insufficient scope or tier. |
| 404 | NOT_FOUND | Resource does not exist or belongs to another user. |
| 409 | CONFLICT | Duplicate resource; most duplicate deliveries return idempotent 200. |
| 422 | UNPROCESSABLE | Semantically invalid request, such as an unknown BYOK provider. |
| 429 | RATE_LIMITED | Rate limit exceeded. Check the Retry-After header. |
| 500 | INTERNAL_ERROR | Unexpected server error. Reported automatically. |
SDKs and Tools
npm install @synchronex/sdkimport { Synchronex } from '@synchronex/sdk'
const sx = new Synchronex({ apiKey: process.env.SYNCHRONEX_API_KEY })
const kernel = await sx.memory.identity.get()
await sx.memory.decisions.log({
decision: 'Chose Postgres over MongoDB',
reasoning: 'Native JSON + pgvector, no extra vendor',
product_name: 'my-app',
})
const claudeMd = await sx.kernel.export({ format: 'claude-md', budget: 400 })
const results = await sx.memory.decisions.search({ q: 'database decisions', limit: 5 })
console.log(kernel, claudeMd, results)import { SynchronexError } from '@synchronex/sdk'
try {
await sx.memory.identity.update({ name: 'Kevin' })
} catch (err) {
if (err instanceof SynchronexError) {
console.error(err.code, err.message, err.status)
}
}Machine-readable OpenAPI 3.1 is available as JSON and YAML.
- JSON: https://synchronex.ai/api/v1/openapi.json
- YAML: https://synchronex.ai/api/v1/openapi.yaml or https://synchronex.ai/openapi.yaml
npx openapi-typescript https://synchronex.ai/api/v1/openapi.json -o synchronex.d.tsReady for an API key?
Create one in the dashboard and store it in your environment.