Score, rank, and draft from one endpoint
import { g8 } from "@graph8/sdk" const draft = await g8.skills.execute( "first-touch", { account: "Northwind" })draft.body // on-brand, grounded octa copy, reasoning
Draft ready
"Saw you are hiring 5 AEs..."
written by octa, in your app
1
auth header set
Bearer + X-Org-Id
6
model capabilities
skills, RAG, enrichment, more
REST
SDK + MCP
the same three patterns
Auth header set
Authorization: Bearer $GRAPH8_API_KEY
X-Org-Id: $GRAPH8_ORG_ID
Every call below carries this set.
List the supported model ids.
Start here. The catalog endpoint returns every model id you can pass to a skill.
curl "$GRAPH8_API_BASE/api/v1/skills/models" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" Create an LLM skill, then run it.
A skill wraps a model and a prompt into a reusable, parameterized task. Create once, execute with inputs as many times as you like.
- 01 Create the skill
- 02 Execute with inputs
curl -X POST "$GRAPH8_API_BASE/api/v1/skills" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" \ -H "Content-Type: application/json" \ -d '{ "name": "summarize-account", "model": "<model-id-from-catalog>", "prompt": "Summarize {{company}} for an AE in 3 bullets." }' curl -X POST "$GRAPH8_API_BASE/api/v1/skills/$SKILL_ID/execute" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "company": "Acme Corp" } }' const base = `${process.env.GRAPH8_API_BASE}/api/v1`;const headers = { Authorization: `Bearer ${process.env.GRAPH8_API_KEY}`, "X-Org-Id": process.env.GRAPH8_ORG_ID, "Content-Type": "application/json",}; // 1. create an LLM skillconst skill = await fetch(`${base}/skills`, { method: "POST", headers, body: JSON.stringify({ name: "summarize-account", model: modelId, // from GET /api/v1/skills/models prompt: "Summarize {{company}} for an AE in 3 bullets.", }),}).then((r) => r.json()); // 2. execute itconst result = await fetch(`${base}/skills/${skill.id}/execute`, { method: "POST", headers, body: JSON.stringify({ inputs: { company: "Acme Corp" } }),}).then((r) => r.json()); Ground generation in your own content.
Semantic search over your knowledge base. Pull the top matches, then feed them into a skill as context for a grounded answer.
curl -X POST "$GRAPH8_API_BASE/api/v1/kb/search" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" \ -H "Content-Type: application/json" \ -d '{ "query": "what is our position on data residency", "top_k": 5 }' Enrich a column with a model.
Run model-backed enrichment over your contacts and companies, one column at a time, against your workspace data slice.
curl -X POST "$GRAPH8_API_BASE/api/v1/enrichment/run" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" \ -H "Content-Type: application/json" \ -d '{ "contact_ids": ["ct_123", "ct_456"], "column": "persona_fit", "instruction": "Score ICP fit for our mid-market motion." }' The same capabilities, over MCP.
Prefer an agent? Every primitive above has an MCP tool, so your own agents can call models, search the KB, and enrich data with no REST plumbing.
g8_skill_create_llm
Create an LLM skill from a prompt and a model id.
g8_skill_execute
Run a skill with inputs and read the result.
g8_search_kb
Semantic search over your knowledge base for RAG.
g8_enrich_contacts
Run per-column AI enrichment over contacts.
Call the Octa family directly.
graph8-hosted Octa inference is in preview. The REST shape below is illustrative, not a GA contract. The Octa models MCP server is available for preview access.
// Preview. Illustrative endpoint shape, not a GA contract.curl -X POST "$GRAPH8_API_BASE/v1/models/octa/completions" \ -H "Authorization: Bearer $GRAPH8_API_KEY" \ -H "X-Org-Id: $GRAPH8_ORG_ID" \ -H "Content-Type: application/json" \ -d '{ "model": "octa", "head": "copy", "input": "Draft a first-touch email for a VP of Sales." }' // Octa models MCP server (Preview){ "mcpServers": { "octa": { "url": "$GRAPH8_MCP_URL" } }} Preview endpoints are not generally available and may change. For workspace-approved work, use the onboarded primitives above and select an Octa head through a skill.