Skip to content
Documentation menu

API reference

Outreach

The pages engines already cite, turned into a pitch list with public contacts and drafts grounded in your facts. Nothing in this group sends mail.

GET /brands/{brandId}/outreach

The publisher pitch pipeline: targets, their levers, contact state, drafts, outcomes and the checks of the live page.

Note

Only inclusion and update_request targets are ever emailed; a thread, a review site, a directory or a video is routed to its own flow.

About this routeDetail
Returnsrows (per target: url, domain, the prompts it fed, its lever, status and stage, whether a contact is on file, the drafted pitch and dates, its citations per model, when it was last cited or marked no longer cited, and check: what the last look at the live page found, its excerpt, the rel values of any link to you, and the next survival check), counts by stage over every row, total, and nextCursor for the next page.
SeatAny seat's key, a viewer's included.
PlanEvery plan.
Rate limitNone on this route.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
stage (query)one of drafted, contact_found, found, routed, sent, replied, placed, confirmed, removed, no_contact, no_longer_cited, dismissedOnly the rows at this stage.
cursor (query)stringThe nextCursor of the page before, to read the next page.
limit (query)integer, 1 to 200At most this many rows, up to 200. The default is 200.
curl "https://api.ansengine.co/brands/{brandId}/outreach" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200rows (per target: url, domain, the prompts it fed, its lever, status and stage, whether a contact is on file, the drafted pitch and dates, its citations per model, when it was last cited or marked no longer cited, and check: what the last look at the live page found, its excerpt, the rel values of any link to you, and the next survival check), counts by stage over every row, total, and nextCursor for the next page.
400An id in the path is not a valid id.
401No valid API key was sent.
404No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.

POST /brands/{brandId}/outreach/seed

Promote the measured citation targets into the outreach pipeline.

About this routeDetail
Returnsseeded, skipped and considered: the counts of targets added, left out and read.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanEvery plan.
Rate limit30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budgetNothing this route does is metered.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
curl -X POST "https://api.ansengine.co/brands/{brandId}/outreach/seed" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200seeded, skipped and considered: the counts of targets added, left out and read.
400An id in the path is not a valid id.
401No valid API key was sent.
403The key belongs to a viewer seat, which can read and cannot write.
404No such brand for this key. A brand in another workspace and a client outside this seat's view answer the same way, so a 404 never confirms that an id exists.
429Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait.

POST /brands/{brandId}/outreach/{targetId}/contact

Find the public editorial contact behind one cited page.

Note

The contact is checked against your do not contact list here, and again at the moment it is used. Only an editorial page (a list or an article) is ever searched for a contact.

About this routeDetail
Returnsok, found (false when no public contact was found), emailStatus, foundOn, suppressed (addresses skipped because they are on a do not contact list) and costUsd. The address itself is stored encrypted and is not in this response.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanOptimize and up.
Rate limit30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budgetChecked before the work starts: 429 once the workspace's spend safety limit is reached.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
targetId (path, required)uuidThe target id.
curl -X POST "https://api.ansengine.co/brands/{brandId}/outreach/{targetId}/contact" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200ok, found (false when no public contact was found), emailStatus, foundOn, suppressed (addresses skipped because they are on a do not contact list) and costUsd. The address itself is stored encrypted and is not in this response.
400An id in the path is not a valid id.
401No valid API key was sent.
402This needs a higher plan: Optimize and up. The body names the plan gate (feature) and the lowest plan id it admits (minPlan).
403The key belongs to a viewer seat, which can read and cannot write.
404No such brand or target for this key.
422The page is not an editorial page (a thread, a review site, a directory or a video), so it never gets an email. The body says why.
429Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait. Or the workspace's spend safety limit is reached: the body says so as budget_cap_reached, and spend resumes next cycle.
503Contact discovery is not configured on this deployment.

POST /brands/{brandId}/outreach/{targetId}/draft

Draft the pitch for one target, grounded only in your verified brand facts.

About this routeDetail
Returnsok, subject, body and lever. An inclusion carries a ready to paste entry and a fact box of your verified facts; an update request one verifiable addition; a creator a pitch that leaves any sponsorship to the creator to disclose. The draft is stored on the target. Nothing is sent.
SeatA key on a member seat or above. A viewer's key is refused with 403.
PlanOptimize and up.
Rate limit30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own.
Engine budgetChecked before the work starts: 429 once the workspace's spend safety limit is reached.
ParameterTypeWhat it is
brandId (path, required)uuidA brand id from GET /brands.
targetId (path, required)uuidThe target id.
curl -X POST "https://api.ansengine.co/brands/{brandId}/outreach/{targetId}/draft" \
  -H "Authorization: Bearer ak_your_key"
StatusWhen
200ok, subject, body and lever. An inclusion carries a ready to paste entry and a fact box of your verified facts; an update request one verifiable addition; a creator a pitch that leaves any sponsorship to the creator to disclose. The draft is stored on the target. Nothing is sent.
400An id in the path is not a valid id.
401No valid API key was sent.
402This needs a higher plan: Optimize and up. The body names the plan gate (feature) and the lowest plan id it admits (minPlan).
403The key belongs to a viewer seat, which can read and cannot write.
404No such brand or target for this key.
422No draft could be written from your verified facts, or the page is routed to a flow with no email draft (a thread, a review site, a directory). The body says why.
429Over the rate limit: 30 requests a minute for the workspace, counted across every write that takes this limit, the console's included. A seat limited to named clients gets 15 of its own. The Retry-After header says how many seconds to wait. Or the workspace's spend safety limit is reached: the body says so as budget_cap_reached, and spend resumes next cycle.
503Drafting is not configured on this deployment.