---
title: Signal REST API
description: Read and write your Signal CRM data from your own code, integrations and automation tools.
product: signal
section: api
order: 1
---

# Signal REST API

The Signal REST API gives your code the same records your team works with in Signal: Accounts, Contacts, Deals, prospect contacts, Prospect Companies, activities, calls, notes, pipelines, bookings, Decks, Campaigns and, for workspaces that use it, the Property module.

Use it to:

- Push new prospect contacts into Signal from your website, forms or other tools.
- Keep Accounts, Contacts and Deals in step with your billing, ERP or support systems.
- Log calls and activities from your phone system or other apps.
- Pull pipeline and portfolio figures into your own reports.
- Connect Zapier, Make, n8n or your own scripts.

Pair it with [webhooks](webhooks.md) when you want Signal to tell your systems that something changed.

## Base URL

All endpoints live under one versioned base URL:

```
https://crm.empiraa.app/api/v1
```


Every request is made over HTTPS, sends and receives JSON, and is authenticated with an API key. A request always acts on the workspace that owns the key.

## Quickstart (5 minutes)

### 1. Create an API key

1. In Signal, open **Autopilot** in the sidebar.
2. Select the **Webhooks & API** tab, then **API Keys**.
3. Select **New Key**, give the key a name (for example "Website integration") and tick the scopes it needs. For this quickstart, tick **Read Accounts** and **Write Accounts**.
4. Select **Create Key** and copy the key. It starts with `sk_live_`. **Signal shows the full key only once.**

You need permission to manage integrations to create keys. Workspace admins have it by default. See [Authentication](authentication.md) for details.

### 2. Check the key with `GET /me`

`GET /me` returns the workspace the key belongs to. It needs no scope, so it's a good first call.

```bash
curl https://crm.empiraa.app/api/v1/me \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```js
const res = await fetch("https://crm.empiraa.app/api/v1/me", {
  headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
console.log(data.name, data.currency);
```

Response:

```json
{
  "data": {
    "id": "cm1a2b3c40000xy12z3a4b5c6",
    "name": "Northwind Sales",
    "slug": "northwind-sales",
    "email": "sales@northwind.example",
    "phone": "+1 415 555 0100",
    "website": "https://northwind.example",
    "timezone": "America/Los_Angeles",
    "currency": "USD",
    "logo_url": null,
    "created_at": "2026-03-02T18:21:07.000Z"
  },
  "meta": { "cursor": null },
  "error": null
}
```

### 3. Create an Account

```bash
curl -X POST https://crm.empiraa.app/api/v1/accounts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Contoso Pharmaceuticals",
    "website": "https://contoso.example",
    "industry": "Healthcare",
    "employee_count": 250
  }'
```

```js
const res = await fetch("https://crm.empiraa.app/api/v1/accounts", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Contoso Pharmaceuticals",
    website: "https://contoso.example",
    industry: "Healthcare",
    employee_count: 250,
  }),
});
const { data: account } = await res.json(); // 201 Created
```

Response (`201 Created`):

```json
{
  "data": {
    "id": "3f6c2a1e-8b4d-4c2a-9f1e-2b7d5a9c4e10",
    "name": "Contoso Pharmaceuticals",
    "legal_name": null,
    "website": "https://contoso.example",
    "phone": null,
    "email": null,
    "industry": "Healthcare",
    "employee_count": 250,
    "health_score": 50,
    "status_id": null,
    "owner_id": null,
    "territory": null,
    "tier": null,
    "created_at": "2026-11-12T09:30:00.000Z",
    "updated_at": "2026-11-12T09:30:00.000Z"
  },
  "meta": { "cursor": null },
  "error": null
}
```

The Account now appears on the **Accounts** page in Signal.

### 4. Try it in Signal

The **Webhooks & API** tab also has an **API Playground** for sending requests from your browser with one of your keys, and a **Dev Reference** and **Examples** for quick lookups.

## Read next

- [Authentication](authentication.md): keys, header forms, scopes, rotation and the 401/403 responses.
- [Conventions](conventions.md): response shapes, IDs, dates, money, pagination, errors, idempotency and CORS.
- [Webhooks](webhooks.md): get notified when records change.

### API reference

| Page | Covers |
| --- | --- |
| [Accounts](reference/accounts.md) | Accounts and Account spend records |
| [Contacts](reference/contacts.md) | Contacts at your Accounts |
| [Deals](reference/deals.md) | Deals and their stages |
| [Pipelines](reference/pipelines.md) | Deal pipelines and their stages |
| [Prospect contacts](reference/prospects.md) | People you're prospecting (`/prospects`) |
| [Prospect Companies](reference/prospect-companies.md) | Companies you're prospecting |
| [Prospect sources](reference/prospect-sources.md) | Where prospect contacts came from |
| [Activities](reference/activities.md) | Calls, meetings, emails, Actions and other activities |
| [Tasks](reference/tasks.md) | The `/tasks` to-do list |
| [Calls and call logs](reference/calls-and-call-logs.md) | Logged phone calls |
| [Notes](reference/notes.md) | Notes on prospect contacts |
| [Bookings](reference/bookings.md) | Meetings booked through the Scheduler |
| [Decks](reference/decks.md) | Signal Decks |
| [Users and me](reference/users-and-me.md) | Your workspace and its people |
| [Portfolio](reference/portfolio.md) | Pipeline and revenue summary figures |
| [Marketing Campaigns](reference/marketing-campaigns.md) | Campaigns (Marketing plans) |
| [Property](reference/property.md) | Developments, plots, reservations and call-offs |

An [OpenAPI 3.1 description](openapi.yaml) of the whole API is available for API explorers and code generators.
