actualbudget/actual · error
single x-actual-name is required
Error message
single x-actual-name is required
What it means
Error "single x-actual-name is required" thrown in actualbudget/actual.
Source
Thrown at packages/sync-server/src/app-sync.ts:302
filesService.update(file.id, new FileUpdate({ groupId: null }));
if (groupId) {
try {
await fs.unlink(getPathForGroupFile(groupId));
} catch {
console.log(`Unable to delete sync data for group "${groupId}"`);
}
}
res.send(OK_RESPONSE);
});
app.post('/upload-user-file', async (req, res) => {
if (typeof req.headers['x-actual-name'] !== 'string') {
// FIXME: Not sure how this cannot be a string when the header is
// set.
res.status(400).send('single x-actual-name is required');
return;
}
const name = decodeURIComponent(req.headers['x-actual-name']);
const fileId = req.headers['x-actual-file-id'];
if (!fileId || typeof fileId !== 'string') {
res.status(400).send('fileId is required');
return;
}
if (!isValidFileId(fileId)) {
res.status(400).send('invalid fileId');
return;
}
let groupId = req.headers['x-actual-group-id'] || null;
const encryptMeta = extractSingleHeader(req, res, 'x-actual-encrypt-meta');
if (res.headersSent) return;View on GitHub (pinned to d4334cb6e6)
When it happens
Trigger: Thrown at packages/sync-server/src/app-sync.ts:302 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29).
Data as JSON: /api/errors/38b7e796b8ce1873.
Report an issue: GitHub.