PropAI API · v1
Video Analysis API
Analyze public short videos from Facebook, Instagram and TikTok through a simple API. Results come back in Chinese and English.
Overview
Send in a short-video link and get back an in-depth bilingual analysis (Chinese and English) that shows you why the video grabs attention and what it does well — a reference for creating your own.
- Supported platforms: public Facebook, Instagram and TikTok videos, up to 3 minutes long. YouTube links are not supported yet.
- Instagram profile: send a username and we look at the latest public videos on that profile — up to 5 in one job — and analyze each of them.
- How it works for you: you submit a job, get a job ID straight away, then check the job until the result is ready.
Quick start
- Get an account. Accounts are created by us — email support@elitepropai.com. You’ll get a username and a starting password. New accounts come with 30 API credits.
- Sign in to the console at https://api.elitepropai.com and change your password.
- Create an API key under “API keys”. The full key is shown only once — store it on your server, for example in an environment variable. Never put it in a web page or a mobile app.
- Make your first call:
curl -X POST https://api.elitepropai.com/v1/video-insights/analyze \
-H "Authorization: Bearer $PROPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.instagram.com/reel/C0dExAmPlE1/"}'
You get a job back right away:
{
"id": "job_4fQ2mZ8kT1pLx0aB7cRd",
"object": "job",
"type": "video",
"status": "queued",
"credits": { "charged": 1, "refunded": 0 },
...
}
- Get the result. Check the job every 5–10 seconds until
statusisdoneorfailed. A single video usually takes about 30 seconds.
curl https://api.elitepropai.com/v1/jobs/job_4fQ2mZ8kT1pLx0aB7cRd \
-H "Authorization: Bearer $PROPAI_API_KEY"
Prefer clicking to typing? The console has a Try it panel that runs the same analysis on your account and shows the job as it updates.
Authentication
- Every request needs your key in the header:
Authorization: Bearer <your API key>. - Keys start with
pai_. You can have up to 5 active keys and disable any of them in the console — a disabled key stops working immediately. - The API is for server-to-server calls. Browsers can’t call it directly (cross-origin requests are refused), so keep your key on your server and never put it in a web page or app.
- A missing, wrong or disabled key gets
401 unauthorized. - Use HTTPS:
https://api.elitepropai.com.
Endpoints
Base URL: https://api.elitepropai.com. Send and receive JSON.
/v1/video-insights/analyze
Analyze one video. Costs 1 credit.
| Field | Type | Description |
|---|---|---|
url | string | Link to a public Facebook, Instagram or TikTok video (up to 3 minutes). |
Response: 202 Accepted with the job.
{
"id": "job_4fQ2mZ8kT1pLx0aB7cRd",
"object": "job",
"type": "video",
"status": "queued",
"created_at": "2026-09-23T14:05:12.000Z",
"finished_at": null,
"expires_at": "2026-09-30T14:05:12.000Z",
"credits": { "charged": 1, "refunded": 0 },
"input": { "url": "https://www.instagram.com/reel/C0dExAmPlE1/" },
"result": null,
"error": null
}
If you send the same link again while the first job is still queued or processing, you get that same job back with "duplicate": true (status 200) and you are not charged again.
/v1/video-insights/profile
Analyze the latest public videos of an Instagram profile — up to 5 per job. Pinned posts, photo posts and videos over 3 minutes are skipped.
| Field | Type | Description |
|---|---|---|
profile | string | An Instagram username (your_brand or @your_brand) or profile link (https://www.instagram.com/your_brand/). |
curl -X POST https://api.elitepropai.com/v1/video-insights/profile \
-H "Authorization: Bearer $PROPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"profile": "@your_brand"}'
Response: 202 Accepted with the job ("type": "profile"). 5 credits are held when you submit, so you need at least 5. As soon as we know how many videos there are, the unused part comes back automatically — for example, 2 videos found means 3 credits back.
/v1/jobs/{id}
Get a job’s status and, when it’s done, its result. You can only see jobs from your own account.
A finished video job:
{
"id": "job_4fQ2mZ8kT1pLx0aB7cRd",
"object": "job",
"type": "video",
"status": "done",
"created_at": "2026-09-23T14:05:12.000Z",
"finished_at": "2026-09-23T14:05:41.000Z",
"expires_at": "2026-09-30T14:05:12.000Z",
"credits": { "charged": 1, "refunded": 0 },
"input": { "url": "https://www.instagram.com/reel/C0dExAmPlE1/" },
"result": {
"analysis": "<in-depth bilingual analysis, in Markdown>"
},
"error": null
}
result.analysis is a formatted bilingual text result, in Markdown — any Markdown renderer can display it.
A finished profile job, where one video could not be processed:
{
"id": "job_9Hc1sQ7vW3nYk5eT2bLa",
"object": "job",
"type": "profile",
"status": "done",
"created_at": "2026-09-23T14:10:03.000Z",
"finished_at": "2026-09-23T14:12:40.000Z",
"expires_at": "2026-09-30T14:10:03.000Z",
"credits": { "charged": 5, "refunded": 1 },
"input": { "profile": "your_brand" },
"result": {
"profile": "your_brand",
"videos_found": 5,
"skipped": { "pinned": 1, "photos": 3, "too_long": 0 },
"videos": [
{
"index": 1,
"status": "done",
"post_url": "https://www.instagram.com/p/C0dExAmPlE1/",
"posted_at": "2026-09-22T10:00:00.000Z",
"caption": "Sunset villa walkthrough 🌅 3 rooms, 2 balconies",
"analysis": "<in-depth bilingual analysis, in Markdown>"
},
{
"index": 2,
"status": "failed",
"post_url": "https://www.instagram.com/p/C0dExAmPlE2/",
"posted_at": "2026-09-20T09:30:00.000Z",
"caption": "Before / after: empty unit → staged living room",
"error": { "code": "unavailable", "message": "This video could not be processed right now. Its credit has been returned." },
"credits_refunded": 1
}
]
},
"error": null
}
While a profile job is running, the videos show up in result.videos as soon as they’re found, each with its own status. caption is the first 100 characters of the post’s caption. (The example above shows 2 of the 5 videos.)
/v1/account
Your balance and hourly limits.
{
"object": "account",
"username": "user1",
"credits": 27,
"limits": { "video_per_hour": 30, "profile_per_hour": 6 }
}
Job status
| status | Meaning |
|---|---|
queued | Accepted and waiting to start. |
processing | In progress. |
done | Finished. The result is in result. |
failed | Could not be completed. See error. The credits for it have been returned. |
In a profile job, every video in result.videos has its own status too. The job is done when at least one video was analyzed; credits for the videos that failed come back. If none of them can be analyzed, the job is failed and all of its credits come back.
Check a job every 5–10 seconds. Results are kept for 7 days (see expires_at); after that the job returns 404 not_found.
Errors
Errors come back in one shape:
{ "error": { "code": "insufficient_credits", "message": "Not enough API credits for this request." } }
| HTTP | code | When |
|---|---|---|
| 400 | invalid_request | A required field is missing, the body isn’t valid JSON, or it’s too large. |
| 400 | unsupported_link | Not a public Facebook, Instagram or TikTok video link (YouTube isn’t supported yet). |
| 401 | unauthorized | Missing, wrong or disabled API key. |
| 402 | insufficient_credits | Not enough credits. A profile job needs at least 5 to start. |
| 404 | not_found | Unknown job, a job from another account, or results older than 7 days. |
| 429 | rate_limited | Too many requests for this key this hour, or profile analysis is busy right now. Wait retry_after seconds (also sent in the Retry-After header). |
| 503 | unavailable | We can’t take the request right now. Please try again later. |
A failed job (or a failed video inside a profile job) carries one of these codes in its error:
unavailable— it couldn’t be processed right now. Please try again later.too_long— the video is longer than 3 minutes.not_found— the video or profile is private, removed or doesn’t exist, or the profile has no recent public videos.
Credits & pricing
| What | Price |
|---|---|
| Video analysis | 1 credit |
| Instagram profile | 1 credit per video analyzed, up to 5 per job (at least 5 credits needed to start; the unused part comes back straight away) |
- Anything that fails is returned automatically — a single failed video or a whole job.
- Sending the same link or profile again while the first job is still running returns that job — no second charge.
- New accounts start with 30 credits. Check your balance with
GET /v1/accountor in the console, where every charge and return is listed under “Recent calls”. - Prices may change; we’ll let you know in advance.
Adding credits
Email support@elitepropai.com with your username and how many credits you’d like. Top-ups appear in the console under “Top-up history”.
Limits
- Public videos only, up to 3 minutes long.
- Instagram profile: up to the 5 latest public videos per job; pinned posts, photo posts and videos over 3 minutes are skipped.
- Per key, per hour: 30 video analyses and 6 profile analyses. Profile analysis also has a shared hourly limit across all users — when it’s reached you’ll get
rate_limitedwith aretry_afterof about 10 minutes. - Up to 5 active keys per account.
- Request body: up to 16 KB.
- Results are kept for 7 days.
FAQ
How long does it take?
A single video usually takes about 30 seconds. An Instagram profile (5 videos) usually takes 2–3 minutes — a bit longer if other profile analyses are ahead of it.
Do you keep my videos?
No. Videos are never stored. Only the text result is kept, for 7 days, so you can fetch it.
Which links work?
Public Facebook, Instagram and TikTok video links — Reels, video posts and TikTok videos. Private videos, videos that need a login, and YouTube links don’t work.
What language is the analysis in?
Chinese and English — every result is bilingual, so there’s no language option to set.
What happens to my credits if something fails?
They come back automatically. You can see every charge and return in the console under “Recent calls”.
Can I call the API from a browser or a mobile app?
No. Keep your key on your server and call the API from there.
Is there a webhook?
Not yet. Check the job with GET /v1/jobs/{id}.
How do I get more credits?
Email support@elitepropai.com.