People · Jobs · Companies
Point your agent
at the job market.
900 million profiles, 90 million job postings with 10 million live on any given day, and 30 million companies. Ask your agent in plain English; it does the rest.
Set it up in the tool you already use
npx skills add MetixAI-Official/metix-skillsFour skills that teach any assistant the endpoints, the field vocabulary, and the two-step shape. They work in any agent, with MCP or without it. All four skills →
claude mcp add --scope user --transport http metix \
https://mira-api.metix.ai/mcp \
--header "Authorization: Bearer $METIX_KEY"Register the MCP server over streamable HTTP. Create a key first: the same one works for MCP, for the skills, and for the REST API. MCP setup →
codex mcp add metix \
--url https://mira-api.metix.ai/mcp \
--bearer-token-env-var METIX_KEYThe same server, registered with Codex. The key stays in your environment instead of being written into the config file, and the skills on the first tab install for Codex as well. MCP setup →
Free plan includes 100 Credits · No card
- 900M
- profiles
- 90M
- job postings10M active daily
- 30M
- companies
The data
Search is cheap enough to be careless with.
Every twenty-five results cost one Credit, and a search that finds nothing is not charged at all, so a thousand people come back for forty Credits and a query you are still tuning costs you nothing to get wrong. Records are where you spend, at about a quarter of a cent each on Pro. All three datasets take the same query tree, so what you learn on people works unchanged on jobs and companies.
- Natural language
- POST /v1/people-search
- Query Spec
- POST /v1/people/query
- Records
- POST /entity/v1/profiles/detail-by-id
- Id key
- profile_ids
{"where": {"all": [
{"field": "active_title", "match": "machine learning engineer"},
{"field": "city", "eq": "San Francisco"},
{"field": "is_working", "eq": true}
]}, "size": 25}- Query Spec
- POST /v1/jobs/query
- Records
- POST /entity/v1/jobs/detail-by-id
- Id key
- job_ids
- Index
- daily active postings
{"where": {"all": [
{"field": "title", "match": "data engineer"},
{"field": "country_iso_2", "eq": "US"},
{"field": "posted", "gte": "now-30d"}
]}, "size": 25}- Query Spec
- POST /v1/companies/query
- Records
- POST /entity/v1/companies/detail-by-id
- Id key
- company_ids
- Composers
- all · any · not
{"where": {"all": [
{"field": "industry", "match": "biotechnology"},
{"field": "hq_country", "match": "United States"},
{"field": "employees_count", "gte": 50},
{"field": "employees_count", "lte": 500}
]}, "size": 25}Where you work
It already speaks to your tools.
The MCP surface is the REST surface and nothing more, under the same key, the same limits and the same Credit rules. The strip at the top of this page registers it in one line. These are the two endpoints behind that line.
# Streamable HTTP, MCP 2025-03-26
https://mira-api.metix.ai/mcp
# SSE, MCP 2024-11-05, legacy
https://mira-api.metix.ai/sse
# Same key, same limits, same Credit rules as REST.Integration
From nothing to records in three calls.
01
Get a key
Sign up, open API keys, create one. Keys begin with metix_ and the key status route costs nothing to call.
export METIX_KEY="metix_xxxxxxxxxxxx"
# Free to call, tells you scopes and quota
GET /auth/key/status02
Search
Ask in natural language, or send a Query Spec tree. Either way you get back encrypted string ids and a cursor.
POST /v1/people-search
{"text": "ML engineers in San Francisco", "size": 25}03
Read the records
Send the ids to the detail route for the same dataset, up to 100 per call. Name the fields you want with _source, or omit it and take the default set.
POST /entity/v1/profiles/detail-by-id
{"profile_ids": ["PavstrIWX_ZuAc2AOAZXHA"]}How it behaves
The limits are published, not discovered.
- 2
- calls to a record
- 10,000
- ids per search page
- 100
- ids per detail call
- 0
- credits for a refused query
A query is translated before anything is charged, so a request refused for an unknown field or a malformed tree costs nothing. Validation failures, timeouts, upstream 5xx responses and not_found rows are not charged either.
Rate limits, page sizes, batch ceilings and the one case where paging can miss a record are all written down before you meet them. Every response arrives in the same envelope, so your error path is the same code as your success path.
Pricing
Plans change your allowance, not your rates.
A search costs one Credit per twenty-five results and a record costs one per five, on every plan. What a bigger plan buys is a bigger monthly allowance, so moving up changes your budget and never your code.
Free
$0/ mo
100 Credits, one time, valid 30 days
2,500 searches or 500 records
Go
$9/ mo
300 Credits per month
7,500 searches or 1,500 records
Plus
$19/ mo
1,000 Credits per month
25,000 searches or 5,000 records
Pro
$59/ mo
5,000 Credits per month
125,000 searches or 25,000 records
What a call debits
- Query Spec search
- ceil(returned ids / 25)
- Natural-language people search
- 5 + ceil(returned ids / 25)
- Detail by id
- ceil(found records / 5)
Contact enrichment is announced and not open. It is not callable, not billable, and no rate for it is published until it ships.
Where the data comes from
Nothing leaves the index until you name it.
A search hands back encrypted identifiers and nothing else. No name, no employer, no posting text crosses the wire until you ask for a specific id, which is why the record you are charged for and the record you actually read are always the same one.
Name the fields you want with _source, or omit it and take the default set. Either way the response holds exactly what you asked for: a field this API does not publish is refused outright rather than dropped from the payload, so nothing you build against can silently stop arriving.
Start with 100 Credits.
Which is 2,500 searches, free, on a key you create yourself in about a minute. No card, and no sales call.