curl --request POST \
--url https://api.finseo.ai/v1/projects \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks"
}'
import requests
payload = {
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks",
}
r = requests.post(
"https://api.finseo.ai/v1/projects",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json=payload,
)
created = r.json()["data"]
print(created["id"])
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"domain": "labs.finseo.ai",
"description": "Experimental prompts and benchmarks",
"isDefault": false,
"tags": [],
"language": "en",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-03-29T08:30:00.000Z",
"updatedAt": "2026-03-29T08:30:00.000Z"
}
}
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Prospect GmbH",
"websiteUrl": "https://prospect.example",
"domain": "prospect.example",
"description": "",
"isDefault": false,
"tags": [],
"isPitch": true,
"pitchDurationDays": 1,
"language": "de",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-09-04T21:12:55.798Z",
"updatedAt": "2026-09-04T21:12:55.798Z"
}
}
Projects
Create Project
POST
/
v1
/
projects
curl --request POST \
--url https://api.finseo.ai/v1/projects \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks"
}'
import requests
payload = {
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks",
}
r = requests.post(
"https://api.finseo.ai/v1/projects",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json=payload,
)
created = r.json()["data"]
print(created["id"])
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"domain": "labs.finseo.ai",
"description": "Experimental prompts and benchmarks",
"isDefault": false,
"tags": [],
"language": "en",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-03-29T08:30:00.000Z",
"updatedAt": "2026-03-29T08:30:00.000Z"
}
}
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Prospect GmbH",
"websiteUrl": "https://prospect.example",
"domain": "prospect.example",
"description": "",
"isDefault": false,
"tags": [],
"isPitch": true,
"pitchDurationDays": 1,
"language": "de",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-09-04T21:12:55.798Z",
"updatedAt": "2026-09-04T21:12:55.798Z"
}
}
Creates a new project. Finseo will track AI visibility for the brand associated with this project across ChatGPT, Claude, Perplexity, and configured models.
A new project starts with your account’s default AI models (returned as
models). Set the models for this project with
Update Project before adding prompts —
prompts always run on the project’s models.
The same limits apply as in the dashboard’s create dialog: on Brand plans the
plan’s project cap, on Agency packages the included client-project slots
(pitch projects are free slots) and the included pitch-project slots. A limit
violation returns 403 with error.details.reason = agency_limit
(details.limit = "projects") or pitch_project_limit.
string
required
Display name (1–200 characters).
string
required
Language for the brand analysis and the generated prompts (case-insensitive).
One of:
en, de, fr, es, it, nl, pt, pl, sv, da, tr, ja,
no, fi, cs, ru, zh, zh-tw, ko, hi, ar, he.string
Canonical site URL; used to infer
domain when omitted.string
Root domain (e.g.
finseo.ai). Optional if websiteUrl is provided.string
Optional notes (max 500 characters).
boolean
Create a pitch project: no project fee, capped at 50 prompts, and
automatically paused once the pitch window closes. Ideal for sales agents
running one-off prospect analyses. Pitch project slots are limited per
agency package (e.g. 250 on Agency Starter, 500 on Agency Studio).
number
default:"14"
Pitch window in days:
1 (one-time run), 7 or 14. Ignored unless
isPitch is true. Convert a won pitch to a full client project with
Update Project and convertFromPitch.curl --request POST \
--url https://api.finseo.ai/v1/projects \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks"
}'
import requests
payload = {
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"language": "en",
"description": "Experimental prompts and benchmarks",
}
r = requests.post(
"https://api.finseo.ai/v1/projects",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json=payload,
)
created = r.json()["data"]
print(created["id"])
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Finseo Labs",
"websiteUrl": "https://labs.finseo.ai",
"domain": "labs.finseo.ai",
"description": "Experimental prompts and benchmarks",
"isDefault": false,
"tags": [],
"language": "en",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-03-29T08:30:00.000Z",
"updatedAt": "2026-03-29T08:30:00.000Z"
}
}
{
"data": {
"id": "67f8a1b2c3d4e5f60718293a4",
"name": "Prospect GmbH",
"websiteUrl": "https://prospect.example",
"domain": "prospect.example",
"description": "",
"isDefault": false,
"tags": [],
"isPitch": true,
"pitchDurationDays": 1,
"language": "de",
"models": ["chatgpt", "perplexity", "ai_overview"],
"createdAt": "2026-09-04T21:12:55.798Z",
"updatedAt": "2026-09-04T21:12:55.798Z"
}
}