Skip to content

API reference

API: Agent browser

Markdown version

MethodPathWhat it doesScope
GET/v1/browser/headlessWhether headless portal pulls can run here: the organization's switch (off until an owner turns it on) and the browser, and if not, whyrecords:read
PUT/v1/browser/headlessTurn headless portal pulls on or off for the organization (owner, web session) (web app only)settings:write
GET/v1/browser/portalsPortal pulls and how their last run went (headless pulls say whether a sign-in is stored and when, never its value)records:read
POST/v1/browser/portalsPull a report from a portal on a cadence, through your own signed-in browser, into a pack feed (owner)settings:write
DELETE/v1/browser/portals/:idDelete a portal pull (owner)settings:write
PATCH/v1/browser/portals/:idPause, resume, run a portal pull now, or switch it between your browser and headless (owner). Run now is refused (409 sign_in_refused) after the portal refused the stored sign-in, until its maker sets it again; with a sign-in stored, only its maker can switch the mode, in the appsettings:write
DELETE/v1/browser/portals/:id/sign-inRemove a headless pull's stored sign-in and its saved browser session (its maker, an owner, from a web session) (web app only)settings:write
PUT/v1/browser/portals/:id/sign-inStore the sign-in a headless pull uses (its maker, an owner, from a web session). Sealed; never returned: the answer says only that one is set and when (web app only)settings:write
GET/v1/browser/sessionsYour connected browsers (owners: everyone's)records:read
POST/v1/browser/sessionsThe extension registers this browser for its person (agent runs they start can use it, in a tab they can see)records:read
DELETE/v1/browser/sessions/:idDisconnect a browser (its waiting steps stop)records:read
POST/v1/browser/sessions/:id/pollThe extension asks for work: this person's next steps (at most 5; one at a time per run or pull)records:read
POST/v1/browser/sessions/:id/steps/:stepThe extension answers one step (its page's text, a table, or that the page asks to sign in)records:read

Examples

GET /v1/browser/headless

Whether headless portal pulls can run here: the organization's switch (off until an owner turns it on) and the browser, and if not, why

curl -s "https://api.closefinch.com/v1/browser/headless" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/browser/headless`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

GET /v1/browser/portals

Portal pulls and how their last run went (headless pulls say whether a sign-in is stored and when, never its value)

curl -s "https://api.closefinch.com/v1/browser/portals" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/browser/portals`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/browser/portals

Pull a report from a portal on a cadence, through your own signed-in browser, into a pack feed (owner)

curl -s -X POST "https://api.closefinch.com/v1/browser/portals" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/browser/portals`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

DELETE /v1/browser/portals/$ID

Delete a portal pull (owner)

curl -s -X DELETE "https://api.closefinch.com/v1/browser/portals/$ID" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/browser/portals/${id}`, {
  method: "DELETE",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

PATCH /v1/browser/portals/$ID

Pause, resume, run a portal pull now, or switch it between your browser and headless (owner). Run now is refused (409 sign_in_refused) after the portal refused the stored sign-in, until its maker sets it again; with a sign-in stored, only its maker can switch the mode, in the app

curl -s -X PATCH "https://api.closefinch.com/v1/browser/portals/$ID" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/browser/portals/${id}`, {
  method: "PATCH",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

GET /v1/browser/sessions

Your connected browsers (owners: everyone's)

curl -s "https://api.closefinch.com/v1/browser/sessions" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/browser/sessions`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/browser/sessions

The extension registers this browser for its person (agent runs they start can use it, in a tab they can see)

curl -s -X POST "https://api.closefinch.com/v1/browser/sessions" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/browser/sessions`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

DELETE /v1/browser/sessions/$ID

Disconnect a browser (its waiting steps stop)

curl -s -X DELETE "https://api.closefinch.com/v1/browser/sessions/$ID" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/browser/sessions/${id}`, {
  method: "DELETE",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/browser/sessions/$ID/poll

The extension asks for work: this person's next steps (at most 5; one at a time per run or pull)

curl -s -X POST "https://api.closefinch.com/v1/browser/sessions/$ID/poll" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/browser/sessions/${id}/poll`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

POST /v1/browser/sessions/$ID/steps/$STEP

The extension answers one step (its page's text, a table, or that the page asks to sign in)

curl -s -X POST "https://api.closefinch.com/v1/browser/sessions/$ID/steps/$STEP" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/browser/sessions/${id}/steps/${step}`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

Request and response schemas: https://www.closefinch.com/openapi.json. All resources: API reference.

Send feedback

Tell us what's broken, confusing or missing on this page, or an idea. It goes to the team that builds the product.

Please don't include passwords or card numbers.
Only to reply about this. Never added to any mailing list.