DevelopersProduct guide
UNFORCE for AI agents: programmatic tennis video analysis
Pay-per-minute REST + MCP API for AI agents to analyze tennis videos. Prepaid credits, OpenAPI 3.1, MCP tools, EU-stored results, and an explicit US-processing boundary.
If you're building an AI agent that helps tennis players improve, a coaching bot, a club-management tool, a training-platform integration, and you need a real per-shot video analysis backend, UNFORCE is built for that. Same pipeline that powers the UNFORCE iOS + Android app (TrackNet → court keypoints → MediaPipe pose → CatBoost shot/bounce classification → stroke quality), exposed as a clean pay-per-minute API.
This page is the public-facing entry point. The OpenAPI 3.1 spec is at openapi.json; the MCP server card is at /.well-known/mcp/server-card.json.
How it works
1. Create a key in Developer UI → authenticated Firebase callable
2. Credit prepaid balance → admin-managed balance adjustment
3. Submit a video → POST https://api.unforce.io/v1/jobs
4. Poll for completion → GET https://api.unforce.io/v1/jobs/{jobId}
5. Fetch the analysis → GET https://api.unforce.io/v1/jobs/{jobId}/result
Or via MCP:
POST https://api.unforce.io/mcp
Authorization: Bearer phk_...
Content-Type: application/json
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "analyze_tennis_video",
"arguments": { "videoUrl": "https://..." } } }
Pricing
| Tier | Per-minute (EUR) | Per-minute (USD) | Per-minute (GBP) | Notes |
|---|---|---|---|---|
| Standard | €0.75 | $0.80 | £0.65 | Default for all agent API keys |
| Volume (>5,000 min/mo) | €0.55 | $0.60 | £0.48 | Email [email protected] |
| Enterprise | custom | custom | custom | Self-hosted GPU optional |
A 90-minute match costs about €67. A 5-minute serve drill costs €3.75.
Consumer free sessions do not create agent-API credit. API keys use the balance
shown by the developer surface and GET /v1/usage; contact support before a
production evaluation if the key needs credit.
Auth
Authorization: Bearer phk_<24-byte-url-safe-random>
Keys are SHA-256-hashed at rest, never logged. Rotate at any time via the admin panel or the revokeApiKey callable.
Discovery surface (well-known endpoints)
| Path | Purpose | Spec |
|---|---|---|
/openapi.json | OpenAPI 3.1, all GET endpoints on the marketing site + the api.unforce.io schema | OpenAPI 3.1 |
/.well-known/api-catalog | Linkset of public retrievable resources | RFC 9727 |
/.well-known/mcp/server-card.json | MCP server metadata | SEP-1649 |
/.well-known/agent-skills/index.json | Agent Skills RFC v0.2.0 catalogue | Cloudflare Agent Skills |
/.well-known/openid-configuration | OIDC discovery (Firebase Auth issuer) | OIDC 1.0 |
/.well-known/x402 | x402 payment-required discovery | x402 |
/.well-known/mpp.json | MPP machine-payment discovery | MPP |
/.well-known/acp.json | ACP merchant discovery | ACP v0.1 |
Use cases for agent operators
- Tennis-coaching chatbots, agent uploads a user's match video, returns coaching tips. Pay per-minute, pass-through to your end-user pricing.
- Training-platform integrations, embed UNFORCE into a course platform; auto-analyze homework videos and surface stroke-quality scores in your LMS.
- Club-management software, analyze junior tournament matches in bulk, push reports to parents/coaches.
- Research / dataset enrichment, annotate large collections of tennis video for labeled-data products.
What we don't do
We're not a content marketplace. UNFORCE doesn't take a cut of an agent operator's downstream revenue. The pricing above is the only thing you pay; there are no per-impression or per-end-user surcharges.
Get started
- Sign up at app.unforce.io (creates a Firebase user account).
- Generate an API key: visit admin.unforce.io → Developer → Create API Key.
- Ask [email protected] to credit production balance.
- First call:
curl -H "Authorization: Bearer phk_..." https://api.unforce.io/v1/healthz.
Email [email protected] with your project description for higher rate limits or volume pricing.
Related
Frequently asked questions
Can my AI agent analyze a tennis video through UNFORCE?
Yes. UNFORCE exposes a REST API at api.unforce.io and an MCP server at api.unforce.io/mcp. Both accept Bearer API keys (phk_…) and bill against prepaid credits. Submit a job, poll for status, fetch the analysis JSON when done, same shape as the in-app workflow but agent-callable.
How much does it cost per video?
The default agent-API price is €0.75 per started minute of video, billed against prepaid API-key credit. A 90-minute match is about €67.50 at that rate. The live /v1/pricing response is authoritative for price and plan limits. Consumer free sessions are separate from API credit.
What protocols do you support for agent payments?
Prepaid API-key balances, plus machine-payment discovery files for agents to understand pricing and endpoints. See /.well-known/api-catalog for the full discovery chain.
Is this an MCP server I can plug into Claude / ChatGPT?
Yes. The MCP server at api.unforce.io/mcp uses Streamable HTTP transport and exposes tools, analyze_tennis_video, get_job_status, get_analysis_result, get_pricing, list_my_jobs, plus markdown resources (pricing, accuracy, how-it-works, faq). Bearer auth via the same API key as the REST endpoint.
Where is video data hosted? GDPR-compliant?
Uploaded video and returned results are stored in europe-west1 (Belgium). The self-hosted Lambda Cloud GPU pool currently processes video in US regions, and a parallel Gemini analysis uses Vertex AI's global endpoint. Agent operators remain responsible for their own lawful basis and processor terms; the privacy policy is the canonical transfer disclosure.
What's the rate limit for an API key?
Current plan defaults are Free 10 requests/min and 100 jobs/day, Pro 60/min and 5,000/day, and Team 300/min and 50,000/day. The live key and response rate-limit headers are authoritative.