208 vs 207: Already Reported vs Multi-Status

Both are WebDAV codes used in multi-resource responses, but 208 solves the specific problem of infinite loops in bound collection hierarchies.

AspectHTTP 207 — Multi-StatusHTTP 208 — Already Reported
RFCRFC 4918, Section 11.1RFC 5842, Section 7.1
Use caseBatch operations with mixed outcomes across multiple resourcesDeduplication inside a 207 body when a resource has already been listed
Used as outer response?Yes — the HTTP status of the response envelopeNo — only appears as an inner status inside a 207 XML body
Response bodyWebDAV XML multistatus documentNo body — appears only as <status>HTTP/1.1 208 Already Reported</status>
CacheableNoN/A (inner code)
Common outside WebDAV?Yes — used in bulk REST APIsExtremely rare — WebDAV only

207: The Outer Envelope

207 Multi-Status is always the HTTP status code of the outer response. It says: “this response contains multiple per-resource status codes inside its body.” The body is an XML document with one <response> element per resource, each containing its own <status>.

207 is used whenever a WebDAV operation touches multiple resources: PROPFIND with Depth: 1, PROPPATCH, COPY or MOVE on a collection, or LOCK on a collection. It is also borrowed by REST bulk APIs that process arrays of items and need to report per-item outcomes.

208: Inside a 207 Body Only

208 Already Reported only appears as an inner status code within a 207 XML body. It is never the outer HTTP status of a response. Its purpose is to prevent infinite loops in WebDAV bound collections.

RFC 5842 introduced WebDAV Bind, which allows a single resource to be listed under multiple paths simultaneously — similar to hard links in a file system. When a client requests PROPFIND with Depth: infinity on a collection that contains circular bindings (resource A contains resource B, which also references resource A), listing all members would result in infinite recursion.

208 breaks this loop: the first time the server encounters a resource, it lists it with a full 200 or other status. The second time the same resource is encountered in a different traversal path, the server lists it with 208 to signal “this resource was already reported earlier in this response.”

<multistatus xmlns="DAV:">
  <response>
    <href>/files/doc.pdf</href>
    <propstat>
      <prop><displayname>doc.pdf</displayname></prop>
      <status>HTTP/1.1 200 OK</status>
    </propstat>
  </response>
  <response>
    <href>/archive/doc.pdf</href>
    <!-- Same resource, different binding path -- already listed above -->
    <status>HTTP/1.1 208 Already Reported</status>
  </response>
</multistatus>

Decision Rule

If you are building a bulk REST API that returns mixed per-item outcomes, use 207 as the outer status code and define your own JSON body format. Never use 208 — it is a WebDAV-specific inner code for bound collection traversal. Outside of WebDAV Bind scenarios with circular references, 208 has no applicable use.

FAQ

Can 207 contain 208 inner statuses?

Yes. 208 is specifically designed to appear inside 207 WebDAV XML bodies. It is only meaningful in that context. A 207 response for a PROPFIND on a collection with bound (circular) resources may contain 208 entries.

Is 208 used outside of WebDAV?

Essentially never. The code exists specifically to handle circular binding traversal in WebDAV. Non-WebDAV applications have no reason to use it.

What do I use for duplicate detection in a bulk REST API?

Include a per-item status in your JSON response body, such as 409 Conflict or a custom error code. Use 207 as the outer status for mixed results. 208 is not appropriate for non-WebDAV duplicate detection.

Full Guides

HTTP 207 Multi-Status — full guide · All comparisons

Related comparisons