{"openapi":"3.1.0","info":{"title":"Straits Institute for Applied AI — public API","version":"1.0.0","summary":"Read the Institute's published articles, media and the State of Applied AI record.","description":"Anonymous, read-only access to what the Straits Institute for Applied AI publishes on www.straitsai.institute: articles in Resources (published only), their images, the State of Applied AI record and the machine-readable files agents read first. No API key is needed for anything listed here; write operations and draft content require a Payload account and are not documented. Every page on the host is also served as Markdown when the request carries Accept: text/markdown (see /developers). There is no published rate limit — be considerate and cache what you fetch. Cite the record as: Industrial Research Unit, Straits Institute for Applied AI, The State of Applied AI, https://www.straitsai.institute/state-of-applied-ai.","contact":{"name":"Straits Institute for Applied AI","url":"https://books.straitsai.institute/contact"}},"externalDocs":{"description":"Developer resources","url":"https://www.straitsai.institute/developers"},"servers":[{"url":"https://www.straitsai.institute"}],"tags":[{"name":"Articles","description":"Sourced, bylined writing on applied AI for five professions. Published documents only."},{"name":"Media","description":"Images attached to articles. Files themselves are served from Vercel Blob at the url field."},{"name":"GraphQL","description":"The same collections over GraphQL, with introspection enabled."},{"name":"Files","description":"Machine-readable files: the agent index, the record and the sitemap."}],"paths":{"/api/articles":{"get":{"tags":["Articles"],"summary":"List published articles","operationId":"listArticles","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"default":10},"description":"Documents per page."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"sort","in":"query","schema":{"type":"string","example":"-publishedAt"},"description":"Field to sort by. Prefix with - for descending."},{"name":"depth","in":"query","schema":{"type":"integer","minimum":0,"maximum":10,"default":2},"description":"How many levels of relationships (author, heroImage) to populate. 0 returns ids."},{"name":"where","in":"query","style":"deepObject","explode":true,"schema":{"type":"object","additionalProperties":true},"description":"Payload query syntax: where[field][operator]=value. Operators include equals, not_equals, contains, in, greater_than, less_than, exists. Example: where[professions][contains]=hospitals."}],"responses":{"200":{"description":"A page of published articles, newest first by default.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedDocs"},{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Article"}}}}]}}}}}}},"/api/articles/{id}":{"get":{"tags":["Articles"],"summary":"Read one article","operationId":"getArticle","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"depth","in":"query","schema":{"type":"integer","minimum":0,"maximum":10,"default":2},"description":"How many levels of relationships (author, heroImage) to populate. 0 returns ids."}],"responses":{"200":{"description":"The article.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Article"}}}},"404":{"description":"No document with that id, or it is not published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/api/media":{"get":{"tags":["Media"],"summary":"List media","operationId":"listMedia","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"default":10},"description":"Documents per page."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"sort","in":"query","schema":{"type":"string","example":"-publishedAt"},"description":"Field to sort by. Prefix with - for descending."},{"name":"depth","in":"query","schema":{"type":"integer","minimum":0,"maximum":10,"default":2},"description":"How many levels of relationships (author, heroImage) to populate. 0 returns ids."},{"name":"where","in":"query","style":"deepObject","explode":true,"schema":{"type":"object","additionalProperties":true},"description":"Payload query syntax: where[field][operator]=value. Operators include equals, not_equals, contains, in, greater_than, less_than, exists. Example: where[professions][contains]=hospitals."}],"responses":{"200":{"description":"A page of media documents.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedDocs"},{"type":"object","properties":{"docs":{"type":"array","items":{"$ref":"#/components/schemas/Media"}}}}]}}}}}}},"/api/media/{id}":{"get":{"tags":["Media"],"summary":"Read one media document","operationId":"getMedia","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"The media document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Media"}}}},"404":{"description":"No document with that id, or it is not published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/api/graphql":{"post":{"tags":["GraphQL"],"summary":"Run a GraphQL query","operationId":"graphql","description":"Collections are exposed as Articles and Media (plural, paginated) and Article and Media (by id). Introspection is enabled, so the schema can be read with a standard introspection query. GET is not supported.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphQLRequest"}}}},"responses":{"200":{"description":"The GraphQL result. Errors, if any, are in the errors array with a 200 status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphQLResponse"}}}}}}},"/state-of-applied-ai/evidence.json":{"get":{"tags":["Files"],"summary":"The State of Applied AI record as structured data","operationId":"getEvidence","responses":{"200":{"description":"Every entry in the record with kind, industry, region, role, organisation, text, date and source, plus provenance and counts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}}}}},"/llms.txt":{"get":{"tags":["Files"],"summary":"The page index for agents (llmstxt.org format)","operationId":"getLlmsTxt","responses":{"200":{"description":"Markdown, served as text/plain.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"tags":["Files"],"summary":"The State of Applied AI record in full, as plain text","operationId":"getLlmsFullTxt","responses":{"200":{"description":"Every finding with its source and date.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"PaginatedDocs":{"type":"object","description":"Payload's list envelope.","properties":{"docs":{"type":"array","items":{}},"totalDocs":{"type":"integer"},"limit":{"type":"integer"},"totalPages":{"type":"integer"},"page":{"type":"integer"},"pagingCounter":{"type":"integer"},"hasPrevPage":{"type":"boolean"},"hasNextPage":{"type":"boolean"},"prevPage":{"type":["integer","null"]},"nextPage":{"type":["integer","null"]}},"required":["docs","totalDocs","limit","totalPages","page","hasPrevPage","hasNextPage"]},"Article":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"slug":{"type":"string","description":"The page is at https://www.straitsai.institute/resources/{slug}."},"description":{"type":"string","description":"Meta description, 160-300 characters."},"professions":{"type":"array","description":"Which Resources pillar pages list the article.","items":{"type":"string","enum":["librarians","educators","hr-and-ld","public-service","hospitals"]}},"author":{"description":"A user id at depth 0; at depth 1 or more, the author's public fields.","oneOf":[{"type":"integer"},{"$ref":"#/components/schemas/Author"}]},"publishedAt":{"type":["string","null"],"format":"date-time"},"heroImage":{"description":"A media id at depth 0, the media document at depth 1 or more, or null.","oneOf":[{"type":"integer"},{"$ref":"#/components/schemas/Media"},{"type":"null"}]},"body":{"type":"object","description":"Lexical rich-text JSON (root.children). Request the article page with Accept: text/markdown for a rendered version.","additionalProperties":true},"previousSlugs":{"type":["array","null"],"items":{"type":"string"},"description":"Old slugs that now redirect to this article."},"sources":{"type":"array","description":"Every claim traced to something a reader can check.","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"},"date":{"type":["string","null"],"format":"date-time"},"id":{"type":["string","null"]}},"required":["label","url"]}},"updatedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"_status":{"type":["string","null"],"enum":["draft","published",null]}},"required":["id","title","slug","description","professions","author","body","sources","updatedAt","createdAt"]},"Author":{"type":"object","description":"The byline. Only public fields are readable anonymously.","properties":{"id":{"type":"integer"},"name":{"type":"string"},"role":{"type":["string","null"]}},"required":["id","name"]},"Media":{"type":"object","properties":{"id":{"type":"integer"},"alt":{"type":"string"},"url":{"type":["string","null"],"format":"uri","description":"The file, served from Vercel Blob."},"filename":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"filesize":{"type":["integer","null"]},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"sizes":{"type":"object","description":"Resized variants generated on upload.","properties":{"card":{"$ref":"#/components/schemas/MediaSize"},"wide":{"$ref":"#/components/schemas/MediaSize"}}},"updatedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","alt","updatedAt","createdAt"]},"MediaSize":{"type":"object","properties":{"url":{"type":["string","null"],"format":"uri"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"mimeType":{"type":["string","null"]},"filesize":{"type":["integer","null"]},"filename":{"type":["string","null"]}}},"GraphQLRequest":{"type":"object","properties":{"query":{"type":"string","example":"{ Articles(limit: 5, sort: \"-publishedAt\") { docs { title slug publishedAt } } }"},"variables":{"type":"object","additionalProperties":true},"operationName":{"type":"string"}},"required":["query"]},"GraphQLResponse":{"type":"object","properties":{"data":{"type":["object","null"],"additionalProperties":true},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}}}}}},"Errors":{"type":"object","description":"Payload's error envelope.","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}},"required":["errors"]},"Evidence":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"source":{"type":"string","format":"uri"},"attribution":{"type":"string"},"updated":{"type":"string","description":"When the record was last revised."},"kinds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"note":{"type":"string"}}}},"counts":{"type":"object","additionalProperties":{"type":"integer"}},"entries":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["deployment","evidence-impact","evidence-adoption","regulation"]},"industry":{"type":"string"},"region":{"type":"string"},"role":{"type":"string"},"org":{"type":"string"},"text":{"type":"string"},"date":{"type":"string"},"source":{"type":"string","format":"uri"}},"required":["kind","industry","region","text","date"]}}},"required":["name","source","attribution","updated","entries"]}}}}