Issue Description
I’m trying to find VEVENT items in my calendar in a specific time range using a REPORT HTTP call with a calendar-query.
My CalDAV HTTP request looks like this:
<?xml version="1.0" encoding="utf-8"?>
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/" xmlns:ca="http://apple.com/ns/ical/" xmlns:d="DAV:">
<d:prop>
<d:getetag/>
<c:calendar-data>
<c:expand start="20260217T000000Z" end="20260217T235959Z"/>
</c:calendar-data>
</d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR">
<c:comp-filter name="VEVENT">
<c:time-range start="20260217T000000Z" end="20260217T235959Z"/>
</c:comp-filter>
</c:comp-filter>
</c:filter>
</c:calendar-query>
In my queried calendar, I do not have any events for the queried date of 2026-02-17.
Expected Behavior
The response should be a an empty multistatus according to RFC 4791 section 7.8:
The response body for a successful request MUST be a DAV:
multistatus XML element (i.e., the response uses the same format
as the response for PROPFIND). In the case where there are no
response elements, the returned DAV:multistatus XML element is
empty.
For instance, Google Calendar CalDAV API responds
<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:caldav="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/" xmlns:ical="http://apple.com/ns/ical/"/>
for the same query.
Actual Behavior
The response is a 207 Multi-Status with a response element reporting an 404 Not Found:
<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/dav/cal/my-ser%40my-domain.tld/default</D:href>
<D:status>HTTP/1.1 404 Not Found</D:status>
<D:responsedescription>No resources found</D:responsedescription>
</D:response>
</D:multistatus>
For my consumer use case, this makes it hard to interpret the state of “this property does not exist” and “during this time range, there are no events”.
(I tested extending the query time-range to a date where events match to ensure that the query itself is not malformed).
Reproduction Steps
- Setup clean Stalwart
- Create a user with a calendar and an API key
- Query the calendar using the
REPORTbody provided
Stalwart Version
v0.16.x
Installation Method
Docker
Database Backend
RocksDB
Blob Storage
RocksDB
Search Engine
Internal
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on