Month in Review - December 2025

Let’s look back on the year 2025 together. We released attachmentAV for Make, SDKs for the Virus and Malware Scan API, and many features you, our customers, have been asking for.

Month in Review - December 2025

Scanned 4,500,000 Files and 3,333 GB of data in 2025

2025 was a fantastic year for attachmentAV. Here are the astonishing numbers.

  • Scanned 4,500,000 files
  • Detected 2,500 infected files
  • Processed 3,333 GB of data

We want to thank all our customers for putting their trust in our services. We are committed to protecting your organization from threats in 2026.

Big Files, Small Effort: Introducing Async Polling

We’ve added a new way to get your scan results. You can now poll our API for the status of large file scans (up to 5GB), eliminating the need for complex webhook infrastructures. Secure, scalable, and developer-friendly.

Integrating the new polling mechanism is straightforward. Instead of providing a callbackUrl, you provide a traceId and poll the new GET /v1/scan/async/result API endpoint.

Here is a sample implementation using our JavaScript/TypeScript SDK:

import { AttachmentAVApi, Configuration, ResponseError } from '@attachmentav/virus-scan-sdk-ts';
import { randomUUID } from 'node:crypto';
import { exit } from 'node:process';

const config = new Configuration({
  apiKey: '<API_KEY_PLACEHOLDER>'
});

const api = new AttachmentAVApi(config);

const traceId = randomUUID();

async function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

await api.scanAsyncDownloadPost({
  asyncDownloadScanRequest: {
    downloadUrl: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
    traceId
  }
});
console.log('Async download submitted. Start to poll for scan result...');

let i = 0;
while(true) {
  try {
    console.log('.');
    const scanResult = await api.scanAsyncResultGet({
      traceId
    });
    console.log('Async download scan result:', scanResult);
    exit(0);
  } catch (e: unknown) {
    if (e instanceof ResponseError) {
      if (e.response.status === 404) {
        i++;
        if (i < 10) {
          await sleep(5000);
        } else {
          console.error('Async download scan result not found');
          exit(1);
        }
      } else {
        throw e;
      }
    } else {
      throw e;
    }
  }
}

Check out our examples for Java, Python, and JavaScript (mjs/cjs) as well.

What’s next?

Apart from small improvements, we are planning to launch our Virus and Malware Scan API in additional regions.

Feedback

We are reliant on your feedback. Firstly, we draw our motivation from contact with our customers. Secondly, we continue to develop attachmentAV based on the requirements and wishes of our customers. We look forward to receiving your message at mailto:hello@attachmentav.com.


Published on January 8, 2026 | Written by Andreas

Stay up-to-date

Monthly digest of security updates, new capabilities, and best practices.