Use AI to summarize a company’s technology stack from a natural‑language prompt or an explicit domain.
Great for quick discovery and hypothesis generation — then verify deterministically with standard endpoints.
Base URL: https://api.salescaddy.ai/api
Endpoint
POST /ai/find-techstacks-for-company
Headers
Authorization: Bearer <token>— requiredX-On-Behalf-Of-User: [email protected]— required (AI actions are attributed to a user)
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | No* | — | Natural-language question (e.g., "What tech stack does Hilton use?") |
companyDomain | string | No* | — | Domain to focus on (e.g., hilton.com) |
size | int | No | 20 | Max number of stack items |
* Provide either prompt or companyDomain (or both).
Response (illustrative, trimmed)
[
{
"productId": "prod_snowflake",
"productName": "Snowflake",
"vendorDomain": "snowflake.com",
"category": "Data Warehouse",
"confidence": 0.86
},
{
"productId": "prod_datadog",
"productName": "Datadog",
"vendorDomain": "datadoghq.com",
"category": "Monitoring",
"confidence": 0.78
}
]
AI results are probabilistic. Always confirm with deterministic endpoints:
GET /companies/{domain}/products/pagedor CSV/JSONL variants.POST /companies/{domain}/products-in-usefor specificproductIds.GET /companies/{domain}/cohort/{cohort}/metrics/usagefor benchmarking.
Example — Prompt only
curl -sS -X POST "https://api.salescaddy.ai/api/ai/find-techstacks-for-company?prompt=What%20tech%20stack%20does%20Hilton%20use%3F&size=15" -H "Authorization: Bearer $TOKEN" -H "X-On-Behalf-Of-User: [email protected]"const url = "https://api.salescaddy.ai/api/ai/find-techstacks-for-company?prompt=What%20tech%20stack%20does%20Hilton%20use%3F&size=15";
const res = await fetch(url, { method: "POST", headers: {
Authorization: `Bearer ${process.env.TOKEN}`,
"X-On-Behalf-Of-User": "[email protected]"
}});
console.log(await res.json());import os, requests
r = requests.post("https://api.salescaddy.ai/api/ai/find-techstacks-for-company",
params={"prompt":"What tech stack does Hilton use?","size":15},
headers={"Authorization": f"Bearer {os.environ['TOKEN']}",
"X-On-Behalf-Of-User": "[email protected]"})
print(r.json())using System.Net.Http.Headers;
var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TOKEN);
http.DefaultRequestHeaders.Add("X-On-Behalf-Of-User","[email protected]");
var res = await http.PostAsync("https://api.salescaddy.ai/api/ai/find-techstacks-for-company?prompt=What%20tech%20stack%20does%20Hilton%20use%3F&size=15", null);
Console.WriteLine(await res.Content.ReadAsStringAsync());Example — Explicit company domain
curl -sS -X POST "https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=20" -H "Authorization: Bearer $TOKEN" -H "X-On-Behalf-Of-User: [email protected]"const url = "https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=20";
const res = await fetch(url, { method: "POST", headers: {
Authorization: `Bearer ${process.env.TOKEN}`,
"X-On-Behalf-Of-User": "[email protected]"
}});
console.log(await res.json());r = requests.post("https://api.salescaddy.ai/api/ai/find-techstacks-for-company",
params={"companyDomain":"hilton.com","size":20},
headers={"Authorization": f"Bearer {os.environ['TOKEN']}",
"X-On-Behalf-Of-User": "[email protected]"})
print(r.json())var res2 = await http.PostAsync("https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=20", null);
Console.WriteLine(await res2.Content.ReadAsStringAsync());Example — Filter output to a vendor family (client‑side)
curl -sS -X POST "https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=50" -H "Authorization: Bearer $TOKEN" -H "X-On-Behalf-Of-User: [email protected]" | jq -c '[.[] | select(.vendorDomain|test("microsoft|azure|office|microsoft.com"; "i"))]'const data = await (await fetch("https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=50", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TOKEN}`, "X-On-Behalf-Of-User":"[email protected]" }
})).json();
console.log(data.filter(x => /microsoft|azure|office|microsoft\.com/i.test(x.vendorDomain || "")));data = requests.post("https://api.salescaddy.ai/api/ai/find-techstacks-for-company",
params={"companyDomain":"hilton.com","size":50},
headers={"Authorization": f"Bearer {os.environ['TOKEN']}", "X-On-Behalf-Of-User":"[email protected]"}).json()
msft = [x for x in data if x.get("vendorDomain","").lower().find("microsoft") >= 0 or "azure" in x.get("productName","").lower()]
print(msft[:5])var payload = await (await http.PostAsync("https://api.salescaddy.ai/api/ai/find-techstacks-for-company?companyDomain=hilton.com&size=50", null)).Content.ReadAsStringAsync();
Console.WriteLine(payload); // filter client-side as neededPrompting tips
- Be specific about the company or segment (“Hilton hotels”, “Europe-based airlines”).
- Name product families or categories you care most about (“data stack”, “observability”, “marketing”).
- Add constraints (region, size, public/private) to steer results.
Good prompts
- “List the data engineering stack used by Marriott.”
- “What observability tools do US airlines use?”
- “Which collaboration tools are common at European hotel chains?”
Post‑processing (verification & enrichment)
- Verify candidates:
GET /companies/{domain}/products/pagedand/orPOST /companies/{domain}/products-in-use. - Benchmark with
GET /companies/{domain}/cohort/{cohort}/metrics/usage. - Drill down to product details via Products — Search / Vendor Products.
Errors
| Code | Meaning | How to fix |
|---|---|---|
| 400 | Bad request | Provide prompt or companyDomain; validate size (positive int). |
| 401 | Unauthorized | Provide/refresh Bearer token. |
| 403 | Forbidden | Include X-On-Behalf-Of-User; ensure your plan permits AI usage. |
| 404 | Not found | No stack candidates found for the request. |
| 429 | Rate limit exceeded | Retry with exponential backoff; respect Retry-After. |
| 500 | Internal server error | Retry later; contact support if persistent. |
