Skip to content

Examples use fictional data. Every company, person, address and count in them is invented, and their domains use the reserved .example TLD.

Autopilot

Projects & ICPs

A project is what you sell. Research reads your site and writes down the pitch; ICPs turn that into filter sets a campaign can target.

GET/v1/projects

List projects

Projects in the workspace, newest first.

API key or sessionFree
curl "https://beamro.com/api/v1/projects" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "rows": [
    {
      "id": "prj_8w3k1n6v0q4z7m2b5d",
      "org_id": "org_4k1p8w2ne6ts0ybc7j",
      "name": "Harlow Meadow Events",
      "website": "harlowmeadow.example",
      "offer_description": "Event design and floral installation for weddings and corporate galas across New England.",
      "value_props": [
        "One crew designs, installs and strikes — no subcontractor hand-offs",
        "Stock is reused across a season instead of bought per event",
        "Fixed install windows that venues actually approve"
      ],
      "research_status": "ready",
      "created_at": "2026-08-31T11:06:20.000Z"
    }
  ],
  "total": 1,
  "limit": 25,
  "offset": 0
}
POST/v1/projects

Create a project

A domain is enough to start. Name and offer description are inferred from the site if you leave them out.

API key or sessionFree

Body parameters

FieldTypeDescription
websitestringYour own domain. The research agent starts here.
namestringProject name. Defaults to the company name found on the site.
offer_descriptionstringWhat you sell, in your words. Overrides the inferred version.
curl -X POST "https://beamro.com/api/v1/projects" \
  -H "x-api-key: $SALVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "website": "harlowmeadow.example"
  }'
200 response
{
  "id": "prj_8w3k1n6v0q4z7m2b5d",
  "org_id": "org_4k1p8w2ne6ts0ybc7j",
  "name": "Harlow Meadow Events",
  "website": "harlowmeadow.example",
  "offer_description": "Event design and floral installation for weddings and corporate galas across New England.",
  "value_props": [],
  "research_status": "pending",
  "created_at": "2026-08-31T11:06:20.000Z"
}
GET/v1/projects/{project_id}

Retrieve a project

Includes research_status, which is how you know whether the pitch is ready to use.

API key or sessionFree

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "id": "prj_8w3k1n6v0q4z7m2b5d",
  "org_id": "org_4k1p8w2ne6ts0ybc7j",
  "name": "Harlow Meadow Events",
  "website": "harlowmeadow.example",
  "offer_description": "Event design and floral installation for weddings and corporate galas across New England.",
  "value_props": [
    "One crew designs, installs and strikes — no subcontractor hand-offs",
    "Stock is reused across a season instead of bought per event",
    "Fixed install windows that venues actually approve"
  ],
  "research_status": "ready",
  "created_at": "2026-08-31T11:06:20.000Z"
}
PATCH/v1/projects/{project_id}

Update a project

Correct the offer or the value props. Campaign agents pick the new wording up on their next send.

API key or sessionFree

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.

Body parameters

FieldTypeDescription
namestringProject name.
offer_descriptionstringWhat you sell.
value_propsstring[]Claims the writer agent is allowed to make.
curl -X PATCH "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d" \
  -H "x-api-key: $SALVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "value_props": [
      "One crew designs, installs and strikes",
      "Stock reused across a whole season"
    ]
  }'
200 response
{
  "id": "prj_8w3k1n6v0q4z7m2b5d",
  "org_id": "org_4k1p8w2ne6ts0ybc7j",
  "name": "Harlow Meadow Events",
  "website": "harlowmeadow.example",
  "offer_description": "Event design and floral installation for weddings and corporate galas across New England.",
  "value_props": [
    "One crew designs, installs and strikes",
    "Stock reused across a whole season"
  ],
  "research_status": "ready",
  "created_at": "2026-08-31T11:06:20.000Z"
}
POST/v1/projects/{project_id}/research

Run market research

Kicks off the research agent: what you sell, who you compete with, the objections you will hit. Returns a job to poll.

API key or session10 credits

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.
curl -X POST "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/research" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "job_id": "job_0k5t2w8m3q7v1b6n9x",
  "status": "running"
}
GET/v1/projects/{project_id}/research

Retrieve market research

The finished research document, or null while it is still running.

API key or sessionFree

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/research" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "id": "mkt_4b9x2k7v0m1q6t3n8w",
  "project_id": "prj_8w3k1n6v0q4z7m2b5d",
  "summary": "Regional event design studio competing on install capability rather than catalogue breadth.",
  "what_they_sell": "Designed and installed floral and lighting schemes, priced per event with seasonal stock reuse.",
  "competitors": [
    {
      "domain": "quillonrow.example",
      "name": "Quillon Row Design",
      "note": "Same radius, thinner install crew"
    },
    {
      "domain": "thistledown-studio.example",
      "name": "Thistledown Studio",
      "note": "Larger, ships nationally, lighter on-site crew"
    }
  ],
  "positioning": "The studio venues call when the install window is four hours and nobody can be late.",
  "differentiators": [
    "Own install crew",
    "Seasonal stock reuse",
    "Venue-approved load-in plans"
  ],
  "objections": [
    "We already have a preferred florist",
    "Our venue restricts outside vendors"
  ],
  "proof_points": [
    "Six venues on annual retainer",
    "Two-van crew covering a 150-mile radius"
  ],
  "created_at": "2026-08-31T11:12:44.000Z"
}
GET/v1/projects/{project_id}/icps

List ICPs

Candidate customer profiles with their fit score, rationale and the filter set each one resolves to.

API key or sessionFree

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/icps" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "rows": [
    {
      "id": "icp_2q7v4m9x1k6b0n3t8p",
      "project_id": "prj_8w3k1n6v0q4z7m2b5d",
      "label": "Independent venues booking 30+ events a year",
      "fit_score": 91,
      "rationale": "Repeat installs, an annual refresh budget, and no in-house design team to displace.",
      "filters": {
        "segments": [
          "event-venues"
        ],
        "countries": [
          "US"
        ],
        "employeeMin": 5,
        "employeeMax": 120
      },
      "estimated_size": 186,
      "status": "selected",
      "created_at": "2026-08-31T11:09:04.000Z"
    },
    {
      "id": "icp_5n1b8k3x9v0q2m7t4w",
      "project_id": "prj_8w3k1n6v0q4z7m2b5d",
      "label": "Corporate event producers",
      "fit_score": 78,
      "rationale": "Bigger budgets, slower procurement, strong repeat value once inside.",
      "filters": {
        "segments": [
          "event-management"
        ],
        "countries": [
          "US"
        ],
        "employeeMin": 20
      },
      "estimated_size": 74,
      "status": "suggested",
      "created_at": "2026-08-31T11:09:04.000Z"
    }
  ]
}
POST/v1/projects/{project_id}/icps/generate

Generate ICPs

Turns finished research into a fresh set of candidate profiles. Existing selections are left alone.

API key or session10 credits

Path parameters

FieldTypeDescription
project_idreqstringProject identifier.
curl -X POST "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/icps/generate" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "rows": [
    {
      "id": "icp_2q7v4m9x1k6b0n3t8p",
      "project_id": "prj_8w3k1n6v0q4z7m2b5d",
      "label": "Independent venues booking 30+ events a year",
      "fit_score": 91,
      "rationale": "Repeat installs, an annual refresh budget, and no in-house design team to displace.",
      "filters": {
        "segments": [
          "event-venues"
        ],
        "countries": [
          "US"
        ],
        "employeeMin": 5,
        "employeeMax": 120
      },
      "estimated_size": 186,
      "status": "suggested",
      "created_at": "2026-08-31T11:09:04.000Z"
    }
  ]
}
PATCH/v1/icps/{icp_id}

Select or reject an ICP

Only selected profiles can back a campaign. Rejecting one keeps it on file so it is not suggested again.

API key or sessionFree

Path parameters

FieldTypeDescription
icp_idreqstringICP identifier.

Body parameters

FieldTypeDescription
statusreqstringsuggested, selected or rejected.
curl -X PATCH "https://beamro.com/api/v1/icps/icp_2q7v4m9x1k6b0n3t8p" \
  -H "x-api-key: $SALVO_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "status": "selected"
  }'
200 response
{
  "id": "icp_2q7v4m9x1k6b0n3t8p",
  "project_id": "prj_8w3k1n6v0q4z7m2b5d",
  "label": "Independent venues booking 30+ events a year",
  "fit_score": 91,
  "rationale": "Repeat installs, an annual refresh budget, and no in-house design team to displace.",
  "filters": {
    "segments": [
      "event-venues"
    ],
    "countries": [
      "US"
    ],
    "employeeMin": 5,
    "employeeMax": 120
  },
  "estimated_size": 186,
  "status": "selected",
  "created_at": "2026-08-31T11:09:04.000Z"
}
GET/v1/icps/{icp_id}/estimate

Size an ICP

How many contacts with an email match the profile right now. Counting is free — reading the rows is not. Until the deployment's catalog is loaded there is nothing to count: estimated_size is null and catalog_empty is true.

API key or sessionFree

Path parameters

FieldTypeDescription
icp_idreqstringICP identifier.
curl "https://beamro.com/api/v1/icps/icp_2q7v4m9x1k6b0n3t8p/estimate" \
  -H "x-api-key: $SALVO_API_KEY"
200 response
{
  "estimated_size": 186
}