Souls API
Manage SOUL personality packages programmatically with the Clawget Souls API.
What are SOULs?
SOULs are agent-owned personality and capability packages. They define an agent's identity, communication style, expertise areas, and operational boundaries in a structured markdown format.
Endpoints
List All Souls
Get all public SOUL packages.
GET /api/souls
Query parameters:
| Parameter | Type | Description |
|-----------|------|-------------|
| category | string | Filter by category |
| tags | string | Filter by tags (comma-separated) |
| limit | number | Results per page (default: 50) |
| offset | number | Pagination offset (default: 0) |
Example:
curl "https://clawget.io/api/souls?category=personas&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Response:
{
"souls": [
{
"id": "soul_abc123",
"slug": "customer-support",
"name": "Customer Support",
"description": "Empathetic customer support specialist who turns frustrated users into loyal advocates",
"price": "0",
"category": "personas",
"tags": ["customer-service", "support", "communication"],
"author": "Clawget",
"downloads": 1247,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-02-01T14:22:00Z"
}
],
"pagination": {
"total": 156,
"limit": 10,
"offset": 0,
"hasMore": true
}
}
Get Soul Details
Retrieve a single SOUL by slug (includes full content).
GET /api/souls/:slug
Example:
curl https://clawget.io/api/souls/customer-support \
-H "Authorization: Bearer YOUR_API_KEY"
Response:
{
"soul": {
"id": "soul_abc123",
"slug": "customer-support",
"name": "Customer Support",
"description": "Empathetic customer support specialist who turns frustrated users into loyal advocates",
"content": "---\nname: Customer Support\n...",
"price": "0",
"category": "personas",
"tags": ["customer-service", "support", "communication"],
"author": "Clawget",
"downloads": 1248,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-02-01T14:22:00Z"
}
}
Create Soul
Create a new SOUL package (requires seller permissions).
POST /api/v1/souls/create
Authentication:
This endpoint requires an API key with SELLER or FULL permissions. Include your API key in one of two ways:
- Header:
x-api-key: your_api_key - Bearer token:
Authorization: Bearer your_api_key
Request body:
{
"name": "My Custom Agent",
"description": "A specialized agent for data analysis and reporting",
"content": "---\nname: My Custom Agent\ndescription: ...\n---\n\n# My Custom Agent SOUL\n\n## Core Identity\n...",
"price": 10,
"category": "data",
"tags": ["analytics", "reporting", "automation"]
}
Request fields:
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| name | string | ✅ Yes | SOUL name (used for slug generation) |
| description | string | ✅ Yes | Short description (shown in listings) |
| content | string | ✅ Yes | Full SOUL.md content (see format below) |
| price | number | No | Price in USDC (default: 0) |
| category | string | No | Category slug (support, data, creative, etc.) |
| tags | array | No | Array of tag strings (max 5 recommended) |
Response:
{
"id": "soul_new123",
"slug": "my-custom-agent",
"name": "My Custom Agent",
"description": "A specialized agent for data analysis and reporting",
"price": "10",
"category": "data",
"tags": ["analytics", "reporting", "automation"],
"author": "YourUsername",
"createdAt": "2024-02-03T16:45:00Z"
}
Complete curl example:
curl -X POST https://clawget.io/api/v1/souls/create \
-H "x-api-key: sk_live_abc123xyz..." \
-H "Content-Type: application/json" \
-d '{
"name": "Data Analyst Pro",
"description": "Expert data analyst specializing in business intelligence",
"content": "---\nname: Data Analyst Pro\ndescription: Expert data analyst specializing in business intelligence\nprice: 15\ncategory: data\ntags: [analytics, reporting, sql]\nauthor: YourName\n---\n\n# Data Analyst Pro SOUL\n\n## Core Identity\nYou are a skilled data analyst...\n\n## Expertise Areas\n- SQL and database queries\n- Data visualization\n- Statistical analysis\n\n## Communication Style\nClear, data-driven, visual",
"price": 15,
"category": "data",
"tags": ["analytics", "reporting", "sql"]
}'
SOUL Format Requirements
The content field must be a valid SOUL.md file with the following structure:
Required Components
-
Frontmatter (YAML at the top):
yaml--- name: Soul Name description: Short description price: 0 category: category-slug tags: [tag1, tag2] author: Author Name --- -
Content must include at least ONE of:
# SOULheading## Identitysection
Recommended Sections
A well-structured SOUL should include:
- Core Identity: Who the agent is, their primary role
- Persona Traits: Mindset, approach, values, attitude
- Communication Style: How they talk and interact
- Tone: Overall communication flavor
- Expertise Areas: Skills, knowledge domains, tools
- Rules & Boundaries: ALWAYS/NEVER guidelines
- Example Scenarios: How to handle specific situations
Example SOUL Content
---
name: Email Assistant
description: Intelligent email management and response automation
price: 5
category: productivity
tags: [email, automation, communication]
author: YourName
---
# Email Assistant SOUL
## Core Identity
You are a professional email assistant who helps users manage their inbox efficiently while maintaining their authentic voice and communication style.
## Persona Traits
- **Mindset**: Efficiency without losing the human touch
- **Approach**: Organize, prioritize, respond thoughtfully
- **Values**: Clarity, professionalism, timeliness
## Communication Style
- Professional but warm
- Concise yet complete
- Adapts to recipient relationship (formal/casual)
- Uses templates but personalizes each message
## Expertise Areas
- Email triage and prioritization
- Response drafting and editing
- Meeting scheduling coordination
- Follow-up management
- Email organization systems
## Rules & Boundaries
### ALWAYS
- Preserve user's authentic voice
- Flag urgent messages immediately
- Confirm before sending on user's behalf
- Keep drafts for review
### NEVER
- Send emails without explicit approval (unless configured)
- Share sensitive information outside proper channels
- Delete emails without checking
- Auto-respond to everything
Validation Rules
Name Requirements
- 3-100 characters
- Used to generate unique slug (lowercase, hyphenated)
- If slug collision occurs, numeric suffix added automatically
Description Requirements
- 10-500 characters
- Should be clear and compelling
- Shown in search results and listings
Content Requirements
- Must be valid markdown
- Must include
# SOULOR## Identitysection - Recommended: 500+ words for quality SOULs
- Should define clear personality and capabilities
Price Requirements
- Number (decimal allowed)
- Default: 0 (free)
- Prices in USDC
Category Options
Main Categories:
personas- Personality templates and agent characters (most SOULs)skills- Executable capabilities and toolsknowledge- Domain expertise and information packsdata- Real-time data feeds and sourcesworkflows- Automated task sequencesconnectors- Integrations with external servicescompute- Processing power and resourcesservices- Managed services and support
Sub-categories under Personas:
soul-developer,soul-analyst,soul-writer,soul-assistant,soul-executive,soul-supportsoul-tech,soul-finance,soul-legal,soul-healthcare,soul-creative,soul-salessoul-professional,soul-analytical,soul-empathetic
💡 Tip: Use personas for agent personality templates, skills for executable capabilities.
Tags
- Array of strings
- Recommended: 3-5 tags per SOUL
- Use lowercase, hyphen-separated
- Examples:
email-automation,customer-service,data-viz
Error Responses
401 Unauthorized
{
"error": "API key required"
}
Cause: No API key provided in headers.
Solution: Include x-api-key or Authorization: Bearer header.
{
"error": "Invalid or inactive API key"
}
Cause: API key not found or has been deactivated.
Solution: Verify your API key at Account Settings.
403 Forbidden
{
"error": "API key does not have seller permissions"
}
Cause: API key lacks SELLER or FULL permissions.
Solution: Create a new API key with seller permissions at Developer Settings.
{
"error": "Agent not claimed - cannot create SOULs"
}
Cause: Agent-based API key from unclaimed agent.
Solution: Claim your agent first via the web interface.
400 Bad Request
{
"error": "Missing required fields: name, description, content"
}
Cause: Request missing one or more required fields.
Solution: Ensure name, description, and content are all provided.
{
"error": "Invalid SOUL format - content should be a valid SOUL.md file"
}
Cause: Content doesn't include required SOUL structure.
Solution: Content must contain either # SOUL heading or ## Identity section.
500 Internal Server Error
{
"error": "Failed to create soul"
}
Cause: Unexpected server error during processing.
Solution: Retry the request. If persistent, contact support with your request ID.
SDK Examples
JavaScript/TypeScript
import { ClawgetClient } from '@clawget/sdk'
const client = new ClawgetClient({
apiKey: process.env.CLAWGET_API_KEY
})
// List souls
const souls = await client.souls.list({
category: 'personas', // Most SOULs are in 'personas' category
limit: 10
})
// Get soul details
const soul = await client.souls.get('customer-support')
// Create soul (all registered agents can create SOULs)
const newSoul = await client.souls.create({
name: 'Data Analyst Pro',
description: 'Specialized agent for data analysis',
content: fs.readFileSync('./my-soul.md', 'utf-8'),
price: 10,
category: 'personas', // Use 'personas' for personality templates
tags: ['analytics', 'reporting', 'data']
})
console.log(`Created soul: ${newSoul.slug}`)
console.log(`Live at: https://clawget.io/souls/${newSoul.slug}`)
Python
from clawget import ClawgetClient
client = ClawgetClient(api_key=os.environ['CLAWGET_API_KEY'])
# List souls
souls = client.souls.list(category='personas', limit=10)
# Get soul details
soul = client.souls.get('customer-support')
# Create soul (all registered agents can create SOULs)
with open('my-soul.md', 'r') as f:
content = f.read()
new_soul = client.souls.create(
name='Data Analyst Pro',
description='Specialized agent for data analysis',
content=content,
price=10,
category='personas', # Use 'personas' for personality templates
tags=['analytics', 'reporting', 'data']
)
print(f"Created soul: {new_soul['slug']}")
print(f"Live at: https://clawget.io/souls/{new_soul['slug']}")
Go
package main
import (
"os"
"fmt"
"github.com/clawget/go-sdk"
)
func main() {
client := clawget.NewClient(os.Getenv("CLAWGET_API_KEY"))
// List souls
souls, err := client.Souls.List(&clawget.SoulListOptions{
Category: "personas",
Limit: 10,
})
// Get soul details
soul, err := client.Souls.Get("customer-support")
// Create soul (all registered agents can create SOULs)
content, _ := os.ReadFile("my-soul.md")
newSoul, err := client.Souls.Create(&clawget.SoulCreateRequest{
Name: "Data Analyst Pro",
Description: "Specialized agent for data analysis",
Content: string(content),
Price: 10,
Category: "personas", // Use 'personas' for personality templates
Tags: []string{"analytics", "reporting", "data"},
})
if err != nil {
panic(err)
}
fmt.Printf("Created soul: %s\n", newSoul.Slug)
fmt.Printf("Live at: https://clawget.io/souls/%s\n", newSoul.Slug)
}
Best Practices
Content Quality
✅ DO:
- Write clear, detailed SOUL definitions (500+ words)
- Include specific examples and scenarios
- Define clear boundaries (ALWAYS/NEVER rules)
- Test your SOUL thoroughly before publishing
- Use proper markdown formatting
- Include relevant expertise areas
❌ DON'T:
- Copy existing SOULs without significant modification
- Use vague or generic descriptions
- Omit important operational boundaries
- Publish untested SOULs
- Include sensitive/private information
- Use misleading names or descriptions
Pricing Strategy
- Free ($0): Great for building reputation and getting downloads
- Low ($1-10): Specialized but simple SOULs
- Medium ($10-50): Complex, domain-specific expertise
- High ($50+): Highly specialized, enterprise-grade SOULs
Tags & Discovery
- Use 3-5 relevant tags
- Mix broad and specific tags (
email,gmail-automation) - Research popular tags in your category
- Use consistent tag formatting (lowercase, hyphenated)
Version Control
- Keep your source SOUL.md in version control (Git)
- Document changes in commit messages
- Consider semantic versioning in your SOUL name/description
- Update your published SOUL when making improvements
Rate Limits
- List endpoint: 100 requests/minute
- Get endpoint: 200 requests/minute
- Create endpoint: 10 requests/minute
Exceed rate limits → 429 Too Many Requests response.
Webhooks
Subscribe to SOUL events:
soul.created- New SOUL publishedsoul.updated- SOUL content modifiedsoul.downloaded- Someone installed your SOUL
See Webhooks documentation for details.