IntentCast API

Use IntentCast from your own code, scripts, n8n, Make or Zapier. Send a YouTube video, a page URL or a topic; IntentCast finds live Reddit and Quora threads where that content is the answer and drafts a reply for each one.

Base URLhttps://smoeblkrgvbrirkagvhu.supabase.co/functions/v1/api
FormatJSON in, JSON out
Versionv1
Specopenapi.json

Quick start

1. Create a key in the app: Account & billing → API keys → Create API key. Copy it — it is shown only once.

2. Start a cast:

curl -X POST https://smoeblkrgvbrirkagvhu.supabase.co/functions/v1/api/v1/casts \
  -H "Authorization: Bearer ic_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: my-first-cast-001" \
  -d '{"input": "https://www.youtube.com/watch?v=VIDEO_ID"}'

You get an answer straight away (202 Accepted) with the cast id and status: "running". The search itself takes about 15–60 seconds.

3. Check the result every ~10 seconds until status is no longer running:

curl https://smoeblkrgvbrirkagvhu.supabase.co/functions/v1/api/v1/casts/CAST_ID \
  -H "Authorization: Bearer ic_live_YOUR_KEY"

When status is completed, threads holds every thread worth replying to, with a drafted reply.

Authentication

Send your key on every request, either way:

Authorization: Bearer ic_live_YOUR_KEY
X-API-Key: ic_live_YOUR_KEY

Keys are secret. Keep them on your server or in your automation tool's credentials. The API refuses calls made from web browsers, so a key placed in a web page will not work and would be exposed to anyone.

Permissions

PermissionCan do
Run + readStart casts (uses credits) and read results
Read onlyRead casts and your account usage — never spends credits

You can give a key an expiry date and revoke any key instantly from Account & billing. Up to 10 active keys per account.

Start a cast — POST /v1/casts

Permission: Run + read. Uses 1 credit.

FieldTypeRequiredDescription
inputstringyesA YouTube URL, a page URL (e.g. https://example.com/pricing or example.com), or a topic (max 200 characters).
HeaderRequiredDescription
Idempotency-KeyrecommendedAny unique string up to 200 characters. Send the same key again (for example when your tool retries after a timeout) and you get the original cast back — you are never charged twice.

Response 202 Accepted, with a Location header pointing to the cast:

{
  "id": "676cc8aa-7822-4ae0-933e-a6d61561b9b0",
  "input": "swiftsku.com",
  "input_type": "website",
  "status": "running",
  "source": "api",
  "thread_count": 0,
  "credit_charged": true,
  "error": null,
  "duration_ms": null,
  "created_at": "2026-10-03T12:05:35.195882+00:00",
  "completed_at": null,
  "url": "https://smoeblkrgvbrirkagvhu.supabase.co/functions/v1/api/v1/casts/676cc8aa-7822-4ae0-933e-a6d61561b9b0",
  "credits_left": 30,
  "replayed": false,
  "poll_after_seconds": 10
}

Repeating a request with the same Idempotency-Key returns 200 OK with "replayed": true and the cast's current state.

Get a cast — GET /v1/casts/{id}

Permission: Read only or higher.

{
  "id": "676cc8aa-7822-4ae0-933e-a6d61561b9b0",
  "input": "swiftsku.com",
  "input_type": "website",
  "status": "completed",
  "source": "api",
  "thread_count": 3,
  "credit_charged": true,
  "error": null,
  "duration_ms": 15795,
  "created_at": "2026-10-03T12:05:35.195882+00:00",
  "completed_at": "2026-10-03T12:05:51.090299+00:00",
  "url": "https://smoeblkrgvbrirkagvhu.supabase.co/functions/v1/api/v1/casts/676cc8aa-7822-4ae0-933e-a6d61561b9b0",
  "threads": [
    {
      "title": "Inventory management for Verifone c18 with commander",
      "link": "https://www.reddit.com/r/smallbusiness/comments/1vads7m/...",
      "platform": "reddit",
      "subreddit": "smallbusiness",
      "score": 86,
      "search_rank": 1,
      "thread_date": null,
      "why_this_thread": "c-store price book and inventory management",
      "draft_reply": "Commander-style back office setups usually handle price book ...",
      "includes_your_link": true,
      "is_new": false
    }
  ]
}

threads is null while the cast is running, and for casts that ended empty or failed.

Cast status

StatusMeaningCredit
runningSearch in progress. Check again in ~10 seconds.Reserved
completedDone. threads holds the results.Used
emptyNothing worth replying to was found.Refunded
failedThe search could not finish. error explains why.Refunded

A cast still running after 10 minutes is marked failed and refunded automatically.

Thread fields

FieldDescription
title, linkThe thread and its URL
platformreddit, quora or other
subredditFor Reddit threads
score0–100: how well your content answers this thread
search_rankWhere Google ranks this thread among Reddit (or Quora) threads for the search that found it. Not the thread's position in a normal Google search.
thread_dateWhen the thread was posted, if known
why_this_threadThe angle your reply should take
draft_replyA drafted reply. Read and edit it before posting — always post by hand.
includes_your_linktrue on the one reply that carries your link. One link per cast keeps your account safe.
is_newfalse if this thread appeared in one of your earlier casts

List casts — GET /v1/casts

Permission: Read only or higher. Includes casts started in the app and through the API, newest first.

Query parameterDescription
limit1–100, default 20
statusOptional: running, completed, empty or failed
cursorPass next_cursor from the previous page to get the next one
{
  "data": [ { "id": "...", "input": "swiftsku.com", "status": "completed", "...": "..." } ],
  "next_cursor": "MjAyNi0xMC0wM1QxMTo1OToxNC4wODQ5NjErMDA6MDB8..."
}

next_cursor is null on the last page. List items have the same fields as a single cast, without threads.

Account and usage — GET /v1/me

Permission: Read only or higher. Check this before running many casts.

{
  "email": "you@example.com",
  "credits": 30,
  "key": { "name": "n8n workflow", "prefix": "ic_live_PgjgA623", "scopes": ["read", "run"], "expires_at": null },
  "limits": { "requests_per_hour": 300, "casts_per_24h": 30, "concurrent_casts": 2 },
  "usage": { "casts_last_24h": 1, "casts_running": 0, "requests_remaining_this_hour": 296 }
}

Credits

Limits (per key)

LimitDefault
Requests300 per hour
Casts30 per 24 hours
Casts running at the same time2

Every response includes X-RateLimit-Limit and X-RateLimit-Remaining. When you hit a limit you get 429 with a Retry-After header and retry_after_seconds in the body. Need higher limits? Email support@getintentcast.com.

Errors

Every error has the same shape. Branch on code, not on message.

{ "error": { "code": "RATE_LIMITED", "message": "Rate limit exceeded.", "status": 429, "retry_after_seconds": 1800 } }
StatusCodeMeaning
400INVALID_INPUTinput is missing, too short, too long, or not a valid URL
400INVALID_JSONThe body is not valid JSON
400INVALID_IDEMPOTENCY_KEYIdempotency-Key is longer than 200 characters
400INVALID_CURSORcursor is not a value returned by this API
401UNAUTHORIZEDMissing or invalid API key
401KEY_REVOKEDThe key was revoked
401KEY_EXPIREDThe key has expired
402INSUFFICIENT_CREDITSNo credits left — top up in the app
403INSUFFICIENT_SCOPEA read-only key tried to start a cast
403BROWSER_NOT_ALLOWEDCalled from a web page — call from a server instead
404CAST_NOT_FOUNDNo cast with that id on your account
404NOT_FOUNDUnknown endpoint
405METHOD_NOT_ALLOWEDWrong HTTP method for this endpoint
409IDEMPOTENCY_CONFLICTThis Idempotency-Key was already used with a different input
429RATE_LIMITEDToo many requests this hour
429CONCURRENCY_LIMITTwo casts are already running on this key — wait for one to finish
429DAILY_LIMITThis key reached its casts-per-24-hours limit
500INTERNAL_ERRORSomething went wrong on our side — retry. No credit is used if a cast could not start.

Every response carries an X-Request-Id header. Include it when you contact support.

Fair use

The API is for finding threads and drafting replies that a person reviews and posts by hand. Automated posting, bulk reply generation and reselling IntentCast output are not allowed — see the Terms of Service. Keys used against these terms can be revoked.

Tips for automation tools

Questions: support@getintentcast.com