You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/docs/swarms_cloud/swarms_api.md

532 lines
14 KiB

# Swarms API Documentation
The Swarms API is a powerful REST API designed to help you create, manage, and execute various types of swarms efficiently. Whether you need to run tasks sequentially, concurrently, or in a custom workflow, the Swarms API has you covered.
### Key Features:
- **Sequential Swarms**: Execute tasks one after another in a defined order.
- **Concurrent Swarms**: Run multiple tasks simultaneously to save time and resources.
- **Custom Workflows**: Design your own swarm workflows to fit your specific needs.
To get started, find your API key in the Swarms Cloud dashboard. [Get your API key here](https://swarms.world/platform/api-keys)
## Base URL
```
https://swarms-api-285321057562.us-east1.run.app
```
## Authentication
All API requests (except `/health`) require authentication using an API key passed in the `x-api-key` header:
```http
x-api-key: your_api_key_here
```
## Endpoints
### Health Check
Check if the API is operational.
**Endpoint:** `GET /health`
**Authentication Required:** No
**Response:**
```json
{
"status": "ok"
}
```
### Single Swarm Completion
Run a single swarm with specified agents and tasks.
**Endpoint:** `POST /v1/swarm/completions`
**Authentication Required:** Yes
#### Request Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| name | string | Optional | "swarms-01" | Name of the swarm (max 100 chars) |
| description | string | Optional | - | Description of the swarm (max 500 chars) |
| agents | array | Required | - | Array of agent configurations |
| max_loops | integer | Optional | 1 | Maximum number of iterations |
| swarm_type | string | Optional | - | Type of swarm workflow |
| task | string | Required | - | The task to be performed |
| img | string | Optional | - | Image URL if relevant |
| return_history | boolean | Optional | true | Whether to return the full conversation history |
| rules | string | Optional | - | Rules for the swarm to follow |
| rearrange_flow | string | Optional | - | Flow pattern for agent rearrangement |
| output_type | string | Optional | "str" | Output format ("str", "json", "dict", "yaml", "list") |
| schedule | object | Optional | - | Scheduling information for the swarm |
#### Schedule Configuration Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| scheduled_time | datetime | Required | - | When to execute the swarm (UTC) |
| timezone | string | Optional | "UTC" | Timezone for the scheduled time |
#### Agent Configuration Parameters
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| agent_name | string | Required | - | Name of the agent (max 100 chars) |
| description | string | Optional | - | Description of the agent (max 500 chars) |
| system_prompt | string | Optional | - | System prompt for the agent (max 500 chars) |
| model_name | string | Optional | "gpt-4o" | Model to be used by the agent |
| auto_generate_prompt | boolean | Optional | false | Whether to auto-generate prompts |
| max_tokens | integer | Optional | - | Maximum tokens for response |
| temperature | float | Optional | 0.5 | Temperature for response generation |
| role | string | Optional | "worker" | Role of the agent |
| max_loops | integer | Optional | 1 | Maximum iterations for this agent |
## Available Swarm Types
| Swarm Type | Description |
|------------|-------------|
| AgentRearrange | Rearranges agents dynamically to optimize task execution |
| MixtureOfAgents | Combines different agents to leverage their unique capabilities |
| SpreadSheetSwarm | Utilizes spreadsheet-like operations for data manipulation |
| SequentialWorkflow | Executes tasks in a predefined sequential order |
| ConcurrentWorkflow | Runs tasks concurrently to improve efficiency |
| GroupChat | Facilitates communication among agents in a chat format |
| MultiAgentRouter | Routes tasks to agents based on their expertise |
| AutoSwarmBuilder | Automatically constructs swarms based on task requirements |
| HiearchicalSwarm | Organizes agents in a hierarchy for complex tasks |
| auto | Automatically selects the most suitable swarm type |
| MajorityVoting | Uses majority voting to reach consensus on outcomes |
## Job Scheduling Endpoints
### Schedule a Swarm
Schedule a swarm to run at a specific time.
**Endpoint:** `POST /v1/swarm/schedule`
**Authentication Required:** Yes
#### Request Format
Same as single swarm completion, with additional `schedule` object:
```json
{
"name": "Scheduled Swarm",
"agents": [...],
"task": "Perform analysis",
"schedule": {
"scheduled_time": "2024-03-20T15:00:00Z",
"timezone": "America/New_York"
}
}
```
### List Scheduled Jobs
Get all scheduled swarm jobs.
**Endpoint:** `GET /v1/swarm/schedule`
**Authentication Required:** Yes
#### Response Format
```json
{
"status": "success",
"scheduled_jobs": [
{
"job_id": "swarm_analysis_1234567890",
"swarm_name": "Analysis Swarm",
"scheduled_time": "2024-03-20T15:00:00Z",
"timezone": "America/New_York"
}
]
}
```
### Cancel Scheduled Job
Cancel a scheduled swarm job.
**Endpoint:** `DELETE /v1/swarm/schedule/{job_id}`
**Authentication Required:** Yes
#### Response Format
```json
{
"status": "success",
"message": "Scheduled job cancelled successfully",
"job_id": "swarm_analysis_1234567890"
}
```
## Billing and Credits
The API uses a credit-based billing system with the following components:
### Cost Calculation
| Component | Cost |
|-----------|------|
| Base cost per agent | $0.01 |
| Input tokens (per 1M) | $2.00 |
| Output tokens (per 1M) | $6.00 |
Special pricing:
- California night time hours (8 PM to 6 AM PT): 75% discount on token costs
- Credits are deducted in the following order:
1. Free credits
2. Regular credits
Costs are calculated based on:
- Number of agents used
- Total input tokens (including system prompts and agent memory)
- Total output tokens generated
- Execution time
## Error Handling
| HTTP Status Code | Description |
|-----------------|-------------|
| 402 | Insufficient credits |
| 403 | Invalid API key |
| 404 | Resource not found |
| 500 | Internal server error |
## Best Practices
1. Start with small swarms and gradually increase complexity
2. Monitor credit usage and token counts
3. Use appropriate max_loops values to control execution
4. Implement proper error handling for API responses
5. Consider using batch completions for multiple related tasks
## Response Structures
### Single Swarm Response
```json
{
"status": "success",
"swarm_name": "Test Swarm",
"description": "A test swarm",
"swarm_type": "ConcurrentWorkflow",
"task": "Write a blog post",
"output": {
// Swarm output here
},
"metadata": {
"max_loops": 1,
"num_agents": 2,
"execution_time_seconds": 5.23,
"completion_time": 1647123456.789,
"billing_info": {
"cost_breakdown": {
"agent_cost": 0.02,
"input_token_cost": 0.015,
"output_token_cost": 0.045,
"token_counts": {
"total_input_tokens": 1500,
"total_output_tokens": 3000,
"total_tokens": 4500,
"per_agent": {
"agent1": {
"input_tokens": 750,
"output_tokens": 1500,
"total_tokens": 2250
},
"agent2": {
"input_tokens": 750,
"output_tokens": 1500,
"total_tokens": 2250
}
}
},
"num_agents": 2,
"execution_time_seconds": 5.23
},
"total_cost": 0.08
}
}
}
```
### Batch Swarm Response
```json
[
{
"status": "success",
"swarm_name": "Batch Swarm 1",
"output": {},
"metadata": {}
},
{
"status": "success",
"swarm_name": "Batch Swarm 2",
"output": {},
"metadata": {}
}
]
```
## Logs Endpoint
### Get Swarm Logs
Retrieve execution logs for your API key.
**Endpoint:** `GET /v1/swarm/logs`
**Authentication Required:** Yes
#### Response Format
```json
{
"status": "success",
"count": 2,
"logs": [
{
"api_key": "masked",
"data": {
"swarm_name": "Test Swarm",
"task": "Write a blog post",
"execution_time": "2024-03-19T15:30:00Z",
"status": "success"
}
}
]
}
```
## Error Handling
The API uses standard HTTP status codes and provides detailed error messages:
| HTTP Status Code | Description | Example Response |
|-----------------|-------------|------------------|
| 400 | Bad Request - Invalid parameters | `{"detail": "Invalid swarm configuration"}` |
| 401 | Unauthorized - Missing API key | `{"detail": "API key is required"}` |
| 402 | Payment Required - Insufficient credits | `{"detail": "Insufficient credits"}` |
| 403 | Forbidden - Invalid API key | `{"detail": "Invalid API key"}` |
| 429 | Too Many Requests - Rate limit exceeded | `{"detail": "Rate limit exceeded"}` |
| 500 | Internal Server Error | `{"detail": "Internal server error"}` |
## Rate Limiting
The API implements rate limiting to ensure fair usage:
- **Rate Limit:** 100 requests per minute per IP address
- **Time Window:** 60 seconds
- **Response on Limit Exceeded:** HTTP 429 with retry-after header
# Code Examples
## Python
### Using requests
```python
import requests
from datetime import datetime, timedelta
import pytz
API_KEY = "your_api_key_here"
BASE_URL = "https://swarms-api-285321057562.us-east1.run.app"
headers = {
"x-api-key": API_KEY,
"Content-Type": "application/json"
}
def run_single_swarm():
payload = {
"name": "Financial Analysis Swarm",
"description": "Market analysis swarm",
"agents": [
{
"agent_name": "Market Analyst",
"description": "Analyzes market trends",
"system_prompt": "You are a financial analyst expert.",
"model_name": "gpt-4o",
"role": "worker",
"max_loops": 1
}
],
"max_loops": 1,
"swarm_type": "SequentialWorkflow",
"task": "Analyze current market trends in tech sector",
"return_history": True,
"rules": "Focus on major market indicators"
}
response = requests.post(
f"{BASE_URL}/v1/swarm/completions",
headers=headers,
json=payload
)
return response.json()
def schedule_swarm():
# Schedule for 1 hour from now
scheduled_time = datetime.now(pytz.UTC) + timedelta(hours=1)
payload = {
"name": "Scheduled Analysis",
"agents": [
{
"agent_name": "Analyst",
"system_prompt": "You are a market analyst.",
"model_name": "gpt-4o",
"role": "worker"
}
],
"task": "Analyze tech trends",
"schedule": {
"scheduled_time": scheduled_time.isoformat(),
"timezone": "America/New_York"
}
}
response = requests.post(
f"{BASE_URL}/v1/swarm/schedule",
headers=headers,
json=payload
)
return response.json()
def get_scheduled_jobs():
response = requests.get(
f"{BASE_URL}/v1/swarm/schedule",
headers=headers
)
return response.json()
def cancel_scheduled_job(job_id: str):
response = requests.delete(
f"{BASE_URL}/v1/swarm/schedule/{job_id}",
headers=headers
)
return response.json()
def get_swarm_logs():
response = requests.get(
f"{BASE_URL}/v1/swarm/logs",
headers=headers
)
return response.json()
```
## Node.js
### Using Fetch API
```javascript
const API_KEY = 'your_api_key_here';
const BASE_URL = 'https://swarms-api-285321057562.us-east1.run.app';
const headers = {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
};
// Schedule a swarm
async function scheduleSwarm() {
const scheduledTime = new Date();
scheduledTime.setHours(scheduledTime.getHours() + 1);
const payload = {
name: 'Scheduled Analysis',
agents: [{
agent_name: 'Analyst',
system_prompt: 'You are a market analyst.',
model_name: 'gpt-4o',
role: 'worker'
}],
task: 'Analyze tech trends',
schedule: {
scheduled_time: scheduledTime.toISOString(),
timezone: 'America/New_York'
}
};
try {
const response = await fetch(`${BASE_URL}/v1/swarm/schedule`, {
method: 'POST',
headers,
body: JSON.stringify(payload)
});
return await response.json();
} catch (error) {
console.error('Error:', error);
throw error;
}
}
// Get scheduled jobs
async function getScheduledJobs() {
try {
const response = await fetch(`${BASE_URL}/v1/swarm/schedule`, {
headers
});
return await response.json();
} catch (error) {
console.error('Error:', error);
throw error;
}
}
// Cancel scheduled job
async function cancelScheduledJob(jobId) {
try {
const response = await fetch(`${BASE_URL}/v1/swarm/schedule/${jobId}`, {
method: 'DELETE',
headers
});
return await response.json();
} catch (error) {
console.error('Error:', error);
throw error;
}
}
```
## Shell (cURL)
### Schedule a Swarm
```bash
curl -X POST "https://swarms-api-285321057562.us-east1.run.app/v1/swarm/schedule" \
-H "x-api-key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Scheduled Analysis",
"agents": [
{
"agent_name": "Analyst",
"system_prompt": "You are a market analyst.",
"model_name": "gpt-4o",
"role": "worker"
}
],
"task": "Analyze tech trends",
"schedule": {
"scheduled_time": "2024-03-20T15:00:00Z",
"timezone": "America/New_York"
}
}'
```
### Get Scheduled Jobs
```bash
curl -X GET "https://swarms-api-285321057562.us-east1.run.app/v1/swarm/schedule" \
-H "x-api-key: your_api_key_here"
```
### Cancel Scheduled Job
```bash
curl -X DELETE "https://swarms-api-285321057562.us-east1.run.app/v1/swarm/schedule/job_id_here" \
-H "x-api-key: your_api_key_here"
```
### Get Swarm Logs
```bash
curl -X GET "https://swarms-api-285321057562.us-east1.run.app/v1/swarm/logs" \
-H "x-api-key: your_api_key_here"
```