Quickstart
The lowest-friction path from a fresh API key to a working Hyperstruck agent run.
This is the fastest first-success path: create an agent, dispatch a goal, and optionally store a manual learning.
Provider credentials are optional
Hyperstruck can run agents with a platform-provided model credential. Upload your own provider credential only when you need a tenant default or agent-specific override.
Keep the first call small
Start with the minimum required fields. Full API reference lives in the OpenAPI docs. If you omit optional fields here, Hyperstruck uses sane defaults.
Minimal flow
1. Create an agent
Create an agent with a name and core_config.instructions. That is the whole requirement. There is no model to pick, and unrecognized fields are rejected rather than ignored.
curl -X POST "https://api.hyperstruck.com/agents" \
-H "Authorization: Bearer <YOUR_HYPERSTRUCK_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"name": "Sales Execution Assistant",
"core_config": { "instructions": "You are a helpful sales execution assistant." }
}'Add an optional description when you want the agent listing to explain itself.
2. Dispatch a goal
Use the returned AGENT_ID to start a run.
curl -X POST "https://api.hyperstruck.com/agents/<AGENT_ID>/goals" \
-H "Authorization: Bearer <YOUR_HYPERSTRUCK_API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "goal": "Create a follow-up sales execution plan for a call with client XYZ" }'Or use the Python SDK
The same two steps with the client doing the plumbing. Install it with pip install hyperstruck.
from hyperstruck import Hyperstruck
hs = Hyperstruck(api_key="<YOUR_HYPERSTRUCK_API_KEY>")
agent = hs.agents.create(
name="Sales Execution Assistant",
instructions="You are a helpful sales execution assistant.",
)
run = agent.run("Create a follow-up plan for the client XYZ call")
print(run.result)Runs block until the goal resolves. Use await agent.arun(...) inside an event loop, and fall back to the REST calls above from any language the SDK does not cover.
3. Optionally store a manual learning
Reasoning runs can already extract learnings automatically. Use manual storage when you want direct editorial control, including structured entity/outcome evidence for a concrete observation.
curl -X POST "https://api.hyperstruck.com/agents/<AGENT_ID>/learnings" \
-H "Authorization: Bearer <YOUR_HYPERSTRUCK_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"content": "qualify_lead returns cold for cybersecurity companies",
"applicable_tools": ["qualify_lead"],
"instances": [
{
"entity_values": {
"company": "CrowdShield",
"industry": "cybersecurity"
},
"outcome": {
"tier": "cold",
"score": "0.12"
}
}
]
}'See Learnings API for the full instance evidence shape and storage rules.
4. Reuse the same capabilities from developer tooling
Once the API flow works, you can expose the same capabilities in developer tooling.
/hyper-reasoning Create a follow-up sales execution plan for a call with client XYZ
/hyper-learning search client XYZ decision makers
/hyper-learning storeCommon next knobs
- Agent creation optional fields:
description,status(defaults toactive),reasoning_profile(defaults tofull),home_space_id, and everything insidecore_config. See Agent configuration for instructions, tools, guardrails, and approval gates. - Goal dispatch optional fields:
context,session_id,worker_profile,metadata - Manual learning optional fields:
utility,source_goal,applicable_goals,applicable_tools,privacy,instances
Run Hyperstruck Engine in your own process
The hosted API above dispatches goals to Hyperstruck Engine for you. If you are running it yourself, start by checking your setup. You do not choose models: every reasoning component runs a model benchmarked for that component's job, pinned, with no silent substitution when one is unavailable.
pip install hyperstruck-core
hyperstruck doctorThe doctor reports everything at once rather than failing on the first problem it meets:
Provider keys OPENAI_API_KEY ok
GROQ_API_KEY missing (planner, plan validator, final composer)
Embedder nomic-embed-text, 768 dimensions ok
Innate corpus not seeded for this embedder
Services Qdrant unreachable at localhost:6333Once the report is clean, dispatch a goal:
agent = create_agent(
AgentConfig(
name="Collections",
instructions="You work through collections tasks using the available tools.",
)
)
agent.register_tool(fetch_overdue)
agent.register_tool(send_reminder)
result = await agent.run(goal="Run month-end collections")
result.success # True only when the completion gate could ground it
result.is_quality_passed # final reflection's verdict on the work itself
result.incomplete_reason # machine-readable on refusal, e.g. UNGROUNDED_CLAIMThe run decomposes into milestones, validates the plan before any tool fires, executes, reflects and revises. Memory and learning are separate services you pass in when you want them. A reasoning run does not require any of them.
When to upload credentials
You usually do not need provider credentials for the first run because Hyperstruck provides a platform default. Upload credentials only when you want model billing or endpoint control under your own account. This is a billing and routing choice, not a model choice.
Resolution order is: a matching active agent_override for the agent, then a matching active tenant_default, then the platform default. It decides whose account is billed and which endpoint is called, never which model runs.