diff --git a/config/schema/system_status.schema.yml b/config/schema/system_status.schema.yml
new file mode 100644
index 0000000..9fa765a
--- /dev/null
+++ b/config/schema/system_status.schema.yml
@@ -0,0 +1,10 @@
+system_status.settings:
+  type: config_object
+  label: 'System status settings'
+  mapping:
+    system_status_token:
+      type: string
+    system_status_encrypt_token:
+      type: string
+    system_status_service_allow_external:
+      type: boolean
diff --git a/tests/src/Functional/SettingsTest.php b/tests/src/Functional/SettingsTest.php
new file mode 100644
index 0000000..24d2d64
--- /dev/null
+++ b/tests/src/Functional/SettingsTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\Tests\system_status\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests the settings.
+ *
+ * @group system_status
+ */
+class SettingsTest extends BrowserTestBase {
+
+  public static $modules = ['system_status'];
+
+  /**
+   * Tests the settings form.
+   */
+  public function testSettings() {
+    // Make sure we can't access settings without permissions.
+    $this->drupalGet('/admin/config/system/system-status');
+    $this->assertSession()->statusCodeEquals(403);
+
+    $account = $this->createUser(['administer site configuration']);
+    $this->drupalLogin($account);
+
+    $this->drupalGet('/admin/config/system/system-status');
+    $this->assertSession()->statusCodeEquals(200);
+
+    // Make sure api keys gets populated.
+    $key = $this->getSession()->getPage()->find('css', 'input[name="system_status_service"]');
+    $this->assertNotEmpty($key);
+  }
+
+}
