What Is a 207 Status Code?
The 207 Multi-Status HTTP status code is part of the Web Distributed Authoring and Versioning (WebDAV) extension to HTTP/1.1. Unlike standard status codes (like 200 OK or 404 Not Found), which report a single outcome for the entire request, 207 is designed to return multiple statuses for multiple resources within a single response.
Here’s why that matters:
Instead of making several requests (one per resource), a client can make one request and get back multiple results.
Each resource included in the response gets its own individual status (for example, some may succeed, others may fail).
The overall HTTP response carries the 207 code, signaling that the detailed results must be read from the body, usually formatted as an XML document.
This makes the 207 status code especially useful for batch operations, where a system needs to process actions like retrieving, updating, or deleting multiple files or resources at once.
Where does this show up in real-world systems?
Primarily in environments using WebDAV — an extension to HTTP that allows clients to manage resources on remote servers. It’s common in file management systems, collaborative document editing tools, or any system managing collections of resources.In short, 207 Multi-Status enables more efficient, aggregated communication between client and server, reducing the need for multiple separate HTTP requests and supporting partial success or partial failure cases.
207 Code References
For developers, the 207 status code isn’t just a concept — it’s directly accessible in many popular programming languages and frameworks through named constants or symbols.
This makes it easier to write clean, readable code without hardcoding raw numbers like 207
.
Here’s how you can reference 207 Multi-Status in various environments:
Ruby on Rails →
:multi_status
Symfony (PHP) →
Response::HTTP_MULTI_STATUS
.NET (C#) →
HttpStatusCode.MultiStatus
Rust →
http::StatusCode::MULTI_STATUS
Go (Golang) →
http.StatusMultiStatus
Python 3.5+ →
http.HTTPStatus.MULTI_STATUS
Apache HttpComponents Core (Java) →
org.apache.hc.core5.http.HttpStatus.SC_MULTI_STATUS
Angular (TypeScript) →
@angular/common/http/HttpStatusCode.MultiStatus
Why does this matter?
By using these built-in constants, you make your code:
More maintainable → no “magic numbers” scattered through your logic.
More readable → anyone reading your code knows immediately what
MultiStatus
refers to.Less error-prone → avoids accidental typos or mismatches with raw status codes.
Including these references in your article or documentation helps developer audiences quickly locate the exact implementation details they need for their projects.

- What is a 101 Status Code?
- What is a 102 Status Code?
- What is a 200 Status Code?
- What is a 201 Status Code?
- What is a 202 Status Code?
- What is a 208 Status Code?
- See All Status Code





How Does a 207 Multi-Status Response Work?
The 207 Multi-Status response is unique because it carries not just one outcome but a collection of outcomes — one for each resource involved in the request.
To handle this, the server returns an XML document in the response body, structured with specific elements.
Here’s what happens under the hood:
The root element of the XML is
<multistatus>
.
This container holds the complete multi-resource response.Inside
<multistatus>
, there are one or more<response>
elements.
Each<response>
represents a single resource that was part of the original request.Each
<response>
contains:An
<href>
→ identifying the resource (usually as a path or URL).A
<status>
→ showing the HTTP status code for the resource (such as 200 OK, 404 Not Found, or 403 Forbidden).
For example, if you request multiple files and some succeed while others fail, you get one 207 response overall — but each file’s result is broken down in its own <response>
element.
Here’s an example structure:
<multistatus>
<response>
<href>/file1</href>
<status>HTTP/1.1 200 OK</status>
</response>
<response>
<href>/file2</href>
<status>HTTP/1.1 404 Not Found</status>
</response>
</multistatus>
Important Behavior
The top-level HTTP status (207) only signals that the client needs to look inside the body for details.
It doesn’t mean all resources succeeded or failed — you must parse the XML to understand the individual results.For PROPFIND and PROPPATCH methods, the server may use the
<propstat>
element instead of<status>
to report the status of individual properties, not just the whole resource.
This design allows WebDAV (and other systems using 207) to deliver precise, multi-target feedback in a single, optimized response — something that simpler status codes can’t achieve.
Understanding the Response Format
The 207 Multi-Status response isn’t a simple yes/no result.
Instead, it uses a structured XML body that provides granular details about each resource involved in the request — and sometimes even the properties within those resources.
There are two main response formats you need to understand:
1️⃣ Using the <status>
Element
In the most common case, each <response>
element inside <multistatus>
contains:
An
<href>
→ identifying the specific resource.A
<status>
→ reporting the status of the entire resource (for example,200 OK
or404 Not Found
).
This format is used when you want to know the overall result for each resource, such as whether a file was deleted or whether a document exists.
2️⃣ Using the <propstat>
Element (for PROPFIND and PROPPATCH)
When working with WebDAV-specific methods like PROPFIND or PROPPATCH, things get more detailed.
Instead of just reporting the status of the whole resource, the server reports the status of individual properties using:
<propstat>
→ groups properties that share the same status.Inside
<propstat>
, you’ll find:<prop>
→ listing the properties.<status>
→ indicating the status of those properties.
This allows the server to say, for example:
“This resource exists, but only some of the properties you requested could be retrieved or updated.”
Example of a Mixed Response (Simplified)
<multistatus>
<response>
<href>/file1</href>
<propstat>
<prop><displayname/></prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop><getcontentlength/></prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>
In this case:
The
displayname
property was retrieved successfully.The
getcontentlength
property was not found.
Why Does This Matter?
Clients working with 207 responses cannot rely on just the top-level status.
They must:
Parse the XML body carefully.
Check both resource-level and property-level statuses.
Handle mixed outcomes gracefully (some parts succeed, others fail).
Ignoring this complexity leads to bugs, data mismatches, or partial failures going unnoticed.
Example of a 207 Multi-Status XML Payload
To fully understand how a 207 Multi-Status response looks in practice, let’s explore a realistic XML payload you might receive from a server handling multiple resources.
This is especially common when using WebDAV methods like PROPFIND or when performing batch operations.
Example: Retrieving Two Files
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
<multistatus xmlns="DAV:">
<response>
<href>/files/file1.txt</href>
<status>HTTP/1.1 200 OK</status>
</response>
<response>
<href>/files/file2.txt</href>
<status>HTTP/1.1 404 Not Found</status>
</response>
</multistatus>
What does this tell us?
file1.txt was successfully processed (200 OK).
file2.txt could not be found (404 Not Found).
Even though one file failed, the server delivers both results together in a single 207 response.
Example: Property-Level Results (for PROPFIND)
<multistatus xmlns="DAV:">
<response>
<href>/files/file1.txt</href>
<propstat>
<prop><displayname/></prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat>
<prop><getcontentlength/></prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>
</multistatus>
Here:
The
displayname
property was retrieved successfully.The
getcontentlength
property was not found, even though the resource itself exists.
Key Takeaways
Clients must parse the XML carefully, inspecting each
<response>
and its contained<status>
or<propstat>
sections.Partial success is expected: some resources or properties may succeed while others fail.
Ignoring the XML body means you risk missing critical details about what was or wasn’t processed.
Best Practices for Handling 207 Responses
Because the 207 Multi-Status response is structured and multi-layered, handling it correctly requires more care than simpler status codes like 200 or 404.
Here are the most important best practices to follow:
Always Parse the XML Body
The 207 response body contains the true details — the top-level HTTP status (207
) only tells you to look inside.
Make sure your client application parses:
Each
<response>
element (for each resource).The
<href>
to identify which resource the result applies to.The
<status>
or<propstat>
to get the actual outcome.
Skipping this parsing step can lead to missed failures or overlooked partial successes.
Handle Partial Success and Failure
With 207, you should never assume “all or nothing.”
It’s common to have mixed results — for example:
Some files were updated, others weren’t.
Some properties were set, others failed.
Your application logic should:
Aggregate the results.
Report or log individual failures.
Optionally retry or clean up failed parts, depending on the operation.
Ensure Your Client Supports WebDAV Standards
Many 207 responses appear when using WebDAV extensions like PROPFIND or PROPPATCH.
Before implementing support:
Verify your client libraries can handle WebDAV methods.
Confirm they support parsing complex multi-status responses.
If you’re building from scratch, test against real WebDAV servers or use existing, well-tested libraries.
Log Detailed Outcomes for Debugging
When dealing with multiple resources, debugging gets tricky if you only log the top-level result.
Always capture:
Which resources or properties succeeded.
Which failed, and why (status codes or error messages).
Any patterns (for example, permissions issues or missing resources).
This makes troubleshooting and maintenance much easier.
Test Edge Cases
Real-world multi-status responses can include:
Resources that partially exist or partially fail.
Unknown or unexpected status codes.
Mixed results that might break brittle client logic.
Make sure your implementation gracefully handles these cases without crashing or discarding valuable information.
Why This Matters
Ignoring these best practices can lead to:
Incomplete operations.
Silent failures that only surface later.
Poor user experience when partial success is misreported as total success.
By designing your systems carefully, you can turn the power of 207 into an efficiency gain rather than a maintenance headache.
Common Causes of a 207 Status Code
The 207 Multi-Status code doesn’t show up randomly — it appears in specific situations, usually tied to multi-resource or batch operations, especially under the WebDAV protocol.
Here’s a clear breakdown of why and when you might encounter it.
Batch Operations on Multiple Resources
When you issue a request that affects more than one resource, such as:
Deleting multiple files.
Updating metadata on several documents.
Moving or copying a group of resources.
The server responds with a single 207 response containing individual statuses for each resource, instead of sending separate responses or requests for each one.
Using WebDAV Methods (Like PROPFIND or PROPPATCH)
WebDAV is an extension to HTTP that enables advanced file and property management over the web.
Many of its methods, like:
PROPFIND
→ retrieve properties for resources.PROPPATCH
→ update properties on resources.
naturally return multi-status results because they operate over collections of items or properties, not just a single file or endpoint.
Mixed Outcomes
Sometimes, your request partly succeeds and partly fails — for example:
Some resources are accessible; others aren’t.
Some properties are writable; others fail due to permissions.
Instead of failing the whole request or falsely marking it as a success, the server returns a 207 response to report the granular results.
Server-Side Batch APIs or Aggregated Endpoints
Even outside WebDAV, some modern APIs or systems use batch endpoints that return results for multiple operations.
While they may or may not formally use 207, the multi-status concept applies, and systems designed for WebDAV compatibility often surface 207 responses when doing bulk operations.
Summary
If you’re seeing 207 responses, it’s typically because:
You’re working with batch or multi-resource operations.
You’re interacting with WebDAV-based systems.
Your request was partially successful, and the server wants to give you detailed feedback on each part.
Knowing these causes helps you design better client-side handling and anticipate the mixed-result nature of these operations.
How to Troubleshoot a 207 HTTP Status Code
While the 207 Multi-Status code is generally not an error (it signals mixed outcomes, not failure), it can still lead to problems if misunderstood or mishandled.
Here’s a step-by-step troubleshooting guide to help developers and system administrators when things go wrong.
1. Check if the Server and Client Support HTTP/1.1 and WebDAV
The 207 status code comes from the WebDAV protocol, which extends HTTP/1.1.
Make sure both the server and the client:
Support WebDAV methods like PROPFIND and PROPPATCH.
Are compatible with multi-status XML responses.
If not, you may get unhandled or misinterpreted responses.
2. Verify the Format and Syntax of the Request and Response
Ensure that your requests comply with the WebDAV and HTTP specifications.
Check if the server’s multi-status XML body is:
Well-formed (no broken or invalid XML).
Properly namespaced (using
xmlns="DAV:"
).Using the correct response structures (
<status>
,<propstat>
).
Invalid or malformed requests can trigger unexpected partial outcomes.
3. Review the HTTP Headers and Payload
Inspect the HTTP headers to ensure the correct
Content-Type
(typicallyapplication/xml
ortext/xml
).Confirm the payload contains all expected resources or properties.
Check for truncation or corruption, especially on long or complex responses.
Tools like curl
or Postman
can help reveal what’s actually being sent and received.
4. Check for Known Server or Client Limitations
Some WebDAV servers or clients may have:
Bugs in handling batch operations.
Limits on the number of resources processed per request.
Restrictions on certain WebDAV methods or extensions.
Consult the documentation for known issues or configuration flags.
5. Use Network Tracing Tools to Inspect Traffic
When all else fails, use tools like Wireshark or Fiddler to capture the full HTTP exchange between client and server.
Look for:
Whether the 207 response is being generated correctly.
Whether intermediate systems (proxies, firewalls) are altering the response.
Whether the client is failing to interpret the multi-status body.
Detailed packet or traffic analysis can often uncover subtle mismatches or compatibility problems.
Summary
Troubleshooting a 207 response isn’t about fixing a server error — it’s about making sure both client and server understand and process complex multi-resource results correctly.
With careful inspection and the right tools, you can resolve issues and ensure smooth, efficient batch operations.
Differences Between 207 and Other HTTP Status Codes
The 207 Multi-Status code stands out because it’s designed specifically for multi-resource or multi-property responses — something most HTTP status codes aren’t built to handle.
Let’s break down how it differs from the more familiar codes.
1. 207 vs. 200 OK
200 OK means the entire request was successful, and you’re getting back the full result (like a complete webpage or file).
207 Multi-Status means the request was partially successful, and you need to check each part’s result in the response body.
Key difference:
200 = single, global success;
207 = mixed, detailed success/failure per resource.
2. 207 vs. 400 Bad Request
400 Bad Request indicates the server couldn’t understand the request due to invalid syntax, and no further processing was done.
207 means the server understood the request, processed it, and is reporting back specific outcomes for each resource.
Key difference:
400 = total failure;
207 = mixed outcomes, sometimes with partial success.
3. 207 vs. 500 Internal Server Error
500 Internal Server Error signals a server-side issue that prevented the request from being fulfilled.
207 indicates the server completed the request but needs to communicate multiple statuses back to the client.
Key difference:
500 = system failure;
207 = successful handling with per-item results.
4. 207 vs. 206 Partial Content
206 Partial Content returns a partial byte range of a single resource (often used in media streaming or resumed downloads).
207 Multi-Status returns multiple status codes for different resources or properties.
Key difference:
206 = partial piece of one item;
207 = multiple items, each with their own full or partial status.
The 207 status code is unique because it’s not about global success or failure — it’s about providing fine-grained feedback in batch or multi-target operations.
Most applications don’t need it unless they’re working with WebDAV or systems designed for multi-resource interactions.
Final Thoughts on 207 Multi-Status
The 207 Multi-Status HTTP code is a powerful tool for systems that need to handle complex, multi-resource operations efficiently.
Instead of forcing clients and servers to juggle dozens (or even hundreds) of individual requests and responses, it lets them bundle everything into one structured response — saving time, reducing network overhead, and improving clarity.
Key Takeaways
✅ 207 is specialized.
It’s not used for everyday web browsing or simple API calls; it’s meant for advanced use cases, especially under the WebDAV protocol.
✅ It enables partial success reporting.
With 207, you can know exactly which resources or properties succeeded and which failed, without treating the entire request as a global success or failure.
✅ Client-side handling matters.
To unlock the benefits of 207, client applications must be designed to:
- Parse the multistatus XML body.
- Handle mixed outcomes carefully.
- Report and manage partial errors gracefully.
✅ It improves performance.
By bundling multiple outcomes into a single HTTP response, 207 reduces the number of round-trips between client and server, speeding up batch operations.
Should You Use 207?
If you’re building systems that need to handle:
- WebDAV methods (like PROPFIND or PROPPATCH),
- Batch file or property operations,
- Multi-target requests with potentially mixed results,
then yes — 207 can be an excellent fit.
But if you’re dealing with single-resource requests or simpler workflows, sticking to standard codes like 200, 204, or 404 will usually be more appropriate.
FAQ
What is a 207 HTTP status code?
A 207 Multi-Status response is an HTTP status code used to report multiple status outcomes for a request affecting multiple resources. Instead of giving a single success or failure, it delivers detailed results for each resource or property, typically formatted in an XML body.
When should I use a 207 status code?
You should use a 207 status code when handling batch operations, multi-resource requests, or WebDAV methods like PROPFIND or PROPPATCH. It’s best when you need to report partial success or failure across multiple items in one response.
How do I handle a 207 Multi-Status response?
To handle a 207 response, your client must parse the XML body, inspect each <response>
or <propstat>
section, and process individual statuses for each resource or property. Ignoring the body means you’ll miss critical success or error details.
What’s the difference between 207 and 200 or 404?
Unlike 200 OK (single global success) or 404 Not Found (single global failure), 207 Multi-Status lets the server return mixed results for multiple resources. It’s useful when some parts of a request succeed while others fail.
Does the 207 status code work outside of WebDAV?
While 207 is formally defined in the WebDAV specification, the multi-status concept can apply to any system handling batch operations or multi-target requests. However, outside WebDAV, it’s rarely used because most APIs and systems handle batch responses differently.