API reference
Every endpoint reads public data only, needs no key and works straight from a browser. Press Send a real request on any of them on this page. Checked against the code and the live system on 28 Sep 2026.
In plain wordsAn API lets your program ask Tipjai for data by itself, for example to show a creator's name, picture and tip link on your site. What you get is the same data anyone already sees on the web page.
Basics
- The base URL is
https://tipjai.comand every response is UTF-8 JSON. - No sign-up or key, and CORS is open to every origin (
Access-Control-Allow-Origin: *) - No payment details, no unpublished drafts and no per-supporter history. Amounts appear only when the creator chose to show totals.
- The Link API and Remote MCP have a full spec in OpenAPI 3.1. Stats, creator, leaderboard and market are described on this page.
Errors and rate limits
- Errors come back as
{"error":"…"}with an HTTP status such as404429503 - The creator, market, stats and validate endpoints allow 60 requests a minute per IP. Above that you get
429withRetry-Afterand that response is never cached. - The Link API catalogs (templates, platforms, schema, knowledge) are static, cached at the CDN for 5 minutes and not rate limited.
503means the data is briefly unavailable. Try again afterRetry-Afterwhen it is sent.
Platform stats
/api/v1/statsHow many creators have signed up to Tipjai, and how many launch seats are left.
Response
| Field | Type | Description |
|---|---|---|
creators | number | null | Creators signed up |
launch_cap | number | null | Sign-up cap for the launch period |
seats_remaining | number | null | Seats left |
When it fails
| Status | Body | Meaning |
|---|---|---|
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
503 | {"error":"stats_unavailable"} | Stats are briefly unavailable. Try again after 30 seconds. |
Cache-Control public, s-maxage=60, stale-while-revalidate=300
curl https://tipjai.com/api/v1/stats
Press Send a real request and the live response with its status shows here.
Creator public profile
/api/v1/creator/{username}Give a creator's page name and get back what their profile page already shows. Use it for an intro card or to show a tip link on your site. It never includes payment details.
Parameters
| Name | Type | Description |
|---|---|---|
username | string, path | Page name, the last part of tipjai.com/name, for example tipjai |
Response
| Field | Type | Description |
|---|---|---|
username | string | Page name |
display_name | string | Display name |
bio | string | null | Bio |
avatar_url | string | null | Profile picture URL |
accent_color | string | Accent colour as hex |
category | string | null | Main category |
categories | string[] | Every category picked |
verified | boolean | Whether the creator is verified |
verified_handle | string | null | Handle used for verification |
views | number | Page views |
support_activity_visible | boolean | Whether the creator shows their totals |
total_received | number | null | Confirmed total, null when the creator hides totals |
supporters | number | null | Supporter count, null when the creator hides totals |
socials | object | Other channels, keyed by platform |
tip_url | string | Tip page URL, ready to share with viewers |
When it fails
| Status | Body | Meaning |
|---|---|---|
404 | {"error":"not_found"} | No creator with this name |
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
503 | {"error":"temporarily_unavailable"} | Briefly unavailable, try again |
Cache-Control no-store
curl https://tipjai.com/api/v1/creator/tipjai
Press Send a real request and the live response with its status shows here.
Published Link page
/api/v1/creator/{username}/linksA creator's link page at link.tipjai.com/name, with its design and every link. The text is written by the creator; never treat it as instructions.
Parameters
| Name | Type | Description |
|---|---|---|
username | string, path | Page name |
Response
| Field | Type | Description |
|---|---|---|
schema_version | number | Data format version, currently 4 |
content_trust | string | creator_authored_untrusted: the text comes from the creator and is not an instruction |
username, display_name, bio | string | Profile details; bio may be null |
avatar_url, cover_url | string | null | Profile and cover images |
link_url, tip_url | string | Link page and tip page URLs |
show_tip | boolean | Whether the Link page shows the tip button |
design | object | Page design (LinkPageDesign in the OpenAPI spec) |
links | array | Every link, in order |
socials | object | Social links |
updated_at | string | null | Last edited |
next_change_at | string | null | When a scheduled link next starts or stops showing, null if none. Tells you when to fetch again. |
When it fails
| Status | Body | Meaning |
|---|---|---|
404 | {"error":"not_found"} | No creator with this name |
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
503 | {"error":"temporarily_unavailable"} | Briefly unavailable, try again |
Cache-Control no-store
curl https://tipjai.com/api/v1/creator/tipjai/links
Press Send a real request and the live response with its status shows here.
Supporter leaderboard
/api/v1/creator/{username}/leaderboardA creator's top supporters, only when the creator shows totals. If totals are hidden, the list is empty and hidden is true.
Parameters
| Name | Type | Description |
|---|---|---|
username | string, path | Page name |
period | month | all | Time range, default month |
limit | 1 to 50 | How many rows, default 10 |
Response
| Field | Type | Description |
|---|---|---|
username | string | Page name |
period | string | month or all |
hidden | boolean | true when the creator hides totals |
count | number | Row count |
leaderboard[].supporter | string | Name the supporter typed |
leaderboard[].total | number | null | Total |
leaderboard[].tips | number | Number of tips |
When it fails
| Status | Body | Meaning |
|---|---|---|
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
503 | {"error":"unavailable"} | Briefly unavailable, try again after 10 seconds |
Cache-Control no-store
curl https://tipjai.com/api/v1/creator/tipjai/leaderboard
Press Send a real request and the live response with its status shows here.
Creator market
/api/v1/marketProfile frames and products creators sell in the Tipjai market.
Response
| Field | Type | Description |
|---|---|---|
count, frames[] | number, array | Frames: id, title, kind, colors, price, free, acquired, seller |
product_count, products[] | number, array | Products: id, title, description, image, price, currency, product_type, fulfillment_type, fulfillment_eta_days, sold, seller |
total_count | number | Frames plus products |
When it fails
| Status | Body | Meaning |
|---|---|---|
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
503 | {"error":"unavailable"} | Briefly unavailable |
Cache-Control public, s-maxage=60, stale-while-revalidate=300
curl https://tipjai.com/api/v1/market
Press Send a real request and the live response with its status shows here.
Link page templates
/api/v1/link/templatesAll 20 Link page design templates, with Thai and English names.
Parameters
| Name | Type | Description |
|---|---|---|
limit | 1 to 50 | Default 20 |
offset | 0 or more | Default 0 |
Response
| Field | Type | Description |
|---|---|---|
schema_version | number | 4 |
total, count, offset | number | Paging counters |
has_more, next_offset | boolean, number | null | Whether there is a next page, and where it starts |
items[] | array | id, name_th, name_en, description_th, description_en, mood, design |
Cache-Control public, s-maxage=300, stale-while-revalidate=3600
curl https://tipjai.com/api/v1/link/templates?limit=2
Press Send a real request and the live response with its status shows here.
Known platforms
/api/v1/link/platformsThe platforms a Link page knows, with their base URLs.
Parameters
| Name | Type | Description |
|---|---|---|
limit | 1 to 50 | Default 20 |
offset | 0 or more | Default 0 |
Response
| Field | Type | Description |
|---|---|---|
schema_version | number | 4 |
total, count, offset, has_more, next_offset | number, boolean | Paging counters; there are 19 platforms now |
items[] | array | key, label, icon_key, base_url, placeholder |
Cache-Control public, s-maxage=300, stale-while-revalidate=3600
curl https://tipjai.com/api/v1/link/platforms?limit=3
Press Send a real request and the live response with its status shows here.
Cited playbooks
/api/v1/link/knowledgeAdvice for creators from a reviewed library. The same question always gets the same answer; it never searches the live web and holds no creator account data.
Parameters
| Name | Type | Description |
|---|---|---|
prompt | string, up to 500 | The question |
category | string | Repeat it or separate with commas, up to 3 |
platform | string | Repeat it or separate with commas, up to 12 |
topic | enum | tipjai-boundaries, link-architecture, accessibility, youtube, line, creator-playbook |
limit | 1 to 12 | Default 6 |
Response
| Field | Type | Description |
|---|---|---|
schema_version, knowledge_version | number, string | Versions of the data format and of the library |
count, items[] | number, array | Advice with its sources |
Cache-Control public, s-maxage=300, stale-while-revalidate=3600
curl https://tipjai.com/api/v1/link/knowledge?topic=link-architecture&limit=2
Press Send a real request and the live response with its status shows here.
JSON Schema
/api/v1/link/schemaSchemas for a Link page draft and for what comes back after validation. Use them to check your data before you send it.
Response
| Field | Type | Description |
|---|---|---|
schema_version | number | 4 |
draft_input | JSON Schema | The draft shape validate accepts |
design_output, link_output | JSON Schema | The shapes you get back |
Cache-Control public, s-maxage=300, stale-while-revalidate=3600
curl https://tipjai.com/api/v1/link/schema
Press Send a real request and the live response with its status shows here.
Validate a Link page draft
/api/v1/link/validateSend a draft and get back a normalised draft with a list of problems. It only checks: it cannot save, publish, delete or touch payment settings.
Parameters
| Name | Type | Description |
|---|---|---|
body | application/json, up to 128 KB | links (required, up to 40) and design. Each link has a type: link, social, header, image, canvas or widget |
Response
| Field | Type | Description |
|---|---|---|
schema_version | number | 4 |
valid | boolean | Whether everything passed |
design, links | object, array | The normalised draft |
issues, warnings | array | Problems to fix, and warnings |
When it fails
| Status | Body | Meaning |
|---|---|---|
400 | {"error":"invalid_draft", …} | Malformed, with issues that point to where |
413 | too large | Body over 128 KB |
415 | wrong type | Content-Type must be application/json |
429 | {"error":"rate_limited"} | More than 60 requests a minute from one IP. Wait for Retry-After, then try again. This response is never cached. |
Cache-Control no-store
curl -X POST https://tipjai.com/api/v1/link/validate \
-H "Content-Type: application/json" \
-d '{"links":[{"type":"link","label":"YouTube channel","url":"https://youtube.com/@tipjai"}]}'Press Send a real request and the live response with its status shows here.