Documentation

POST /api/organic/research

Research an organic campaign for named platforms.

RequestPOST /api/organic/research
AuthenticationSession cookie required
Handlerbackend/organic.py

What it does

Produces briefs and strategies for the platforms given. Nothing is posted anywhere: the organic lane has no platform account, and research is separated from approval and from execution throughout.

Authentication

Session cookie required. Send the ff_session cookie. Without one the engine treats the caller as a new visitor with no holds and no claims, and returns a new cookie to use from then on.

Parameters

ParameterInTypeRequiredDescription
ff_sessioncookiestringOptionalThe session identifier. Omit it on the first call and store the value the response sets; every later call must send the same one or the engine treats the caller as a new visitor with no holds and no claims.
querybodystringRequiredWhat to research. Empty input is refused as `no_question`.
platformsbodystring[]OptionalWhich platforms to research. Refused as `invalid_platform` when one is unknown.

Request

The cookie jar carries the session between calls. Angle-bracketed values are the parameter types from the table above.

curl -s -b cookies.txt -c cookies.txt \
  -X POST -H 'Content-Type: application/json' \
  -d '{"query":"<string>","platforms":"<string[]>"}' \
  "https://flowfinds.ai/api/organic/research"
const res = await fetch("https://flowfinds.ai/api/organic/research", {
  method: "POST",
  credentials: "include",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "query": "<string>",
    "platforms": "<string[]>"
  }),
});
const data = await res.json();
import requests

s = requests.Session()
r = s.post("https://flowfinds.ai/api/organic/research", json={
    "query": "<string>",
    "platforms": "<string[]>"
  })
data = r.json()

Recorded example

curl -s -b cookies.txt -c cookies.txt \
  -X POST -H 'Content-Type: application/json' \
  -d '{"query":"…","platforms":["…"]}' \
  "$FLOWFINDS_ORIGIN/api/organic/research"

Responses

200Research produced briefs.

200Refused.

FieldTypeDescription
statusstring`refused`.
reasonstring`no_question` or `invalid_platform`.
explanationstringThe reason's sentence.

Errors

This endpoint has no failure path of its own. An uncaught exception anywhere in the engine is still returned as structured JSON by the shared guard.

Related

Back to the API reference index, or read the cookbook for recipes that compose this endpoint with others.