By prompt

Ask in plain English and get a graph back, with a written explanation.

POST/api/v2.0-preview/atlas/graphs/prompt

Authorizations

Bearer
Authorizationstringrequiredheader

Required Bearer API key: your NOSIBLE API key from the API Dashboard.

Example: Bearer nos_sk_...

Body

application/json
promptstringrequiredbody

The question, up to 8,000 characters.

Example: How is Nvidia connected to OpenAI?

sessionstringbody

Session id from a previous response. Continues the conversation and the graph on screen. A session belongs to the API key that created it: another key gets 404 unknown_session. Two follow-ups sent at once on one session cannot both run: one gets 409 session_busy.

Example: as_3565eeb24b3721a2

limitintegerbody

Maximum relationships drawn. Defaults to 300, maximum 1,000.

Example: 10

streambooleanbody

When true the response is NDJSON: activity lines while the graph is built, then one reply line.

Example: false

as_ofdatebody

Point in time (YYYY-MM-DD), from 2010-01-01 to the release's last date, which is the default (release.date_min and release.date_max in Relationship types); a date outside that range, or one that does not exist (2026-02-30), is a 422 validation_error. Only events dated on or before it count. In a follow-up (session) it defaults to the session's own as_of; a date you send replaces only itself, for this turn and the later ones. `to` is accepted as the same parameter, as in the World API.

Example: 2024-12-31

fromdatebody

Optional start of the evidence window (YYYY-MM-DD, inclusive). In a follow-up (session) it defaults to the session's own from; a date you send replaces only itself, for this turn and the later ones. A date that does not exist (2026-02-30) is a 422 validation_error.

Example: 2020-01-01

How to use this endpoint

guidance

Use By prompt when you would rather describe the graph than build it from parameters. A language model plans the query, Atlas runs it on the graph, and the explanation is written only from what the graph contains. Expect 5 to 25 seconds. Pass the returned session to refine the same graph in a follow-up question. A follow-up keeps the session's as_of and from unless it sends new ones, and each date you send replaces only itself for the later turns; window_source says where this turn's window came from. A question about ownership uses min_support 10, as By ownership does, unless the prompt states a threshold of its own. A session belongs to the API key that created it, and a session can run one prompt at a time. The graph and the explanation vary from run to run, because the model plans each answer afresh: the example is one real response, which the same request will not repeat word for word.

Response body

application/json

These are the fields you can build against. Nested names use dot notation; optional sections are called out in their descriptions.

idstring

Id of this answer (ap_ followed by 16 hex characters).

sessionstring

Session id to send with a follow-up prompt (as_ followed by 16 hex characters).

window_sourcestring

Where this turn's as_of and from came from: request (this request sent at least one), session (a follow-up that sent neither, so the session's own were kept) or default (a first prompt that sent neither: the latest date in the release, with no from).

messagestring

The explanation of the graph, in Markdown.

absent_entitiesobject[]

Entities you asked about that had no event on or before as_of: {type, name, normalized, reason}. They did not exist in the graph at that date, so they are left out of the answer. Present only when not empty.

absent_entities[].typestring

Entity type: ORG, PERSON, GPE, LOC or PRODUCT.

absent_entities[].namestring

The entity's canonical name: an alias you sent resolves to it.

absent_entities[].normalizedstring

The entity's normalized spelling.

absent_entities[].reasonstring

Why the entity is absent: no relationship or event on or before as_of, so it does not exist in the graph at that point in time. To see it, send an as_of after its first event (Entity relationships gives an entity's first_seen).

graphobject

{nodes, edges, count, total, truncated}. nodes carry focus: true for the entities you asked about; edges are relationships, strongest first; total counts edges before the limit.

schemastring

Response schema name.

as_ofdate

The point in time the answer is computed for.

date_windowobject

The evidence window: from, to, archive_cutoff and include_live (always false).

releasestring

Immutable id of the graph release that answered.

took_msinteger

Server time in milliseconds.

Responses and errors

HTTP
200Request succeeded. The response body is shown in the panel on the right.
400invalid_request — The body is not valid JSON, is missing, or the request framing is broken. A request whose parameters are the problem is a 422 validation_error. Every error body, 401 included, is {error, message, status}.
401api_key_required — No API key was sent. Send it as Authorization: Bearer <key> or the api-key header.
401invalid_api_key — The API key is invalid or has been revoked.
404unknown_entity — No entity of that type has that name in this release. When the name exists under another type, the message says which.
404not_found — No endpoint has this path.
405method_not_allowed — The path exists but not for this method (a GET to a POST endpoint, or the reverse); the Allow header lists the methods it takes.
410cursor_expired — The cursor belongs to another release or request; restart from the first page.
422validation_error — A parameter the API cannot decode or validate: a missing required parameter, an unknown parameter, a value of the wrong type or outside its range (as_of outside the release's dates, a min_support below 1), or a date that does not exist, such as 2026-02-30. The message names the parameter and what is wrong.
422invalid_entity_type — The entity type is not one of ORG, PERSON, GPE, LOC or PRODUCT, in an entity or in other_types or exclude_types. For a ticker, send its company as an ORG.
422unknown_predicate — A relationship type is not in the graph; list them with Relationship types.
422unprocessable_request — Each value is valid but not together, such as from after as_of.
422request_too_broad — The request ran out of its work budget before it could answer; narrow it.
429rate_limited — Too many requests for this key; wait for Retry-After.
501backend_not_configured — The Atlas backend is not configured for this deployment.
502backend_error — The Atlas backend could not be reached; retry shortly.
503unavailable — The service is busy or starting; retry after Retry-After.
503api_key_auth_unavailable — API key authentication is temporarily unavailable; retry shortly.
503api_key_metering_unavailable — API key usage metering is temporarily unavailable, so the request was not served; wait for the Retry-After header (30 seconds) and retry.
504request_timeout — The request took longer than 25 seconds; narrow it.
504backend_timeout — The Atlas backend did not answer before the deadline; retry.
404unknown_session — No session with this id exists for your API key: it was never issued, or it belongs to another key. Omit session to start a new conversation.
409session_busy — The session's previous prompt is still running: of two follow-ups sent at once on one session, one runs and the other gets this. Wait, then send it again.
410session_expired — Your own session was started on a graph release that has since been replaced; start a new conversation without session.
502upstream_error — The language model failed; retry.
504upstream_timeout — The language model did not answer in time; retry.