{"openapi":"3.1.0","info":{"title":"GCITPs API","description":"\nRead-only, bounded query API for the GCITPs transformation-product graph.\n\n* **GET only.** Compounds are addressed by full uppercase InChIKey. No search in v1.\n* **Collections:** `limit` 1-100 (default 25), opaque signed `cursor`, `has_more`, `next_cursor`.\n  A page can hold fewer than `limit` items when the response size budget is reached.\n* **Graph endpoints** (neighbors, reactions) are exactly one `:Reaction` hop and are rejected with\n  422 `traversal-too-large` before execution for compounds whose stored reaction counts exceed the\n  live query budget.\n* **Reactions** are grouped per compound pair with at most 25 distinct variants; `reactions_truncated`\n  reports more.\n* **Time limits** (defaults): 1 s (detail, status, readiness) or 2 s (neighbors, reactions) per database\n  transaction; exceeding them returns 503 `query-timeout`. Nothing is retried.\n* **Rate limits** per client (defaults 60/min for metadata/detail/status, 10/min for neighbors/reactions;\n  the values in force are listed under `limits` at `GET /api/v1/`). 429 includes `Retry-After`.\n* **Request limits** (defaults): path > 256 bytes or query string > 1024 bytes returns 414; headers > 8 KB return 431;\n  unknown or repeated query parameters and request bodies return 422.\n* **Errors** use `application/problem+json` (RFC 9457) with a `request_id`.\n* **Caching:** successful data responses carry an `ETag`; send `If-None-Match` to receive 304. Health and\n  error responses are `no-store`.\n* **Availability:** individual endpoint groups can be switched off by the operators; they then return 503\n  `endpoint-disabled`, and `features` at `GET /api/v1/` shows what is enabled.\n","version":"1.0.0"},"paths":{"/api/v1/":{"get":{"tags":["meta"],"summary":"API information","description":"Static service metadata. No database access.","operationId":"api_root_api_v1__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiInfo"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/health/live":{"get":{"tags":["health"],"summary":"Liveness","description":"Answers whether the API process is running. Never touches Neo4j. Not rate limited.","operationId":"live_api_v1_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/health/ready":{"get":{"tags":["health"],"summary":"Readiness","description":"Runs `RETURN 1` with a 1 s transaction timeout. Separate rate-limit bucket from data endpoints.","operationId":"ready_api_v1_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/compounds/by-inchikey/{inchikey}":{"get":{"tags":["compounds"],"summary":"Compound detail","description":"Single indexed InChIKey lookup. Transaction timeout 1 s. Cacheable (ETag).","operationId":"get_compound_api_v1_compounds_by_inchikey__inchikey__get","parameters":[{"name":"inchikey","in":"path","required":true,"schema":{"type":"string","minLength":27,"maxLength":27,"pattern":"^[A-Z]{14}-[A-Z]{10}-[A-Z]$","description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized.","title":"Inchikey"},"description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompoundDetail"}}}},"404":{"description":"Compound not found.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed (the API is read-only).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/compounds/by-inchikey/{inchikey}/status":{"get":{"tags":["compounds"],"summary":"Compound status flags","description":"Stored flags and precomputed counts only; nothing is counted live. Transaction timeout 1 s.","operationId":"get_status_api_v1_compounds_by_inchikey__inchikey__status_get","parameters":[{"name":"inchikey","in":"path","required":true,"schema":{"type":"string","minLength":27,"maxLength":27,"pattern":"^[A-Z]{14}-[A-Z]{10}-[A-Z]$","description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized.","title":"Inchikey"},"description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompoundStatus"}}}},"404":{"description":"Compound not found.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed (the API is read-only).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/compounds/by-inchikey/{inchikey}/neighbors":{"get":{"tags":["compounds"],"summary":"One-hop :Reaction neighbors","description":"Distinct neighboring compounds ordered by inchikey with keyset cursor pagination. Exactly one hop. Rejected with 422 `traversal-too-large` before any expansion when the compound's stored reaction counts exceed the live query budget. Transaction timeout 2 s.","operationId":"get_neighbors_api_v1_compounds_by_inchikey__inchikey__neighbors_get","parameters":[{"name":"inchikey","in":"path","required":true,"schema":{"type":"string","minLength":27,"maxLength":27,"pattern":"^[A-Z]{14}-[A-Z]{10}-[A-Z]$","description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized.","title":"Inchikey"},"description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized."},{"name":"direction","in":"query","required":false,"schema":{"enum":["predecessors","successors","both"],"type":"string","description":"predecessors | successors | both","default":"both","title":"Direction"},"description":"predecessors | successors | both"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Page size, 1-100 (default 25).","title":"Limit"},"description":"Page size, 1-100 (default 25)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":1024},{"type":"null"}],"description":"Opaque, signed next_cursor from the previous page of the same request.","title":"Cursor"},"description":"Opaque, signed next_cursor from the previous page of the same request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NeighborPage"}}}},"404":{"description":"Compound not found.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed (the API is read-only).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}},"/api/v1/compounds/by-inchikey/{inchikey}/reactions":{"get":{"tags":["compounds"],"summary":"One-hop :Reaction relationships grouped per compound pair","description":"One item per (other compound, direction) pair, ordered by (other compound inchikey, direction) with keyset cursor pagination on that unique pair. Each item lists up to 25 distinct combinations of module, reaction rule, enzymes and biosystem with occurrence counts; `reactions_truncated` marks more. Exactly one hop. Rejected with 422 `traversal-too-large` before any expansion when the compound's stored reaction counts exceed the live query budget. Transaction timeout 2 s.","operationId":"get_reactions_api_v1_compounds_by_inchikey__inchikey__reactions_get","parameters":[{"name":"inchikey","in":"path","required":true,"schema":{"type":"string","minLength":27,"maxLength":27,"pattern":"^[A-Z]{14}-[A-Z]{10}-[A-Z]$","description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized.","title":"Inchikey"},"description":"Full uppercase InChIKey (14-10-1 letters), e.g. OKKJLVBELUTLKV-UHFFFAOYSA-N. Lowercase or other formats are rejected, not normalized."},{"name":"direction","in":"query","required":false,"schema":{"enum":["in","out","both"],"type":"string","description":"in | out | both","default":"both","title":"Direction"},"description":"in | out | both"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Page size, 1-100 (default 25).","title":"Limit"},"description":"Page size, 1-100 (default 25)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":1024},{"type":"null"}],"description":"Opaque, signed next_cursor from the previous page of the same request.","title":"Cursor"},"description":"Opaque, signed next_cursor from the previous page of the same request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionPage"}}}},"404":{"description":"Compound not found.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"405":{"description":"Method not allowed (the API is read-only).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"414":{"description":"Path or query string too long.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"422":{"description":"Validation error (path, query parameter, cursor) or traversal rejected by the live degree budget.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"429":{"description":"Rate limit or concurrency capacity exceeded. See Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"431":{"description":"Request headers too large.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"503":{"description":"Query timeout, database unavailable, or API/endpoint disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}},"components":{"schemas":{"ApiFeatures":{"properties":{"compound_lookup":{"type":"boolean","title":"Compound Lookup"},"neighbors":{"type":"boolean","title":"Neighbors"},"reactions":{"type":"boolean","title":"Reactions"},"graph_distance":{"type":"boolean","title":"Graph Distance"}},"additionalProperties":false,"type":"object","required":["compound_lookup","neighbors","reactions","graph_distance"],"title":"ApiFeatures"},"ApiInfo":{"properties":{"name":{"type":"string","title":"Name"},"api_version":{"type":"string","title":"Api Version"},"dataset_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Version","description":"Scientific dataset release identifier, or null if not configured."},"read_only":{"type":"boolean","title":"Read Only"},"documentation":{"type":"string","title":"Documentation"},"openapi":{"type":"string","title":"Openapi"},"limits":{"$ref":"#/components/schemas/ApiLimits"},"features":{"$ref":"#/components/schemas/ApiFeatures"}},"additionalProperties":false,"type":"object","required":["name","api_version","dataset_version","read_only","documentation","openapi","limits","features"],"title":"ApiInfo"},"ApiLimits":{"properties":{"default_page_size":{"type":"integer","title":"Default Page Size"},"max_page_size":{"type":"integer","title":"Max Page Size"},"max_reaction_variants_per_pair":{"type":"integer","title":"Max Reaction Variants Per Pair"},"light_requests_per_minute":{"type":"integer","title":"Light Requests Per Minute"},"graph_requests_per_minute":{"type":"integer","title":"Graph Requests Per Minute"}},"additionalProperties":false,"type":"object","required":["default_page_size","max_page_size","max_reaction_variants_per_pair","light_requests_per_minute","graph_requests_per_minute"],"title":"ApiLimits"},"CompoundDetail":{"properties":{"inchikey":{"type":"string","title":"Inchikey","description":"Full InChIKey (unique identifier)."},"gcitps_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcitps Id","description":"Stored GCITPs_ID (first InChIKey block at import)."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Primary compound name, when one exists."},"smiles":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Smiles"},"mass":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mass","description":"Major isotope mass as stored."},"is_dead_end":{"type":"boolean","title":"Is Dead End","description":"True when the stored is_deadend_product flag is true (the website's 'Dead-end TPs' definition)."},"is_pmt":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pmt","description":"InChIKey is in the curated dead-end PMT/PvM list (the website's 'Dead-end PMT TPs'). Null when that list is unavailable."},"predecessors_count":{"type":"integer","title":"Predecessors Count","description":"Stored count of incoming :Reaction relationships (edge count); 0 when no count is stored."},"successors_count":{"type":"integer","title":"Successors Count","description":"Stored count of outgoing :Reaction relationships (edge count); 0 when no count is stored."},"synonyms":{"items":{"type":"string"},"type":"array","title":"Synonyms","description":"Stored synonyms, de-duplicated, at most 100 and within the response size budget."},"synonyms_truncated":{"type":"boolean","title":"Synonyms Truncated","description":"True when more synonyms exist than were returned (count cap or size budget)."},"inchi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inchi"},"deadend_in_count":{"type":"integer","title":"Deadend In Count","description":"Precomputed number of incoming :deadend relationships as stored."},"deadend_out_count":{"type":"integer","title":"Deadend Out Count","description":"Precomputed number of outgoing :deadend relationships as stored."}},"additionalProperties":false,"type":"object","required":["inchikey","gcitps_id","title","smiles","mass","is_dead_end","is_pmt","predecessors_count","successors_count","synonyms","synonyms_truncated","inchi","deadend_in_count","deadend_out_count"],"title":"CompoundDetail"},"CompoundStatus":{"properties":{"inchikey":{"type":"string","title":"Inchikey"},"is_dead_end":{"type":"boolean","title":"Is Dead End","description":"Stored is_deadend_product flag is true."},"is_pmt":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pmt","description":"In the curated dead-end PMT/PvM list; null when unavailable."},"predecessors_count":{"type":"integer","title":"Predecessors Count"},"successors_count":{"type":"integer","title":"Successors Count"},"deadend_in_count":{"type":"integer","title":"Deadend In Count"},"deadend_out_count":{"type":"integer","title":"Deadend Out Count"}},"additionalProperties":false,"type":"object","required":["inchikey","is_dead_end","is_pmt","predecessors_count","successors_count","deadend_in_count","deadend_out_count"],"title":"CompoundStatus"},"HealthStatus":{"properties":{"status":{"type":"string","const":"ok","title":"Status"}},"additionalProperties":false,"type":"object","required":["status"],"title":"HealthStatus"},"NeighborItem":{"properties":{"inchikey":{"type":"string","title":"Inchikey","description":"Full InChIKey (unique identifier)."},"gcitps_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcitps Id","description":"Stored GCITPs_ID (first InChIKey block at import)."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Primary compound name, when one exists."},"smiles":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Smiles"},"mass":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mass","description":"Major isotope mass as stored."},"is_dead_end":{"type":"boolean","title":"Is Dead End","description":"True when the stored is_deadend_product flag is true (the website's 'Dead-end TPs' definition)."},"is_pmt":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pmt","description":"InChIKey is in the curated dead-end PMT/PvM list (the website's 'Dead-end PMT TPs'). Null when that list is unavailable."},"predecessors_count":{"type":"integer","title":"Predecessors Count","description":"Stored count of incoming :Reaction relationships (edge count); 0 when no count is stored."},"successors_count":{"type":"integer","title":"Successors Count","description":"Stored count of outgoing :Reaction relationships (edge count); 0 when no count is stored."},"is_predecessor":{"type":"boolean","title":"Is Predecessor","description":"A :Reaction relationship points from this compound to the anchor."},"is_successor":{"type":"boolean","title":"Is Successor","description":"A :Reaction relationship points from the anchor to this compound."}},"additionalProperties":false,"type":"object","required":["inchikey","gcitps_id","title","smiles","mass","is_dead_end","is_pmt","predecessors_count","successors_count","is_predecessor","is_successor"],"title":"NeighborItem"},"NeighborPage":{"properties":{"inchikey":{"type":"string","title":"Inchikey"},"direction":{"type":"string","enum":["predecessors","successors","both"],"title":"Direction"},"limit":{"type":"integer","title":"Limit"},"items":{"items":{"$ref":"#/components/schemas/NeighborItem"},"type":"array","title":"Items","description":"Distinct one-hop neighbors ordered by inchikey. May hold fewer than `limit` items when the response size budget is reached; `has_more` then stays true."},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"stored_counts":{"$ref":"#/components/schemas/StoredCounts","description":"The anchor's precomputed counts as stored; not a live count of paginated items."}},"additionalProperties":false,"type":"object","required":["inchikey","direction","limit","items","has_more","next_cursor","stored_counts"],"title":"NeighborPage"},"ProblemDetails":{"properties":{"type":{"type":"string","title":"Type"},"title":{"type":"string","title":"Title"},"status":{"type":"integer","title":"Status"},"detail":{"type":"string","title":"Detail"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProblemFieldError"},"type":"array"},{"type":"null"}],"title":"Errors"}},"additionalProperties":false,"type":"object","required":["type","title","status","detail"],"title":"ProblemDetails","description":"RFC 9457 problem document (served as application/problem+json)."},"ProblemFieldError":{"properties":{"location":{"type":"string","title":"Location"},"message":{"type":"string","title":"Message"}},"additionalProperties":false,"type":"object","required":["location","message"],"title":"ProblemFieldError"},"ReactionPage":{"properties":{"inchikey":{"type":"string","title":"Inchikey"},"direction":{"type":"string","enum":["in","out","both"],"title":"Direction"},"limit":{"type":"integer","title":"Limit"},"items":{"items":{"$ref":"#/components/schemas/ReactionPairItem"},"type":"array","title":"Items","description":"One item per one-hop compound pair, ordered by (other compound inchikey, direction). May hold fewer than `limit` items when the response size budget is reached; `has_more` then stays true."},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["inchikey","direction","limit","items","has_more","next_cursor"],"title":"ReactionPage"},"ReactionPairItem":{"properties":{"direction":{"type":"string","enum":["in","out"],"title":"Direction","description":"Relative to the anchor compound."},"source_inchikey":{"type":"string","title":"Source Inchikey"},"target_inchikey":{"type":"string","title":"Target Inchikey"},"reaction_count":{"type":"integer","title":"Reaction Count","description":"Total :Reaction relationships from source to target."},"reactions":{"items":{"$ref":"#/components/schemas/ReactionVariant"},"type":"array","title":"Reactions","description":"Distinct (module, reaction_rule, enzymes, biosystem) combinations in that order, at most 25."},"reactions_truncated":{"type":"boolean","title":"Reactions Truncated","description":"True when more than 25 distinct combinations exist."}},"additionalProperties":false,"type":"object","required":["direction","source_inchikey","target_inchikey","reaction_count","reactions","reactions_truncated"],"title":"ReactionPairItem"},"ReactionVariant":{"properties":{"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module","description":"Transformation module, e.g. Abiotic, Environmental."},"reaction_rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reaction Rule","description":"Name of the transformation (reaction) rule."},"enzymes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Enzymes","description":"Enzyme or condition label(s) as stored."},"biosystem":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Biosystem","description":"Biosystem, e.g. ABIOTIC."},"occurrences":{"type":"integer","title":"Occurrences","description":"Number of :Reaction relationships between this pair with exactly these values."}},"additionalProperties":false,"type":"object","required":["module","reaction_rule","enzymes","biosystem","occurrences"],"title":"ReactionVariant"},"StoredCounts":{"properties":{"predecessors_count":{"type":"integer","title":"Predecessors Count"},"successors_count":{"type":"integer","title":"Successors Count"}},"additionalProperties":false,"type":"object","required":["predecessors_count","successors_count"],"title":"StoredCounts"}}}}