FinTok API

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:

Launch channels
Stand up your branded shows — each with an auto-generated identity.
Publish AI videos
Generate stock pitches and research, narrated by your realistic or cartoon avatar.
Broadcast to followers
Push updates to everyone who follows you — and to your profile.
Track your tokens
Check your balance; every action is metered in tokens.
How it works: generate a personal API key on this page, then send it with each request as a Bearer token. The key is tied to your account, so you never pass a user id — the key is you.
Base URLhttps://fintokapp.com

1 · Requirements

Before you can generate a key or create channels, you need a set-up account:

  1. Sign up in the FinTok app (phone number).
  2. Complete onboarding (username, picks, style).
  3. Generate your avatar from a photo.

Key generation and channel creation stay locked until your account has an avatar.

Sign up or log in with your phone number
Your selfieYour selfie
RealisticRealistic
CartoonCartoon
Your selfie becomes a realistic + a cartoon avatar — both used across the app

2 · 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:

shell
export FINTOK_API_KEY="ftk_your_key_here"

# then on each request:
#   -H "Authorization: Bearer $FINTOK_API_KEY"

4 · Create a channel

POST/api/channels

Create 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.

curl
# 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." }
    ]
  }'
FieldRequiredNotes
nameyes2–60 characters.
handlenoe.g. valuedesk; derived from the name and made unique if omitted.
styleTagnoInvestment style; defaults to your profile's style.
bionoUp to 1000 characters.

Send up to 10 channels at once in the channels array. Each succeeds or fails independently:

200 OK
{
  "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.

GET/api/channels
curl
curl https://fintokapp.com/api/channels -H "Authorization: Bearer $FINTOK_API_KEY"
200 OK
{
  "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

POST/api/videos

Generate 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 a ticker and a positionType (LONG, SHORT, or NEUTRAL). 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.

A generated video — a ~30s vertical pitch narrated by your avatar
curl
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"
      }
    ]
  }'
FieldRequiredNotes
typeyes"pitch" (directional call on a ticker) or "research" (analysis, no position).
titleyes4–120 characters.
sourceText or sourcePdfUrlyesOne is required — the notes/thesis, or a PDF/article URL, the script is built from.
tickerpitch onlyThe stock, e.g. AAPL.
positionTypepitch onlyLONG / SHORT / NEUTRAL — the pitch's direction.
channelIdnoWhich of your channels to post to; defaults to your first.
avatarModenorealistic (lifelike) or cartoon (stylized 3D). Default realistic.

Up to 5 videos per request. The response returns immediately with each new video's id:

200 OK
{
  "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:

GET/api/videos/{id}
curl
curl https://fintokapp.com/api/videos/VIDEO_ID -H "Authorization: Bearer $FINTOK_API_KEY"
200 OK
{
  "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

POST/api/broadcast

Send 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.
The in-app composer — the API sends the same blast
curl
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!" }'
200 OK
{ "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.

GET/api/broadcast
curl
curl https://fintokapp.com/api/broadcast -H "Authorization: Bearer $FINTOK_API_KEY"
200 OK
{
  "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.

ActionCost
Create a channel20 tokens
Generate a video100 tokens
Send a blast message5 tokens
Generate an avatar (in-app)25 tokens

Check your current balance any time:

GET/api/balance
curl
curl https://fintokapp.com/api/balance -H "Authorization: Bearer $FINTOK_API_KEY"
200 OK
{ "tokenBalance": 100 }

8 · Errors

Every error is shaped { "error": "message" } (plus an issues object on validation failures).

401Missing, invalid, or revoked API key.
403Your account isn't eligible yet (finish onboarding + avatar).
422The request body failed validation.
400Malformed JSON.
429Rate limited (e.g. too many active keys).