Blue Reacher
AI agents33 / 46

AI agents

The AI agents that hold conversations with contacts: their prompt, opening messages, follow-ups, questions and goal, and switching them on or off.

The AI agents that hold conversations with contacts: their prompt, opening messages, follow-ups, questions and goal, and switching them on or off.

Every route takes Authorization: Bearer <ACCESS_TOKEN> unless the auth line says otherwise. Ids are numbers. Errors use the shape on the errors page.

RouteScopeWhat it does
GET /v1/ai-agentsai_agents.readThe AI agents of a workspace.
GET /v1/ai-agents/modelsai_agents.readThe reply models an agent can use.
GET /v1/ai-agents/{id}ai_agents.readOne agent with its configuration.
POST /v1/ai-agentsai_agents.writeCreate an agent. It is a draft unless you send status.
PATCH /v1/ai-agents/{id}ai_agents.writeChange its prompt or configuration, or activate / pause it.
POST /v1/ai-agents/{id}/duplicateai_agents.writeA copy of an agent, as a draft.
DELETE /v1/ai-agents/{id}ai_agents.writeDelete an agent.

List AI agents

GET https://api.bluereacher.com/v1/ai-agents

Auth: Bearer access token. Scope: ai_agents.read.

The AI agents of a workspace.

Each agent comes with its whole configuration (config_metadata). Agents are per workspace.

Parameters

NameInTypeRequiredDescription
workspace_idquerynumberyesA workspace of the installer.
statusqueryenumnoDefault all.
searchquerystringnoMatches the agent name.
pagequerynumbernoDefault 1.
limitquerynumberno1–100, default 25. Anything else is a 400.

Request

curl -X GET "https://api.bluereacher.com/v1/ai-agents?workspace_id=7&page=1&limit=25" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "data": [
    {
      "id": "a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607",
      "name": "Revive",
      "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
      "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
      "status": "draft",
      "workspace_id": "7",
      "config_metadata": {
        "model": "gpt-4.1-mini",
        "tone": "Friendly",
        "ghl_tag": "revive-2026",
        "company_info": "Harbour Dental, Sydney. Check-ups, cleaning, whitening.",
        "initial_messages": [
          "Hi {{contact.first_name}}, it's Sam from Harbour Dental. It's been a while — would you like to book a check-up?"
        ],
        "followUps": [
          {
            "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
            "delay": {
              "days": 2,
              "hours": 0,
              "minutes": 0
            }
          }
        ],
        "qualification_enabled": true,
        "questions": [
          {
            "id": "q1",
            "text": "Is it a check-up or something hurting?"
          }
        ],
        "faqs": [
          {
            "question": "Do you take insurance?",
            "answer": "Yes, all major funds."
          }
        ],
        "config": {
          "end_goal": "Send booking link",
          "disqualify_trigger": "Not interested or moved away",
          "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
        }
      },
      "created_at": "2026-10-28T09:00:00.000Z",
      "updated_at": "2026-10-28T09:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 25,
    "max_limit": 100,
    "total": 1,
    "total_pages": 1
  }
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.read. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
502The AI service could not be reachedThe AI service could not be reached. Try again later.

Response fields

ai_agent: Each item in data. Fields:

FieldTypeDescription
idstringAgent id. Example: a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607
namestringAgent name. Example: Revive
rolestringWhat the agent is for — its job, in a sentence or two.
personastringWho it speaks as, and how.
statusstringdraft, active (answering) or paused. Example: draft
workspace_idstringThe workspace it works in. Example: 7
config_metadataobjectSee Create AI agent.
created_atstring (ISO 8601)Created.
updated_atstring (ISO 8601)Last saved.

List AI models

GET https://api.bluereacher.com/v1/ai-agents/models

Auth: Bearer access token. Scope: ai_agents.read.

The reply models an agent can use.

Use an id as config_metadata.model. Models run on the account's own OpenAI (or OpenRouter) key, set on the dashboard.

Parameters

NameInTypeRequiredDescription
workspace_idquerynumberyesA workspace of the installer.

Request

curl -X GET "https://api.bluereacher.com/v1/ai-agents/models?workspace_id=7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "data": [
    {
      "id": "gpt-4.1-mini",
      "name": "GPT-4.1 mini",
      "provider": "openai",
      "description": "Fast and inexpensive; good for most conversations.",
      "recommended": true
    }
  ]
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.read. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
502The AI service could not be reachedThe AI service could not be reached. Try again later.

Get AI agent

GET https://api.bluereacher.com/v1/ai-agents/{id}

Auth: Bearer access token. Scope: ai_agents.read.

One agent with its configuration.

Parameters

NameInTypeRequiredDescription
idpathstringyesAgent id.
workspace_idquerynumberyesA workspace of the installer.

Request

curl -X GET "https://api.bluereacher.com/v1/ai-agents/a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607?workspace_id=7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "data": {
    "id": "a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607",
    "name": "Revive",
    "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
    "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
    "status": "draft",
    "workspace_id": "7",
    "config_metadata": {
      "model": "gpt-4.1-mini",
      "tone": "Friendly",
      "ghl_tag": "revive-2026",
      "company_info": "Harbour Dental, Sydney. Check-ups, cleaning, whitening.",
      "initial_messages": [
        "Hi {{contact.first_name}}, it's Sam from Harbour Dental. It's been a while — would you like to book a check-up?"
      ],
      "followUps": [
        {
          "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
          "delay": {
            "days": 2,
            "hours": 0,
            "minutes": 0
          }
        }
      ],
      "qualification_enabled": true,
      "questions": [
        {
          "id": "q1",
          "text": "Is it a check-up or something hurting?"
        }
      ],
      "faqs": [
        {
          "question": "Do you take insurance?",
          "answer": "Yes, all major funds."
        }
      ],
      "config": {
        "end_goal": "Send booking link",
        "disqualify_trigger": "Not interested or moved away",
        "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
      }
    },
    "created_at": "2026-10-28T09:00:00.000Z",
    "updated_at": "2026-10-28T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.read. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
404The agent does not exist or is in another workspaceAI agent not found or not accessible to this token

Response fields

ai_agent. Fields:

FieldTypeDescription
idstringAgent id. Example: a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607
namestringAgent name. Example: Revive
rolestringWhat the agent is for — its job, in a sentence or two.
personastringWho it speaks as, and how.
statusstringdraft, active (answering) or paused. Example: draft
workspace_idstringThe workspace it works in. Example: 7
config_metadataobjectSee Create AI agent.
created_atstring (ISO 8601)Created.
updated_atstring (ISO 8601)Last saved.

Create AI agent

POST https://api.bluereacher.com/v1/ai-agents

Auth: Bearer access token. Scope: ai_agents.write.

Create an agent. It is a draft unless you send status.

name and role are required. disqualify_trigger says when to stop. • execution_window — the hours it may message in.

A draft does nothing.

Parameters

NameInTypeRequiredDescription
workspace_idbodynumberyesA workspace of the installer.
namebodystringyesAgent name, up to 255 characters.
rolebodystringyesWhat the agent is for.
personabodystringnoWho it speaks as, and how.
statusbodyenumnoactive runs the activation check (an opening message, a goal, and what that goal needs).
config_metadatabodyobjectnoThe configuration — see the description above.

Request

curl -X POST "https://api.bluereacher.com/v1/ai-agents" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "workspace_id": 7,
  "name": "Revive",
  "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
  "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
  "config_metadata": {
    "model": "gpt-4.1-mini",
    "tone": "Friendly",
    "ghl_tag": "revive-2026",
    "initial_messages": [
      "Hi {{contact.first_name}}, it'\''s Sam from Harbour Dental. It'\''s been a while — would you like to book a check-up?"
    ],
    "followUps": [
      {
        "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
        "delay": {
          "days": 2,
          "hours": 0,
          "minutes": 0
        }
      }
    ],
    "config": {
      "end_goal": "Send booking link",
      "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
    }
  }
}'

Responses

A 201 reply (Created):

{
  "success": true,
  "message": "AI agent created",
  "data": {
    "id": "a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607",
    "name": "Revive",
    "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
    "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
    "status": "draft",
    "workspace_id": "7",
    "config_metadata": {
      "model": "gpt-4.1-mini",
      "tone": "Friendly",
      "ghl_tag": "revive-2026",
      "company_info": "Harbour Dental, Sydney. Check-ups, cleaning, whitening.",
      "initial_messages": [
        "Hi {{contact.first_name}}, it's Sam from Harbour Dental. It's been a while — would you like to book a check-up?"
      ],
      "followUps": [
        {
          "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
          "delay": {
            "days": 2,
            "hours": 0,
            "minutes": 0
          }
        }
      ],
      "qualification_enabled": true,
      "questions": [
        {
          "id": "q1",
          "text": "Is it a check-up or something hurting?"
        }
      ],
      "faqs": [
        {
          "question": "Do you take insurance?",
          "answer": "Yes, all major funds."
        }
      ],
      "config": {
        "end_goal": "Send booking link",
        "disqualify_trigger": "Not interested or moved away",
        "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
      }
    },
    "created_at": "2026-10-28T09:00:00.000Z",
    "updated_at": "2026-10-28T09:00:00.000Z"
  }
}
StatusWhenMessage
201Created
400Missing or invalid fieldrole is required — what the agent does, e.g. "Reactivate old leads and book a call"
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.write. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
502The AI service could not be reachedThe AI service could not be reached. Try again later.

Response fields

ai_agent. Fields:

FieldTypeDescription
idstringAgent id. Example: a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607
namestringAgent name. Example: Revive
rolestringWhat the agent is for — its job, in a sentence or two.
personastringWho it speaks as, and how.
statusstringdraft, active (answering) or paused. Example: draft
workspace_idstringThe workspace it works in. Example: 7
config_metadataobjectSee Create AI agent.
created_atstring (ISO 8601)Created.
updated_atstring (ISO 8601)Last saved.

Update AI agent

PATCH https://api.bluereacher.com/v1/ai-agents/{id}

Auth: Bearer access token. Scope: ai_agents.write.

Change its prompt or configuration, or activate / pause it.

Send only what changes. config_metadata is merged into what the agent has: the keys you send replace those keys, the others are kept, and the nested config object is merged the same way. So { "config_metadata": { "tone": "Casual" } } changes the tone and nothing else. To clear a key, send it empty ("" or []).

status: "active" switches the agent on after the activation check (400 with what is missing); paused stops it answering. An active agent uses the new wording from its next message, in conversations already running too.

Parameters

NameInTypeRequiredDescription
idpathstringyesAgent id.
workspace_idbodynumberyesA workspace of the installer.
namebodystringnoAgent name, up to 255 characters.
rolebodystringnoWhat the agent is for.
personabodystringnoWho it speaks as, and how.
statusbodyenumnoactive runs the activation check (an opening message, a goal, and what that goal needs).
config_metadatabodyobjectnoThe configuration — see the description above.

Request

curl -X PATCH "https://api.bluereacher.com/v1/ai-agents/a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "workspace_id": 7,
  "status": "active",
  "config_metadata": {
    "tone": "Casual"
  }
}'

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "AI agent updated",
  "data": {
    "id": "a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607",
    "name": "Revive",
    "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
    "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
    "status": "active",
    "workspace_id": "7",
    "config_metadata": {
      "model": "gpt-4.1-mini",
      "tone": "Casual",
      "ghl_tag": "revive-2026",
      "company_info": "Harbour Dental, Sydney. Check-ups, cleaning, whitening.",
      "initial_messages": [
        "Hi {{contact.first_name}}, it's Sam from Harbour Dental. It's been a while — would you like to book a check-up?"
      ],
      "followUps": [
        {
          "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
          "delay": {
            "days": 2,
            "hours": 0,
            "minutes": 0
          }
        }
      ],
      "qualification_enabled": true,
      "questions": [
        {
          "id": "q1",
          "text": "Is it a check-up or something hurting?"
        }
      ],
      "faqs": [
        {
          "question": "Do you take insurance?",
          "answer": "Yes, all major funds."
        }
      ],
      "config": {
        "end_goal": "Send booking link",
        "disqualify_trigger": "Not interested or moved away",
        "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
      }
    },
    "created_at": "2026-10-28T09:00:00.000Z",
    "updated_at": "2026-10-28T09:00:00.000Z"
  }
}
StatusWhenMessage
200OK
400The activation check failed (the AI service's message says what is missing), or a bad valueAdd at least one opening message before activating this agent.
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.write. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
404The agent does not exist or is in another workspaceAI agent not found or not accessible to this token

Response fields

ai_agent. Fields:

FieldTypeDescription
idstringAgent id. Example: a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607
namestringAgent name. Example: Revive
rolestringWhat the agent is for — its job, in a sentence or two.
personastringWho it speaks as, and how.
statusstringdraft, active (answering) or paused. Example: draft
workspace_idstringThe workspace it works in. Example: 7
config_metadataobjectSee Create AI agent.
created_atstring (ISO 8601)Created.
updated_atstring (ISO 8601)Last saved.

Duplicate AI agent

POST https://api.bluereacher.com/v1/ai-agents/{id}/duplicate

Auth: Bearer access token. Scope: ai_agents.write.

A copy of an agent, as a draft.

Parameters

NameInTypeRequiredDescription
idpathstringyesAgent id.
workspace_idbodynumberyesA workspace of the installer.

Request

curl -X POST "https://api.bluereacher.com/v1/ai-agents/a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607/duplicate" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
  "workspace_id": 7
}'

Responses

A 201 reply (Created):

{
  "success": true,
  "message": "AI agent duplicated",
  "data": {
    "id": "b81e0f3a-2c4d-4e5f-9a0b-1c2d3e4f5a6b",
    "name": "Revive (copy)",
    "role": "Reactivate old leads for Harbour Dental and book them in for a check-up.",
    "persona": "Sam, a friendly front-desk assistant at Harbour Dental. Short, warm messages.",
    "status": "draft",
    "workspace_id": "7",
    "config_metadata": {
      "model": "gpt-4.1-mini",
      "tone": "Friendly",
      "ghl_tag": "revive-2026",
      "company_info": "Harbour Dental, Sydney. Check-ups, cleaning, whitening.",
      "initial_messages": [
        "Hi {{contact.first_name}}, it's Sam from Harbour Dental. It's been a while — would you like to book a check-up?"
      ],
      "followUps": [
        {
          "text": "Just checking in, {{contact.first_name}} — any time suit you this week?",
          "delay": {
            "days": 2,
            "hours": 0,
            "minutes": 0
          }
        }
      ],
      "qualification_enabled": true,
      "questions": [
        {
          "id": "q1",
          "text": "Is it a check-up or something hurting?"
        }
      ],
      "faqs": [
        {
          "question": "Do you take insurance?",
          "answer": "Yes, all major funds."
        }
      ],
      "config": {
        "end_goal": "Send booking link",
        "disqualify_trigger": "Not interested or moved away",
        "booking_link_text": "Here is a link to pick a time:\nhttps://example.com/book"
      }
    },
    "created_at": "2026-10-28T09:00:00.000Z",
    "updated_at": "2026-10-28T09:00:00.000Z"
  }
}
StatusWhenMessage
201Created
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.write. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
404The agent does not exist or is in another workspaceAI agent not found or not accessible to this token

Response fields

ai_agent. Fields:

FieldTypeDescription
idstringAgent id. Example: a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607
namestringAgent name. Example: Revive
rolestringWhat the agent is for — its job, in a sentence or two.
personastringWho it speaks as, and how.
statusstringdraft, active (answering) or paused. Example: draft
workspace_idstringThe workspace it works in. Example: 7
config_metadataobjectSee Create AI agent.
created_atstring (ISO 8601)Created.
updated_atstring (ISO 8601)Last saved.

Delete AI agent

DELETE https://api.bluereacher.com/v1/ai-agents/{id}

Auth: Bearer access token. Scope: ai_agents.write.

Delete an agent.

It stops answering at once. Cannot be undone; to stop it for now, set status to paused instead.

Parameters

NameInTypeRequiredDescription
idpathstringyesAgent id.
workspace_idquerynumberyesA workspace of the installer.

Request

curl -X DELETE "https://api.bluereacher.com/v1/ai-agents/a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607?workspace_id=7" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Responses

A 200 reply (OK):

{
  "success": true,
  "message": "AI agent deleted",
  "data": {
    "id": "a3f1c2d4-5b6e-4f70-8a91-b2c3d4e5f607"
  }
}
StatusWhenMessage
200OK
401Missing or invalid tokenInvalid or expired access token.
403Missing scopeMissing scope(s): ai_agents.write. This integration was granted: …
404workspace_id does not exist or is not the installer's (same response for both)Workspace not found or not accessible to this token
404The agent does not exist or is in another workspaceAI agent not found or not accessible to this token

On this page