Every API here is available over the APIs.io API and to AI agents over MCP.
{"openapi":"3.1.0","info":{"title":"Aignostics Platform API","description":"\nThe Aignostics Platform is a cloud-based service that enables organizations to access advanced computational pathology applications through a secure API. The platform provides standardized access to Aignostics' portfolio of computational pathology solutions, with Atlas H&E-TME serving as an example of the available API endpoints. \n\nTo begin using the platform, your organization must first be registered by our business support team. If you don't have an account yet, please contact your account manager or email support@aignostics.com to get started. \n\nMore information about our applications can be found on [https://platform.aignostics.com](https://platform.aignostics.com).\n\n**How to authorize and test API endpoints:**\n\n1. Click the \"Authorize\" button in the right corner below\n3. Click \"Authorize\" button in the dialog to log in with your Aignostics Platform credentials\n4. After successful login, you'll be redirected back and can use \"Try it out\" on any endpoint\n\n**Note**: You only need to authorize once per session. The lock icons next to endpoints will show green when authorized.\n\n","version":"1.8.0"},"servers":[{"url":"/api"}],"paths":{"/v1/applications":{"get":{"tags":["Public"],"summary":"List available applications","description":"Returns the list of the applications, available to the caller.\n\nThe application is available if any of the versions of the application is assigned to the caller's organization.\nThe response is paginated and sorted according to the provided parameters.","operationId":"list_applications_v1_applications_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page-size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"default":50,"title":"Page-Size"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Sort the results by one or more fields. Use `+` for ascending and `-` for descending order.\n\n**Available fields:**\n- `application_id`\n- `name`\n- `description`\n- `regulatory_classes`\n\n**Examples:**\n- `?sort=application_id` - Sort by application_id ascending\n- `?sort=-name` - Sort by name descending\n- `?sort=+description&sort=name` - Sort by description ascending, then name descending","title":"Sort"},"description":"Sort the results by one or more fields. Use `+` for ascending and `-` for descending order.\n\n**Available fields:**\n- `application_id`\n- `name`\n- `description`\n- `regulatory_classes`\n\n**Examples:**\n- `?sort=application_id` - Sort by application_id ascending\n- `?sort=-name` - Sort by name descending\n- `?sort=+description&sort=name` - Sort by description ascending, then name descending"}],"responses":{"200":{"description":"A list of applications available to the caller","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApplicationReadShortResponse"},"title":"Response List Applications V1 Applications Get"},"example":[{"application_id":"he-tme","name":"Atlas H&E-TME","regulatory_classes":["RUO"],"description":"The Atlas H&E TME is an AI application designed to examine FFPE (formalin-fixed, paraffin-embedded) tissues stained with H&E (hematoxylin and eosin), delivering comprehensive insights into the tumor microenvironment.","latest_version":{"number":"1.0.0","released_at":"2025-09-01T19:01:05.401Z"}},{"application_id":"test-app","name":"Test Application","regulatory_classes":["RUO"],"description":"This is the test application with two algorithms: TissueQc and Tissue Segmentation","latest_version":{"number":"2.0.0","released_at":"2025-09-02T19:01:05.401Z"}}]}}},"401":{"description":"Unauthorized - Invalid or missing authentication"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}":{"get":{"tags":["Public"],"summary":"Read Application By Id","description":"Retrieve details of a specific application by its ID.","operationId":"read_application_by_id_v1_applications__application_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationReadResponse"}}}},"403":{"description":"Forbidden - You don't have permission to see this application"},"404":{"description":"Not Found - Application with the given ID does not exist"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}/versions/{version}":{"get":{"tags":["Public"],"summary":"Application Version Details","description":"Get the application version details.\n\nAllows caller to retrieve information about application version based on provided application version ID.","operationId":"application_version_details_v1_applications__application_id__versions__version__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionReadResponse"},"example":{"version_number":"1.3.0","changelog":"New deployment","input_artifacts":[{"name":"whole_slide_image","mime_type":"image/tiff","metadata_schema":{"type":"object","title":"Slide Schema","description":"Schema of a slide.","$defs":{"LungCancerSpecimen":{"type":"object","title":"LungCancerSpecimen","required":["disease"],"properties":{"disease":{"const":"LUNG_CANCER","type":"string","title":"Disease"},"tissue":{"enum":["LUNG","LYMPH_NODE","LIVER","ADRENAL_GLAND","BONE","BRAIN","OTHER"],"type":"string","title":"Tissue","default":"OTHER"}},"additionalProperties":false}},"required":["checksum_base64_crc32c","staining_method","specimen"],"properties":{"checksum_base64_crc32c":{"type":"string","title":"Base64 encoded big-endian CRC32C checksum"},"staining_method":{"const":"H&E","type":"string","title":"Staining Method"},"specimen":{"anyOf":[{"$ref":"#/$defs/LungCancerSpecimen"}],"title":"Specimen"},"media_type":{"anyOf":[{"enum":["application/dicom","image/tiff","application/octet-stream","application/zip"],"type":"string"},{"type":"null"}],"title":"Media Type"},"resolution_mpp":{"anyOf":[{"type":"number","maximum":0.55,"minimum":0.08},{"type":"null"}],"title":"Resolution (mpp)"},"width_px":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Width (px)"},"height_px":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Height (px)"}},"additionalProperties":false}}],"output_artifacts":[{"name":"tissue_qc:segmentation_map_image","mime_type":"image/tiff","metadata_schema":{"type":"object","title":"SegmentationMapImageMetadata","description":"Metadata corresponding to a segmentation map image.","required":["checksum_base64_crc32c","width_px","height_px","class_colors"],"properties":{"checksum_base64_crc32c":{"type":"string","title":"Base64 encoded big-endian CRC32C checksum"},"width_px":{"type":"integer","title":"Width Px"},"height_px":{"type":"integer","title":"Height Px"},"media_type":{"const":"image/tiff","type":"string","title":"Media Type","default":"image/tiff"},"resolution_mpp":{"type":"number","title":"Resolution Mpp","maximum":0.55,"minimum":0.08},"class_colors":{"type":"object","title":"Class Colors","additionalProperties":{"type":"array","maxItems":3,"minItems":3,"prefixItems":[{"type":"integer","maximum":255,"minimum":0},{"type":"integer","maximum":255,"minimum":0},{"type":"integer","maximum":255,"minimum":0}]}}},"additionalProperties":false},"scope":"ITEM","visibility":"EXTERNAL"}],"released_at":"2025-04-16T08:45:20.655972Z"}}}},"403":{"description":"Forbidden - You don't have permission to see this version"},"404":{"description":"Not Found - Application version with given ID is not available to you or does not exist"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs":{"get":{"tags":["Public"],"summary":"List Runs","description":"List runs with filtering, sorting, and pagination capabilities.\n\nReturns paginated runs that were submitted by the user.","operationId":"list_runs_v1_runs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"application_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional application ID filter","examples":["tissue-segmentation","heta"],"title":"Application Id"},"description":"Optional application ID filter"},{"name":"application_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional Version Name","examples":["1.0.2","1.0.1-beta2"],"title":"Application Version"},"description":"Optional Version Name"},{"name":"external_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optionally filter runs by items with this external ID","examples":["slide_001","patient_12345_sample_A"],"title":"External Id"},"description":"Optionally filter runs by items with this external ID"},{"name":"custom_metadata","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"description":"Use PostgreSQL JSONPath expressions to filter runs by their custom_metadata.\n#### URL Encoding Required\n**Important**: JSONPath expressions contain special characters that must be URL-encoded when used in query parameters. Most HTTP clients handle this automatically, but when constructing URLs manually, please ensure proper encoding.\n\n#### Examples (Clear Format):\n- **Field existence**: `$.study` - Runs that have a study field defined\n- **Exact value match**: `$.study ? (@ == \"high\")` - Runs with specific study value\n- **Numeric comparison**: `$.confidence_score ? (@ > 0.75)` - Runs with confidence score greater than 0.75\n- **Array operations**: `$.tags[*] ? (@ == \"draft\")` - Runs with tags array containing \"draft\"\n- **Complex conditions**: `$.resources ? (@.gpu_count > 2 && @.memory_gb >= 16)` - Runs with high resource requirements\n\n#### Examples (URL-Encoded Format):\n- **Field existence**: `%24.study`\n- **Exact value match**: `%24.study%20%3F%20(%40%20%3D%3D%20%22high%22)`\n- **Numeric comparison**: `%24.confidence_score%20%3F%20(%40%20%3E%200.75)`\n- **Array operations**: `%24.tags%5B*%5D%20%3F%20(%40%20%3D%3D%20%22draft%22)`\n- **Complex conditions**: `%24.resources%20%3F%20(%40.gpu_count%20%3E%202%20%26%26%20%40.memory_gb%20%3E%3D%2016)`\n\n#### Notes\n- JSONPath expressions are evaluated using PostgreSQL's `@?` operator\n- The `$.` prefix is automatically added to root-level field references if missing\n- String values in conditions must be enclosed in double quotes\n- Use `&&` for AND operations and `||` for OR operations\n- Regular expressions use `like_regex` with standard regex syntax\n- **Please remember to URL-encode the entire JSONPath expression when making HTTP requests**\n\n ","title":"Custom Metadata"},"description":"Use PostgreSQL JSONPath expressions to filter runs by their custom_metadata.\n#### URL Encoding Required\n**Important**: JSONPath expressions contain special characters that must be URL-encoded when used in query parameters. Most HTTP clients handle this automatically, but when constructing URLs manually, please ensure proper encoding.\n\n#### Examples (Clear Format):\n- **Field existence**: `$.study` - Runs that have a study field defined\n- **Exact value match**: `$.study ? (@ == \"high\")` - Runs with specific study value\n- **Numeric comparison**: `$.confidence_score ? (@ > 0.75)` - Runs with confidence score greater than 0.75\n- **Array operations**: `$.tags[*] ? (@ == \"draft\")` - Runs with tags array containing \"draft\"\n- **Complex conditions**: `$.resources ? (@.gpu_count > 2 && @.memory_gb >= 16)` - Runs with high resource requirements\n\n#### Examples (URL-Encoded Format):\n- **Field existence**: `%24.study`\n- **Exact value match**: `%24.study%20%3F%20(%40%20%3D%3D%20%22high%22)`\n- **Numeric comparison**: `%24.confidence_score%20%3F%20(%40%20%3E%200.75)`\n- **Array operations**: `%24.tags%5B*%5D%20%3F%20(%40%20%3D%3D%20%22draft%22)`\n- **Complex conditions**: `%24.resources%20%3F%20(%40.gpu_count%20%3E%202%20%26%26%20%40.memory_gb%20%3E%3D%2016)`\n\n#### Notes\n- JSONPath expressions are evaluated using PostgreSQL's `@?` operator\n- The `$.` prefix is automatically added to root-level field references if missing\n- String values in conditions must be enclosed in double quotes\n- Use `&&` for AND operations and `||` for OR operations\n- Regular expressions use `like_regex` with standard regex syntax\n- **Please remember to URL-encode the entire JSONPath expression when making HTTP requests**\n\n ","examples":{"no_filter":{"summary":"No filter (returns all)","description":"Returns all items without filtering by custom metadata","value":"$"},"field_exists":{"summary":"Check if field exists","description":"Find applications that have a project field defined","value":"$.study"},"field_has_value":{"summary":"Check if field has a certain value","description":"Compare a field value against a certain value","value":"$.study ? (@ == \"abc-1\")"},"numeric_comparisons":{"summary":"Compare to a numeric value of a field","description":"Compare a field value against a numeric value of a field","value":"$.confidence_score ? (@ > 0.75)"},"array_operations":{"summary":"Check if an array contains a certain value","description":"Check if an array contains a certain value","value":"$.tags[*] ? (@ == \"draft\")"},"complex_filters":{"summary":"Combine multiple checks","description":"Combine multiple checks","value":"$.resources ? (@.gpu_count > 2 && @.memory_gb >= 16)"}}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"default":50,"title":"Page Size"}},{"name":"submitted_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter runs by the user who submitted them. Use the special value `me` to return only runs submitted by the current user.","examples":["me","auth0|123456789"],"title":"Submitted By"},"description":"Filter runs by the user who submitted them. Use the special value `me` to return only runs submitted by the current user."},{"name":"organization_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter runs by the organization of the submitter. Use the special value `my_org` to filter by the current user's organization.","examples":["my_org","org_acme"],"title":"Organization Id"},"description":"Filter runs by the organization of the submitter. Use the special value `my_org` to filter by the current user's organization."},{"name":"for_organization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter runs by organization ID. Available for superadmins (any org) and admins (own org only). When provided, returns all runs for the specified organization instead of only the caller's own runs.","title":"For Organization"},"description":"Filter runs by organization ID. Available for superadmins (any org) and admins (own org only). When provided, returns all runs for the specified organization instead of only the caller's own runs."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Sort the results by one or more fields. Use `+` for ascending and `-` for descending order.\n\n**Available fields:**\n- `run_id`\n- `application_id`\n- `version_number`\n- `custom_metadata`\n- `submitted_at`\n- `submitted_by`\n- `terminated_at`\n- `termination_reason`\n\n**Examples:**\n- `?sort=submitted_at` - Sort by creation time (ascending)\n- `?sort=-submitted_at` - Sort by creation time (descending)\n- `?sort=state&sort=-submitted_at` - Sort by state, then by time (descending)\n","title":"Sort"},"description":"Sort the results by one or more fields. Use `+` for ascending and `-` for descending order.\n\n**Available fields:**\n- `run_id`\n- `application_id`\n- `version_number`\n- `custom_metadata`\n- `submitted_at`\n- `submitted_by`\n- `terminated_at`\n- `termination_reason`\n\n**Examples:**\n- `?sort=submitted_at` - Sort by creation time (ascending)\n- `?sort=-submitted_at` - Sort by creation time (descending)\n- `?sort=state&sort=-submitted_at` - Sort by state, then by time (descending)\n"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RunReadResponse"},"title":"Response List Runs V1 Runs Get"}}}},"404":{"description":"Run not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public"],"summary":"Initiate Run","description":"This endpoint initiates a processing run for a selected application and version, and returns a\n`run_id` for tracking purposes.\n\nItem processing occurs asynchronously, allowing you to retrieve results for individual items as\nsoon as they complete processing. The system typically processes items in batches.\n\n### Payload\n\nThe payload includes `application_id`, optional `version_number`, and `items` base fields.\n\n`application_id` is the unique identifier for the application.\n`version_number` is the semantic version to use. If not provided, the latest version available to\nyou will be used.\n\n`items` includes the list of the items to process (slides, in case of the Atlas H&E-TME\napplication). Every item has a set of standard fields defined by the API, plus\n`input_artifacts[].metadata`, whose shape is defined by the chosen application version.\n\nBelow is an example payload for initiating an Atlas H&E-TME (`he-tme`) run:\n\n```json\n{\n \"application_id\": \"he-tme\",\n \"items\": [\n {\n \"external_id\": \"slide_1\",\n \"custom_metadata\": {\n \"case\": \"abc\"\n },\n \"input_artifacts\": [\n {\n \"name\": \"whole_slide_image\",\n \"download_url\": \"https://example-bucket.s3.amazonaws.com/slide1.tiff?signature=...\",\n \"metadata\": {\n \"checksum_base64_crc32c\": \"64RKKA==\",\n \"staining_method\": \"H&E\",\n \"specimen\": {\n \"disease\": \"LUNG_CANCER\",\n \"tissue\": \"LUNG\"\n },\n \"media_type\": \"image/tiff\",\n \"width_px\": 136223,\n \"height_px\": 87761,\n \"resolution_mpp\": 0.2628238\n }\n }\n ]\n }\n ]\n}\n```\n\n> **The example above is a snapshot, not a contract.** Applications are released independently of\n> this API, so the `input_artifacts[].metadata` shape shown here may lag behind the version you are\n> running. The authoritative schema for a version is always `input_artifacts[].metadata_schema`\n> from `GET /v1/applications/{application_id}/versions/{version}`. That schema rejects unknown\n> properties, so a stale field name will fail validation with `400`.\n\n| Parameter | Description |\n| :---- | :---- |\n| `application_id` **required** | Unique ID for the application |\n| `version_number` optional | Semantic version of the application. If not provided, the latest version available to you will be used |\n| `items` **required** | List of submitted items, i.e. whole slide images (WSIs), with the parameters described below |\n| `external_id` **required** | Unique WSI name or ID for easy reference to items, provided by the caller. Must be unique across all items of the run |\n| `custom_metadata` optional | Free-form JSON stored verbatim alongside the run or item. Not processed or validated by the platform, and not application-specific |\n| `input_artifacts` **required** | List of provided artifacts for a WSI. Atlas H&E-TME receives 1 artifact per slide (the slide itself); other applications may take more, e.g. a slide plus a segmentation map |\n| `name` **required** | Name of the artifact as declared by the application version. Atlas H&E-TME accepts only `\"whole_slide_image\"` |\n| `download_url` **required** | Signed URL to the input file in S3 or GCS. Should be valid for at least 6 days |\n\nThe remaining fields below live inside `input_artifacts[].metadata` and are governed by the\napplication version's `metadata_schema`. The following applies to Atlas H&E-TME:\n\n| Metadata field | Description |\n| :---- | :---- |\n| `checksum_base64_crc32c` **required** | Base64-encoded big-endian CRC32C checksum of the WSI image |\n| `staining_method` **required** | WSI stain bio-marker; Atlas H&E-TME supports only `\"H&E\"` |\n| `specimen.disease` **required** | One of `BREAST_CANCER`, `LUNG_CANCER`, `COLORECTAL_CANCER`, `BLADDER_CANCER`, `LIVER_CANCER`, `PROSTATE_CANCER`, `PANCREATIC_CANCER`, `STOMACH_CANCER`, `OVARIAN_CANCER`, or `OTHER` |\n| `specimen.tissue` optional | Tissue of origin. Allowed values depend on `disease`; defaults to `OTHER` when omitted |\n| `media_type` optional | Media format of the WSI: `image/tiff` (.tiff/.tif), `application/dicom` (DICOM), `application/zip` (zipped DICOM), or `application/octet-stream` (.svs) |\n| `resolution_mpp` optional | Resolution of the WSI in micrometers per pixel |\n| `width_px` optional | Number of pixels of the WSI in the X dimension |\n| `height_px` optional | Number of pixels of the WSI in the Y dimension |\n\n### Response\n\nThe endpoint returns the run UUID. After that, the job is scheduled for execution in the\nbackground.\n\nTo check the status of the run, call `GET /v1/runs/{run_id}` with the returned run UUID.\n\n### Rejection\n\nBeyond authentication, authorization, and malformed-input errors, the request is rejected with\n`402 Payment Required` when a quota limit would be exceeded. See the quota documentation for\ndetails.","operationId":"create_run_v1_runs_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCreationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCreationResponse"}}}},"404":{"description":"Application or application version not found"},"400":{"description":"Bad Request - Input validation failed"},"402":{"description":"Payment Required - A quota limit (slides per run, or monthly slides) would be exceeded by this run"},"403":{"description":"Forbidden - You don't have permission to create this run"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}":{"get":{"tags":["Public"],"summary":"Get run details","description":"This endpoint allows the caller to retrieve the current status of a run along with other relevant run details.\n A run becomes available immediately after it is created through the `POST /v1/runs/` endpoint.\n\n To download the output results, use `GET /v1/runs/{run_id}/` items to get outputs for all slides.\nAccess to a run is restricted to the user who created it, or users with an active grant or valid share token.","operationId":"get_run_v1_runs__run_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Run id, returned by `POST /v1/runs/` endpoint","title":"Run Id"},"description":"Run id, returned by `POST /v1/runs/` endpoint"},{"name":"share_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Share token for accessing shared runs","title":"Share Token"},"description":"Share token for accessing shared runs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunReadResponse"}}}},"404":{"description":"Run not found because it was deleted."},"403":{"description":"Forbidden - You don't have permission to see this run"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/cancel":{"post":{"tags":["Public"],"summary":"Cancel Run","description":"The run can be canceled by the user who created the run.\n\nThe execution can be canceled any time while the run is not in the terminated state. The\npending items of a canceled run will not be processed and will not add to the cost.\n\nWhen the run is canceled, the already completed items remain available for download.","operationId":"cancel_run_v1_runs__run_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Run id, returned by `POST /runs/` endpoint","title":"Run Id"},"description":"Run id, returned by `POST /runs/` endpoint"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Run not found"},"403":{"description":"Forbidden - You don't have permission to cancel this run"},"409":{"description":"Conflict - The Run is already cancelled"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/items":{"get":{"tags":["Public"],"summary":"List Run Items","description":"List items in a run with filtering, sorting, and pagination capabilities.\n\nReturns paginated items within a specific run. Results can be filtered\nby `item_id`, `external_ids`, `custom_metadata`, `terminated_at`, and `termination_reason` using JSONPath expressions.\n\n## JSONPath Metadata Filtering\nUse PostgreSQL JSONPath expressions to filter items using their custom_metadata.\n\n### Examples:\n- **Field existence**: `$.case_id` - Results that have a case_id field defined\n- **Exact value match**: `$.priority ? (@ == \"high\")` - Results with high priority\n- **Numeric comparison**: `$.confidence_score ? (@ > 0.95)` - Results with high confidence\n- **Array operations**: `$.flags[*] ? (@ == \"reviewed\")` - Results flagged as reviewed\n- **Complex conditions**: `$.metrics ? (@.accuracy > 0.9 && @.recall > 0.8)` - Results meeting performance thresholds\n\n## Notes\n- JSONPath expressions are evaluated using PostgreSQL's `@?` operator\n- The `$.` prefix is automatically added to root-level field references if missing\n- String values in conditions must be enclosed in double quotes\n- Use `&&` for AND operations and `||` for OR operations","operationId":"list_run_items_v1_runs__run_id__items_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Run id, returned by `POST /v1/runs/` endpoint","title":"Run Id"},"description":"Run id, returned by `POST /v1/runs/` endpoint"},{"name":"share_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Share token for accessing shared runs","title":"Share Token"},"description":"Share token for accessing shared runs"},{"name":"item_id__in","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","format":"uuid"}},{"type":"null"}],"description":"Filter for item ids","title":"Item Id In"},"description":"Filter for item ids"},{"name":"external_id__in","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter for items by their external_id from the input payload","title":"External Id In"},"description":"Filter for items by their external_id from the input payload"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ItemState"},{"type":"null"}],"description":"Filter items by their state","title":"State"},"description":"Filter items by their state"},{"name":"termination_reason","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ItemTerminationReason"},{"type":"null"}],"description":"Filter items by their termination reason. Only applies to TERMINATED items.","title":"Termination Reason"},"description":"Filter items by their termination reason. Only applies to TERMINATED items."},{"name":"custom_metadata","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"description":"JSONPath expression to filter items by their custom_metadata","title":"Custom Metadata"},"description":"JSONPath expression to filter items by their custom_metadata","examples":{"no_filter":{"summary":"No filter (returns all)","description":"Returns all items without filtering by custom metadata","value":"$"},"field_exists":{"summary":"Check if field exists","description":"Find items that have a project field defined","value":"$.project"},"field_has_value":{"summary":"Check if field has a certain value","description":"Compare a field value against a certain value","value":"$.project ? (@ == \"cancer-research\")"},"numeric_comparisons":{"summary":"Compare to a numeric value of a field","description":"Compare a field value against a numeric value of a field","value":"$.duration_hours ? (@ < 2)"},"array_operations":{"summary":"Check if an array contains a certain value","description":"Check if an array contains a certain value","value":"$.tags[*] ? (@ == \"production\")"},"complex_filters":{"summary":"Combine multiple checks","description":"Combine multiple checks","value":"$.resources ? (@.gpu_count > 2 && @.memory_gb >= 16)"}}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"default":50,"title":"Page Size"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Sort the items by one or more fields. Use `+` for ascending and `-` for descending order.\n **Available fields:**\n- `item_id`\n- `external_id`\n- `custom_metadata`\n- `terminated_at`\n- `termination_reason`\n\n**Examples:**\n- `?sort=item_id` - Sort by id of the item (ascending)\n- `?sort=-external_id` - Sort by external ID (descending)\n- `?sort=custom_metadata&sort=-external_id` - Sort by metadata, then by external ID (descending)","title":"Sort"},"description":"Sort the items by one or more fields. Use `+` for ascending and `-` for descending order.\n **Available fields:**\n- `item_id`\n- `external_id`\n- `custom_metadata`\n- `terminated_at`\n- `termination_reason`\n\n**Examples:**\n- `?sort=item_id` - Sort by id of the item (ascending)\n- `?sort=-external_id` - Sort by external ID (descending)\n- `?sort=custom_metadata&sort=-external_id` - Sort by metadata, then by external ID (descending)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ItemResultReadResponse"},"title":"Response List Run Items V1 Runs Run Id Items Get"}}}},"404":{"description":"Run not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/items/{external_id}":{"get":{"tags":["Public"],"summary":"Get Item By Run","description":"Retrieve details of a specific item (slide) by its external ID and the run ID.","operationId":"get_item_by_run_v1_runs__run_id__items__external_id__get"
# --- truncated at 32 KB (89 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/aignostics/refs/heads/main/openapi/aignostics-platform-api-openapi.json