Skip to content

feat: public API report lab parity - #10

Merged
batuhanisildak-malwation merged 8 commits into
mainfrom
feat/public-api-parity
Oct 19, 2026
Merged

batuhanisildak-malwation merged 8 commits into
mainfrom
feat/public-api-parity

Conversation

@batuhanisildak-malwation

@batuhanisildak-malwation batuhanisildak-malwation commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR targets main and contains the commits of #7, #8 and #9 (it merges #9, so verdict_state is removed here too). Merge #7, #9 and #8 first with merge commits; the diff of this PR then shrinks to its own changes.

What changed

  • Submissions: score breakdown, duration, tag author, metafields, file history, plan permissions on /me.
  • AI report: state fields and regenerate_ai_report(), which returns AiReportPending.
  • Indicators and IoCs: the V2 indicator fields, raw_type, artifact analysis fields, the source filter and get_artifact_jobs().
  • MITRE: items with technique usage.
  • Processes, behaviours and syscalls: incarnation fields, new filters, summary, facets, syscall search, the behaviour match summary and the raw downloads.
  • Kill chain, verdict, run, annotations (read and write) and run compare.
  • Network: sensor and threat source fields, ptr_domain, packets, endpoints, host flows with alerts, HTTPS PCAP and total_count from X-Total-Count.
  • Static scan: file info, CDR details, string facts and paged strings. Secrets that the sample contains come back in full.
  • URL analysis: score explanation, evidence and the approved browser sections.
  • IoC export (CSV, text, STIX, MISP) and the generated YARA rule of one artifact.
  • The fake API serves every new route with the API access rules and error codes.

Breaking changes

  • A private submission of another workspace raises NotFoundError (404 NOT_FOUND), not PermissionDeniedError.
  • The INVALID_UUID, SUBMISSION_PRIVATE and SUBMISSION_NOT_FOUND codes are removed, because the API no longer sends them.
  • An empty list filter raises ValueError before the request is sent.
  • verdict_state is removed (fix(TZ-1535): remove unused final state #9).

RateLimitError now carries code. A quota outage raises QuotaUnavailableError, which subclasses InternalServerError.

Tests

ruff check, ruff format --check, mypy and pytest with coverage pass (1234 tests, 93% coverage). uv build passes.

…y returns

- Accept float timestamps and scores, the info threat severity, the email and embedded artifact types, list CDR data and open platform values.
- Add the indicator, artifact, syscall, file, tag, network and threat fields that the API returns, the network exfil requests, paged SHA-256 search, the STIX download, the PDF status and wait, and the AI report with its pending state.
…lan permissions

- Add the score breakdown, overview duration, tag author, report metafields and file history to the submission detail.
- Add the AI report reason, error code and finalized flag, the AI quota and plan permissions on /me, and regenerate_ai_report.
Add the indicator, artifact job, MITRE, process, behaviour, syscall, kill chain,
network, static scan, URL score, IoC export, verdict, run, annotation and compare
data. Remove verdict_state. List methods return total_count from X-Total-Count.
…iour match methods

A private submission of another workspace now raises NotFoundError. Rate limit
errors carry their code, and a quota outage raises QuotaUnavailableError. Empty list
filters raise ValueError. The fake API follows the API order and codes.
@batuhanisildak-malwation
batuhanisildak-malwation changed the base branch from feat/network-row-source to main October 15, 2026 14:09
@batuhanisildak-malwation
batuhanisildak-malwation merged commit e718ebf into main Oct 19, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant