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

# Tech Intelligence

> See the technologies a company uses

The Tech Intelligence API returns the technologies a company uses: products, vendors and categories,
with how confident Firmable is and how recently each was seen.

It does not return the company profile. Use [Company Enrichment](https://docs.firmable.com/api-reference/endpoint/company-get.md)
for that.

## Who can use it

Tech Intelligence must be on your plan. If it isn't, the endpoint returns `403`.

Both kinds of API key work, with the same endpoint, responses and prices:

* **Customer keys** start with `fbl_`. See [Creating API keys](https://docs.firmable.com/api-reference/creating-api-keys.md).
  They spend your subscription credits first, then add-on credits.
* **Developer keys** start with `fbl_dev_`. See [API keys and authentication](https://docs.firmable.com/developer/api-keys.md).
  They spend [developer credits](https://docs.firmable.com/developer/credits.md).

Partner keys can't call this endpoint; they use the partner API.

Send the key as a bearer token, as with every Firmable endpoint:

```bash theme={null}
-H "Authorization: Bearer fbl_your_key"
```

## Pick the company

Send exactly one company identifier:

| Parameter | What it is |
| - | - |
| `id` | Firmable company ID, such as `f000000740279` |
| `ln_url` | LinkedIn company URL |
| `ln_slug` | LinkedIn company slug |
| `fqdn` | Domain, such as `taboola.com` |
| `website` | Website URL |
| `abn` | Australian Business Number |

If you send more than one, the first in this order wins: `id`, `ln_url`, `ln_slug`, `fqdn`,
`website`, `abn`.

## Get the first page

```bash theme={null}
curl "https://api.firmable.com/tech-intel?fqdn=taboola.com" \
  -H "Authorization: Bearer fbl_your_key"
```

```json theme={null}
{
  "id": "f000000740279",
  "total": 558,
  "tech_intelligence": [
    {
      "PRODUCT": "Claude (Anthropic)",
      "PRODUCT_SLUG": "anthropic",
      "VENDOR": "Anthropic",
      "VENDOR_SLUG": "anthropic",
      "FILTER": "LLM APIs & apps",
      "FILTER_SLUG": "llm-apis-apps",
      "CATEGORY": "AI & Machine Learning",
      "CATEGORY_SLUG": "ai-machine-learning",
      "PILLAR_SLUG": "ai-machine-learning",
      "CONFIDENCE": "high",
      "RECENCY": "30d",
      "LAST_OBSERVED": "2026-10-28",
      "NATURE": "direct"
    }
  ],
  "next_cursor": "UFJPRCNjb21wdXRlLW9zLXZpcnR1YWxpc2F0aW9uIzIjMiNnb29nbGUtY2hyb21l"
}
```

| Field | What it is |
| - | - |
| `id` | The company's Firmable ID. |
| `total` | The company's full technology count. It's the same on every page. |
| `tech_intelligence` | Up to 100 technologies, ordered by category, then confidence. |
| `next_cursor` | Pass it back to get the next page. Missing on the last page. |

Each technology has:

| Field | What it is |
| - | - |
| `PRODUCT`, `PRODUCT_SLUG` | The product. |
| `VENDOR`, `VENDOR_SLUG` | Who makes it. |
| `FILTER`, `FILTER_SLUG` | The filter it falls under. |
| `CATEGORY`, `CATEGORY_SLUG` | Its category. |
| `PILLAR_SLUG` | Its pillar. |
| `CONFIDENCE` | How sure Firmable is that the company uses it: `high`, `medium` or `low`. |
| `RECENCY` | When it was last seen: `30d`, `90d` or `older`. |
| `LAST_OBSERVED` | The date it was last seen, as `YYYY-MM-DD`. `RECENCY` is the bucket for the same date. |
| `NATURE` | `direct` (seen directly) or `derived` (inferred from related signals). |

A company Firmable knows but has no technology data for returns `200` with `total` `0` and an empty
`tech_intelligence` array. This is not an error, and it's free.

## Get the next page

Each page holds up to 100 technologies. If more remain, the response has `next_cursor`. Send it back
as `cursor`, with the same company identifier:

```bash theme={null}
curl -G "https://api.firmable.com/tech-intel" \
  --data-urlencode "fqdn=taboola.com" \
  --data-urlencode "cursor=UFJPRCNjb21wdXRlLW9zLXZpcnR1YWxpc2F0aW9uIzIjMiNnb29nbGUtY2hyb21l" \
  -H "Authorization: Bearer fbl_your_key"
```

* The last page has no `next_cursor`. Stop when it's missing.
* Treat the cursor as an opaque string. Don't build or change it.

## Get every page

```bash cURL theme={null}
cursor=""
while :; do
  args=(--data-urlencode "fqdn=taboola.com")
  [ -n "$cursor" ] && args+=(--data-urlencode "cursor=$cursor")

  page=$(curl -sfG "https://api.firmable.com/tech-intel" "${args[@]}" \
    -H "Authorization: Bearer $FIRMABLE_API_KEY") || break

  echo "$page" | jq -c '.tech_intelligence[]'
  cursor=$(echo "$page" | jq -r '.next_cursor // empty')
  [ -z "$cursor" ] && break
done
```

```javascript JavaScript theme={null}
const getAllTech = async (fqdn) => {
  const technologies = [];
  let cursor;

  do {
    const params = new URLSearchParams({ fqdn });
    if (cursor) params.set("cursor", cursor);

    const res = await fetch(`https://api.firmable.com/tech-intel?${params}`, {
      headers: { Authorization: `Bearer ${process.env.FIRMABLE_API_KEY}` },
    });
    if (!res.ok) throw new Error(`${res.status}: ${(await res.json()).error}`);

    const page = await res.json();
    technologies.push(...page.tech_intelligence);
    cursor = page.next_cursor;
  } while (cursor);

  return technologies;
};

const technologies = await getAllTech("taboola.com");
```

## Pricing

| What | Credits |
| - | - |
| A company with technologies | 1 credit per technology, up to 5 per company |
| Later pages and repeat calls for the same company | Free |

* **You pay once per company.** The charge is per company per organisation. After the first call,
  every page and every repeat call for that company is free.
* **The charge uses `total`.** It doesn't depend on how many items a page returns, so it's the same
  whichever page you start on. Any company with 5 or more technologies costs 5 credits.
* **You need enough credits.** If your organisation can't cover the charge, the call returns `402`.

## Errors

Errors return a status code and a JSON body:

```json theme={null}
{ "error": "Company profile not found" }
```

| Status | When |
| - | - |
| `400` | No company identifier (`Missing required data!`), or an invalid cursor (`Invalid cursor.`) |
| `401` | A missing or invalid API key |
| `402` | Not enough credits for the charge |
| `403` | Tech Intelligence isn't on your plan, or the key is a partner key |
| `404` | Company not found (`Company profile not found`) |

## Using an AI agent

The Firmable MCP server has two tools for this: `get_tech_intel`, which pages through every
technology of one company, and `bulk_get_tech_intel`, which returns up to 20 technologies each for up
to 200 companies. See [Tech Intelligence tools](https://docs.firmable.com/mcp/tech-intelligence.md).


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