botso.ai API Documentation
REST API for clubs, syndicates, and partner apps building on shared autonomous trading pools — tickets, members, payments, payouts, and transparency.
Overview
The botso.ai platform API is a Laravel REST service. The hostname is api.botso.ai; Laravel mounts all JSON routes under an /api prefix, so the client base URL is https://api.botso.ai/api and paths look like /v1/auth/login (full URL: https://api.botso.ai/api/v1/auth/login). Authentication uses Laravel Passport (OAuth2 bearer tokens).
| Environment | Base URL |
|---|---|
| Production | https://api.botso.ai/api |
Core concepts
| Concept | Description |
|---|---|
| Organization | Club or tenant. Users may belong to multiple orgs. |
| Pool | Shared bot group with ticket cap, funding target, and lifecycle (draft → sim → funded → live). |
| Ticket | Equal share entitlement in a pool (not a payment rail). Status: active, pending, revoked. |
| Payment processor | Upcoming checkout flow via ticketing / payment partners — same auth and users table. |
| Shared bot | Fixed-strategy trading bot linked to a pool (SIM or LIVE). |
Authentication
Password grant (user apps)
For SPAs and mobile apps where a user signs in with email and password.
Issue a bearer token. User must have botso_access permission.
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "admin@botso.ai",
"password": "password",
"client_id": "YOUR_OAUTH_CLIENT_ID"
}
{
"token_type": "Bearer",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"expires_at": "2026-06-08 12:00:00",
"scopes": ["botso:read"],
"user": {
"id": 1,
"name": "Club Admin",
"email": "admin@botso.ai",
"permissions": ["botso_access", "botso_manage"],
"organizations": [{ "id": 1, "name": "Demo Club", "slug": "botso-ai" }]
}
}
Client credentials (machine-to-machine)
For server-side integrations and service accounts. Use the botso Service Client OAuth client.
{
"client_id": "SERVICE_CLIENT_ID",
"client_secret": "SERVICE_CLIENT_SECRET",
"scope": "botso:read"
}
Session endpoints
Current user profile, roles, permissions, organizations.
Update name, phone, social handles.
Communication preferences.
Verify phone on WhatsApp.
Change password.
Revoke current access token.
Required headers
| Header | When | Example |
|---|---|---|
Authorization | All authenticated routes | Bearer <access_token> |
X-Botso-Organization | User has multiple clubs | botso-ai |
Accept | Always | application/json |
Content-Type | POST/PUT/PATCH bodies | application/json |
Organization resolution order: subdomain ({slug}.botso.ai) → X-Botso-Organization header → ?org= query → auto-select if user has one org.
Organizations
List organizations the authenticated user belongs to.
Admin list of organizations (platform/org admin).
Search users to add as pool members.
Pools — read (members & admins)
Requires botso_access and organization context. Members only see pools they belong to or hold tickets in.
List pools for current organization.
Full pool detail including bots and settings.
Dashboard metrics: PnL, per-ticket payout, chart series.
Daily pool PnL for charting — one point per trading day, no individual trade detail. Query: ?month=YYYY-MM (defaults to current month). Month is clamped to months with trading data from the pool's first record through today.
daily_pnl and month_total_pnl are gross bot realized PnL (before platform fees, tax, and per-ticket splits). cumulative_pnl is the running total within the selected month. Member earnings are lower — see /earnings.
{
"has_financial_data": true,
"month": "2026-06",
"first_trade_date": "2026-06-06",
"available_months": [
{ "value": "2026-06", "label": "June 2026" }
],
"series": [
{ "date": "2026-06-06", "daily_pnl": 56.44, "cumulative_pnl": 56.44 },
{ "date": "2026-06-07", "daily_pnl": 116.29, "cumulative_pnl": 172.73 },
{ "date": "2026-06-08", "daily_pnl": 104.59, "cumulative_pnl": 277.32 }
],
"point_count": 3,
"month_total_pnl": 277.32,
"pool": {
"slug": "sim-trial",
"name": "Trial Pool"
}
}
When the pool has no financial data or primary bot, returns has_financial_data: false with empty series and available_months.
Pool members and ticket holders.
All tickets in pool.
Payout history.
Member earnings. Optional ?user_id=.
Toggle contact sharing with other members.
Pools — manage (org admin)
Requires botso.org.manage — organization admin or owner, or platform botso_manage.
Create a new pool.
{
"name": "Summer Syndicate",
"type": "club",
"ticket_cap": 20,
"ticket_price": 50,
"funding_target": 1000,
"start_date": "2026-07-01",
"end_date": "2026-12-31",
"description": "Optional pool description"
}
Update entry mode, caps, dates, assignment flags.
Active pool accepting new tickets.
Admin-assign one ticket. Auto-creates next pool when cap reached.
{
"user_id": 42,
"member_name": "Jane Smith",
"target_pool_slug": "late90s-club",
"entry_method": "ticketing",
"payment_note": "FT-order-88421"
}
entry_method: admin | cash | transfer | revolut | ticketing | usdc
Add member to pool.
Club user directory.
Create club user account.
Organization audit trail.
Payment processor (coming soon)
Member ticket purchase will move to a dedicated payment processor integrated with the ticketing platform API. Partners and mobile apps will use the same OAuth login and users table — no separate auth system.
entry_method: "ticketing". Documentation for checkout and webhook endpoints will be added here when the processor ships.
Until then, club admins assign tickets via POST /v1/botso/pools/{slug}/tickets after off-platform payment, or record payments with POST .../payments.
Payments & funding
Record pooled capital transfer to activate shared bots.
{
"amount": 500,
"method": "transfer",
"reference": "REV-2026-001"
}
List recorded payments.
Record off-platform payment (cash, Revolut, etc.).
Payouts & earnings
Settle a payout period for the pool.
Allocate earnings to a member.
Platform: manual SIM payout allocation (LIVE via artisan CLI).
Notifications (Twilio & WhatsApp)
Save WhatsApp Cloud API credentials for club alerts.
Analytics & trading (operator)
Requires botso_manage and user_management_access.
Shared bots in pool with session PnL.
Recent closed trades.
Summary, daily PnL series, recent trades. Query: session_name, days, limit.
Separate trading API
Operator trading endpoints at /v1/trading/* require scope trading:read.
Errors & status codes
| Code | Meaning |
|---|---|
401 | Missing or expired token — re-authenticate. |
403 | Valid token but insufficient permission or wrong org. |
404 | Pool or resource not found. |
422 | Validation error — see errors object in body. |
{
"message": "Validation error.",
"errors": {
"entry_method": ["The selected entry method is invalid."]
}
}