Your gateway to the next generation of investors
Build your avatar's identity in capital markets — programmatically. Everything a creator does in the app, you can automate from code.
Get started →What you can do
The FinTok API is your gateway to connecting with the next generation of investors and building your avatar's identity in capital markets. Everything a creator does in the app, you can drive from your own code:
Bearer token. The key is tied to your account, so you never pass a user id — the key is you.1 · Requirements
Before you can generate a key or create channels, you need a set-up account:
- Sign up in the FinTok app (phone number).
- Complete onboarding (username, picks, style).
- Generate your avatar from a photo.
Key generation and channel creation stay locked until your account has an avatar.

Your selfie2 · Get your API key
Keys are created and managed here, in your browser — this is the one place you sign in with your account. Log in with the same phone number as your app, generate a key, and copy it (shown only once). Use that key everywhere else via curl.
Log in on the web with the same phone number as your FinTok app to generate a key. New here? Sign up.
3 · Authentication
Send your key as a Bearer token on every request. Keep it in an environment variable:
export FINTOK_API_KEY="ftk_your_key_here"
# then on each request:
# -H "Authorization: Bearer $FINTOK_API_KEY"4 · Create a channel
/api/channelsCreate one or more channels owned by you. Each channel's branded image is generated automatically in the background, so the response comes back right away without it (it appears on the channel a few seconds later). Creating your first channel turns your account into a creator.
Each channel costs 20 tokens(same as creating one in the app). If you don't have enough, the request fails with a 402 and nothing is created — see Tokens.
# store your key once
export FINTOK_API_KEY="ftk_your_key_here"
curl -X POST https://fintokapp.com/api/channels \
-H "Authorization: Bearer $FINTOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channels": [
{ "name": "Value Desk", "styleTag": "value", "bio": "Deep-value ideas." }
]
}'| Field | Required | Notes |
|---|---|---|
| name | yes | 2–60 characters. |
| handle | no | e.g. valuedesk; derived from the name and made unique if omitted. |
| styleTag | no | Investment style; defaults to your profile's style. |
| bio | no | Up to 1000 characters. |
Send up to 10 channels at once in the channels array. Each succeeds or fails independently:
{
"created": [
{ "channelId": "cmr...", "handle": "valuedesk" }
],
"errors": []
}List your channels
While a channel's image is still generating, its imageStatus is pending and image is null; both flip to ready/ the image URL once it's attached.
/api/channelscurl https://fintokapp.com/api/channels -H "Authorization: Bearer $FINTOK_API_KEY"{
"channels": [
{
"channelId": "cmr...",
"name": "Value Desk",
"handle": "valuedesk",
"styleTag": "value",
"bio": "Deep-value ideas.",
"image": null,
"imageStatus": "pending", // "ready" once the image is attached
"followers": 0,
"videos": 0,
"createdAt": "2026-07-03T12:00:00.000Z"
}
]
}5 · Create a video
/api/videosGenerate a video on your account — the same flow as the app. You supply source material and a title; FinTok writes a script and renders a short vertical video narrated by your avatar. Rendering is asynchronous (a few minutes), then it publishes to your channel. Each video costs 100 tokens, and you need at least one channel first.
There are two kinds of video (the `type` field):
- Stock pitch (
type: "pitch") — a directional call on a specific stock. Requires atickerand apositionType(LONG,SHORT, orNEUTRAL). Long/short pitches are tracked on the performance leaderboard by entry price. - Research (
type: "research") — a broader analysis or thesis not tied to a single position: a deep-dive, sector or macro take, or explainer. No ticker or position.
Avatar mode picks which of your two avatars stars in the video — realistic (your lifelike, photorealistic avatar) or cartoon (your stylized 3D cartoon avatar). Both are generated when you set up your profile; it defaults to realistic.
curl -X POST https://fintokapp.com/api/videos \
-H "Authorization: Bearer $FINTOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"videos": [
{
"type": "pitch",
"title": "Why AAPL is still a buy",
"ticker": "AAPL",
"positionType": "LONG",
"sourceText": "Services margin expansion, buybacks, a cheap install base...",
"avatarMode": "cartoon"
}
]
}'| Field | Required | Notes |
|---|---|---|
| type | yes | "pitch" (directional call on a ticker) or "research" (analysis, no position). |
| title | yes | 4–120 characters. |
| sourceText or sourcePdfUrl | yes | One is required — the notes/thesis, or a PDF/article URL, the script is built from. |
| ticker | pitch only | The stock, e.g. AAPL. |
| positionType | pitch only | LONG / SHORT / NEUTRAL — the pitch's direction. |
| channelId | no | Which of your channels to post to; defaults to your first. |
| avatarMode | no | realistic (lifelike) or cartoon (stylized 3D). Default realistic. |
Up to 5 videos per request. The response returns immediately with each new video's id:
{
"created": [
{ "videoId": "cmr...", "status": "GENERATING" }
],
"errors": []
}Check status
Rendering is async, so poll a video until its status is PUBLISHED and videoUrl is set. GET /api/videos lists all of yours; GET /api/videos/{id} is one:
/api/videos/{id}curl https://fintokapp.com/api/videos/VIDEO_ID -H "Authorization: Bearer $FINTOK_API_KEY"{
"video": {
"videoId": "cmr...",
"title": "Why AAPL is still a buy",
"type": "PITCH",
"status": "PUBLISHED",
"videoUrl": "https://...blob.../videos/....mp4",
"thumbnailUrl": "https://...",
"job": { "stage": "DONE", "progress": 100, "error": null }
}
}6 · Broadcast to your followers
/api/broadcastSend a message to everyone who follows you— it arrives as a push + an in-app notification, and shows on your profile to subscribers. Same as the app's “Message your followers.”
message— up to 280 characters, profanity-checked.- Requires at least 2 followers; rate-limited to 5 per hour.
- Costs 5 tokens per blast.

curl -X POST https://fintokapp.com/api/broadcast \
-H "Authorization: Bearer $FINTOK_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message": "New pitch just dropped — take a look!" }'{ "sent": 42 }sent is how many followers received it.
List your blasts
The messages you've sent (newest first) — the same ones shown on your profile.
/api/broadcastcurl https://fintokapp.com/api/broadcast -H "Authorization: Bearer $FINTOK_API_KEY"{
"broadcasts": [
{
"id": "cmr...",
"message": "New pitch just dropped — take a look!",
"createdAt": "2026-07-04T17:00:00.000Z"
}
]
}7 · Tokens
Actions that create content cost tokens. New accounts start with a balance, and you top up in the FinTok app — there is no purchase API.
| Action | Cost |
|---|---|
| Create a channel | 20 tokens |
| Generate a video | 100 tokens |
| Send a blast message | 5 tokens |
| Generate an avatar (in-app) | 25 tokens |
Check your current balance any time:
/api/balancecurl https://fintokapp.com/api/balance -H "Authorization: Bearer $FINTOK_API_KEY"{ "tokenBalance": 100 }8 · Errors
Every error is shaped { "error": "message" } (plus an issues object on validation failures).
| 401 | Missing, invalid, or revoked API key. |
| 403 | Your account isn't eligible yet (finish onboarding + avatar). |
| 422 | The request body failed validation. |
| 400 | Malformed JSON. |
| 429 | Rate limited (e.g. too many active keys). |