# Enrich a company by domain with Bytemine's company enrichment API

Bytemine's Company Enrichment API turns one company identifier (a website domain, a company name, a LinkedIn company page URL or a Bytemine `company_id`) into a firmographic profile, and bills $0.01 only when it finds a match. Send `POST https://agents.bytemine.ai/zcj/w93qyj9n6kkp/functions/v1/api-gateway/b2b-enrich` with one identifier 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/w93qyj9n6kkp/functions/v1/api-gateway/b2b-enrich`, one company per request
- **Body:** JSON with one of `website`, `company_name`, `linkedin_url` (strings) or `company_id` (integer)
- **Price:** $0.01, billed only on a successful match
- **Payment:** each request answers with a 402 price quote, paid from a wallet over x402 or MPP, or drawn from prepaid Credits.
- **Response:** a `company` profile with firmographics, industries, employee and follower counts, locations, LinkedIn identifiers, specialties and funding
- **Billing check:** the `zc-billing` response header shows what was charged
- **Full purchase flow:** [the buyer skill](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/SKILL.md)

## Choose the identifier

Send the most specific identifier you have. A domain is the most specific and a name the loosest. With a name, the API returns its best match.

| You have | Field | Example value |
| --- | --- | --- |
| The company's website | `website` | `"shopify.com"` |
| Its LinkedIn company page | `linkedin_url` | the page URL, as a string |
| A `company_id` from an earlier Bytemine response | `company_id` | an integer, the fastest lookup |
| Only its name | `company_name` | the name, as a string |

Send one identifier per request.

## Enrich a company by domain

1. Send the request with the domain in `website`:

   ```bash
   curl -i -X POST https://agents.bytemine.ai/zcj/w93qyj9n6kkp/functions/v1/api-gateway/b2b-enrich \
     -H 'Content-Type: application/json' \
     -d '{"website": "shopify.com"}'
   ```

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

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

3. Read the `200` response. A paid enrichment by domain returned a full company profile and paid $0.01.

4. Read the `zc-billing` response header to see what the call charged (`chargedUsd`). A delivered response with no `zc-billing` header billed nothing.

## Read the company profile

The response is a JSON object with a `company` profile. It holds these fields:

| Group | Fields |
| --- | --- |
| Identity | `name`, `website`, `slug`, `org_id`, `ticker`, `stock_exchange_code` |
| LinkedIn | `linkedin_url`, `linkedin_company_id`, `follower_count`, `is_showcase`, `similar_pages`, `affiliated_pages` |
| Size | `employee_count`, `size`, `employees` |
| Classification | `industries` (each with `name`, `id`, `primary`), `naics_codes`, `specialties`, `description`, `founded_year`, `type` |
| Location | `country_name`, `country_iso`, `locality`, `region`, `postal_code`, `street_address`, `inferred_location`, `locations` (each with `address`, `is_primary`, `inferred_location`) |
| Funding | `crunchbase_funding` |
| Record | `created_at`, `updated_at` |

A field the data does not hold for that company can come back `null`. In a matched profile, that included `description`, `founded_year` and `crunchbase_funding`. Check for `null` before you write a field to a CRM.

## Enrich a list and pay only for matches

Enrichment bills only on a successful match. A miss costs nothing, so you can send every company on a list and pay only for the ones Bytemine finds.

Where the 402 is a ceiling, it is the most the call can cost, and only the actual match is charged. A list of 50 domains with 20 matches costs $0.20. Each company is its own request, with its own 402.

For a long list, prepaid Credits avoid one wallet payment per call, because calls draw down a balance instead. Credits start at $0.50 and need a bearer credential, the agent identity the storefront issues at [auth.md](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/auth.md); [the buyer skill](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/SKILL.md) has the purchase flow.

[How to pay](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/payment.md) covers buying and topping up.

## Limits

- Each request takes one identifier and returns one company. To find companies by industry, size or location, use Bytemine's Company Search service.
- Card pays a pay-as-you-go call only when that call costs $0.50 or more. For a cheaper enrichment, pay over x402 or MPP, or buy Credits by card from $0.50.

## Errors

| Response | Meaning | Action |
| --- | --- | --- |
| `402` with a `payment` block | The normal price quote | Pay it and retry the same request, or stop |
| `400 invalid_request` | The body is malformed | Fix the JSON and send one identifier |
| `settlement_failed` | The payment did not settle. `settlementReason` says why. | Fix the wallet, then start again for a fresh 402 |
| `409 payment_request_mismatch` | A payment was reused for a different request | Request a fresh 402 for each company |
| `usage_exhausted` | Your Credits balance is used up | Top up with `POST https://agents.bytemine.ai/zcj/w93qyj9n6kkp/extend` and `{"amountUsd": "..."}` |
| `zc-usage-error` header on a `200` | The response was served but could not be billed | Use the response. Do not retry. |

## Frequently asked questions

### What does a company enrichment cost?

$0.01 per match. A lookup that finds no company is not billed. The 402 states the price before you pay.

### Can I enrich a company from its LinkedIn page?

Yes. Send the LinkedIn company page URL in `linkedin_url`. The profile that comes back includes `linkedin_url` and `linkedin_company_id` alongside the firmographics.

### Which identifier gives the best match?

A website domain is the most specific, and `company_id` is the fastest lookup. A company name is the loosest. With a name, the API returns the best match it finds.

### Do I need an API key or an account?

No. Each enrichment is paid at the request over x402 or MPP. A bearer credential is needed only to buy prepaid Credits.

### Can I enrich many companies in one call?

No. Each request enriches one company, so a list is a series of requests. Only the matches are billed.

## Keep reading

- [Buyer skill](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/SKILL.md): the full purchase flow
- [How to pay](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/payment.md): x402, MPP, card and Credits
- [Company Enrichment API reference](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/services/company-enrichment/openapi.json): request and response schema
- [Error reference](https://agents.bytemine.ai/zcj/w93qyj9n6kkp/errors.md): every error code

---

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