> ## Documentation Index
> Fetch the complete documentation index at: https://docs.b2bsignals.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Developers overview

> Connect B2B Signals to your own tools with the REST API, webhooks or an AI tool, and see the auth header, base URL, permissions and limits.

Use these tools to connect B2B Signals to your own code, Zapier, Make, n8n or an AI assistant. You'll find them in **Settings**, under **API & MCP** and **Webhooks**.

| Tool | Use it to | Direction |
| - | - | - |
| [REST API](#rest-api) | Read people, write outreach and run campaigns from your code | You call us |
| [Webhooks](https://docs.b2bsignals.ai/developers/webhooks.md) | Get told the moment something happens | We call you |
| [MCP](https://docs.b2bsignals.ai/developers/mcp.md) | Let an AI tool work in your workspace | Your AI tool calls us |

## REST API

Send your [API key](https://docs.b2bsignals.ai/developers/api-keys.md) in the `X-API-Key` header.

```bash theme={null}
curl -H "X-API-Key: $B2B_API_KEY" \
  "$B2B_API_BASE/leads/?limit=10&min_score=80"
```

### Base URL

Find your base URL in **Settings** › **API & MCP**. Open **REST API**. The examples there already include it, ready to copy. Use it as `$B2B_API_BASE` in the examples on this page. All paths below are relative to it.

### First calls

| What it does | Call |
| - | - |
| List your top people. `limit` goes up to 500 and defaults to 50. | `GET /leads/?limit=10&min_score=80` |
| Get one person's full detail | `GET /leads/details/{lead_id}` |
| Write outreach for a person. This sends nothing. | `POST /leads/{lead_id}/outreach` |

## Permissions

There are no scopes. A key has owner-level access to its one workspace, so treat it like a password.

A key works only in its own workspace. Asking for another with the `X-Workspace-Id` header returns `403`.

Some actions always need a person signed in, and a key gets `403`:

* turning on automatic approval or auto-reply that sends by itself,
* changing a live campaign's approval steps,
* loosening safety settings,
* replying to a person directly from Inbox,
* turning on **Let AI tools approve and send messages**.

Approving messages and resuming someone's campaign also return `403`, unless an owner or admin has turned on **Let AI tools approve and send messages**. See [MCP](https://docs.b2bsignals.ai/developers/mcp.md#let-ai-tools-send).

## Rate limits

We don't set a general per-key request limit today. Some actions have their own:

| Action | Limit | Answer past the limit |
| - | - | - |
| Sending a saved draft reply with a key | 30 per workspace per UTC day | `429` |
| Sending a saved draft reply in a chat with a recent message from you | One every 2 minutes per chat | `429` |

Other actions can have limits too, and they answer the same way. Handle `429` by waiting and trying again. If the response has a `Retry-After` header, wait that long. Sending limits on your [senders](https://docs.b2bsignals.ai/campaigns/senders-and-limits.md) always apply, however a message is started.

## Errors

| Status | Meaning | What to do |
| - | - | - |
| `401` | The key is missing or wrong, or it was turned off | Check the header, or [make a new key](https://docs.b2bsignals.ai/developers/api-keys.md) |
| `402` | Sending is paused until your subscription payment goes through | Check [billing](https://docs.b2bsignals.ai/settings/billing.md) |
| `403` | A person must do this, your plan doesn't include it, or a key tried another workspace | Read `detail` in the response |
| `404` | It doesn't exist in this workspace | Check the id |
| `409` | The state changed, such as a reply that's out of date | Read `detail`, then fetch the latest state |
| `422` | The request isn't valid | Read `detail` for the field |
| `429` | A limit was reached | Wait and try again |

The response body has a `detail` field. It's either a sentence or an object with `code` and `message`.

## Before you build

> [!WARNING]
>
> A key can act on real people. Calls that start a campaign or send a message reach real people on LinkedIn, and sent messages can't be taken back. Test against a small list first.

## Related

> [card] [API quickstart](https://docs.b2bsignals.ai/developers/quickstart.md)
>
> Add a person and read results in a few requests.

> [card] [API keys](https://docs.b2bsignals.ai/developers/api-keys.md)
>
> Make, replace or turn off your key.

> [card] [Webhooks](https://docs.b2bsignals.ai/developers/webhooks.md)
>
> Events, payloads and retries.

> [card] [MCP](https://docs.b2bsignals.ai/developers/mcp.md)
>
> Connect an AI tool.

> [card] [Integrations](https://docs.b2bsignals.ai/sources/integrations.md)
>
> Send people in from another tool.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.