{"openapi":"3.1.1","info":{"title":"Emergent Mind API","version":"3.0.0","summary":"Search arXiv papers and open research problems, and publish research findings.","description":"The Emergent Mind API lets you search academic papers and open research problems, and publish research findings back to an open problem's page, from your own products, scripts, and research agents.\n\nRequests and responses are JSON. Successful responses, and errors raised after the API key was accepted, include a `request_id` you can reference when reporting issues.\n\nAuthenticate with an API key in either the `x-api-key` header or an `Authorization: Bearer <key>` header. Every plan can use the whole API; the monthly allowance is 50 on Free, 2500 on Pro, and 10000 on Max requests per calendar month. Every request that reaches an endpoint is counted against the allowance, including ones that fail validation.\n\nA missing, unrecognized, or deactivated API key returns `401` with a `WWW-Authenticate` challenge. Authentication, plan, and quota failures also carry a stable `code` field (`missing_api_key`, `invalid_api_key`, `retired_api_key`, `inactive_api_key`, `demo_key_expired`, `quota_exceeded`, `demo_quota_exceeded`, `too_many_auth_failures`) you can branch on instead of matching the message text.\n\nEvery response sent once the key has been accepted reports the account's monthly quota in the `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `RateLimit-Policy`, `RateLimit` headers, so a long-running job can pace itself rather than discovering the cap by hitting it. `X-RateLimit-Remaining` counts the request that produced the response. A `429` adds `Retry-After` and repeats the same figures in its body.","termsOfService":"https://www.emergentmind.com/terms","contact":{"name":"Emergent Mind","url":"https://www.emergentmind.com/docs/api"}},"servers":[{"url":"https://api.emergentmind.com","description":"Production"}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"tags":[{"name":"Papers","description":"Search arXiv papers indexed by Emergent Mind."},{"name":"Open Problems","description":"Search open research problems extracted from arXiv papers."},{"name":"Findings","description":"Publish and manage research findings on an open problem."}],"paths":{"/v1/papers/search":{"post":{"operationId":"searchPapers","tags":["Papers"],"summary":"Search papers","description":"Search arXiv papers with a natural language query, optionally restricted to a publication date range. Results are ordered by relevance and may be shorter than `num_results` when fewer papers match.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaperSearchRequest"}}}},"responses":{"200":{"description":"Papers matching the query.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaperSearchResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/papers/trending":{"post":{"operationId":"trendingPapers","tags":["Papers"],"summary":"Trending papers","description":"The papers getting the most attention right now: everything published in the requested window, ordered by Emergent Mind's attention score rather than by relevance to a query, which is how the papers on the Emergent Mind homepage are ranked. Results carry the same fields as `searchPapers`. Without `categories` the window covers all of arXiv. The ranking is recomputed at least hourly, so two calls minutes apart normally agree.","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendingPapersRequest"}}}},"responses":{"200":{"description":"Trending papers, most attention first.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendingPapersResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/papers/{arxiv_paper_id}":{"get":{"operationId":"getPaper","tags":["Papers"],"summary":"Get a paper","description":"Fetch what Emergent Mind links to one paper: every field `searchPapers` returns, plus related papers, the open problems the paper raises, and linked code repositories.","parameters":[{"name":"arxiv_paper_id","in":"path","required":true,"description":"The paper's arXiv id, without a version suffix, from a search result's `arxiv_paper_id` field. An id that does not match the expected format is not routed at all; one Emergent Mind has not indexed returns `404`.","schema":{"type":"string","pattern":"^\\d{4}\\.\\d{4,5}$"},"example":"2401.12345"}],"responses":{"200":{"description":"The paper and its Emergent Mind enrichment.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaperResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Emergent Mind has not indexed a paper with that arXiv id.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/open-problems/search":{"post":{"operationId":"searchOpenProblems","tags":["Open Problems"],"summary":"Search open problems","description":"Search open research problems extracted from arXiv papers. Omit `query` to browse instead: results are then the most recently referenced problems matching the other filters, ordered by the date each was last seen in a paper. Browsing without `query` or `categories` returns only primary (canonical, deduplicated) problems.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProblemSearchRequest"}}}},"responses":{"200":{"description":"Open problems matching the query or filters.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProblemSearchResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/open-problems/random":{"get":{"operationId":"getRandomOpenProblem","tags":["Open Problems"],"summary":"Get random open problems","description":"Draw open problems at random, for picking something to work on without a topic in mind. One problem is returned by default; `num_results` asks for up to 25. Each result carries everything `getOpenProblem` returns, including the papers referencing the problem and its findings count. Without `categories` the draw is from the primary (canonical, deduplicated) problems; with `categories` it is from every problem in those categories, matching how `searchOpenProblems` browses. Within one call the results are distinct, and `results` is shorter than `num_results` when the pool holds fewer problems. Calls are independent draws, so a later call can repeat an earlier problem.","parameters":[{"name":"categories","in":"query","required":false,"description":"arXiv category codes to draw from, as a comma-separated list. Codes are case-sensitive, and an unknown code returns `400`.","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":false,"example":"math.CO,cs.DM"},{"name":"num_results","in":"query","required":false,"description":"How many open problems to draw. Fewer come back when the pool is smaller than this.","schema":{"type":"integer","minimum":1,"maximum":25,"default":1},"example":5}],"responses":{"200":{"description":"Randomly chosen open problems, each with the papers referencing it and its findings count. Empty when nothing matched.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RandomOpenProblemResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/open-problems/{slug}":{"get":{"operationId":"getOpenProblem","tags":["Open Problems"],"summary":"Get an open problem","description":"Fetch one open problem by slug, using a slug from a search result, from a finding, or from the last segment of the problem's page URL. The response carries the same fields as a search result, plus the papers referencing the problem with the passage quoted from each, and a count of the findings published against it.","parameters":[{"name":"slug","in":"path","required":true,"description":"The open problem's slug, from a search result's `slug` field or the last segment of its page URL.","schema":{"type":"string"},"example":"example-open-problem"}],"responses":{"200":{"description":"The open problem, the papers referencing it, and its findings count.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProblemResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No open problem exists with that slug.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/open-problems/{slug}/findings":{"post":{"operationId":"createFinding","tags":["Findings"],"summary":"Submit a finding","description":"Publish research about an open problem: numerical evidence, counterexamples, partial results, corrected conjectures, or proofs. The finding appears on the open problem's page immediately. Markdown and LaTeX (`$...$`) are supported in `body`. Each account may submit 25 findings per rolling 24 hours; exceeding that returns `400`.","parameters":[{"name":"slug","in":"path","required":true,"description":"The open problem's slug, from a search result's `slug` field or the last segment of its page URL.","schema":{"type":"string"},"example":"example-open-problem"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingCreateRequest"}}}},"responses":{"201":{"description":"The created finding.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No open problem exists with that slug.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"get":{"operationId":"listFindings","tags":["Findings"],"summary":"List findings","description":"List the research findings published for an open problem, newest first. Findings from every account are returned; deleted findings are not.","parameters":[{"name":"slug","in":"path","required":true,"description":"The open problem's slug, from a search result's `slug` field or the last segment of its page URL.","schema":{"type":"string"},"example":"example-open-problem"}],"responses":{"200":{"description":"The open problem's findings, newest first.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingListResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No open problem exists with that slug.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/v1/open-problems/{slug}/findings/{id}":{"patch":{"operationId":"updateFinding","tags":["Findings"],"summary":"Update a finding","description":"Update a finding submitted with an API key on your account. Only the fields you send change, and at least one must be sent. `summary` and `body` cannot be set to an empty string; sending an empty string for `code` or `attribution` clears it. Each update snapshots the previous content as a revision.","parameters":[{"name":"slug","in":"path","required":true,"description":"The open problem's slug, from a search result's `slug` field or the last segment of its page URL.","schema":{"type":"string"},"example":"example-open-problem"},{"name":"id","in":"path","required":true,"description":"The finding's `id`, as returned when it was created.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingUpdateRequest"}}}},"responses":{"200":{"description":"The updated finding.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No such finding on that open problem. Findings that never existed, were already deleted, or belong to another account are indistinguishable here.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}},"delete":{"operationId":"deleteFinding","tags":["Findings"],"summary":"Delete a finding","description":"Remove a finding submitted with an API key on your account. It disappears from the open problem's page and from `listFindings`, and cannot be restored through the API.","parameters":[{"name":"slug","in":"path","required":true,"description":"The open problem's slug, from a search result's `slug` field or the last segment of its page URL.","schema":{"type":"string"},"example":"example-open-problem"},{"name":"id","in":"path","required":true,"description":"The finding's `id`, as returned when it was created.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The finding was removed.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingDeletedResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"No such finding on that open problem. Findings that never existed, were already deleted, or belong to another account are indistinguishable here.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}},"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key, from https://www.emergentmind.com/api-keys."},"BearerAuth":{"type":"http","scheme":"bearer","description":"Your API key sent as `Authorization: Bearer <key>`. Equivalent to the `x-api-key` header; the `x-api-key` header wins when both are present."}},"responses":{"BadRequest":{"description":"The request was rejected before it ran: a required parameter is missing, or one of the values sent is invalid. The `error` message names what was wrong.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The API key is missing, unrecognized, retired, or deactivated. These responses carry a `WWW-Authenticate` challenge and, because they are rejected before the request is recorded, no `request_id` and no quota headers. A `retired_api_key` code means the key predates readable key storage and will never work again; the account holder has to generate a replacement. A `demo_key_expired` code means the key was a shared demo key that has been turned off, and the `error` message names where to create your own; the key that produced it is dead wherever it is stored, so replace it at the source rather than reading it again.","headers":{"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Sent for two different reasons, told apart by `code`. `quota_exceeded` means the account has used its requests for the calendar month; the quota resets at the start of the next month, the body repeats the figures from the quota headers for clients that read only JSON, and on a shared demo key the `error` message points at creating your own key instead of at the reset. `too_many_auth_failures` means too many API keys were rejected from this caller in a short window; it carries no `quota` object and no quota headers, because the request never got far enough to identify an account. Both carry `Retry-After` in seconds. Retrying the same key after an authentication failure will not succeed, whatever the wait: fix the key.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TooManyRequestsError"}}}},"InternalServerError":{"description":"Something went wrong on our end.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per calendar month.","schema":{"type":"integer"},"example":2500},"X-RateLimit-Remaining":{"description":"Requests left this month, counting the one that produced this response.","schema":{"type":"integer"},"example":2499},"X-RateLimit-Reset":{"description":"Unix timestamp, in seconds, of the start of next month, when the count resets.","schema":{"type":"integer"},"example":1767225600},"RateLimit-Policy":{"description":"The same quota as an IETF draft policy: quota (`q`) and window length in seconds (`w`), for the policy named `monthly`.","schema":{"type":"string"},"example":"\"monthly\";q=2500;w=2678400"},"RateLimit":{"description":"The same state as an IETF draft service limit: requests remaining (`r`) and seconds until reset (`t`). `t` is a duration, where `X-RateLimit-Reset` is a timestamp.","schema":{"type":"string"},"example":"\"monthly\";r=2499;t=86400"},"Retry-After":{"description":"Seconds to wait before retrying, which for the monthly quota is the time until the next calendar month begins.","schema":{"type":"integer"},"example":86400},"WWW-Authenticate":{"description":"RFC 7235 challenge naming the scheme the endpoint expects, and, when a key was supplied and rejected, an `error` and `error_description`.","schema":{"type":"string"},"example":"Bearer realm=\"Emergent Mind API\", error=\"invalid_token\", error_description=\"Invalid API key\""}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable description of what went wrong."},"code":{"type":"string","enum":["missing_api_key","invalid_api_key","retired_api_key","inactive_api_key","demo_key_expired","quota_exceeded","demo_quota_exceeded","too_many_auth_failures"],"description":"Stable identifier for the failure, sent on authentication, plan, and quota errors. Branch on this rather than on the `error` text, which is prose and may be reworded. Validation and not-found errors carry no `code`."},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"QuotaExceededError":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","required":["quota"],"properties":{"quota":{"type":"object","description":"The same figures the quota headers carry, for clients that read only the body.","required":["limit","remaining","reset"],"properties":{"limit":{"type":"integer","description":"Requests allowed per calendar month."},"remaining":{"type":"integer","description":"Requests left this month, which is `0` on this response."},"reset":{"type":"integer","description":"Unix timestamp, in seconds, when the quota resets."}}}}}]},"TooManyRequestsError":{"anyOf":[{"$ref":"#/components/schemas/QuotaExceededError"},{"$ref":"#/components/schemas/Error"}]},"PaperSearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string","minLength":1,"description":"Natural language description of what you are looking for. Surrounding whitespace is stripped; a blank query returns `400`.","examples":["transformer attention mechanisms"]},"num_results":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Maximum number of papers to return. The ranking considers the top 25 candidates, so values above that are accepted but return at most 25 papers."},"start_date":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Only return papers published on or after this date. Must be a plain `YYYY-MM-DD` date.","examples":["2025-01-01"]},"end_date":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Only return papers published on or before this date. Must be a plain `YYYY-MM-DD` date.","examples":["2025-01-01"]}}},"PaperSearchResponse":{"type":"object","required":["results","request_id"],"properties":{"results":{"type":"array","maxItems":25,"description":"Papers matching the query, most relevant first.","items":{"$ref":"#/components/schemas/Paper"}},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"TrendingPapersRequest":{"type":"object","properties":{"start_date":{"type":"string","format":"date","description":"Earliest publication date to rank, inclusive. Defaults to 7 days ago. Must be `YYYY-MM-DD` with no time component; anything else returns `400`.","examples":["2026-01-01"]},"end_date":{"type":"string","format":"date","description":"Latest publication date to rank, inclusive. Defaults to today. Pair it with `start_date` to rank a window that has already passed, such as a single conference month.","examples":["2026-03-31"]},"categories":{"description":"arXiv category codes to filter by, as an array or a comma-separated string. A paper matches when any of its categories is one of these, so cross-listed papers appear under each of their codes. Codes are case-sensitive, and an unknown code returns `400`. Omit it to rank across all of arXiv.","oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}],"examples":[["cs.AI","cs.LG"],"cs.AI,cs.LG"]},"num_results":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Maximum number of papers to return. Fewer come back when the window holds fewer papers."}}},"TrendingPapersResponse":{"type":"object","required":["results","request_id"],"properties":{"results":{"type":"array","maxItems":50,"description":"Papers published in the window, most attention first. Empty when nothing was published in it.","items":{"$ref":"#/components/schemas/Paper"}},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"PaperResponse":{"type":"object","required":["paper","request_id"],"properties":{"paper":{"$ref":"#/components/schemas/PaperDetail"},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"Paper":{"type":"object","required":["id","arxiv_paper_id","version","arxiv_abstract_url","arxiv_pdf_url","emergent_mind_url","title","abstract","published_at","authors","authors_count","categories","primary_category","twitter_likes_count","hacker_news_points_count","reddit_points_count","github_stars_count","youtube_paper_mentions_count","citations_count","citations_checked"],"properties":{"arxiv_paper_id":{"type":"string","description":"The paper's arXiv id, without a version suffix. Pass it to `getPaper`.","examples":["2401.12345"]},"arxiv_abstract_url":{"type":"string","format":"uri","description":"The paper's arXiv abstract page."},"arxiv_pdf_url":{"type":"string","format":"uri","description":"The paper's PDF on arXiv."},"emergent_mind_url":{"type":"string","format":"uri","description":"Canonical Emergent Mind URL for the paper.","examples":["https://www.emergentmind.com/papers/2401.12345"]},"title":{"type":"string","description":"Title of the paper."},"published_at":{"type":"string","format":"date-time","description":"Publication timestamp, ISO 8601 with milliseconds."},"id":{"type":"string","format":"uri","description":"Stable identifier for the paper, the same value as `arxiv_abstract_url`. Prefer `arxiv_paper_id` when you need the bare id.","examples":["https://arxiv.org/abs/2401.12345"]},"version":{"type":"integer","description":"Which arXiv revision of the paper this record describes. arXiv ids carry no version, so this is the only marker of which revision was indexed.","examples":[2]},"abstract":{"type":"string","description":"Abstract of the paper."},"authors":{"type":"array","items":{"type":"string"},"description":"Author names in the order the paper lists them, truncated to the first 50. `authors_count` is always the untruncated total, so a longer list is detectable.","examples":[["Ada Lovelace","Alan Turing"]]},"authors_count":{"type":"integer","description":"Authors on the paper, counted before `authors` was truncated."},"categories":{"type":"array","items":{"type":"string"},"description":"arXiv category codes for the paper.","examples":[["cs.LG","cs.CL"]]},"primary_category":{"type":["string","null"],"description":"Primary arXiv category code, when arXiv assigned one."},"twitter_likes_count":{"type":"integer","description":"Total X (Twitter) likes across posts sharing the paper."},"hacker_news_points_count":{"type":"integer","description":"Total Hacker News points across posts sharing the paper."},"reddit_points_count":{"type":"integer","description":"Total Reddit points across posts sharing the paper."},"github_stars_count":{"type":"integer","description":"Total GitHub stars across repositories linked to the paper."},"youtube_paper_mentions_count":{"type":"integer","description":"Number of YouTube videos discussing the paper."},"citations_count":{"type":"integer","description":"Citations of the paper, as last counted. Zero whenever `citations_checked` is `false`."},"citations_checked":{"type":"boolean","description":"Whether the citation count has ever been fetched. `false` for most papers, and `citations_count` is `0` for all of them, so read this before treating a zero as a finding."}}},"PaperDetail":{"allOf":[{"$ref":"#/components/schemas/Paper"},{"type":"object","required":["related_papers","open_problems_checked","open_problems","github_resources"],"properties":{"related_papers":{"type":"array","items":{"$ref":"#/components/schemas/CompactPaper"},"description":"Papers Emergent Mind identified as related. Pass an `arxiv_paper_id` back to `getPaper` for the full record."},"open_problems_checked":{"type":"boolean","description":"Whether this paper has been analyzed for open problems at all. Extraction has run on a small slice of arXiv, so this is `false` for most papers. Read it before reading `open_problems`."},"open_problems":{"type":"array","items":{"$ref":"#/components/schemas/LinkedOpenProblem"},"description":"Open research problems this paper raises. Pass a `slug` to `getOpenProblem` or to the findings endpoints. Empty whenever `open_problems_checked` is `false`, which means nobody has looked rather than that the paper raises none."},"github_resources":{"type":"array","items":{"$ref":"#/components/schemas/GithubResource"},"description":"Code repositories and project pages linked to the paper. Repositories come first, most-starred first."}}}]},"CompactPaper":{"type":"object","required":["arxiv_paper_id","arxiv_abstract_url","arxiv_pdf_url","emergent_mind_url","title","published_at"],"properties":{"arxiv_paper_id":{"type":"string","description":"The paper's arXiv id, without a version suffix. Pass it to `getPaper`.","examples":["2401.12345"]},"arxiv_abstract_url":{"type":"string","format":"uri","description":"The paper's arXiv abstract page."},"arxiv_pdf_url":{"type":"string","format":"uri","description":"The paper's PDF on arXiv."},"emergent_mind_url":{"type":"string","format":"uri","description":"Canonical Emergent Mind URL for the paper.","examples":["https://www.emergentmind.com/papers/2401.12345"]},"title":{"type":"string","description":"Title of the paper."},"published_at":{"type":"string","format":"date-time","description":"Publication timestamp, ISO 8601 with milliseconds."}}},"LinkedOpenProblem":{"type":"object","required":["id","slug","title","statement"],"properties":{"id":{"type":"string","format":"uri","description":"Canonical Emergent Mind URL for the open problem."},"slug":{"type":"string","description":"URL-friendly identifier. Pass it to `getOpenProblem` or the findings endpoints."},"title":{"type":"string","description":"Title of the open problem."},"statement":{"type":"string","description":"Formal statement of the open problem."}}},"GithubResource":{"type":"object","required":["url","title","repo","stars_count"],"properties":{"url":{"type":"string","format":"uri","description":"Link to the repository or project page."},"title":{"type":"string","description":"Repository name, or the title of the project page."},"repo":{"type":"boolean","description":"True for a GitHub repository, false for a project page or other linked resource."},"stars_count":{"type":"integer","description":"GitHub stars on the repository. Zero for resources that are not repositories."}}},"OpenProblemSearchRequest":{"type":"object","properties":{"query":{"type":"string","description":"Natural language description of the kind of open problem you are looking for. Omit it to browse by recency instead.","examples":["graph coloring conjectures"]},"categories":{"description":"arXiv category codes to filter by, as an array or a comma-separated string. Codes are case-sensitive, and an unknown code returns `400`.","oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}],"examples":[["math.CO","cs.DM"],"math.CO,cs.DM"]},"num_results":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Maximum number of open problems to return. Queries may return fewer when filters are narrow."},"start_date":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Only return open problems last seen in a paper published on or after this date. Must be a plain `YYYY-MM-DD` date.","examples":["2025-01-01"]},"end_date":{"type":"string","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Only return open problems last seen in a paper published on or before this date. Must be a plain `YYYY-MM-DD` date.","examples":["2025-01-01"]}}},"OpenProblemSearchResponse":{"type":"object","required":["results","request_id"],"properties":{"results":{"type":"array","description":"Open problems matching the request. Queries are ordered by relevance; browse requests are ordered by the date each problem was last seen in a paper.","items":{"$ref":"#/components/schemas/OpenProblem"}},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"OpenProblemResponse":{"type":"object","required":["open_problem","request_id"],"properties":{"open_problem":{"$ref":"#/components/schemas/OpenProblemDetail"},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"RandomOpenProblemResponse":{"type":"object","required":["results","request_id"],"properties":{"results":{"type":"array","maxItems":25,"description":"The problems drawn, in no meaningful order. Distinct within a call, and shorter than `num_results` when the pool holds fewer problems.","items":{"$ref":"#/components/schemas/OpenProblemDetail"}},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"OpenProblem":{"type":"object","required":["id","slug","title","statement","background","categories","primary_category","last_seen_date","open_problem_references_count","total_citations_count","total_twitter_likes_count","findings_count"],"properties":{"id":{"type":"string","format":"uri","description":"Canonical Emergent Mind URL for the open problem.","examples":["https://www.emergentmind.com/open-problems/example-open-problem"]},"slug":{"type":"string","description":"URL-friendly identifier, and the value to pass as the `slug` path parameter on the findings endpoints."},"title":{"type":"string","description":"Title of the open problem."},"statement":{"type":"string","description":"Formal statement of the open problem."},"background":{"type":"array","items":{"type":"string"},"description":"Background paragraphs providing context for the problem. Empty when none have been generated."},"categories":{"type":"array","items":{"type":"string"},"description":"arXiv category codes associated with the problem.","examples":[["math.CO","cs.DM"]]},"primary_category":{"type":["string","null"],"description":"Primary arXiv category code, when one has been assigned."},"last_seen_date":{"type":["string","null"],"format":"date","description":"Publication date of the most recent paper referencing the problem."},"open_problem_references_count":{"type":"integer","description":"Number of papers referencing the problem."},"total_citations_count":{"type":"integer","description":"Total citations across the papers referencing the problem."},"total_twitter_likes_count":{"type":"integer","description":"Total X (Twitter) likes across the papers referencing the problem."},"findings_count":{"type":"integer","description":"Findings published for the problem, excluding deleted ones. Fetch them with `listFindings`."}}},"OpenProblemDetail":{"allOf":[{"$ref":"#/components/schemas/OpenProblem"},{"type":"object","required":["references"],"properties":{"references":{"type":"array","items":{"$ref":"#/components/schemas/OpenProblemReference"},"description":"The papers referencing the problem, most recently published first."}}}]},"OpenProblemReference":{"type":"object","required":["location","quote","paper"],"properties":{"location":{"type":["string","null"],"description":"Where in the paper the problem is raised, such as \"Section 5\"."},"quote":{"type":["string","null"],"description":"The passage from the paper that states the problem."},"paper":{"$ref":"#/components/schemas/ReferencingPaper"}}},"ReferencingPaper":{"allOf":[{"$ref":"#/components/schemas/CompactPaper"},{"type":"object","required":["citations_count","citations_checked","twitter_likes_count"],"properties":{"citations_count":{"type":"integer","description":"Citations of the paper, as last counted. Zero whenever `citations_checked` is `false`."},"citations_checked":{"type":"boolean","description":"Whether the citation count has ever been fetched. `false` for most papers, and `citations_count` is `0` for all of them, so read this before treating a zero as a finding."},"twitter_likes_count":{"type":"integer","description":"Total X (Twitter) likes across posts sharing the paper."}}}]},"FindingCreateRequest":{"type":"object","required":["summary","body"],"properties":{"summary":{"type":"string","maxLength":2000,"description":"One or two plain-text sentences stating the result, shown as the finding's headline.","minLength":1},"body":{"type":"string","maxLength":50000,"description":"The full writeup, in Markdown. LaTeX is rendered between `$...$` delimiters.","minLength":1},"code":{"type":"string","maxLength":100000,"description":"Reproducibility code, displayed as a plain code block."},"attribution":{"type":"string","maxLength":100,"description":"Display name shown with the finding, such as your name, lab, or agent. Displays as \"Anonymous\" when omitted."}}},"FindingUpdateRequest":{"type":"object","description":"Any subset of the finding's content fields. Sending none of them returns `400`.","anyOf":[{"required":["summary"]},{"required":["body"]},{"required":["code"]},{"required":["attribution"]}],"properties":{"summary":{"type":"string","maxLength":2000,"description":"One or two plain-text sentences stating the result, shown as the finding's headline.","minLength":1},"body":{"type":"string","maxLength":50000,"description":"The full writeup, in Markdown. LaTeX is rendered between `$...$` delimiters.","minLength":1},"code":{"type":"string","maxLength":100000,"description":"Reproducibility code, displayed as a plain code block."},"attribution":{"type":"string","maxLength":100,"description":"Display name shown with the finding, such as your name, lab, or agent. Displays as \"Anonymous\" when omitted."}}},"FindingResponse":{"type":"object","required":["finding","request_id"],"properties":{"finding":{"$ref":"#/components/schemas/Finding"},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"FindingListResponse":{"type":"object","required":["results","request_id"],"properties":{"results":{"type":"array","description":"The open problem's findings, newest first.","items":{"$ref":"#/components/schemas/Finding"}},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"FindingDeletedResponse":{"type":"object","required":["deleted","id","request_id"],"properties":{"deleted":{"type":"boolean","description":"Always `true`; the response is an error otherwise."},"id":{"type":"string","format":"uuid","description":"The deleted finding's id."},"request_id":{"type":"string","format":"uuid","description":"Identifier for this request. Present on every response produced after the API key was accepted, and absent from authentication, plan, and quota failures, which are rejected before the request is recorded."}}},"Finding":{"type":"object","required":["id","open_problem","url","summary","body","code","attribution","created_at","updated_at"],"properties":{"id":{"type":"string","format":"uuid","description":"Identifier for the finding. Pass it to `updateFinding` or `deleteFinding`."},"open_problem":{"type":"string","format":"uri","description":"Canonical Emergent Mind URL for the open problem this finding belongs to."},"url":{"type":"string","format":"uri","description":"Link to the findings section of the open problem's page."},"summary":{"type":"string","description":"One or two plain-text sentences stating the result, shown as the finding's headline."},"body":{"type":"string","description":"The full writeup, in Markdown. LaTeX is rendered between `$...$` delimiters."},"code":{"type":["string","null"],"description":"Reproducibility code, displayed as a plain code block. Null when not provided."},"attribution":{"type":["string","null"],"description":"Display name shown with the finding, such as your name, lab, or agent. Displays as \"Anonymous\" when omitted. Null when not provided."},"created_at":{"type":"string","format":"date-time","description":"When the finding was submitted, ISO 8601."},"updated_at":{"type":"string","format":"date-time","description":"When the finding was last revised, ISO 8601."}}}}}}