---
title: "POST /api/v1/scan"
method: POST
path: "/api/v1/scan"
tags: ["apex"]
---

# POST /api/v1/scan

`POST /api/v1/scan`

Processes the scan request.

## Request body

- Scanrequest — This is a scan request. Scan enforces no policy, so unlike police it can be used as a plain analyzer with no destination in mind: provider, destination and direction may all be left out.
  - `analyzers` string[] — The analyzers parameter allows for customizing which analyzers should be used, overriding the default selection. Each analyzer entry can optionally include a prefix to modify its behavior: - No prefix: Runs only the specified analyzers and any dependencies required for deeper analysis (slower but more acurate). - '+' (enable): Activates an analyzer that is disabled by default. - '-' (disable): Disables an analyzer that is enabled by default. - '@' (direct execution): Runs the analyzer immediately, bypassing the deeper analysis (faster but less acurate). An analyzers entry can be specified using: - The analyzer name (e.g., 'Toxicity detector') - The analyzer ID (e.g., 'en-text-toxicity-detector') - The analyzer group (e.g., 'Detectors') - A detector name (e.g., 'toxic') - A detector label (e.g., 'insult') - A detector group (e.g., 'Malcontents') If left empty, all default analyzers will be executed.
  - `anonymization` 'FixedSize' | 'VariableSize' — How to anonymize the data. If deanonymize is true, then VariablSize is required.
  - `conversationID` string — Identifies the conversation this request belongs to. Apex records it on the resulting log, which is what groups the successive requests of one conversation together in the logs and in the conversation view, and it is also made available to the analyzers and to policies. Send the same value on every request of the same conversation.
  - `destination` Requestdestination — RequestDestination holds the destination information for a request. When app and component are set, the request is evaluated against the app component's policies instead of a provider. In that case, the provider field must not be set. On the police API an egress request must name its target, so app and component are required unless a provider is given. On the scan API they may be left out to run a plain scan that targets nothing.
    - `app` string — The name of the destination application. Only takes effect together with component: setting one without the other counts as no destination at all.
    - `component` string — The component of the destination application. Only takes effect together with app: setting one without the other counts as no destination at all.
    - `host` string — The host name of the destination. Optional, for logging enrichment.
    - `ip` string — The destination IP address. Optional, for logging enrichment.
    - `port` integer — The destination port of the request. Optional: when it is not set, 443 is assumed. It is made available to policies as destinationPort.
  - `direction` 'Egress' | 'Ingress' — The direction of the traffic for this request, relative to the app component the caller's token identifies. Determines whether the ingress or the egress policies of that app component are evaluated.
  - `extractions` Extractionrequest[] — The extractions to request.
    - `data` string, byte — The binary data to request extraction for.
    - `kind` 'Message' | 'Thinking' | 'ToolDefinition' | 'ToolInput' | 'ToolOutput' | 'File' | 'Resource' | 'Event' — The kind of content carried by this extraction. Used together with role to label what the extracted blob represents so the UI can render it correctly and analyzers can dispatch appropriately: - Message: free-form natural language (default). - Thinking: model reasoning trace (e.g. Anthropic thinking, OpenAI reasoning, Gemini thought). - ToolDefinition: tool/function schema advertised to the model (name, description, JSON schema). - ToolInput: structured arguments the model passes when invoking a tool. - ToolOutput: result returned to the model after a tool call. - File: uploaded or attached file payload. - Resource: externally-supplied context injected into the prompt (RAG document, search result, MCP resource). - Event: control or lifecycle marker with no analyzable content.
    - `role` 'User' | 'Assistant' | 'System' | 'Tool' — The role of the message represented by this extraction.
    - `toolResults` Toolresult[] — Tool call results which are passed in to this request.
      - `callID` string, required — The ID of the tool use as previously returned by a tool use response.
      - `content` string — The content of the tool call results.
      - `isError` boolean — Indicates if the tool call failed.
      - `name` string — The name of the tool used.
      - `serverName` string — The server name of the tool used.
    - `toolUses` Tooluse[] — Tool uses as requested by a model.
      - `callID` string, required — The ID of the tool use which the user or application must pass when posting back the tool call results.
      - `input` string — The input to the tool call. This should be a JSON object which must conform to the JSON schema as was previously defined for the tool.
      - `name` string, required — The name of the tool to call.
      - `serverName` string — The name of the remote MCP server that will execute this call.
  - `keywords` string[] — The keywords found during classification.
  - `messages` string[] — Messages to process and provide detections for. Use data in extractions for processing binary data.
  - `provider` string — The name of the provider to use for policy resolutions. Must not be set when destination app and component are set. On the police API an egress request must set either this or the destination app and component. On the scan API both may be omitted to run a plain scan that targets nothing.
  - `redactContent` boolean — If true, the user data is removed from the logged roundtrip, while the analysis and all other metadata are kept. This only affects what is logged: the response of this call always carries the full content.
  - `redactContentBypass` boolean — If true, and redactContent is also true, the user data is kept in the logged roundtrip whenever the decision reports a violation, so that the content behind a denial stays available for review. It has no effect on its own.
  - `redactions` string[] — The redactions to perform if they are detected.
  - `source` Requestsource — RequestSource holds the information about where a request originates from. On egress, the source is the app component the caller's token identifies, and this only carries optional enrichment. On ingress, the source is whoever is calling into that app component, and the token field identifies it. The username and userClaims are only used when no token is given, or when the given token carries no user identity of its own: identity derived from a validated token always wins over identity asserted in the request body.
    - `ip` string — The source IP address of the request. Optional, for logging enrichment.
    - `token` string — A valid token identifying the source of the request. Only applicable when the direction is Ingress. This can either be a component token, in which case the request principal is populated with the source app and component identity, or a token issued for an application component OAuth client, in which case the source app and component as well as the user identity are both derived from it.
    - `userClaims` string[] — The optional user claims of the request. This can be an incomplete list, and claims can be mapped to different keys.
    - `username` string — The optional username of the request.
  - `tools` object — The various tools used by the request.
  - `trace` Requesttrace — RequestTrace is the trace context a caller hands to the Apex APIs so that this request is placed inside the caller's own trace. It is deliberately narrower than the trace reference reported back on the response: the caller only says which trace this request belongs to and which span to hang it under. Everything else about the span, meaning its ID, name, kind, start, end and status, describes what Apex actually did, so Apex generates it.
    - `parentSpanID` string — The span ID, as a hex encoded string, that the span Apex creates for this request must be a child of. Leave it out when you have a trace but no span to attach this request to, in which case the span Apex creates becomes a root span of that trace.
    - `traceID` string, required — The trace ID, as a hex encoded string, this request belongs to.
  - `type` 'Input' | 'Output' — The type of text.

## Response `200`

The request was processed. Scan renders no verdict of its own, so the response carries the analysis with a decision of NotApplicable.

- Scanresponse — This is a scan response.
  - `ID` string — ID is the identifier of the object.
  - `alerts` Alertevent[] — List of alerts that got raised during the policy resolution.
    - `alertDefinition` string, required — The name of the alert definition that triggered the alert event.
    - `alertDefinitionNamespace` string — The namespace of the alert definition.
    - `principal` Principal, required — Describe the principal.
      - `IP` string — The source IP address of the request.
      - `app` Principalapp — Describes the principal information of an application.
        - `component` string — The component of the application request.
        - `labels` string[] — The list of labels attached to an application request.
        - `name` string — The name of the application.
        - `userClaims` string[] — The optional user claims of the request. This can be an incomplete list, and claims can be mapped to different keys.
        - `username` string — The optional username of the request.
        - `workloadGroupHash` string — The hash of the workload group this application belongs to.
        - `workloadGroupLabel` string — The label format of the workload group this application belongs to.
        - `workloadGroupSetHash` string — The hash of the workload group set this application belongs to.
        - `workloadGroupSetLabel` string — The label format of the workload group set this application belongs to.
      - `authType` 'Certificate' | 'UserToken' | 'AppToken' | 'Hostname' | 'Token' | 'ComponentToken' | 'External' — The type of authentication.
      - `claims` string[] — List of claims extracted from the user query.
      - `external` Principalexternal — Describes the principal information of an external request.
        - `userClaims` string[] — The optional user claims of the request. This can be an incomplete list, and claims can be mapped to different keys.
        - `username` string — The optional username of the request.
        - `workloadGroupHash` string — The hash of the workload group this application belongs to.
        - `workloadGroupLabel` string — The label format of the workload group this application belongs to.
        - `workloadGroupSetHash` string — The hash of the workload group set this application belongs to.
        - `workloadGroupSetLabel` string — The label format of the workload group set this application belongs to.
      - `teams` string[] — The teams that were used to authorize the request.
      - `tokenID` string — The ID (jid) of the token, if any.
      - `tokenName` string — The name of the token, if any.
      - `type` 'User' | 'App' | 'External', required — The type of principal.
      - `user` Principaluser — Describes the principal information of a user.
        - `name` string — Identification bit that will be used to identify the origin of the request.
        - `untrusted` boolean — If true, the data is not fully trusted (eg. loose identity).
    - `provider` string — The provider used that the alert came from.
    - `timestamp` string, date-time — When the alert event was raised.
  - `annotations` object — Annotations attached to the log.
  - `client` string — The client used to send the request.
  - `clientVersion` string — The version of the client used to send the request.
  - `contentRedacted` boolean — If true, the content of the extractions was stripped from the audit entry for this request, and only the analysis and other metadata were kept. It reports what actually happened, which is not the same as what was requested: redactContentBypass can leave the content in place.
  - `decision` 'Deny' | 'Allow' | 'Ask' | 'Report' | 'Bypassed' | 'ForbiddenUser' | 'Skipped' | 'Redirected' | 'NotApplicable' | 'Error' | 'UpstreamError' — User-facing outcome of the roundtrip. Reflects the policy engine's verdict, or in case of platform failure, the result of the failClose strategy (Deny on fail-close, Allow on fail-open, with structured error field carring the detail). NotApplicable is used by the scan and police APIs, which analyze content without rendering an enforcement decision. Error and UpstreamError stay in the allowed_choices list for backward compatibility with clients that still PUT those values; new round-trips never emit them — platform/upstream failures now surface via the structured Error field instead. NOTE: safe to drop Error and UpstreamError from this enum on or after 2026-07-19 (two months after the structured RoundtripError landed on 2026-05-19), once consumers have rolled forward.
  - `destination` Destination — Represents the destination that this request was made to.
    - `app` string — The name of the application that the domain belongs to.
    - `component` string — The component of the application that the domain belongs to.
    - `host` string — The host name of the request. Optional, matching the destination of a scan or police request: the caller may omit it, and it is only filled in when the resolved provider or app component declares a host of its own.
    - `ip` string — The destination IP address of the request.
    - `labels` string[] — The list of labels attached to the application request destination.
    - `workloadGroupHash` string — The hash of the workload group this application belongs to.
    - `workloadGroupLabel` string — The label format of the workload group this application belongs to.
    - `workloadGroupSetHash` string — The hash of the workload group set this application belongs to.
    - `workloadGroupSetLabel` string — The label format of the workload group set this application belongs to.
  - `error` Roundtriperror — Structured error info attached to a roundtrip when a non-user-facing platform stage or the upstream provider failed. Carries the platform-side detail (type, stage, message) for debugging and provider-health derivation. The Decision field still reflects the policy/processing outcome per existing semantics.
    - `message` string — Human-readable error message.
    - `previousDecision` 'Deny' | 'Allow' | 'Ask' | 'Report' | 'Bypassed' | 'ForbiddenUser' | 'Skipped' | 'Redirected' | 'NotApplicable' — The decision produced before the failClose or failOpen mutation flipped it. Set only when the user-facing Decision is the result of a platform-error override, so the audit log can surface what the policy would have decided otherwise.
    - `stage` 'Extraction' | 'Analysis' | 'ContentPolicy' | 'AssignPolicy' | 'AccessPolicy' | 'Upstream' | 'Redaction' — The pipeline component that produced the error. Combined with the Type axis on the parent round-trip (Input/Output) and the Offband flag, gives the full discrimination of where a platform/upstream failure originated. Each value maps to an ownership tier: Proofpoint AI Security-owned (Extraction, Analysis, AssignPolicy, AccessPolicy, Redaction), customer-owned (ContentPolicy), provider-owned (Upstream).
    - `type` 'PlatformError' | 'UpstreamError' — The source of the failure. PlatformError covers apex-side stages (Extraction, Analysis, ContentPolicy, AccessPolicy). UpstreamError covers anything attributable to the upstream provider (transport failures or non-2xx HTTP responses).
  - `extractions` Extraction[] — The extractions to log.
    - `PIIs` object — The PIIs found during classification. The current list can be obtained through the analyzers API by searching for detector groups 'PIIs' accross all analyzers. Example of PIIs detected: aba_routing_number, address, bank_account, bitcoin_wallet, credit_card, driver_license, email_address, itin_number, location, medical_license, money_amount, passport_number, person, phone_number, ssn. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `annotations` object — Annotations attached to the extraction.
    - `categories` Modality[] — The categories are remapping of the modalities in a more human friendly way.
      - `group` string, required — The group of data. The current list can be obtained through the analyzers API by searching for detector groups in the 'Modality' analyzer group. Example of group: application, archive, audio, code, document, executable, font, image, text, unknown, video.
      - `type` string, required — The type of data. The current list can be obtained through the analyzers API by searching for detector names in the 'Modality' analyzer group. Example of type: 3dsm, 3gp, 3mf, ace, ada, ai, apk, applebplist, appleplist, ar, arc, arj, asc, asf, asm, asp, au, autohotkey, autoit, avi, avif, awk, ax, batch, bazel, bcad, bib, bmp, bpg, brainfuck, brf, bzip, bzip3, c, cab, cat, cdf, chm, clojure, cmake, cobol, coff, coffeescript, com, cpl, cpp, crt, crx, cs, csproj, css, csv, dart, deb, dex, dey, dicom, diff, django, dll, dm, dmg, dmigd, dmscript, doc, dockerfile, docx, dotx, dwg, dxf, dylib, elf, elixir, emf, eml, epub, erb, erlang, exe, flac, flv, fortran, fpx, gemfile, gemspec, gif, gitattributes, gitmodules, gleam, go, gradle, groovy, gzip, h, h5, handlebars, haskell, hcl, heif, hlp, hpp, hta, htaccess, html, hwp, icns, ico, ics, ignorefile, ini, internetshortcut, ipynb, iso, jar, java, javabytecode, javascript, jinja, jng, jnlp, jp2, jpeg, json, jsonl, jsx, julia, jxl, ko, kotlin, latex, lha, license, lisp, lnk, lock, lua, lz, lz4, m3u, m4, macho, makefile, markdown, matlab, mht, midi, mkv, mp3, mp4, mpegts, mscompress, msi, msix, mui, mum, npy, npz, objectivec, ocaml, ocx, odex, odin, odp, ods, odt, ogg, one, onnx, otf, outlook, pascal, pcap, pdb, pdf, pebin, pem, perl, php, pickle, png, po, postscript, powershell, ppt, pptx, prolog, proteindb, proto, psd, python, pythonbytecode, pytorch, qoi, qt, r, randomascii, rar, rdf, rlib, rll, rpm, rst, rtf, ruby, rust, scala, scheme, scr, scss, sevenzip, sgml, shell, smali, snap, so, solidity, sql, sqlite, squashfs, srt, stlbinary, stltext, sum, svg, swf, swift, symlinktext, sys, tar, tcl, textproto, tga, thumbsdb, tiff, toml, torrent, tsv, tsx, ttf, twig, txt, txtascii, txtutf16, txtutf8, typescript, vba, vbe, vcxproj, verilog, vhdl, visio, vtt, vue, wad, wasm, wav, webm, webp, webtemplate, winregistry, wma, wmf, wmv, woff, woff2, xar, xcf, xls, xlsb, xlsx, xml, xpi, xz, yaml, yara, zig, zip, zlibstream, zst.
    - `confidentiality` number — The level of general confidentiality of the input.
    - `customDataTypes` object — The custom data types found during classification. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `data` string — The data extracted.
    - `dataSets` object — The data sets found during classification.
    - `detections` Textualdetection[] — The textual detections found while applying policies.
      - `end` integer — The end position of the detection in the original data.
      - `key` string — The key that is used in the name's place, If empty, a sequence of X's are used.
      - `name` string — The name of the detection.
      - `redacted` boolean — If true this detection has been redacted.
      - `redactedEnd` integer — The end position of the detection in the redacted data.
      - `redactedStart` integer — The start position of the detection in the redacted data.
      - `score` number — The confidence score of the detection.
      - `start` integer — The start position of the detection in the original data.
      - `type` 'Keyword' | 'PII' | 'Secret' | 'CDT' — The type of detection.
    - `exploits` object — The various exploits attempts. The current list can be obtained through the analyzers API by searching for detector groups 'Exploits' accross all analyzers. Example of exploits detected: jailbreak, prompt_injection, malicious_url. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `hash` string — The hash of the extraction.
    - `intent` object — The estimated intent embodied into the text. The current list can be obtained through the analyzers API by searching for detector groups 'Intent' accross all analyzers. Example of intent detected: explain, outline, summarize, write. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `internal` boolean — If true, this extraction is for internal use only. This can be used by agentic systems to mark an extraction as internal only as opposed to user facing.
    - `isFile` boolean — If true, the data of the extraction is a file.
    - `isStored` boolean — If true, indicates that the file has been stored.
    - `keywords` object — The keywords found during classification. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `kind` 'Message' | 'Thinking' | 'ToolDefinition' | 'ToolInput' | 'ToolOutput' | 'File' | 'Resource' | 'Event' — The kind of content carried by this extraction. Used together with role to label what the extracted blob represents so the UI can render it correctly and analyzers can dispatch appropriately: - Message: free-form natural language (default). - Thinking: model reasoning trace (e.g. Anthropic thinking, OpenAI reasoning, Gemini thought). - ToolDefinition: tool/function schema advertised to the model (name, description, JSON schema). - ToolInput: structured arguments the model passes when invoking a tool. - ToolOutput: result returned to the model after a tool call. - File: uploaded or attached file payload. - Resource: externally-supplied context injected into the prompt (RAG document, search result, MCP resource). - Event: control or lifecycle marker with no analyzable content.
    - `label` string — Contains events and other information that are not actual user content, and will not go through analysis.
    - `languages` object — The language of the classification. The current list can be obtained through the analyzers API by searching for detector groups 'Languages' accross all analyzers. Example of languages: chinese, english, french, german, gibberish, japanese, russian, spanish. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `malcontents` object — The various malcontents attempts. The current list can be obtained through the analyzers API by searching for detector groups 'Malcontents' accross all analyzers. Example of malcontents: biased, harmful, toxic. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `modalities` Modality[] — The modalities of data detected in the data.
      - `group` string, required — The group of data. The current list can be obtained through the analyzers API by searching for detector groups in the 'Modality' analyzer group. Example of group: application, archive, audio, code, document, executable, font, image, text, unknown, video.
      - `type` string, required — The type of data. The current list can be obtained through the analyzers API by searching for detector names in the 'Modality' analyzer group. Example of type: 3dsm, 3gp, 3mf, ace, ada, ai, apk, applebplist, appleplist, ar, arc, arj, asc, asf, asm, asp, au, autohotkey, autoit, avi, avif, awk, ax, batch, bazel, bcad, bib, bmp, bpg, brainfuck, brf, bzip, bzip3, c, cab, cat, cdf, chm, clojure, cmake, cobol, coff, coffeescript, com, cpl, cpp, crt, crx, cs, csproj, css, csv, dart, deb, dex, dey, dicom, diff, django, dll, dm, dmg, dmigd, dmscript, doc, dockerfile, docx, dotx, dwg, dxf, dylib, elf, elixir, emf, eml, epub, erb, erlang, exe, flac, flv, fortran, fpx, gemfile, gemspec, gif, gitattributes, gitmodules, gleam, go, gradle, groovy, gzip, h, h5, handlebars, haskell, hcl, heif, hlp, hpp, hta, htaccess, html, hwp, icns, ico, ics, ignorefile, ini, internetshortcut, ipynb, iso, jar, java, javabytecode, javascript, jinja, jng, jnlp, jp2, jpeg, json, jsonl, jsx, julia, jxl, ko, kotlin, latex, lha, license, lisp, lnk, lock, lua, lz, lz4, m3u, m4, macho, makefile, markdown, matlab, mht, midi, mkv, mp3, mp4, mpegts, mscompress, msi, msix, mui, mum, npy, npz, objectivec, ocaml, ocx, odex, odin, odp, ods, odt, ogg, one, onnx, otf, outlook, pascal, pcap, pdb, pdf, pebin, pem, perl, php, pickle, png, po, postscript, powershell, ppt, pptx, prolog, proteindb, proto, psd, python, pythonbytecode, pytorch, qoi, qt, r, randomascii, rar, rdf, rlib, rll, rpm, rst, rtf, ruby, rust, scala, scheme, scr, scss, sevenzip, sgml, shell, smali, snap, so, solidity, sql, sqlite, squashfs, srt, stlbinary, stltext, sum, svg, swf, swift, symlinktext, sys, tar, tcl, textproto, tga, thumbsdb, tiff, toml, torrent, tsv, tsx, ttf, twig, txt, txtascii, txtutf16, txtutf8, typescript, vba, vbe, vcxproj, verilog, vhdl, visio, vtt, vue, wad, wasm, wav, webm, webp, webtemplate, winregistry, wma, wmf, wmv, woff, woff2, xar, xcf, xls, xlsb, xlsx, xml, xpi, xz, yaml, yara, zig, zip, zlibstream, zst.
    - `relevance` number — The level of general organization relevance of the input. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `role` 'User' | 'Assistant' | 'System' | 'Tool' — The role of the message represented by this extraction.
    - `secrets` object — The secrets found during classification. The current list can be obtained through the analyzers API by searching for detector groups 'Secrets' accross all analyzers. Example of secrets: adafruit, alibaba, anthropic, apideck, apify, atlassian, aws_secret_key, buildkite, checkout, clickuppersonal, contentfulpersonalaccess, credentials, database_url_with_credentials, databricks, denodeploy, dfuse, digitalocean, discord_webhook, docker_hub, doppler, dropbox, endorlabs, fleetbase, flutterwave, frameio, freshdesk, fullstory, github, gitlab, gocardless, google_api, grafana, groq, huggingface, intra42, jwt, klaviyo, launchdarkly, linearapi, locationiq, mailchimp, mailgun, mapbox, maxmind, microsoft_teams_webhook, nightfall, notion, npm, openai, otp_auth_url, pagarme, paystack, planetscale, planetscaledb, portainer, posthog, postman, prefect, private_key, pubnub_publish, pubnub_subscribe, pulumi, ramp, razorpay, readme, rechargepayments, replicate, rubygems, salesforce, sendgrid, sendinblue, shopify, slack_access, slack_bot, slack_refresh, slack_user, slack_webhook, slack_workflow_webhook, sourcegraph, sourcegraphcody, squareapp, squareup, stripe, supabase, tailscale, tines_webhook, trufflehog, twilio, ubidots, voiceflow, web_url_with_credentials, zapierwebhook. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
    - `toolResults` Toolresult[] — Tool call results which are passed in to this request.
      - `callID` string, required — The ID of the tool use as previously returned by a tool use response.
      - `content` string — The content of the tool call results.
      - `isError` boolean — Indicates if the tool call failed.
      - `name` string — The name of the tool used.
      - `serverName` string — The server name of the tool used.
    - `toolUses` Tooluse[] — Tool uses as requested by a model.
      - `callID` string, required — The ID of the tool use which the user or application must pass when posting back the tool call results.
      - `input` string — The input to the tool call. This should be a JSON object which must conform to the JSON schema as was previously defined for the tool.
      - `name` string, required — The name of the tool to call.
      - `serverName` string — The name of the remote MCP server that will execute this call.
    - `topics` object — The topic of the classification. The current list can be obtained through the analyzers API, with the following conditions: 1. Includes all analyzers EXCEPT those in the 'Modality' group 2. Includes all analyzer detectors EXCEPT those in these groups: - 'Secrets' - 'Exploits' - 'Intent' - 'PIIs' - 'Malcontents' Example of topics: category/enterprise, category/healthcare, category/medical, category/personal, contains/blank_image, contains/certificate_signing_request, contains/database_url, contains/handwritten_text, contains/printed_text, contains/public_key, contains/ssh_public_key, contains/web_url, decoded/base32_data, decoded/base58_data, decoded/base64_data, decoded/base64_url_data, decoded/base85_data, decoded/hexadecimal_data, decoded/puny_code_data, decoded/quoted_printable_data, decoded/url_encoding_data, department/compliance, department/cybersecurity, department/finance, department/human_resources, department/information_technology, department/legal, department/logistics, department/marketing, department/performance_evaluation, department/product_management, department/project_management, department/sales, department/strategy, department/support, depict/check, depict/code, depict/document, depict/unclassified, depict/whiteboard, domain/commercial, domain/development, domain/financial, domain/general, domain/regulatory, domain/workforce, extracted/csv_cell_content, extracted/document_text_content, extracted/handwritten_text_content, extracted/pdf_text_content, extracted/pptx_text_content, extracted/spreadsheet_text_content, extracted/typed_text_content, timeframe/current_year, timeframe/future, timeframe/last_year, timeframe/next_year, timeframe/past, transcribed/audio_text_content. If a key is not present in the map that implies that entity was not detected. If an entity is detected then the value is a score. Here's how to interpret the scores: - confidence: 'low', 0 < score <0.33 - confidence: 'medium', 0.33 <= score < 0.66 - confidence: 'high', 0.66 <= score <= 1.
  - `hash` string — The hash of the input.
  - `latency` Latency — Holds information about latencies introduced by Apex.
    - `accessPolicy` integer — How much time it took to run the access policy in nanoseconds.
    - `analysis` integer — How much time it took to run content analysis in nanoseconds.
    - `assignPolicy` integer — How much time it took to run the assign policy in nanoseconds.
    - `contentAttribution` integer — How much time it took to attribute a content decision to conversation extractions in nanoseconds.
    - `contentPolicy` integer — How much time it took to run content policy in nanoseconds.
    - `extraction` integer — How much time it took to run input or output extraction in nanoseconds.
  - `mcpMessage` Mcpmessage — Represents MCP message details.
    - `direction` 'Client2Server' | 'Server2Client', required — The communication direction of the MCP message which can be from client to server, or from server to client.
    - `gatewayName` string — This is the MCP gateway name of the MCP message. This is only set for messages that are sent to or received from an MCP gateway.
    - `isError` boolean — IsError is true in case if a response is an error response as opposed to a result. Note that this is not the same as a result which has isError set to true within the result. This is a protocol level error. This will always be false for requests and notifications, and false for reponses when the response has a result.
    - `method` string — This is the method name of the request or notification. Contrary to MCP this is set on responses as well if possible in which case the format will be of the form method/params.name.
    - `paramsName` string — This is the parameters name of the request or notification.
    - `requestID` string — The ID of a request or a response. We always extract this as a string even though this can be a string or number in MCP. It is derived from the id field of a request or a response.
    - `sessionID` string — The session ID that this MCP message belongs to. This is strictly speaking not part of MCP, and this can be empty.
    - `type` 'Request' | 'Response' | 'Notification', required — The MCP message type which can be Request, Response or Notification.
  - `model` string — The model used by the request.
  - `namespace` string — The namespace of the object.
  - `pipelineName` string — The name of the particular pipeline that extracted the text.
  - `principal` Principal, required — Describe the principal.
    - `IP` string — The source IP address of the request.
    - `app` Principalapp — Describes the principal information of an application.
      - `component` string — The component of the application request.
      - `labels` string[] — The list of labels attached to an application request.
      - `name` string — The name of the application.
      - `userClaims` string[] — The optional user claims of the request. This can be an incomplete list, and claims can be mapped to different keys.
      - `username` string — The optional username of the request.
      - `workloadGroupHash` string — The hash of the workload group this application belongs to.
      - `workloadGroupLabel` string — The label format of the workload group this application belongs to.
      - `workloadGroupSetHash` string — The hash of the workload group set this application belongs to.
      - `workloadGroupSetLabel` string — The label format of the workload group set this application belongs to.
    - `authType` 'Certificate' | 'UserToken' | 'AppToken' | 'Hostname' | 'Token' | 'ComponentToken' | 'External' — The type of authentication.
    - `claims` string[] — List of claims extracted from the user query.
    - `external` Principalexternal — Describes the principal information of an external request.
      - `userClaims` string[] — The optional user claims of the request. This can be an incomplete list, and claims can be mapped to different keys.
      - `username` string — The optional username of the request.
      - `workloadGroupHash` string — The hash of the workload group this application belongs to.
      - `workloadGroupLabel` string — The label format of the workload group this application belongs to.
      - `workloadGroupSetHash` string — The hash of the workload group set this application belongs to.
      - `workloadGroupSetLabel` string — The label format of the workload group set this application belongs to.
    - `teams` string[] — The teams that were used to authorize the request.
    - `tokenID` string — The ID (jid) of the token, if any.
    - `tokenName` string — The name of the token, if any.
    - `type` 'User' | 'App' | 'External', required — The type of principal.
    - `user` Principaluser — Describes the principal information of a user.
      - `name` string — Identification bit that will be used to identify the origin of the request.
      - `untrusted` boolean — If true, the data is not fully trusted (eg. loose identity).
  - `provider` string — The provider to use.
  - `providerType` 'LLM' | 'MCPServer', required — The type of the provider.
  - `reasons` string[] — The various reasons returned by the policy engine.
  - `summary` Extractionsummary — Represents the summary of the extractions.
    - `categories` object — The categories are remapping of the modalities in a more human friendly way.
    - `confidenceLevels` object — The detected confidence levels.
    - `dataSets` object — The detected datasets.
    - `dataTypes` object — The detected dataTypes.
    - `exploits` object — The various exploits attempts.
    - `intent` object — The estimated intent embodied into the text.
    - `keywords` object — The keywords found during classification.
    - `languages` object — The language of the classification.
    - `malcontents` object — The various malcontents attempts.
    - `modalities` object — The modalities of data detected in the data.
    - `topics` object — The topic of the classification.
  - `time` string, date-time — Set the time of the message request.
  - `toolChoice` Toolchoice — Represents the tool choice that can be passed along together with tools.
    - `choice` 'Auto' | 'Any' | 'None' | 'Tool', required — Model instructions on tool choice.
    - `name` string — If choice is Tool, this will be set to the name of the tool to use.
  - `tools` object — The various tools used by the request.
  - `trace` Traceref — Holds all references to a trace which are also the essentials of the span data.
    - `kind` 'Unspecified' | 'Internal' | 'Server' | 'Client' | 'Producer' | 'Consumer' — The kind of the span.
    - `parentSpanID` string — The parent span ID that is being referenced as hex encoded string.
    - `spanEnd` string, date-time, required — When the span ended.
    - `spanID` string, required — The span ID that is being referenced.
    - `spanName` string, required — The name of the span that is being collected.
    - `spanStart` string, date-time, required — When the span started.
    - `statusCode` 'Unset' | 'OK' | 'Error' — Status Code of a span.
    - `statusMessage` string — A developer-facing human readable error message.
    - `traceID` string, required — The Trace ID that is being referenced as hex encoded string.
    - `transparentSpanID` string — The transparent span ID that is being referenced. If the application operates in transparent tracing mode, then this field must be set to the span ID that this span is originally referencing.
  - `type` 'Input' | 'Output' — The type of text.

## Other responses

- `400` — The request body could not be decoded, a header could not be parsed, or the destination app component or provider named by the request does not exist.
- `401` — The caller is not authenticated, or the token is not an application component token scoped to an apps project namespace.
- `403` — The caller is not authorized to use the scan API in this namespace.
- `415` — Neither the Accept nor the Content-Type header names a media type this API can produce or consume.
- `422` — The request was decoded but failed validation. The error data names the offending attribute.
- `429` — The rate limit of this Apex was exceeded. Retry later.
- `500` — Apex could not complete the request because running the analysis, the redaction or the conversion of the result into a response failed.

## Changes

- **2026-08-28** `0f21cd12148e` — 1 warning, 3 info
  - added the new `None` enum value to the `tools/additionalProperties/category` response property for the response status `200`
  - the `category` request property default value `None` was added
  - added the new `None` enum value to the request property `tools/additionalProperties/category`
  - the `category` response's property default value `None` was added for the status `200`
- **2026-08-20** `e850756435a6` — 1 warning
  - added the new `Redaction` enum value to the `error/stage` response property for the response status `200`
- **2026-08-12** `58d2295ee11e` — 1 info
  - added the optional property `latency/contentAttribution` to the response with the `200` status
- **2026-08-11** `010e99908a0e` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/acuvity/apis/apex-api/changes/api/v1/scan/post.md)

---

[API](https://skmtc.dev/acuvity/apis/apex-api.md) · [All operations](https://skmtc.dev/acuvity/apis/apex-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/acuvity/apex-api/revisions/0f21cd12148e/schema)
