Budibase/budibase · error · HTTPError

View ${viewId} not found

Error message

View ${viewId} not found

What it means

Thrown by the view V2 remove path when no V2 view exists with the given viewId. It resolves the table id from the view id, reads the view, and 404s if absent before attempting to delete it from the datasource document.

Source

Thrown at packages/server/src/sdk/workspace/views/external.ts:109

    throw new HTTPError(`Cannot update view type after creation`, 400)
  }

  view = ensureQuerySet(view)
  view = ensureQueryUISet(view)

  delete views[existingView.name]
  views[view.name] = view
  await db.put(ds)
  return { view, existingView } as { view: ViewV2; existingView: ViewV2 }
}

export async function remove(viewId: string): Promise<ViewV2> {
  const db = context.getWorkspaceDB()

  const view = await get(viewId)

  if (!view) {
    throw new HTTPError(`View ${viewId} not found`, 404)
  }

  const { datasourceId, tableName } = breakExternalTableId(view.tableId)
  const ds = await sdk.datasources.get(datasourceId)

  delete ds.entities![tableName].views![view?.name]
  await db.put(ds)
  return view
}

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Check existence with sdk.views.get first, or treat 404 as already-deleted success
  2. Refresh the view list before deleting
  3. Verify the view id format (getTableIdFromViewId must parse it)

Example fix

// before
await sdk.views.remove(viewId)
// after
try { await sdk.views.remove(viewId) }
catch (e) { if (!(e instanceof HTTPError && e.status === 404)) throw e }
Defensive patterns

Strategy: try-catch

Validate before calling

const existing = await sdk.views.get(viewId).catch(() => null)
if (!existing) return // nothing to delete

Try / catch

try { await sdk.views.remove(viewId) }
catch (e) {
  if (e instanceof HTTPError && e.status === 404) return // idempotent delete
  throw e
}

Prevention

When it happens

Trigger: Calling sdk.views.external.remove (or DELETE view API) with a view id that never existed, was already deleted, belongs to a V1 view, or was removed when the datasource doc was rewritten.

Common situations: Double-delete from a retrying client; stale UI list after another user deleted the view; wrong id casing/format; app copied without the view.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/2b23a9e5498f947b. Report an issue: GitHub.