BrokerGrid Partner API

Send Leads to a BrokerGrid CRM and follow what happens to them.

Authentication

The broker gives you an API key. Send it as a Bearer token on every request, over HTTPS, to https://partner-api-demo.brokergrid.net/v1:

Authorization: Bearer bgp_XXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Accept: application/json

Keep the key secret. When the broker rotates it, the previous key keeps working for 24 hours. The broker may also restrict your key to IP addresses and to a number of requests per minute.

Send a Lead

POST /v1/leads · scope leads.create

FieldRules
campaignCampaign code. Optional when your key has a single Campaign.
first_name, last_nameRequired, up to 255 characters.
emailRequired unless phone is given.
phoneInternational format, such as +4930123456. Required unless email is given.
countryISO 3166-1 alpha-2 code, such as DE.
languageLanguage code, such as en.
company, descriptionOptional.
trackingObject of the tracking parameters the Campaign captures (click ids, sub ids). See Campaigns.
curl -X POST https://partner-api-demo.brokergrid.net/v1/leads \
  -H "Authorization: Bearer $BROKERGRID_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"campaign": "AFF-1", "first_name": "Ada", "last_name": "Lovelace", "email": "ada@example.com",
       "phone": "+4930123456", "country": "DE", "tracking": {"click_id": "c-123"}}'

The answer is 201 Created with the Lead. When the CRM already knew this person, the Lead is still stored and duplicate is true, with the matching fields in duplicate_fields.

{
  "data": {
    "id": 4182,
    "campaign": "AFF-1",
    "status": "open",
    "duplicate": false,
    "duplicate_fields": [],
    "first_name": "Ada",
    "last_name": "Lovelace",
    "email": "ada@example.com",
    "phone": "+4930123456",
    "country": "DE",
    "language": null,
    "company": null,
    "tracking": {"click_id": "c-123"},
    "converted_at": null,
    "created_at": "2026-10-23T10:15:00+00:00"
  }
}

Read Leads

You can read only the Leads your key sent. Scope leads.read.

GET /v1/leads

ParameterRules
campaignCampaign code.
created_from, created_toDates or ISO 8601 timestamps.
per_page1 to 100, default 25. Follow links.next for the next page.

GET /v1/leads/{id}

status is open, converted (the Lead became a customer; see converted_at) or lost.

Campaigns

GET /v1/campaigns lists the Campaigns your key can send Leads to, with the countries each refuses and the tracking parameters it captures.

{
  "data": [
    {
      "code": "AFF-1",
      "name": "Spring affiliates",
      "active": true,
      "brand": "Acme Markets",
      "restricted_countries": ["US"],
      "tracking_parameters": [{"name": "click_id", "label": "Click ID"}]
    }
  ]
}

Errors

StatusMeaning
401The API key is missing, wrong, revoked or expired, or its API User is disabled.
403The request came from an IP address the key does not allow, or the key lacks the scope.
404No such Lead among the ones your key sent.
422The Lead was refused. errors names each field and why.
429Too many requests. Wait for the seconds in the Retry-After header.
{
  "message": "This Campaign does not accept Leads from this country.",
  "errors": {"country": ["This Campaign does not accept Leads from this country."]}
}