Your first API request
Bring company intelligence into your own tools. Read company profiles, find jobs, and retrieve research with a single API key.
https://www.enterpriseaitrends.com/api/v1Create an API key
Sign in to your account, then create or select an organization. Under API keys, choose a personal key, give it a name, and select an expiry. Copy the key when it appears; it is only shown once.
Get your API keyMake a request
Set FDE_API_KEY in your terminal or secret manager, then check the identity associated with your key.
export FDE_API_KEY="YOUR_API_KEY"
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/me"A successful request returns HTTP 200 and a JSON body. For a personal key:
{
"data": {
"type": "user",
"userId": "user_example",
"email": null,
"name": null,
"organizationId": "org_example"
}
}Explore the catalog
Fetch a page of companies. Use an id, slug, or domain from the response to look up a company, find its jobs, or retrieve its research.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/companies?limit=5"Get started
Authentication
Every endpoint in this reference requires an API key. Send it in one of these headers on each request:
X-Api-Key: YOUR_API_KEY
Authorization: Bearer YOUR_API_KEYKeep the key on your server or in a secret manager. Do not put it in a query string, commit it to source control, or embed it in a public website.
| Field | Description |
|---|---|
Personal keypk_live_… | Bound to your user and one organization. You must remain a member of that organization for the key to work. |
Organization keysk_live_… | Bound to an organization. Organization owners and admins can create these keys for shared integrations. |
Both key types can read the catalog endpoints below. List management requires a personal key. Set an expiry of 7, 30, 90, or 365 days when creating a key (default: 90 days). Revoke a key from your account when you no longer need it. Expired or revoked keys return 401.
Get started
Pagination & filtering
Company and job lists return a data array and a meta object. Single-record endpoints return an object under data. JSON field names use camelCase; query parameters use the names listed in each endpoint.
{
"data": [],
"meta": {
"page": 1,
"limit": 20,
"total": 0,
"totalPages": 0
}
}| Field | Description |
|---|---|
page / limitnumber | The page number and effective page size after defaults and clamping are applied. |
total / totalPagesnumber | Matching record count and page count. The result-window limit still applies even if totalPages is larger. |
Pages start at 1. Companies default to 50 items per page (maximum 100); jobs default to 20 (maximum 50). Missing, nonnumeric, zero, or negative pagination values fall back to the defaults.
A page cannot start at or beyond result 1001. Deeper requests return 400 RESULT_WINDOW_EXCEEDED. Search queries return at most 100 matches. Narrow your filters instead of continuing beyond these limits.
Use --data-urlencode with cURL to safely encode filter values. For example, find remote engineering roles:
curl --fail-with-body --get \
-H "X-Api-Key: $FDE_API_KEY" \
--data-urlencode "role_category=engineering" \
--data-urlencode "remote_only=true" \
--data-urlencode "limit=10" \
"https://www.enterpriseaitrends.com/api/v1/jobs"Get started
Rate limits
The API allows 100 requests per minute. Personal keys share a request budget per user; organization keys have a budget per key. When that budget is exhausted, requests return 429 RATE_LIMITED.
| Field | Description |
|---|---|
X-RateLimit-Limitinteger | Request budget for the current window: 100. |
X-RateLimit-Remaininginteger | Requests remaining in the current window. |
Retry-Afterinteger · on 429 | Seconds to wait before retrying. Pause requests for this duration. |
X-Api-Tierstring | token for authenticated API requests. |
Cache responses where practical and avoid tight retry loops. Key verification also has a shared limit of 600 checks per minute per key across services; exceeding it can return 401. If a valid key starts failing during a burst of requests, pause for a minute before trying again.
Get started
Errors
Check the HTTP status before reading data. API errors use an error object with a stable code and a human-readable message.
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid, expired or revoked API key"
}
}| Field | Description |
|---|---|
401 · UNAUTHORIZEDAuthentication | Missing, malformed, invalid, expired, or revoked key; a personal key also fails if its owner leaves the organization. Check your header and key in your account. |
400 · RESULT_WINDOW_EXCEEDEDPagination | The requested page starts beyond the allowed result window. Narrow the query or request an earlier page. |
404 · NOT_FOUNDMissing resource | The requested record or stored research report was not found. Check the identifier; not every company has research. |
429 · RATE_LIMITEDRate limit | Wait for the number of seconds in Retry-After before sending another request. |
500 · INTERNALServer error | The API could not complete the request. Retry after a delay. If it persists, check the identifier and retain the status and response for troubleshooting. |
API reference
Read the catalog
Catalog endpoints use GET and return JSON. Company list management follows the catalog reference. Examples use fictional records and counts; retrieve live identifiers from the list endpoints. Profile and research fields may be null when information is unavailable.
/meCheck your identity
Check which organization your key belongs to. This is a useful first request when setting up an integration or troubleshooting a key.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/me"| Field | Description |
|---|---|
typestring | user for a personal key; organization for an organization key. |
organizationIdstring | null | Organization the key is bound to. |
userIdstring · personal keys | The personal key’s owner. |
email / namestring | null · personal keys | Profile information may be null on key-only requests. If profile lookup fails, only type and userId are returned. |
Example response 200 · application/json
{
"data": {
"type": "user",
"userId": "user_example",
"email": null,
"name": null,
"organizationId": "org_example"
}
}/companiesList companies
Browse active, visible companies or find companies by search and classification tags. Without a search term, results are ordered by active job count, profile completeness, then name.
| Field | Description |
|---|---|
pageinteger | Page number, starting at 1. Default: 1. |
limitinteger | Items per page. Default: 50; maximum: 100. Larger values are clamped. |
searchstring | Search by name or a description of what the company does. Search returns up to 100 ranked matches. |
organization_typestring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
ecosystemstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
activitystring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
specializationstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
marketstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
customer_segmentstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
delivery_modelstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
revenue_modelstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
listing_statusstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
funding_stagestring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
funding_tierstring | Comma-separated tag slugs from GET /tags. Matches any supplied slug within this dimension; separate dimensions must all match. |
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/companies?limit=1"| Field | Description |
|---|---|
parentCompanyId / entityScopestring | null | Reviewed subdivision identity; a shared host does not imply the same organization. |
classificationAssessmentsobject | null | Per-dimension known, unknown or not_applicable status with an evidence-based reason. Null before ontology assessment. |
idstring | Company UUID. Use this or the slug to retrieve the company. |
name / slugstring | Display name and URL slug. |
domain / website / logoUrlstring | null | Company domain, website URL, and logo URL. |
description / headcountRange / hqLocationstring | null | Company profile and headquarters. Missing profile facts are null. |
totalFunding / latestValuation / annualRevenuestring | null | Display text, not numeric currency values. Do not assume these can be parsed as numbers. |
sourceKind / sourcePlatform / sourceUrlstring | null | Preferred active job source: its kind, platform, and URL. Null when no source is available. |
activeJobCountnumber | Number of active jobs at this company. |
tagsarray<object> | Classification tags, each with dimension, value (display label), and slug (filter value). May be empty. |
matchType / matchStrength / matchedTermsoptional | Ranked search results may add matchType (keyword, semantic, or both), matchStrength (strong, good, or weak), and matchedTerms (string array). These fields are absent from ordinary listings and may be absent on search fallback results. |
Example response 200 · application/json
{
"data": [
{
"id": "3c123740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "Example AI",
"slug": "example-ai",
"domain": "example.com",
"website": "https://example.com",
"logoUrl": null,
"headcountRange": "11-50",
"description": "Tools for building AI applications.",
"hqLocation": "New York, NY",
"totalFunding": null,
"latestValuation": null,
"annualRevenue": null,
"sourceKind": null,
"sourcePlatform": null,
"sourceUrl": null,
"activeJobCount": 1,
"tags": []
}
],
"meta": {
"page": 1,
"limit": 1,
"total": 1,
"totalPages": 1
}
}/companies/{id}Get a company
Retrieve a company’s profile, classification tags, and job count. Use an id or slug returned by the company list.
| Field | Description |
|---|---|
idstring · required | Company UUID or slug. |
Set COMPANY_ID to a value from the corresponding list response before running this request.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/companies/$COMPANY_ID"| Field | Description |
|---|---|
parentCompanyId / entityScopestring | null | Reviewed subdivision identity; a shared host does not imply the same organization. |
classificationAssessmentsobject | null | Per-dimension known, unknown or not_applicable status with an evidence-based reason. Null before ontology assessment. |
idstring | Company UUID. Use this or the slug to retrieve the company. |
name / slugstring | Display name and URL slug. |
domain / website / logoUrlstring | null | Company domain, website URL, and logo URL. |
description / headcountRange / hqLocationstring | null | Company profile and headquarters. Missing profile facts are null. |
totalFunding / latestValuation / annualRevenuestring | null | Display text, not numeric currency values. Do not assume these can be parsed as numbers. |
sourceKind / sourcePlatform / sourceUrlstring | null | Preferred active job source: its kind, platform, and URL. Null when no source is available. |
activeJobCountnumber | Number of active jobs at this company. |
tagsarray<object> | Classification tags, each with dimension, value (display label), and slug (filter value). May be empty. |
oneLiner / keyInvestors / linkedinUrl / careersUrlstring | null | Short description, investor information, LinkedIn URL, and careers URL. |
enrichmentUpdatedAt / lastRunAtstring | null | ISO 8601 timestamps for the last profile enrichment and job-source run, respectively. |
Example response 200 · application/json
{
"data": {
"id": "3c123740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "Example AI",
"slug": "example-ai",
"domain": "example.com",
"website": "https://example.com",
"logoUrl": null,
"headcountRange": "11-50",
"description": "Tools for building AI applications.",
"hqLocation": "New York, NY",
"totalFunding": null,
"latestValuation": null,
"annualRevenue": null,
"sourceKind": null,
"sourcePlatform": null,
"sourceUrl": null,
"activeJobCount": 1,
"tags": [],
"oneLiner": "Tools for AI developers.",
"keyInvestors": null,
"linkedinUrl": null,
"careersUrl": "https://example.com/careers",
"enrichmentUpdatedAt": null,
"lastRunAt": null
}
}/jobsList jobs
Find active jobs at visible companies. Without a search term, the most recently observed new jobs come first. Combine filters to narrow the results.
| Field | Description |
|---|---|
pageinteger | Page number, starting at 1. Default: 1. |
limitinteger | Items per page. Default: 20; maximum: 50. Larger values are clamped. |
searchstring | Search for a role or describe the work you want to find. Search returns up to 100 ranked matches. |
companystring | Exact company slug, such as the slug returned by GET /companies. Not a UUID or domain. |
role_categorystring | Exact category: fde, solutions_engineer, csm, tam, sales_engineer, implementation, professional_services, sales, engineering, product, design, marketing, data, operations, finance, hr, legal, or other. |
client_facingboolean | Set to true for fde, solutions_engineer, csm, tam, sales_engineer, implementation, professional_services, and sales. Ignored when role_category is supplied. |
locationstring | Case-insensitive match within the location text. |
remote_onlyboolean | Set to true to include only jobs whose remotePolicy is remote. Hybrid jobs are excluded. Boolean filters only enable on the literal value true. |
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/jobs?limit=1"| Field | Description |
|---|---|
id / titlestring | Job UUID and job title. |
roleCategory / departmentstring | null | Role classification and department. |
location / remotePolicystring | null | Location text and remote policy. The remote_only filter matches remote exactly. |
salaryMin / salaryMaxnumber | null | Published salary range when available. |
salaryCurrencystring | null | Currency associated with the salary range. |
applyUrlstring | URL of the application page. |
firstSeenAt / lastSeenAtstring | ISO 8601 timestamps for when the job was first and last observed; not publication dates. |
companyName / companySlugstring | Employer name and slug. Use companySlug in the company filter. |
companyLogoUrlstring | null | Employer logo. |
companyDomain / companyDescription / companyHqLocation / companyTotalFundingstring | null | Employer profile details. Funding is display text, not a number. |
matchType / matchStrength / matchedTermsoptional | Ranked search results may add matchType (keyword, semantic, or both), matchStrength (strong, good, or weak), and matchedTerms (string array). These fields are absent from ordinary listings and may be absent on search fallback results. |
Example response 200 · application/json
{
"data": [
{
"id": "b17ff1e4-90fc-4a15-b659-521d0773a2b1",
"title": "Software Engineer",
"roleCategory": "engineering",
"department": "Engineering",
"location": "New York, NY",
"remotePolicy": "hybrid",
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": "USD",
"applyUrl": "https://example.com/careers/engineer",
"firstSeenAt": "2026-09-01T12:00:00.000Z",
"lastSeenAt": "2026-09-08T12:00:00.000Z",
"companyName": "Example AI",
"companySlug": "example-ai",
"companyLogoUrl": null,
"companyDomain": "example.com",
"companyDescription": "Tools for building AI applications.",
"companyHqLocation": "New York, NY",
"companyTotalFunding": null
}
],
"meta": {
"page": 1,
"limit": 1,
"total": 1,
"totalPages": 1
}
}/jobs/{id}Get a job
Retrieve a job’s description and application URL. Check status before displaying the listing: a saved job can still be returned after it is no longer active.
| Field | Description |
|---|---|
idstring · required | Job UUID returned by GET /jobs. |
Set JOB_ID to a value from the corresponding list response before running this request.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/jobs/$JOB_ID"| Field | Description |
|---|---|
id / titlestring | Job UUID and job title. |
roleCategory / departmentstring | null | Role classification and department. |
location / remotePolicystring | null | Location text and remote policy. The remote_only filter matches remote exactly. |
salaryMin / salaryMaxnumber | null | Published salary range when available. |
salaryCurrencystring | null | Currency associated with the salary range. |
applyUrlstring | URL of the application page. |
firstSeenAt / lastSeenAtstring | ISO 8601 timestamps for when the job was first and last observed; not publication dates. |
companyName / companySlugstring | Employer name and slug. Use companySlug in the company filter. |
companyLogoUrlstring | null | Employer logo. |
descriptionstring | null | Full job description; may contain HTML. Sanitize before rendering as HTML. |
statusstring | Current job status, such as active. |
companyWebsitestring | null | Employer website. This detail response does not include the list-only companyDomain, companyDescription, companyHqLocation, or companyTotalFunding fields. |
Example response 200 · application/json
{
"data": {
"id": "b17ff1e4-90fc-4a15-b659-521d0773a2b1",
"title": "Software Engineer",
"roleCategory": "engineering",
"department": "Engineering",
"location": "New York, NY",
"remotePolicy": "hybrid",
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": "USD",
"applyUrl": "https://example.com/careers/engineer",
"firstSeenAt": "2026-09-01T12:00:00.000Z",
"lastSeenAt": "2026-09-08T12:00:00.000Z",
"description": "Build tools for AI developers.",
"status": "active",
"companyName": "Example AI",
"companySlug": "example-ai",
"companyLogoUrl": null,
"companyWebsite": "https://example.com"
}
}/statsGet catalog statistics
Get a snapshot of the catalog’s job and company counts. No parameters are required.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/stats"| Field | Description |
|---|---|
totalJobsnumber | Active jobs at visible companies. |
totalCompaniesnumber | Active, visible companies. |
newTodaynumber | Jobs first observed in the last 24 hours at visible companies, including jobs that have since become inactive. This is a rolling window, not a calendar day. |
Example response 200 · application/json
{
"data": {
"totalJobs": 1250,
"totalCompanies": 240,
"newToday": 32
}
}/deep-research/{domain}Get company research
Read a company’s existing research report, including its market, products, people, and funding. Coverage varies by company; this request does not generate a new report.
| Field | Description |
|---|---|
domainstring · required | Exact company domain returned by GET /companies, without a scheme or path. |
Set COMPANY_DOMAIN to a value from the corresponding list response before running this request.
curl --fail-with-body \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/v1/deep-research/$COMPANY_DOMAIN"| Field | Description |
|---|---|
companyobject | Company identity: id, name, domain, and slug. |
research.summary / oneLinerstring | null | Company overview and short description. All remaining fields below are inside research. |
foundedYear / employeeCountnumber | null | Founding year and reported employee count. |
hqCity / hqState / hqCountrystring | null | Headquarters details. |
businessModel / marketAnalysis / targetCustomersstring | null | Business model, market context, and customer profile. |
founders / leadershiparray<object> | null | People with name and title. |
keyProducts / competitors / techStack / notableCustomersarray<string> | null | Reported products, competitors, technologies, and customers. |
fundingRoundsarray<object> | null | Entries with date, amount, round, and investors (string array). Dates and amounts are report text. |
recentNewsarray<object> | null | Entries with title, date, and summary; url, id, category, and citations (objects with url and authority) may also be present. |
markdownReport / screenshotUrl / processorTierstring | null | Full report in Markdown, an optional screenshot URL, and the stored research tier. |
lastFullResearchAt / lastFastResearchAt / enrichedAtstring | null | ISO 8601 research timestamps. Use these to assess freshness. |
Example response 200 · application/json
{
"data": {
"company": {
"id": "3c123740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "Example AI",
"domain": "example.com",
"slug": "example-ai"
},
"research": {
"summary": "Tools for building AI applications.",
"oneLiner": null,
"foundedYear": null,
"hqCity": null,
"hqState": null,
"hqCountry": null,
"employeeCount": null,
"businessModel": null,
"founders": null,
"leadership": null,
"marketAnalysis": null,
"targetCustomers": null,
"keyProducts": null,
"recentNews": null,
"competitors": null,
"techStack": null,
"fundingRounds": null,
"notableCustomers": null,
"markdownReport": "# Example AI\n\nTools for building AI applications.",
"screenshotUrl": null,
"processorTier": "base",
"lastFullResearchAt": "2026-09-01T12:00:00.000Z",
"lastFastResearchAt": null,
"enrichedAt": "2026-09-01T12:00:00.000Z"
}
}
}API reference · Personal keys
Manage company lists
Group companies into named lists for research, job hunting, or a report about the companies you follow. These endpoints use /api/lists, outside the catalog’s /api/v1 base path.
pk_live_…). Lists belong to your user, across your organizations. An organization key returns 403. A personal key still requires membership in the organization it was created for.Every JSON read and write is owner-only, including for public lists. Public visibility makes the website page at /lists/{slug} shareable; it does not grant other API callers access. Website sessions can use these endpoints too; session writes require a matching Origin header.
Set FDE_API_KEY to your personal key. After creating a list, set LIST_ID to its returned UUID. Set COMPANY_ID to a UUID from the catalog’s company list.
/api/listsGet your lists
Returns a data array of your lists, with the default list first and then the most recently updated lists. Up to 100 lists are returned; this endpoint is not paginated. Add ?companyId=UUID to include a hasCompany boolean on each list.
curl --fail-with-body -X GET \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists"Example response 200 · JSON
{
"data": [
{
"id": "db113740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "AI infrastructure",
"slug": "ai-infrastructure-a94c12",
"description": "Companies to follow",
"visibility": "private",
"isDefault": false,
"itemCount": 1,
"createdAt": "2026-09-08T12:00:00.000Z",
"updatedAt": "2026-09-08T12:00:00.000Z"
}
]
}/api/listsCreate a list
Supply name (required, 1–80 characters after trimming), description (optional, up to 500 characters or null), and visibility (private or public; defaults to private). Names must be unique within your account. You can have up to 100 lists, including Saved.
curl --fail-with-body -X POST \
-H "X-Api-Key: $FDE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"AI infrastructure","description":"Companies to follow","visibility":"private"}' \
"https://www.enterpriseaitrends.com/api/lists"/api/lists/{id}Get a list
Returns the list’s metadata under data. Use the id from a create or list response, not the shareable URL slug.
curl --fail-with-body -X GET \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID"Example response 200 · JSON
{
"data": {
"id": "db113740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "AI infrastructure",
"slug": "ai-infrastructure-a94c12",
"description": "Companies to follow",
"visibility": "private",
"isDefault": false,
"itemCount": 1,
"createdAt": "2026-09-08T12:00:00.000Z",
"updatedAt": "2026-09-08T12:00:00.000Z"
}
}/api/lists/{id}Edit a list
Supply at least one of name, description, or visibility, using the same validation as creation. Set description to null or an empty string to clear it. Renaming keeps the list’s slug and shared URL unchanged. Returns the updated list under data.
curl --fail-with-body -X PATCH \
-H "X-Api-Key: $FDE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Companies to research","description":null}' \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID"/api/lists/{id}Delete a list
Deletes the list and its memberships. Company records are retained. Returns { data: { deleted: true } }. Repeating the deletion returns 404 because the list no longer exists.
curl --fail-with-body -X DELETE \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID"/api/lists/{id}/items/{companyId}Add a company
Add an active, visible company by UUID. No body is required. A list holds up to 1,000 companies. Repeating an add succeeds even when the list is full, without duplicating the membership or changing its position.
curl --fail-with-body -X PUT \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID/items/$COMPANY_ID"Example response 200 · JSON
{
"data": {
"listId": "db113740-3ef5-4d1e-b701-08a8f2d30a12",
"companyId": "3c123740-3ef5-4d1e-b701-08a8f2d30a12",
"added": true
}
}/api/lists/{id}/items/{companyId}Remove a company
Remove a membership without deleting the company. No body is required. Returns { data: { listId, companyId, added: false } }. Removing an already-absent company succeeds as long as you still own the list.
curl --fail-with-body -X DELETE \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID/items/$COMPANY_ID"/api/lists/saveSave or unsave in your default list
Supply companyId (UUID) and saved (boolean). Ensures a default Saved list exists, then adds or removes the company. If you already have a list named Saved, it becomes the default. Renaming a default list keeps it as the quick-save destination. Implicit creation obeys the 100-list limit, and adding obeys the 1,000-company limit.
curl --fail-with-body -X POST \
-H "X-Api-Key: $FDE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"companyId":"3c123740-3ef5-4d1e-b701-08a8f2d30a12","saved":true}' \
"https://www.enterpriseaitrends.com/api/lists/save"Example response 200 · JSON
{
"data": {
"listId": "db113740-3ef5-4d1e-b701-08a8f2d30a12",
"listSlug": "saved-a94c12",
"saved": true
}
}/api/lists/{id}/itemsRead the companies in a list
Use this endpoint to build a report or fetch the profiles in a saved list. Results are ordered by when the company was added (newest first), then by company UUID to break ties.
Pass page (default 1, range 1–1,000) and limit (default 50, range 1–100). Both must be positive integers. Invalid, repeated, or out-of-range pagination values return 400. A page beyond the available results returns an empty array and the same total.
curl --fail-with-body -X GET \
-H "X-Api-Key: $FDE_API_KEY" \
"https://www.enterpriseaitrends.com/api/lists/$LIST_ID/items?page=1&limit=50"The data array contains company profiles. meta contains page, limit, total, and totalPages. Increment page until you reach totalPages. Pagination is consistent while membership is unchanged; additions or removals between requests can shift pages.
{
"data": [
{
"id": "3c123740-3ef5-4d1e-b701-08a8f2d30a12",
"name": "Example AI",
"slug": "example-ai",
"domain": "example.com",
"website": "https://example.com",
"logoUrl": null,
"description": "Tools for AI developers.",
"oneLiner": null,
"hqLocation": null,
"totalFunding": null,
"latestValuation": null,
"headcountRange": null,
"activeJobCount": 1,
"addedAt": "2026-09-08T12:00:00.000Z"
}
],
"meta": {
"page": 1,
"limit": 50,
"total": 1,
"totalPages": 1
}
}Only active, visible companies are returned. List metadata’s itemCount counts all saved memberships, including unavailable companies; the paginated total counts only the companies you can retrieve.
List response fields
List metadata includes id, name, slug, description (string or null), visibility (private or public), isDefault (boolean), and ISO 8601 createdAt and updatedAt timestamps. List and detail reads include itemCount; create and update responses instead include the owner’s userId.
Member records include company identity, website and profile fields, activeJobCount (number), and addedAt (ISO 8601). Profile facts may be null; funding and valuation are display strings rather than numeric amounts.
Limits and errors
All successful list operations return HTTP 200 with a data value. Errors use { error: { code, message } }. List responses are not cached.
| Status / code | What to do |
|---|---|
400 · BAD_REQUEST | Check the JSON body, UUIDs, names, description, visibility, and pagination. Supply at least one supported field when editing. |
401 · UNAUTHORIZED | Supply a valid personal key or sign in. Expired/revoked keys and keys whose owners lost organization membership fail authentication. |
403 · FORBIDDEN | Use a personal key instead of an organization key. For session writes, send the site’s Origin. |
404 · NOT_FOUND | The list is missing or belongs to another user, or the company cannot be added. Private list existence is not disclosed. |
409 · DUPLICATE | Choose another name; you already own a list with that name. |
413 · PAYLOAD_TOO_LARGE | Keep JSON request bodies within 16 KiB. |
422 · LIMIT_EXCEEDED | Remove a list or company before creating another. Existing-member add retries still succeed at capacity. |
429 · RATE_LIMITED | Wait for the number of seconds in Retry-After before retrying. |
500 · INTERNAL | The request could not complete. Retry after a delay; verify a create succeeded before retrying it to avoid duplicate-name errors. |
List endpoints share a separate budget of 100 requests per 60-second window per user, across personal keys and sessions. The budget is shared across server instances. Read X-RateLimit-Limit and X-RateLimit-Remaining; 429 responses also include Retry-After. Authentication and origin failures occur before this budget is charged.