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.
10 endpoints
/v1/projectsList projects
Projects in the workspace, newest first.
curl "https://beamro.com/api/v1/projects" \
-H "x-api-key: $SALVO_API_KEY"{
"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
}/v1/projectsCreate a project
A domain is enough to start. Name and offer description are inferred from the site if you leave them out.
Body parameters
| Field | Type | Description |
|---|---|---|
| website | string | Your own domain. The research agent starts here. |
| name | string | Project name. Defaults to the company name found on the site. |
| offer_description | string | What 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"
}'{
"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"
}/v1/projects/{project_id}Retrieve a project
Includes research_status, which is how you know whether the pitch is ready to use.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d" \
-H "x-api-key: $SALVO_API_KEY"{
"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"
}/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.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
Body parameters
| Field | Type | Description |
|---|---|---|
| name | string | Project name. |
| offer_description | string | What you sell. |
| value_props | string[] | 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"
]
}'{
"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"
}/v1/projects/{project_id}/researchRun market research
Kicks off the research agent: what you sell, who you compete with, the objections you will hit. Returns a job to poll.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
curl -X POST "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/research" \
-H "x-api-key: $SALVO_API_KEY"{
"job_id": "job_0k5t2w8m3q7v1b6n9x",
"status": "running"
}/v1/projects/{project_id}/researchRetrieve market research
The finished research document, or null while it is still running.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/research" \
-H "x-api-key: $SALVO_API_KEY"{
"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"
}/v1/projects/{project_id}/icpsList ICPs
Candidate customer profiles with their fit score, rationale and the filter set each one resolves to.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
curl "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/icps" \
-H "x-api-key: $SALVO_API_KEY"{
"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"
}
]
}/v1/projects/{project_id}/icps/generateGenerate ICPs
Turns finished research into a fresh set of candidate profiles. Existing selections are left alone.
Path parameters
| Field | Type | Description |
|---|---|---|
| project_idreq | string | Project identifier. |
curl -X POST "https://beamro.com/api/v1/projects/prj_8w3k1n6v0q4z7m2b5d/icps/generate" \
-H "x-api-key: $SALVO_API_KEY"{
"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"
}
]
}/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.
Path parameters
| Field | Type | Description |
|---|---|---|
| icp_idreq | string | ICP identifier. |
Body parameters
| Field | Type | Description |
|---|---|---|
| statusreq | string | suggested, 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"
}'{
"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"
}/v1/icps/{icp_id}/estimateSize 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.
Path parameters
| Field | Type | Description |
|---|---|---|
| icp_idreq | string | ICP identifier. |
curl "https://beamro.com/api/v1/icps/icp_2q7v4m9x1k6b0n3t8p/estimate" \
-H "x-api-key: $SALVO_API_KEY"{
"estimated_size": 186
}