Automation API

    Call DAP directly over HTTP.

    Authenticate with an API key, upload one binary per request, poll the durable job record, and fetch messages or structured findings.

    5

    API endpoints

    X-API-Key

    Authentication

    100 MB

    Default max upload

    1 file

    Per request

    Auth

    Base URL and API-key model.

    All routes except /health require a raw API key in the X-API-Key header.

    Use the API URL provided with access.

    Use the automation API base URL provided with your access details.

    Base URLs

    https://<dap-automation-api-base-url>

    Send the raw API key on every request.

    The service stores only a hash, so the raw key value is the secret you need to preserve. Requests without a valid key are rejected before the upload or poll flow starts.

    Authentication header

    X-API-Key: <raw-api-key>

    Upload

    Create a job with one multipart request.

    POST /v1/uploads accepts one file plus analysis options. The response returns a job id and stable follow-up URLs for status, messages, and findings.

    POST /v1/uploads

    Use multipart/form-data and send exactly one file payload. Folder workflows should call the endpoint once per file.

    Upload request

    curl -X POST "$DAP_AUTOMATION_API_URL/v1/uploads" \
      -H "X-API-Key: $DAP_API_KEY" \
      -F "file=@/path/to/sample.exe" \
      -F "analysisLevel=2" \
      -F "graphAnalysis=true" \
      -F "notifyEnabled=false" \
      -F "threadTitle=sample.exe"

    Successful response

    {
      "jobId": "1aea189c70d54608a6805d98e3ea75f0",
      "threadId": "sample.exe-e88eb7258227",
      "threadTitle": "sample.exe",
      "resultStatus": "queued",
      "statusUrl": "https://<dap-automation-api-base-url>/v1/jobs/1aea189c70d54608a6805d98e3ea75f0",
      "messagesUrl": "https://<dap-automation-api-base-url>/v1/jobs/1aea189c70d54608a6805d98e3ea75f0/messages",
      "findingsUrl": "https://<dap-automation-api-base-url>/v1/jobs/1aea189c70d54608a6805d98e3ea75f0/findings"
    }

    Accepted upload parameters

    analysisLevel is required. The rest are optional toggles and metadata that shape the created job and thread.

    file
    Required. The binary payload to analyze.
    analysisLevel
    Required. Integer from 0 through 3.
    graphAnalysis
    Optional. true or false.
    cryptoAnalysis
    Optional. true or false.
    notifyEnabled
    Optional. Controls completion email behavior for the created thread.
    threadTitle
    Optional. Human-readable display title for the created thread.

    Endpoints

    Poll status, read messages, fetch findings.

    The upload response gives you a job id. From there, the remaining endpoints let you watch progress, inspect thread output, and retrieve the structured findings payload.

    • GET

      /health

      Unauthenticated liveness check for the service.

    • POST

      /v1/uploads

      Create one DAP analysis job from one uploaded file.

    • GET

      /v1/jobs/{jobId}

      Poll durable job state including percent, phase, and artifact metadata.

    • GET

      /v1/jobs/{jobId}/messages

      Read the durable thread messages associated with the job.

    • GET

      /v1/jobs/{jobId}/findings

      Fetch the structured findings payload and optionally merge code-side detail.

    Poll the job record.

    Returns job metadata, lifecycle timestamps, progress fields, and artifact details once analysis is complete.

    Status request

    curl -H "X-API-Key: $DAP_API_KEY" \
      "$DAP_AUTOMATION_API_URL/v1/jobs/$JOB_ID"

    Example status response

    {
      "jobId": "1aea189c70d54608a6805d98e3ea75f0",
      "status": "complete",
      "percent": 100,
      "lastPhase": "complete",
      "createdAt": "2026-03-13T12:00:00+00:00",
      "completedAt": "2026-03-13T12:04:47+00:00",
      "artifactUrl": "https://presigned.example.com/sample.exe-analysis.zip",
      "artifactBundleName": "sample.exe-analysis.zip",
      "analysisMode": "native"
    }

    Fetch structured findings.

    When the job reaches complete, call the findings endpoint. Set includeCode=true to merge the code sidecar into the response.

    Findings request

    curl -H "X-API-Key: $DAP_API_KEY" \
      "$DAP_AUTOMATION_API_URL/v1/jobs/$JOB_ID/findings?includeCode=false"

    Retryable pending response

    {
      "error": "Findings are not available yet. Retry shortly.",
      "retryable": true
    }

    Operational notes

    What to expect from the direct API.

    The HTTP surface is intentionally narrow. It is built for durable upload, polling, and findings retrieval, not for exposing the private analysis runtime directly.

    • Uploads are single-file

      Multi-file or folder workflows should iterate the upload endpoint once per file.

    • Findings can lag terminal status

      A completed job can briefly return 409 with retryable=true while the findings payload is still being persisted.

    • Use one API key

      Send a valid DAP automation API key on each request.

    • Errors are explicit

      Expect 401 for missing or invalid keys, 403 for disabled keys, 400 for bad inputs, 413 for oversized uploads, and 502 for upstream routing failures.

    Need an API key for the automation API?

    Open DAP, then use your API key with the automation API URL provided with access.