# Find people who recently changed jobs with Bytemine's API

Bytemine's job change signals API returns people who started a new role within a window you set, with their new and previous company and title, at $0.01 for each person returned. Send `POST https://agents.bytemine.ai/zcj/gxw759bk6cz2/functions/v1/api-gateway/v1/signals/job-changes` with your filters and pay the request's 402 price quote from a wallet; no account or API key is needed.

## At a glance

- **Endpoint:** `POST https://agents.bytemine.ai/zcj/gxw759bk6cz2/functions/v1/api-gateway/v1/signals/job-changes`
- **Body:** `days` (7 to 365, default 90), `title`, `seniority`, `company`, `domain`, `country`, `industry`, `min_employees`, plus `size` (1 to 50, default 25) and `from` (offset, 0 to 2000) to page
- **Price:** $0.01, billed per person returned. `size` caps the people returned per page at 50.
- **Payment:** each request answers with a 402 price quote, paid from a wallet over x402 or MPP, or drawn from prepaid Credits. No account or API key is needed.
- **Response:** `total` and a `changes` array. Each entry has `full_name`, `title`, `seniority`, `company_name`, `company_domain`, `started_at`, `linkedin_url` and a `previous` object.
- **Limits:** `days` from 7 to 365, `size` up to 50 per call, `from` up to 2000.
- **Full purchase flow:** [the buyer skill](https://agents.bytemine.ai/zcj/gxw759bk6cz2/SKILL.md)

## Run a job change search

1. Send the request with your filters and no payment:

   ```bash
   curl -sS -X POST https://agents.bytemine.ai/zcj/gxw759bk6cz2/functions/v1/api-gateway/v1/signals/job-changes \
     -H 'Content-Type: application/json' \
     -d '{"days": 7, "title": "Head of Sales", "seniority": "Director", "min_employees": 200, "size": 25}'
   ```

   The storefront answers with a 402 price quote, with the amount in `payment.amountUsd`.

2. Pay the quote with an x402 or MPP client, which resends the identical request with the proof attached. [The buyer skill](https://agents.bytemine.ai/zcj/gxw759bk6cz2/SKILL.md) has the steps.

3. Read the `200` response. Its shape is shown here with placeholder values:

   ```json
   {
     "total": 1,
     "changes": [
       {
         "full_name": "Alex Example",
         "title": "Head of Sales",
         "seniority": "Director",
         "headline": "<headline>",
         "started_at": "<date>",
         "company_name": "Example Inc",
         "company_domain": "example.com",
         "linkedin_url": "https://www.linkedin.com/in/alex-example",
         "previous": {
           "title": "Sales Manager",
           "company_name": "Example Labs",
           "company_domain": "example.net",
           "end_date": "<date>"
         }
       }
     ]
   }
   ```

   The top-level `title`, `company_name` and `company_domain` describe the new role. The `previous` object holds the prior employer, the prior title and `end_date`.

4. To fetch the next page, send the same body with `from` raised by `size`, for example `"from": 25`. Each page is a separate paid call.

## Choose the filters

`title`, `company` and `domain` describe the new role.

| To watch | Set |
| --- | --- |
| One target account | `domain` to its domain, such as `example.com` |
| Accounts by name | `company`, a phrase match on the new company name |
| A target title | `title`, a phrase match on the new job title, such as `Head of Sales` |
| A seniority level | `seniority`, such as `Director` or `Vice President (VP)` |
| Companies above a size | `min_employees` |
| A market | `industry` and `country` |
| How recent | `days`, from 7 to 365 |

## Keep a recurring watch cheap

The cost of a run is the number of people returned times $0.01. `size` caps that number for each call. Narrow filters keep it well under the cap.

| People returned | Cost |
| --- | --- |
| 25, the default `size` | $0.25 |
| 50, the largest `size` | $0.50 |

A recurring watch is the same search sent on a schedule with a fixed `days` window and fixed filters. `days` takes 7 to 365, and each returned person is billed.

Small calls are paid on a wallet rail. A card pays a pay-as-you-go call only when the quote is $0.50 or more. For frequent small runs, prepaid Credits let calls draw down one balance instead. Credits need an agent identity from [auth.md](https://agents.bytemine.ai/zcj/gxw759bk6cz2/auth.md) and start at $0.50, or $0.50 by card. Buy them with `POST https://agents.bytemine.ai/zcj/gxw759bk6cz2/plans/{planId}/purchase`, using the Credits plan from [the catalog](https://agents.bytemine.ai/zcj/gxw759bk6cz2/manifest.json).

## Limits

- The API is a search you call. The request takes no webhook or subscription field.
- The request takes no count-only option. Every returned person is billed.
- `from` goes up to 2000, and `size` goes up to 50 per call.

## Errors

| Response | Meaning | Action |
| --- | --- | --- |
| `402` with a `payment` block | The price quote. Nothing has been charged. | Pay and retry the identical request, or stop. |
| `settlement_failed` | The payment did not settle. `settlementReason` gives the reason, such as `insufficient_funds`. | Fund the wallet, then send a fresh request for a new 402. |
| `payment_request_mismatch` | A payment was reused for a different request. | Request and pay a fresh 402 for each run. |
| `usage_exhausted` | The Credits balance is used up. | Top up with `POST https://agents.bytemine.ai/zcj/gxw759bk6cz2/extend`. |
| `bearer_required` | A Credits purchase was sent without an agent identity. | Register at [auth.md](https://agents.bytemine.ai/zcj/gxw759bk6cz2/auth.md), or pay per call. |

## Frequently asked questions

### Can I track champions changing jobs from my customer accounts?

One option is the response's `previous` object. After a search by `title`, `seniority` or `days`, compare each entry's `previous.company_domain` with your customer domains. Every person in the response is billed, including the ones you drop.

### How much does a job change search cost?

Each person returned costs $0.01, and `size` caps the people returned per call at 50. The 402 states the amount before you pay, and you are charged only for the people returned.

### Is there a job change alerts webhook?

No. The request takes no webhook or subscription field. For a recurring watch, call the search on a schedule with the same `days` window and filters.

### Can I pay for a job change search by card?

A card pays a pay-as-you-go call only when the quote is $0.50 or more. Smaller calls are paid over x402 or MPP, or drawn from Credits bought by card from $0.50.

### What does the response say about the previous role?

Each entry's `previous` object gives the prior `title`, `company_name`, `company_domain` and `end_date`. The new role's start is in `started_at`.

## Keep reading

- [Buyer skill](https://agents.bytemine.ai/zcj/gxw759bk6cz2/SKILL.md): the full purchase flow
- [How to pay](https://agents.bytemine.ai/zcj/gxw759bk6cz2/payment.md): rails, Credits and ceiling pricing
- [Signals API reference](https://agents.bytemine.ai/zcj/gxw759bk6cz2/services/signals/openapi.json): every field of the job changes request
- [Error reference](https://agents.bytemine.ai/zcj/gxw759bk6cz2/errors.md): every error code and what to do

---

Updated 2026-10-16. All Bytemine guides: https://agents.bytemine.ai/guides.md. Storefront: https://agents.bytemine.ai/zcj/gxw759bk6cz2/llms.txt.
