You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Get the organization personas, one row per (persona, organization) pair.
Same (item, org) fan-out as get_assets: a persona's category can be
owned by multiple orgs, and each owning org gets its own row so no
association is silently dropped.
Return every organization the caller's API key grants access to. Use this to discover organization IDs before calling endpoints that accept an organization_id filter.
Create one or more prompts in a category. Topics and tags are auto-created if referenced by name and not yet existing. Use dry_run to preview without persisting.
Update one or more existing prompts. Only provided fields are changed. Dimension fields (regions, platforms, personas, tags) replace the full set when provided. Use dry_run to preview without persisting.
The mentioned filter supports is true and is false. It uses the
latest page analysis available at or before end_date; pages without an
analysis by then are excluded from both values. citation_share keeps all
otherwise eligible citations in its denominator when this filter is used.
Get referral traffic report from the hourly aggregated materialized view (UTC-based).
Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week".
When view_id is provided, the query is scoped to that domain segment's hosts and paths.
Get bot traffic report from the hourly aggregated materialized view (UTC-based).
Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week".
When view_id is provided, the query is scoped to that domain segment's hosts and paths.
Agent status reflects whether an agent has ever been published. published
agents have a live published version. draft agents have not been
published yet.
Agents can have both a live published version and a draft version with newer
unpublished changes. Use the version parameter to choose which state to return.
Create a new draft agent owned by the given organization.
organization_id is required and you must be a member of it. The agent is created
as a draft; publish it with POST /v1/agents/{agent_id}/publish once its graph
is ready.
Publish an agent's latest draft as its live published version.
You must be a member of the agent's organization. Publishing promotes the current
draft graph to a new published version. A draft that cannot produce its declared
input/output contract is rejected with 422 and is not published.
You must be a member of the agent's organization. The agent's draft is replaced with the
supplied graph and re-validated, so you can iterate one draft — create, then update per
fix — instead of creating a new agent on every change. The response carries the updated
validation; publish with POST /v1/agents/{agent_id}/publish once validation.valid.
Retrieve an agent's full workflow graph ({nodes, edges}).
The graph is returned verbatim in the canonical dialect — the same shape POST /v1/agents
and PATCH /v1/agents/{agent_id} accept — so a known-good agent can be read back, copied,
and edited. Tool-backed nodes appear in their lowered tool form rather than the friendly
v1 node types. A draft is visible only to its creator; the published version is visible
across its organization.
Runs always execute the agent's live published version, so the agent must be
published first with POST /v1/agents/{agent_id}/publish. Unpublished drafts
cannot be run.
List the node types available for building agents.
The set is deterministic and does not depend on the caller, so the response
is safe to cache across sessions. Integration-dependent and dynamic-schema
node types are intentionally excluded in v1.
Returns every connected integration by default, each with its lifecycle
status; pass status_filter to narrow to one status (e.g. needs_reauth).
Each row's integration_id is the value a hub-backed node needs bound to it.
organization_id is required and you must be a member of it. You choose the
document's id, and creation is idempotent on it: repeating the request returns
the existing document rather than creating a second one.
New documents are visible only to their creator; share them from the Profound app,
or open one with the url in the response.
A 201 response does not confirm that a new document was created: it is also
returned when id already existed, in which case the existing document comes
back unchanged. Upstream gives no signal to tell the two apart, so this endpoint
does not claim to either — it is safe to retry with the same id either way.
List documents visible to your organization, newest-modified-first.
Documents are ordered by last-modified time, most recent first, with no other
sort option. This is a walk over a live, mutable collection: a document created
or modified while you are paging can shift which page it lands on, so a single
walk may show it to you twice or, rarely, skip it.
This response never includes a total count. Upstream counts totals before
applying your organization's access filter, so a total, or treating a short
page as the last one, would misreport what you can actually see. Keep
following pagination.next_cursor until it comes back null — that, and not
a short or even an empty page, is the end of the walk. A page whose rows the
access filter removed entirely is empty while later pages still hold
documents, so the last page of a walk may legitimately be an empty one.
Read a document: its metadata, its default tab's body, its other tabs, its comments, and its version hash.
You can read any document you have access to in the Profound app, including ones
created there rather than through this API.
By default this is a preview: the body is truncated to save your context, and the
version hash is withheld so a preview alone can never be used to replace a document
blindly. Pass preview=false when you intend to write.
Rename a document, change who can see it, or both in one call.
Renaming sets a permanent lock on the title, and changing visibility can silently
change who has access — see the name and visibility field descriptions for what
each one does before you use it.
Renaming needs edit access; changing visibility is creator-only, and upstream
enforces it. You can act on a document this API created, or one you created
yourself in the Profound app — not one merely shared with you.
Delete a document created through this integration.
Only documents created through this integration can be deleted here. A document
created in the Profound app can never be deleted through this route, even by the
person who owns it — creation provenance is stamped once, at creation, and is never
backfilled onto documents made another way.
The delete is soft: the row is marked deleted at the storage layer rather than
destroyed. There is no restore through this API, or any other — treat a delete as
final even though the data itself is not gone.
A 404 means the document is not visible to you at all. It covers three cases the
response does not distinguish, on purpose: the document never existed, it was
already deleted by an earlier call to this same route, or it exists but your
credential resolves no role on it. Deleting the same document twice returns 404 on
the second call, not a second 204.
A 403 means the opposite: the document is visible to you but not deletable here,
and the message says which rule refused — it was not created through this
integration, or you are not its creator. Deleting is creator-only, so edit access
is not enough to remove a document out from under its owner.
Overwrite a document's entire body with new markdown, replacing what it held before.
This is a whole-body replace, not a patch: send the complete new text every time. An
empty content_markdown is valid and clears the document.
Two destructive side effects apply on every call, regardless of what you send:
The document collapses to its default tab. Every non-default tab is deleted, and
the comments map is cleared for all tabs, including the default one — a
document with a live comment thread on any tab loses it.
skip_title_sync defaults to false, matching the Profound app: the title follows
the new content's first heading, so a replace silently renames the document unless
the heading matches the current title or skip_title_sync is set.
There is no compare-and-swap: this call does not accept a precondition, and nothing
stops two concurrent replaces from silently overwriting each other last-writer-wins.
Upstream's own version_hash documentation says as much — the token is "still a
change detector rather than a precondition: a caller must not treat a matching token
as licence to overwrite blindly, because it names the room at a moment cortex
observed and not the moment its own write lands." Sending a working_version_hash
(or any spelling of it) is rejected with a 400 naming this rather than accepted
and silently discarded, which is what happens on the upstream route this wraps.
You can replace a document this API created, or one you created yourself directly —
not merely one shared with you.
Get ad account insights for the organization's OpenAI Ads partner brand.
aggregation_level=campaign returns one row per campaign (with campaign_id
/ campaign_name and all metrics), so every campaign's insights come back in
a single call; time_granularity=daily gives per-day rows (e.g. daily spend).