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/paged
or CSV/JSONL variants.POST /companies/{domain}/products-in-use
for specificproductId
s.GET /companies/{domain}/cohort/{cohort}/metrics/usage
for 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 needed
Prompting 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/paged
and/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. |