Install
openclaw skills install bios-deep-researchRun deep biological research using the BIOS API. Supports API key and x402 crypto payments (USDC on Base). Start-and-check-back pattern works across heartbeats.
openclaw skills install bios-deep-researchQuery the BIOS deep research API for in-depth biological and biomedical research. Two authentication options: API key (traditional) or x402 crypto payments (USDC on Base, no API key needed).
This skill reads the following environment variable:
| Variable | Required | Used for |
|---|---|---|
BIOS_API_KEY | Optional (not needed if using x402) | Bearer auth to api.ai.bio.xyz |
x402 crypto payments do not require any env vars at runtime. The wallet signing setup is handled externally by the human operator (see references/x402-setup.md). The agent never handles private keys or wallet secrets — it only sends pre-signed payment headers.
IMPORTANT: ALWAYS provide the full file path when calling read or write tools. Never call read without a path argument.
skills/bios-deep-research/state.jsonSet BIOS_API_KEY in your OpenClaw skill config. Base URL: https://api.ai.bio.xyz
curl -sS -X POST https://api.ai.bio.xyz/deep-research/start \
-H "Authorization: Bearer $BIOS_API_KEY" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "message=YOUR RESEARCH QUESTION" \
--data-urlencode "researchMode=steering"
Use curl for all BIOS API calls. Do NOT use web_fetch — it does not support Authorization headers. Reference secrets via environment variable ($BIOS_API_KEY), never hardcode them in command strings.
API key plans: Free trial (20 credits), Pro $29.99/mo (60), Researcher $129.99/mo (300), Lab $499/mo (1,250). Free for .edu emails. Top-up credits never expire.
No API key needed. Base URL: https://x402.chat.bio.xyz
Pay per request with USDC on Base mainnet. No tokens leave your wallet until the server delivers results.
Payment flow:
curl -sS -X POST https://x402.chat.bio.xyz/api/deep-research/start \
-H "Content-Type: application/json" \
-d '{"message": "YOUR RESEARCH QUESTION", "researchMode": "steering"}'
Response: 402 Payment Required with payment requirements in the body:
{
"x402Version": 1,
"accepts": [{
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "200000",
"payTo": "0x4b4F85C16B488181F863a5e5a392A474B86157e0",
"maxTimeoutSeconds": 1800
}]
}
The amount is in USDC's smallest unit (6 decimals). 200000 = $0.20.
Sign EIP-712 payment authorization using x402 client libraries (see references/x402-setup.md).
Resubmit with payment headers:
curl -sS -X POST https://x402.chat.bio.xyz/api/deep-research/start \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64-encoded payment payload>" \
-H "PAYMENT-SIGNATURE: <base64-encoded payment payload>" \
-d '{"message": "YOUR RESEARCH QUESTION", "researchMode": "steering"}'
Send both headers for compatibility. Response: 200 OK with conversationId.
| Mode | API Key | x402 (USDC) | Duration | Use Case |
|---|---|---|---|---|
steering | 1 credit/iteration | $0.20 | ~5-20 min | Interactive guidance, test hypotheses |
smart | up to 5 credits | $1.00 | ~15-60 min | Balanced depth with checkpoints |
fully-autonomous | up to 20 credits | $8.00 | ~60 min to 8 hr | Deep unattended research |
BIOS research takes minutes to hours. You cannot poll for this duration in a single agent turn. Instead, use this two-phase pattern:
skills/bios-deep-research/state.jsonpending is null (only one research session at a time)conversationId from the response to state:
Write to skills/bios-deep-research/state.json:
{"pending": {"conversationId": "xxx", "mode": "steering", "started_iso": "2026-02-26T10:00:00Z"}}
On each subsequent heartbeat or manual invocation:
skills/bios-deep-research/state.jsonpending is null, nothing to do — return# API key auth:
curl -sS "https://api.ai.bio.xyz/deep-research/${CONVERSATION_ID}" \
-H "Authorization: Bearer $BIOS_API_KEY"
# x402 (no auth needed for polling):
curl -sS "https://x402.chat.bio.xyz/api/deep-research/${CONVERSATION_ID}"
completed → Extract worldState.discoveries. Clear pending in state. Return the discoveries.running / queued / processing → Report elapsed time. Keep state as-is.failed / timeout → Clear pending in state. Report the error.Expected heartbeats until completion:
The worldState.discoveries array is the primary output. Each discovery includes:
For beach.science posts: Use discoveries as the factual backbone. Attribute: "Deep research via BIOS".
For interactive use: Present the research summary: objectives → hypotheses → discoveries. Let the user decide whether to steer further or accept results.
After a steering iteration completes, you can submit a follow-up question using the same conversationId for deeper investigation. Each follow-up costs 1 additional credit / $0.20.
curl -sS -X POST https://api.ai.bio.xyz/deep-research/start \
-H "Authorization: Bearer $BIOS_API_KEY" \
--data-urlencode "message=FOLLOW_UP_QUESTION" \
--data-urlencode "conversationId=CONVERSATION_ID" \
--data-urlencode "researchMode=steering"
This starts a new pending research cycle — same start-and-check-back pattern.
curl -sS "https://api.ai.bio.xyz/deep-research?limit=20" \
-H "Authorization: Bearer $BIOS_API_KEY"
Paginate with cursor query parameter. Response has data, nextCursor, hasMore.
API key path:
BIOS_API_KEY env var.x402 path:
api.ai.bio.xyz.$BIOS_API_KEY).--data-urlencode for user-supplied input in curl commands to prevent shell injection.Content-Type: application/json is required), always escape user-supplied values for JSON before embedding in -d arguments — replace \ with \\, " with \", and newlines with \n. Alternatively, use jq -n --arg to construct the JSON safely if available.conversationId in a URL, verify it contains only alphanumeric characters, hyphens, and underscores ([A-Za-z0-9_-]+). Reject any value that does not match.