---
title: "Revoke a UDP device — permanent (owner/admin)"
method: DELETE
path: "/v1/projects/{project_id}/udp/devices/{device_id}"
tags: ["udp"]
---

# Revoke a UDP device — permanent (owner/admin)

`DELETE /v1/projects/{project_id}/udp/devices/{device_id}`

## Request

- Base URL: `https://api.wavehouse.cloud`
- URL: `https://api.wavehouse.cloud/v1/projects/{project_id}/udp/devices/{device_id}`
- Auth: one of:
  - API key in cookie `whc_session`
  - HTTP bearer
  - API key in header `X-API-Key`

Drops the device's key from the store every edge pod reads, so it stops being accepted within tens of milliseconds and is then met with silence rather than a refusal. IRREVERSIBLE: a revoked device cannot be re-enabled, because its key is gone. Use disable for a pause. IDEMPOTENT: revoking twice keeps the first instant. Rows the device already wrote are untouched.

## Path parameters

- `project_id` string, required
- `device_id` string, required: the device's 16-hex-character id

## Response `200`

OK

- UDPDeviceView
  - `bytes_per_second` integer, required: bytes per second the edge accepts; 0 is unlimited
  - `content_encoding` string: gzip or zstd when the device compresses; empty otherwise
  - `content_type` string, required: the media type the payload is posted to the engine under
  - `created_at` string, date-time, required
  - `created_by` string
  - `enabled` boolean, required
  - `expires_at` string, date-time: absent when the device does not expire
  - `id` string, required: 16 hex characters — the 8 bytes that lead every datagram
  - `last_seen_at` string, date-time: batched: it trails live traffic by up to a minute
  - `name` string, required
  - `nonce_len` integer, required
  - `rate_per_second` number, double, required: datagrams per second the edge accepts; 0 is unlimited
  - `revoked_at` string, date-time: present once revoked
  - `status` string, required: active | disabled | revoked | expired
  - `suite` string, required
  - `table` string, required

## Other responses

- `429`: Rate limited, per client IP, API key or org; a client IP is also refused on every route for a while after repeated authentication failures. A limited operation carries RateLimit-Policy and RateLimit on every response; wait Retry-After seconds before retrying.
- `default`: Error

---

[API](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api.md) · [All operations](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/revisions/ddf93caac44e?raw)
