# Changelog of HTTP Request - Batch API Calls \[$4/1K] (`automa-flow/http-request-batch`) Actor

- **URL**: https://apify.com/automa-flow/http-request-batch/changelog.md
- **Full Actor documentation**: https://apify.com/automa-flow/http-request-batch.md

## Changelog

### 2026-10-13: Response body in the results table

#### Improvements

- The results table includes `body` and `bodyText` next to the HTTP status, so a JSON or text response is visible without opening the raw row.
- Prices, request behavior and the saved fields are unchanged.

### 2026-09-29: Fewer failed runs and a place to report one

#### Improvements

- A batch longer than `maxRequests` no longer fails the whole run. The first `maxRequests` requests are sent, and each remaining one gets an uncharged `CANCELLED` row with `errorType` `MAX_REQUESTS_EXCEEDED`, so you can send it in another run by `inputIndex` or `lookupKey`. `RUN_SUMMARY.overMaxRequests` counts them. If your workflow relied on the run failing for an oversized batch, check that count or the row status instead.
- Spaces or a line break around a header value, for example a token pasted into `secretHeaders` with a trailing space, are trimmed instead of rejecting the run. Lowercase methods such as `post` are accepted.
- When a run fails for a reason you cannot fix in your input, for example every request timing out or an unexpected error, its status message now ends with a link to this Actor's Issues tab. Paste the message and the run ID into an Issue so the failure can be traced. Invalid input and a too small `maxTotalChargeUsd` keep their correction message without the link.
- Prices, charged events and the output of answered requests stay the same.

### 2026-09-26: Safer batches and clearer partial results

#### Fixes

- Unlimited run budgets and effective discounted or free event prices now work correctly.
- Malformed request URLs and headers are isolated per item. Callback failures keep the saved primary response, and a later system failure reports confirmed progress and charges.
- Each attempt now has a deadline covering DNS, redirects and the response body. Long `Retry-After` values stop retries instead of causing an early repeat.
- Response limits apply to compressed and decoded bytes. Gzip and deflate remain supported. Other encodings, concatenated gzip members and malformed compressed responses return an uncharged `RESPONSE_DECODING_ERROR`. JSON deeper than 64 levels or containing unsupported numbers is returned as `bodyText`.
- HEAD responses no longer fail merely because the resource has a large `Content-Length`.

#### Security

- Response cookies are never reused across requests or callbacks. URL credentials and reflected Bearer, Basic and cookie credentials are redacted, and transport logs no longer expose query strings.

#### Migration

- Use `latest` to receive these fixes, or update your pinned build. Existing inputs remain supported, except malformed HTTP headers and unsupported callback URL schemes are rejected earlier. Prices are unchanged.

### 2026-09-21: One result for every API call (0.1)

#### Features

- Send a list of GET, POST, PUT, PATCH and DELETE requests. Each call becomes one Dataset row with `status`, `httpStatus`, the response body and your `lookupKey`, so Clay, n8n and Make can match the response to the row that started it.
- Put shared credentials in `secretHeaders`. They are not written to Dataset rows or logs, and a redirect to another origin does not forward them.
- A non-2xx response stays `SUCCESS` with `ok` false unless you set `treatNon2xxAsError`. Timeouts, transport failures and blocked URLs stay explicit failures. One bad request does not stop the rest of the batch.
- This is the first published version, so there is no previous input to migrate.

#### Pricing

- A response that arrives costs $0.004. The run also has the $0.00005 start. Security blocks, timeouts, transport failures, retries, redirects and callbacks are not charged. Set `maxTotalChargeUsd` before an API or agent run. The minimum is $0.005.
