diff --git a/Content.Shared/Access/AccessLevelPrototype.cs b/Content.Shared/Access/AccessLevelPrototype.cs
new file mode 100644
index 0000000000..9e042701ae
--- /dev/null
+++ b/Content.Shared/Access/AccessLevelPrototype.cs
@@ -0,0 +1,36 @@
+using Robust.Shared.Localization;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+using YamlDotNet.RepresentationModel;
+
+namespace Content.Shared.Access
+{
+ ///
+ /// Defines a single access level that can be stored on ID cards and checked for.
+ ///
+ [Prototype("accessLevel")]
+ public class AccessLevelPrototype : IPrototype, IIndexedPrototype
+ {
+ public void LoadFrom(YamlMappingNode mapping)
+ {
+ ID = mapping.GetNode("id").AsString();
+ if (mapping.TryGetNode("name", out var nameNode))
+ {
+ Name = nameNode.AsString();
+ }
+ else
+ {
+ Name = ID;
+ }
+
+ Name = Loc.GetString(Name);
+ }
+
+ public string ID { get; private set; }
+
+ ///
+ /// The player-visible name of the access level, in the ID card console and such.
+ ///
+ public string Name { get; private set; }
+ }
+}