curl --request POST \
--url https://app.jolts.xyz/api/companies/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"query": "Companies seeking EV charging equipment",
"filters": {
"countries": [
"CA",
"US"
],
"exclude_domains": [
"example.com"
]
},
"limit": 10,
"background": true
}
'import requests
url = "https://app.jolts.xyz/api/companies/search"
payload = {
"query": "Companies seeking EV charging equipment",
"filters": {
"countries": ["CA", "US"],
"exclude_domains": ["example.com"]
},
"limit": 10,
"background": True
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: 'Companies seeking EV charging equipment',
filters: {countries: ['CA', 'US'], exclude_domains: ['example.com']},
limit: 10,
background: true
})
};
fetch('https://app.jolts.xyz/api/companies/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://app.jolts.xyz/api/companies/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"Companies seeking EV charging equipment\",\n \"filters\": {\n \"countries\": [\n \"CA\",\n \"US\"\n ],\n \"exclude_domains\": [\n \"example.com\"\n ]\n },\n \"limit\": 10,\n \"background\": true\n}"
response = http.request(request)
puts response.read_body{
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
},
"coverage_status": "partial",
"retrieval": "lexical",
"as_of": "2023-11-07T05:31:56Z",
"next_cursor": "<string>",
"withheld_units": 1,
"delivery_unit": "company",
"companies": [
{
"id": 2,
"name": "<string>",
"limitations": [
"<string>"
],
"demand_class": "explicit_request",
"why_it_may_matter": "<string>",
"match": {
"query": "<string>",
"observation_ids": [
2
]
},
"observations": [
{
"id": 456,
"kind": "facility_expansion",
"observed_fact": "Example Logistics announced a new distribution warehouse.",
"why_it_may_matter": "A new warehouse may need handling equipment; no purchasing decision is confirmed.",
"demand_class": "proxy",
"country": "CA",
"confidence": 0.8,
"occurred_at": "2026-09-20T00:00:00Z",
"observed_at": "2026-09-21T12:00:00Z",
"expires_at": null,
"evidence": [
{
"source_uri": "https://logistics.example/news/warehouse",
"excerpt": "We are opening a new distribution warehouse.",
"occurred_at": "2026-09-20T00:00:00Z",
"observed_at": "2026-09-21T12:00:00Z"
}
]
}
]
}
],
"ranking": "query_relevance_baseline",
"candidate_limit": 100,
"coverage": {
"requested_companies": 1,
"returned_companies": 1,
"stop_reason": "<string>",
"limitations": [
"<string>"
]
}
}{
"usage": {
"id": 789,
"status": "pending",
"request_key": "first-company-search",
"request_units": 0,
"delivered_units": 0,
"fresh_evidence_units": 0
},
"request_allowance": {
"window_seconds": 18000,
"window_remaining": 99,
"weekly_remaining": 499
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}Search companies
Build a prospect shortlist from company activity relevant to what you sell. Describe the need in query; use filters for exact constraints and exclude_domains to leave out existing customers. Natural-language planning does not broaden the supported evidence kinds or countries.
Each company includes up to three observations with sources, timestamps, and an explanation of why the activity may matter. Ranking is not a buying probability. Coverage is partial, and an empty list does not prove no matching company exists.
Set background to true to receive an operation ID, then poll GET /api/usages/. Reuse the same Idempotency-Key only for identical retries. For the next page, keep query, filters and limit unchanged, pass next_cursor as cursor, and use a new key.
See the quickstart, filtering and pagination, or MCP tools.
curl --request POST \
--url https://app.jolts.xyz/api/companies/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"query": "Companies seeking EV charging equipment",
"filters": {
"countries": [
"CA",
"US"
],
"exclude_domains": [
"example.com"
]
},
"limit": 10,
"background": true
}
'import requests
url = "https://app.jolts.xyz/api/companies/search"
payload = {
"query": "Companies seeking EV charging equipment",
"filters": {
"countries": ["CA", "US"],
"exclude_domains": ["example.com"]
},
"limit": 10,
"background": True
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: 'Companies seeking EV charging equipment',
filters: {countries: ['CA', 'US'], exclude_domains: ['example.com']},
limit: 10,
background: true
})
};
fetch('https://app.jolts.xyz/api/companies/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://app.jolts.xyz/api/companies/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"Companies seeking EV charging equipment\",\n \"filters\": {\n \"countries\": [\n \"CA\",\n \"US\"\n ],\n \"exclude_domains\": [\n \"example.com\"\n ]\n },\n \"limit\": 10,\n \"background\": true\n}"
response = http.request(request)
puts response.read_body{
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
},
"coverage_status": "partial",
"retrieval": "lexical",
"as_of": "2023-11-07T05:31:56Z",
"next_cursor": "<string>",
"withheld_units": 1,
"delivery_unit": "company",
"companies": [
{
"id": 2,
"name": "<string>",
"limitations": [
"<string>"
],
"demand_class": "explicit_request",
"why_it_may_matter": "<string>",
"match": {
"query": "<string>",
"observation_ids": [
2
]
},
"observations": [
{
"id": 456,
"kind": "facility_expansion",
"observed_fact": "Example Logistics announced a new distribution warehouse.",
"why_it_may_matter": "A new warehouse may need handling equipment; no purchasing decision is confirmed.",
"demand_class": "proxy",
"country": "CA",
"confidence": 0.8,
"occurred_at": "2026-09-20T00:00:00Z",
"observed_at": "2026-09-21T12:00:00Z",
"expires_at": null,
"evidence": [
{
"source_uri": "https://logistics.example/news/warehouse",
"excerpt": "We are opening a new distribution warehouse.",
"occurred_at": "2026-09-20T00:00:00Z",
"observed_at": "2026-09-21T12:00:00Z"
}
]
}
]
}
],
"ranking": "query_relevance_baseline",
"candidate_limit": 100,
"coverage": {
"requested_companies": 1,
"returned_companies": 1,
"stop_reason": "<string>",
"limitations": [
"<string>"
]
}
}{
"usage": {
"id": 789,
"status": "pending",
"request_key": "first-company-search",
"request_units": 0,
"delivered_units": 0,
"fresh_evidence_units": 0
},
"request_allowance": {
"window_seconds": 18000,
"window_remaining": 99,
"weekly_remaining": 499
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retry_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 1
},
"usage": {
"id": 2,
"status": "pending",
"request_key": "<string>",
"request_units": 1,
"delivered_units": 1,
"fresh_evidence_units": 1
},
"request_allowance": {
"window_seconds": 1,
"window_remaining": 1,
"weekly_remaining": 1
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Unique operation key. Reuse only for identical retries, including across HTTP/MCP. Each new page needs a new key.
Body
1 - 500Lists use OR within a field, AND between fields; exclusions win. Each list permits at most 100 values. IDs must be positive integers. Domains are hostnames, not URLs; case, surrounding whitespace and trailing dots normalize. Empty lists do not restrict. Only current evidenced domain relationships match.
Show child attributes
Show child attributes
Maximum page size is subscription-owned: builder 25, professional 50.
x >= 1Opaque cursor. Keep query, filters and limit unchanged; use a new request key for each page.
Queue the same company operation through Active Job; poll GET /api/usages/{id}. This option does not change idempotent request identity.
Response
Completed company page (may be empty).
Show child attributes
Show child attributes
Show child attributes
Show child attributes
"partial"lexical, hybrid x >= 0company, observation Show child attributes
Show child attributes
"query_relevance_baseline"Show child attributes
Show child attributes