diff --git a/hc/api/admin.py b/hc/api/admin.py
index 74580bcd..d12c873f 100644
--- a/hc/api/admin.py
+++ b/hc/api/admin.py
@@ -28,7 +28,7 @@ class ChecksAdmin(ModelAdmin[Check]):
         css = {"all": ("css/admin/checks.css",)}
 
     search_fields = ["name", "code", "project__owner__email"]
-    readonly_fields = ("code",)
+    readonly_fields = ("code", "badge_key")
     raw_id_fields = ("project",)
     list_select_related = ("project",)
     list_display = (
diff --git a/hc/api/migrations/0116_alter_check_badge_key.py b/hc/api/migrations/0116_alter_check_badge_key.py
new file mode 100644
index 00000000..fbe70c59
--- /dev/null
+++ b/hc/api/migrations/0116_alter_check_badge_key.py
@@ -0,0 +1,19 @@
+# Generated by Django 5.1.4 on 2024-12-27 09:24
+
+import uuid
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('api', '0115_flip_api_flip_owner_created'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='check',
+            name='badge_key',
+            field=models.UUIDField(default=uuid.uuid4, null=True, unique=True),
+        ),
+    ]
diff --git a/hc/api/models.py b/hc/api/models.py
index a628ae36..c0d6c051 100644
--- a/hc/api/models.py
+++ b/hc/api/models.py
@@ -195,7 +195,7 @@ class Check(models.Model):
     failure_kw = models.CharField(max_length=200, blank=True)
     methods = models.CharField(max_length=30, blank=True)
     manual_resume = models.BooleanField(default=False)
-    badge_key = models.UUIDField(null=True, unique=True)
+    badge_key = models.UUIDField(default=uuid.uuid4, null=True, unique=True)
 
     n_pings = models.IntegerField(default=0)
     last_ping = models.DateTimeField(null=True, blank=True)