Help us improve
Share bugs, ideas, or general feedback.
From bankr-agent-dev
Documents Bankr Agent API endpoints, async submit-poll-complete job pattern, TypeScript examples, and response schemas for crypto trading and market analysis.
npx claudepluginhub bankrbot/claude-plugins --plugin bankr-agent-devHow this skill is triggered — by the user, by Claude, or both
Slash command
/bankr-agent-dev:bankr-api-basicsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When answering questions about the Bankr API:
Executes Bankr API operations via MCP tools using submit-poll-complete pattern: submit prompts, poll status every 2s, handle results for trades, prices, and analysis.
Provides reusable TypeScript client code, JobStatus types, transaction interfaces for swaps, approvals, ERC20/NFT transfers, and common files like package.json/tsconfig for Bankr API integrations.
Manages async jobs in Bankr x402 SDK: submit prompts, poll status, check completion, cancel jobs, batch process, handle retries and timeouts.
Share bugs, ideas, or general feedback.
When answering questions about the Bankr API:
references/job-response-schema.mdexamples/ directoryThe Bankr Agent API enables programmatic access to crypto trading, market analysis, and prediction markets through a simple asynchronous job pattern.
All Bankr operations follow a submit-poll-complete pattern:
This pattern handles operations that may take 30 seconds to 2+ minutes (trades, complex analysis).
https://api.bankr.bot
All requests require the x-api-key header:
x-api-key: bk_your_api_key_here
The API key is tied to a specific user's Bankr account and wallet.
POST /agent/prompt
Content-Type: application/json
{
"prompt": "Buy $50 of ETH on Base"
}
Response:
{
"success": true,
"jobId": "job_abc123",
"status": "pending"
}
Code example:
async function submitPrompt(prompt: string): Promise<{ jobId: string }> {
const response = await fetch(`${API_URL}/agent/prompt`, {
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ prompt }),
});
const data = await response.json();
if (!data.success) throw new Error(data.error || "Failed to submit");
return { jobId: data.jobId };
}
GET /agent/job/{jobId}
Response:
{
"success": true,
"jobId": "job_abc123",
"status": "completed",
"prompt": "What is the price of ETH?",
"response": "Ethereum (ETH) is currently trading at $3,245.67...",
"transactions": [],
"statusUpdates": [
{ "message": "Fetching price data...", "timestamp": "2024-01-15T10:00:02Z" }
],
"createdAt": "2024-01-15T10:00:00Z",
"completedAt": "2024-01-15T10:00:05Z",
"processingTime": 5000
}
Code example:
async function getJobStatus(jobId: string): Promise<JobStatusResponse> {
const response = await fetch(`${API_URL}/agent/job/${jobId}`, {
headers: { "x-api-key": API_KEY },
});
return response.json();
}
For complete TypeScript interfaces, see references/job-response-schema.md.
POST /agent/job/{jobId}/cancel
Content-Type: application/json
Response:
{
"success": true,
"jobId": "job_abc123",
"status": "cancelled",
"prompt": "Buy $50 of ETH on Base",
"cancelledAt": "2024-01-15T10:00:15Z"
}
When to cancel:
Code example:
async function cancelJob(jobId: string): Promise<JobStatusResponse> {
const response = await fetch(`${API_URL}/agent/job/${jobId}/cancel`, {
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
},
});
return response.json();
}
// Usage: Cancel if job takes too long
const timeout = setTimeout(async () => {
console.log("Job taking too long, cancelling...");
await cancelJob(jobId);
}, 60000); // Cancel after 60 seconds
| Status | Meaning | Action |
|---|---|---|
pending | Job queued, not started | Keep polling |
processing | Job running | Keep polling, check statusUpdates |
completed | Job finished successfully | Read response and transactions |
failed | Job encountered error | Check error field |
cancelled | Job was cancelled | No further action |
The Bankr API accepts natural language prompts for:
Crypto Trading:
Price & Market Data:
Polymarket Predictions:
DeFi Operations:
async function waitForCompletion(jobId: string): Promise<JobStatus> {
const POLL_INTERVAL = 2000; // 2 seconds
const MAX_POLLS = 120; // 4 minutes max
for (let i = 0; i < MAX_POLLS; i++) {
const status = await getJobStatus(jobId);
// Terminal states
if (['completed', 'failed', 'cancelled'].includes(status.status)) {
return status;
}
// Log progress updates
if (status.statusUpdates?.length) {
console.log('Progress:', status.statusUpdates.at(-1)?.message);
}
await new Promise(r => setTimeout(r, POLL_INTERVAL));
}
throw new Error('Job timed out');
}
When a job completes, the response includes:
response: The text answer from Bankrtransactions: Array of executed transactions with chain/token detailsrichData: Images or charts (base64 or URL)statusUpdates: Progress messages during executionprocessingTime: Duration in millisecondsFor complete field documentation, see references/job-response-schema.md.
Handle these error cases:
BANKR_API_KEY before making requestsstatus === 'failed' and read error field// 1. Submit prompt
const { jobId } = await submitPrompt("What is the price of ETH?");
// 2. Poll until complete
const result = await waitForCompletion(jobId);
// 3. Handle result
if (result.status === 'completed') {
console.log(result.response);
// "Ethereum (ETH) is currently trading at $3,245.67..."
} else if (result.status === 'failed') {
console.error('Error:', result.error);
}
references/job-response-schema.md - Complete TypeScript interfaces and field documentationexamples/basic-client.ts - Simple API client implementationexamples/polling-with-updates.ts - Polling with status update handling