---
title: REST API and automation tools
description: Use the Signal and GPS REST APIs and webhooks from your own code, Zapier, Make or n8n.
product: all
section: use-cases
order: 5
---

# REST API and automation tools

Use the REST APIs when you write the code, or when an automation tool such as Zapier, Make or n8n makes the calls for you. Pair them with webhooks when you want Signal or GPS to tell your systems that something changed.

## The two APIs at a glance

| | Signal | GPS |
|---|---|---|
| **Base URL** | `https://crm.empiraa.app/api/v1` | `https://plan.empiraa.app/api/v1` |
| **Sign-in** | `Authorization: Bearer` with a workspace API key | `X-API-Key` and `X-API-Secret` headers |
| **Where to make a key** | **Autopilot › Webhooks & API › API Keys** | **Settings › Developer › Keys & Webhooks** |
| **Start here** | [Signal quickstart](../signal/api/index.md) | [GPS quickstart](../gps/api/index.md) |
| **Events** | [Signal webhooks](../signal/api/webhooks.md) | [GPS webhooks](../gps/api/webhooks.md) |

## Example: create an Account in Signal

```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,
  }),
});
```

## Example: record a check-in in GPS

Send an Objective's latest value. GPS works out the new progress from the Objective's target.

```bash
curl -X POST "https://plan.empiraa.app/api/v1/objectives/c7e9a1b3-4d5f-4a6b-9c8d-1e2f3a4b5c6d/progress" \
  -H "X-API-Key: $GPS_API_KEY_ID" \
  -H "X-API-Secret: $GPS_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{ "value": 60000, "notes": "Two new annual contracts signed" }'
```

```js
const res = await fetch("https://plan.empiraa.app/api/v1/objectives/c7e9a1b3-4d5f-4a6b-9c8d-1e2f3a4b5c6d/progress", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.GPS_API_KEY_ID,
    "X-API-Secret": process.env.GPS_API_SECRET,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ value: 60000, notes: "Two new annual contracts signed" }),
});
```

## Zapier, Make and n8n

Each of these tools has a step that makes an HTTP request. Point it at a Signal or GPS endpoint and add the sign-in headers from the table above.

1. Pick a trigger in your tool, such as a new form entry or a new row in a spreadsheet.
2. Add an HTTP request step: **Webhooks by Zapier**, Make's **HTTP** module, or n8n's **HTTP Request** node.
3. Set the method and URL from the reference page for the record you want, and add the sign-in headers.
4. Map your trigger's fields into the JSON body, then test the step.

To go the other way, add a webhook in Signal or GPS that posts to your tool's catch-hook URL.

## Patterns that work well

- **Website form to prospect contact.** Create the prospect contact in Signal as the form is submitted. See [Prospect contacts](../signal/api/reference/prospects.md).
- **Billing to CRM.** Keep Accounts and Deals in step with your billing system. See [Accounts](../signal/api/reference/accounts.md) and [Deals](../signal/api/reference/deals.md).
- **Weekly numbers into the plan.** Post each KPI's latest value as a check-in. See [Check-ins](../gps/api/reference/check-ins.md).
- **Work synced both ways.** Create and update Actions from your project tool. See [GPS Actions](../gps/api/reference/actions.md).

## Explore every endpoint

Each API has an explorer built from its OpenAPI file: [Signal API explorer](../signal/api/explorer.html) and [GPS API explorer](../gps/api/explorer.html).
