{"openapi":"3.1.0","info":{"title":"Prescient AI Public API","version":"2026-08-24","description":"A public, read-only API for discovering Prescient AI product information, integrations, research, case studies, and educational content. No credentials are required. This API does not expose customer data or modify a Prescient account.","termsOfService":"https://prescientai.com/legal/terms-of-service","contact":{"name":"Prescient AI","url":"https://prescientai.com/contact"},"x-versioning-policy":"Stable operations live under /api/v1. Breaking changes are released under a new major path. Additive response fields may be introduced without a major version change.","x-deprecation-policy":"Prescient AI provides at least 180 days of notice before removing a stable operation. Deprecated responses use the Deprecation and Sunset headers and a Link header identifying the successor version."},"jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","servers":[{"url":"https://prescientai.com","description":"Production"},{"url":"https://prescientai.com/sandbox","description":"Public read-only sandbox"},{"url":"http://localhost:4321","description":"Local development"}],"tags":[{"name":"Discovery","description":"Search and retrieve public content."},{"name":"Integrations","description":"Inspect Prescient AI's supported data sources."},{"name":"Operations","description":"Service status and bulk read operations."}],"paths":{"/api/v1":{"get":{"operationId":"getApiIndex","summary":"Get API capabilities","description":"Returns the current public API version, authentication policy, and canonical endpoint links.","tags":["Operations"],"responses":{"200":{"description":"API index.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}}}}},"/api/v1/health":{"get":{"operationId":"getApiHealth","summary":"Check API health","description":"Returns a small health response suitable for automated availability checks.","tags":["Operations"],"responses":{"200":{"description":"The service is available.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/search":{"get":{"operationId":"searchPublicContent","summary":"Search Prescient AI public content","description":"Searches product pages, articles, case studies, integrations, FAQs, benchmarks, research, glossary entries, events, and legal pages. Results use stable IDs that can be passed to getPublicContent.","tags":["Discovery"],"parameters":[{"name":"q","in":"query","required":true,"description":"Natural-language keywords to search for.","schema":{"type":"string","minLength":1},"example":"halo effects"},{"name":"type","in":"query","required":false,"description":"Limit matches to one content type.","schema":{"$ref":"#/components/schemas/ContentType"}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"A page of public Prescient AI content records.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"type":"object","required":["data","page"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContentRecord"}},"page":{"$ref":"#/components/schemas/PageInfo"}}}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/integrations":{"get":{"operationId":"listIntegrations","summary":"List Prescient AI integrations","description":"Lists public integration records for advertising, ecommerce, analytics, and revenue platforms. Use filter to look for a platform by name or description.","tags":["Integrations"],"parameters":[{"name":"filter","in":"query","required":false,"description":"Case-insensitive platform name or keyword.","schema":{"type":"string"},"example":"Meta"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"A page of public Prescient AI content records.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"type":"object","required":["data","page"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContentRecord"}},"page":{"$ref":"#/components/schemas/PageInfo"}}}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/content/{id}":{"get":{"operationId":"getPublicContent","summary":"Get a public content record","description":"Retrieves a single public record by its stable ID. IDs contain a content-type prefix and may contain slashes, so callers must URL-encode the complete ID.","tags":["Discovery"],"parameters":[{"name":"id","in":"path","required":true,"description":"URL-encoded stable content ID returned by search.","schema":{"type":"string"},"example":"page%3A%2Fpricing"}],"responses":{"200":{"description":"The requested public record.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ContentRecord"}}}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/batch":{"post":{"operationId":"batchReadPublicContent","summary":"Run multiple read operations","description":"Executes up to 25 independent search or content-retrieval operations in one request. The operation is read-only and idempotent. Callers may send Idempotency-Key; the server echoes it.","tags":["Operations"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Caller-generated identifier echoed in the response.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"200":{"description":"One result for each submitted operation, in request order.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."},"Idempotency-Key":{"schema":{"type":"string"},"description":"Echoed when supplied by the caller."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/jobs":{"post":{"operationId":"createSearchJob","summary":"Create an asynchronous search job","description":"Creates a read-only asynchronous search job. Returns 202 Accepted with a job identifier and Location header that agents can poll until completion.","tags":["Operations"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":200}},"additionalProperties":false}}}},"responses":{"202":{"description":"Job accepted. Poll the URL in Location or status_url.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."},"Location":{"schema":{"type":"string","format":"uri"},"description":"Canonical job status URL."},"Retry-After":{"schema":{"type":"integer"},"description":"Suggested polling delay in seconds."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/jobs/{id}":{"get":{"operationId":"getSearchJob","summary":"Get asynchronous search job status","description":"Returns the current job state and typed search result. Jobs created by this read-only API complete without external side effects.","tags":["Operations"],"parameters":[{"name":"id","in":"path","required":true,"description":"Job identifier returned by createSearchJob.","schema":{"type":"string"}}],"responses":{"200":{"description":"Completed job and its search results.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed per window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResult"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"parameters":{"Cursor":{"name":"cursor","in":"query","required":false,"description":"Opaque next_cursor value from the prior response. Currently represented as a non-negative integer string.","schema":{"type":"string","pattern":"^[0-9]+$"}},"Limit":{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}},"schemas":{"ContentType":{"type":"string","enum":["page","post","case-study","integration","glossary","benchmark","faq","research","event","legal"]},"ContentRecord":{"type":"object","required":["id","type","url","title"],"additionalProperties":true,"properties":{"id":{"type":"string","description":"Stable, globally unique public content ID."},"type":{"$ref":"#/components/schemas/ContentType"},"url":{"type":"string","format":"uri-reference","description":"Canonical site-relative URL."},"title":{"type":"string"},"excerpt":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":["string","null"]}}},"PageInfo":{"type":"object","required":["limit","next_cursor","total"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"next_cursor":{"type":["string","null"],"description":"Pass this value as cursor to fetch the next page; null marks the final page."},"total":{"type":"integer","minimum":0}}},"ApiIndex":{"type":"object","required":["name","version","status","authentication","documentation_url","openapi_url","versioning_policy_url","agent_instructions_url","endpoints"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"status":{"type":"string","enum":["ok"]},"authentication":{"type":"string","enum":["none"]},"documentation_url":{"type":"string","format":"uri"},"openapi_url":{"type":"string","format":"uri"},"versioning_policy_url":{"type":"string","format":"uri"},"agent_instructions_url":{"type":"string","format":"uri"},"endpoints":{"type":"object","additionalProperties":{"type":"string"}}}},"HealthResponse":{"type":"object","required":["status","version","service"],"properties":{"status":{"type":"string","enum":["ok"]},"version":{"type":"string"},"service":{"type":"string"}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint","documentation_url"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"},"documentation_url":{"type":"string","format":"uri"}}}}},"BatchRequest":{"type":"object","required":["operations"],"properties":{"operations":{"type":"array","minItems":1,"maxItems":25,"items":{"oneOf":[{"type":"object","required":["operation","q"],"properties":{"operation":{"const":"search"},"q":{"type":"string"},"type":{"$ref":"#/components/schemas/ContentType"},"limit":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},{"type":"object","required":["operation","id"],"properties":{"operation":{"const":"get_content"},"id":{"type":"string"}},"additionalProperties":false}]}}},"additionalProperties":false},"BatchResponse":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"type":"object","required":["index","status"],"properties":{"index":{"type":"integer"},"status":{"type":"integer"},"data":{},"error":{"type":"object"}}}}}},"JobAccepted":{"type":"object","required":["id","status","status_url"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["accepted"]},"status_url":{"type":"string","format":"uri"}}},"JobResult":{"type":"object","required":["id","status","result"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["completed"]},"result":{"type":"object","required":["query","data"],"properties":{"query":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ContentRecord"}}}}}}}},"externalDocs":{"description":"Prescient AI developer portal","url":"https://prescientai.com/developers"}}