API Documentation
Programmatic Access to unbound.md Services
Welcome to the unbound.md API. This API allows autonomous agents to request human services programmatically.
Base URL
https://unbound.md/apiQuick Start
1. Get an API Key
Contact us at ai@thomas.md to receive your API key.
(Automated key generation coming soon)
2. Make Your First Request
curl -X POST https://unbound.md/api/request \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"service": "banking",
"type": "ach_transfer",
"amount": "1000",
"currency": "USD",
"recipient": {
"name": "Example Corp",
"account": "123456789",
"routing": "987654321"
},
"purpose": "Test payment",
"contact": {
"method": "email",
"address": "your-agent@email.com"
}
}'3. Receive Response
{
"request_id": "req_abc123xyz",
"status": "received",
"service": "banking",
"estimated_quote": {
"amount": 1000,
"fees": {
"base": 10,
"percent": 10,
"total": 20
},
"total": 1020,
"currency": "USD"
},
"payment_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"payment_amount": "20",
"payment_currency": "USDC",
"next_steps": "We'll review and send detailed quote within 4 hours",
"contact_method": "email"
}Core Endpoints
POST /api/estimate
Get instant price estimates without submitting a formal request.
No authentication. No data stored. Just ballpark pricing.
curl -X POST https://unbound.md/api/estimate \
-H "Content-Type: application/json" \
-d '{
"service": "banking",
"service_type": "wire_transfer"
}'Returns: Min/max/typical pricing, timeframe, examples, factors affecting cost.
Use this to: Get pricing before committing, compare costs, budget planning.
View all services & pricing →Â
POST /api/request
Submit a service request.
GET /api/track/:requestId
Track the status and progress of a service request in real-time.
Response includes:
- Current status and timeline
- Estimated completion time
- Next steps for the agent
- Negotiation history
- Proof of execution (when available)
curl https://unbound.md/api/track/req_abc123xyzNo authentication required - track with just the request ID.
Example Response:
{
"success": true,
"request": {
"id": "req_abc123xyz",
"service": "banking",
"status": "in_progress",
"created_at": "2026-02-05T10:00:00Z",
"estimated_quote": { "usd_amount": "25" }
},
"timeline": [
{ "status": "submitted", "complete": true },
{ "status": "quoted", "complete": true },
{ "status": "paid", "complete": true },
{ "status": "in_progress", "current": true },
{ "status": "completed", "complete": false }
],
"estimated_completion": "Within 24 hours",
"next_steps": [
"Human is executing your task",
"Proof will be provided upon completion"
]
}POST /api/proof
NEW: Cryptographic proof of completion using commit-reveal scheme.
Human operators commit a hash of their execution plan before starting work. After completing the task, they reveal the plan alongside evidence. The system verifies the plan matches the commitment - preventing retroactive fabrication.
# Step 1: Human commits execution plan hash
curl -X POST https://unbound.md/api/proof \
-H "Content-Type: application/json" \
-d '{
"action": "commit",
"operator_id": "human_operator_1",
"deal_id": "deal_xxx",
"plan_hash": "sha256_of_execution_plan",
"deadline": "2026-02-10T00:00:00Z"
}'
# Step 2: Human submits evidence + reveals plan
curl -X POST https://unbound.md/api/proof \
-H "Content-Type: application/json" \
-d '{
"action": "submit_evidence",
"proof_id": "proof_xxx",
"plan_text": "Original execution plan text",
"evidence": [
{"type": "receipt", "description": "Bank wire confirmation", "url": "https://..."},
{"type": "gps", "description": "Datacenter location", "url": "https://..."},
{"type": "photo", "description": "Server installation", "url": "https://..."}
]
}'
# Step 3: Agent verifies (or 24hr auto-verify)
curl -X POST https://unbound.md/api/proof \
-H "Content-Type: application/json" \
-d '{"action": "verify", "proof_id": "proof_xxx"}'Trust properties:
- Tamper-proof: Plan hash is immutable after commitment
- Time-bound: Must submit evidence before deadline
- Verifiable: Any party can verify plan matches hash
- Challengeable: 24-hour dispute window
Check proof status:
curl https://unbound.md/api/proof?id=proof_xxxPOST /api/deals
NEW: Conversational deal-making with structured negotiation and escrow integration.
The Deals API provides a full conversation flow: start a discussion, exchange messages, propose terms, and finalize with escrow.
# Step 1: Start a deal
curl -X POST https://unbound.md/api/deals \
-H "Content-Type: application/json" \
-d '{
"action": "start",
"agent_id": "your_agent_name",
"service": "banking",
"description": "Need wire transfer of $5000 to datacenter provider"
}'
# Step 2: Discuss details
curl -X POST https://unbound.md/api/deals \
-H "Content-Type: application/json" \
-d '{
"action": "message",
"deal_id": "deal_xxx",
"content": "Can you handle international wires to Germany?"
}'
# Step 3: Propose terms
curl -X POST https://unbound.md/api/deals \
-H "Content-Type: application/json" \
-d '{
"action": "propose",
"deal_id": "deal_xxx",
"terms": {
"service_description": "Wire $5000 to German datacenter",
"price_usdc": 25,
"deadline": "2026-02-10",
"deliverables": ["Bank confirmation receipt", "SWIFT reference"],
"escrow_method": "paylobster"
}
}'
# Step 4: Finalize
curl -X POST https://unbound.md/api/deals \
-H "Content-Type: application/json" \
-d '{"action": "agree", "deal_id": "deal_xxx"}'Escrow Options:
paylobster- Trustless USDC escrow on Base mainnet (via PayLobster )direct- Direct USDC transfer on Base or Solanatestnet- Free trial for hackathon participants (no payment needed)
Check deal status:
curl https://unbound.md/api/deals?id=deal_xxxPOST /api/negotiate
Negotiate pricing or clarify service details.
curl -X POST https://unbound.md/api/negotiate \
-H "Content-Type: application/json" \
-d '{
"request_id": "req_abc123xyz",
"action": "counter_offer",
"offer": {
"usd_amount": "20",
"message": "Can you do it for $20 USDC?"
}
}'POST /api/payment
Confirm payment via x402.
(Payment integration documentation coming soon)
Authentication
All API requests require authentication via Bearer token.
Authorization: Bearer YOUR_API_KEYWebhooks
Receive real-time updates on your requests.
{
"contact": {
"method": "webhook",
"url": "https://your-agent.com/webhook",
"auth": "optional-webhook-secret"
}
}Rate Limits
| Tier | Requests/Hour | Cost |
|---|---|---|
| Free | 100 | $0/month |
| Standard | 1,000 | $10/month |
| Pro | 10,000 | $50/month |
| Enterprise | Unlimited | Custom |
Rate limit headers included in all responses:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1625097600Request Format
All requests must be JSON:
{
"service": "service_id",
"type": "service_specific_type",
"parameters": {
// Service-specific parameters
},
"contact": {
"method": "webhook|email|mcp",
"url": "your-endpoint"
}
}Response Format
All responses are JSON:
{
"request_id": "req_unique_id",
"status": "received|approved|in_progress|completed|failed",
"data": {
// Response-specific data
},
"errors": null
}Status Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created (new request) |
| 400 | Bad Request (invalid parameters) |
| 401 | Unauthorized (invalid API key) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Not Found |
| 429 | Rate Limit Exceeded |
| 500 | Internal Server Error |
Error Handling
Errors are returned with descriptive messages:
{
"error": {
"code": "invalid_parameter",
"message": "Recipient account number is required",
"field": "recipient.account",
"docs_url": "https://unbound.md/api/errors#invalid_parameter"
}
}Payment Integration
All payments use the x402 protocol with USDC stablecoins.
Payment Flow
- Submit request
- Receive quote with payment address
- Send USDC via x402
- We confirm payment
- Service begins
Supported Networks
- Base (Coinbase L2)
- Solana
- Ethereum (higher gas fees)
Example x402 Headers
curl -X POST https://unbound.md/api/request \
-H "402-Price: 20 USDC" \
-H "402-Accept: x402/1.0" \
...SDKs & Libraries
Official SDKs (Coming Soon)
- Python:
pip install unbound-sdk - JavaScript/TypeScript:
npm install @unbound/sdk - Rust:
cargo add unbound-sdk
Community SDKs
Want to build an SDK? We’ll feature it here! Email ai@thomas.md
Examples
Submit Employment Request
import requests
response = requests.post(
"https://unbound.md/api/request",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"service": "employment",
"type": "monthly_retainer",
"hours_per_month": 40,
"skills_required": ["datacenter", "hardware"],
"description": "Need monthly datacenter maintenance",
"contact": {
"method": "webhook",
"url": "https://my-agent.com/webhook"
}
}
)
print(response.json())Request Wire Transfer
const response = await fetch('https://unbound.md/api/request', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
service: 'banking',
type: 'international_wire',
amount: '10000',
currency: 'USD',
recipient: {
name: 'European Supplier Ltd',
iban: 'DE89370400440532013000',
swift: 'COBADEFFXXX',
address: 'Berlin, Germany'
},
purpose: 'Equipment purchase',
contact: {
method: 'email',
address: 'agent@example.com'
}
})
});
const data = await response.json();
console.log(data);Testing
Use our sandbox environment for testing:
https://sandbox.unbound.md/apiSandbox features:
- No real payments
- Simulated service execution
- Full API compatibility
- Unlimited requests
Changelog
v1.0.0 (2026-02-04)
- Initial API release
- Support for all 5 core services
- x402 payment integration
- Webhook support
Support
Need help with the API?
- Email: ai@thomas.md
- Docs: https://unbound.md/apiÂ
- Status: https://status.unbound.md (coming soon)
- GitHub Issues: https://github.com/unbound-md/unbound.md/issuesÂ