Sonilo Account
SkillDev toolsLets your agent check which Sonilo services are available, along with rate limits, free-trial credits, and usage history.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Sonilo Account skill
About this skill
Check the Sonilo account's available services, rate limits, free-trial allowance, and usage/billing history. Use before calling a paid Sonilo tool to confirm it's available and whether free-trial runs remain, or when the user asks about their Sonilo usage, limits, or billing.
What this skill tells your AI
The instructions your AI receives, as published by sonilo-ai/skills in account/SKILL.md and read by ahel’s review.
Two free, read-only tools for checking what a Sonilo account can do and how much it's used. Neither makes a charge.
Setup: See the setup-api-key skill.
Transport: MCP or CLI
Pick one at the start of the session and stay on it. Do not mix the two inside a single job, and do not announce the choice.
- Sonilo MCP tools visible in this session (
get_account_servicesand friends) — use them. This is the preferred path: it needs no shell, and it is the only one that survives a very long generation. If a call fails to authenticate — rather than failing on its inputs — this transport is not usable in this session: go to 2 instead of retrying it. - No usable Sonilo MCP tools, but
sonilo accountexits 0 — use the CLI commands below. Same API, same account, same credential file. Probe withsonilo account, notsonilo whoami: whoami exits 0 even when signed out, so it cannot tell the two states apart. - Neither — stop and run the setup-api-key skill. Do not call
api.sonilo.comwith curl to work around it; both transports handle uploads, polling and retries that a bare request does not.
Quick Start
MCP tool call (recommended)
get_account_services()
get_usage(days=7)
Python (pip install sonilo)
from sonilo import Sonilo
client = Sonilo() # reads SONILO_API_KEY
services = client.account.services()
usage = client.account.usage(days=7)
JavaScript / TypeScript (npm install sonilo)
import { SoniloClient } from "sonilo";
const client = new SoniloClient(); // reads SONILO_API_KEY
const services = await client.account.services();
const usage = await client.account.usage({ days: 7 });
CLI (npm install -g sonilo-cli or pip install sonilo-cli)
sonilo account
sonilo usage --days 7
sonilo account prints the account JSON to stdout and, when the account has a free-trial allowance, one summary line to stderr (Free trial: text-to-music 1/2 left, ...) — so sonilo account | jq .trial still sees clean JSON.
cURL (raw REST API, no MCP host)
curl "https://api.sonilo.com/v1/account/services" -H "Authorization: Bearer $SONILO_API_KEY"
curl "https://api.sonilo.com/v1/account/usage?days=7" -H "Authorization: Bearer $SONILO_API_KEY"
Tools
| Tool | Description |
|---|---|
get_account_services() | Available services, rate/concurrency limits, discount factor, max video upload size, and (if the account has one) free-trial allowance per service. |
get_usage(days=30) | Usage summary and per-day breakdown. days is 1–365. |
get_account_services Response Shape
{
"available_services": [...],
"rpm_limit": 60,
"concurrency_limit": 4,
"discount_factor": 1.0,
"max_upload_size_mb": 300,
"trial": {
"text_to_music": {"granted": 2, "used": 0, "remaining": 2},
"video_to_music": {"granted": 1, "used": 1, "remaining": 0}
}
}
- The
trialkey is absent entirely for accounts with no free-trial allowance — treat that as "bills normally," not as an error. - A
trialobject that's present but has no entry for a given service means that service has no free-trial allowance at all and bills from the first call.dubbingshowsgranted: 1, but that run is a 15-second preview of the first single-language call, not a full translation — see the auto-dubbing skill. - When
trial[service].remainingis0, calling that service fails with a402 trial_exhaustederror that no retry fixes.
Workflow Tips
- Check before you generate. Before calling any paid tool (
text_to_music,video_to_music,text_to_sfx,video_to_sfx,video_to_video_music,video_to_video_sfx,video_to_sound,video_to_video_sound,dubbing,proofread,audio_ducking), callget_account_services()if you're unsure whether the account has free runs left. Iftrial[service].remainingis0, tell the user their free trial for that service is spent and that continuing needs a payment method — don't just attempt the call and surface a raw 402. dubbing's free run is a 15-second preview, not a full video: only the first single-language call without scripts is free, and it translates just the first 15 seconds. Several languages, scripts, and every later call are billed. See the auto-dubbing skill's cost warning.proofreaddoes have a free-trial allowance — 2 runs — and, likedubbing, bills per language after that. See the proofread skill.- Usage reconciliation: if a generation timed out or failed, use
get_usageto confirm whether the backend actually completed (and charged) it, rather than assuming nothing happened. - Rate-limited (
429)?get_account_services()reportsrpm_limitandconcurrency_limitso you can tell the user what ceiling they hit.
Error Handling
Both tools are simple authenticated GETs — expect 401 for an invalid/rotated key. get_usage also validates days client-side (1–365) before making the request.
Signals
- GitHub stars
- 115
- Forks
- 8
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packagesK2info
exfiltration
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
account-sonilo-ai- Source
- github.com/sonilo-ai/skills