diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
index 25d8108..cefbaa1 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelper.java
@@ -13,6 +13,7 @@
 import org.openapi4j.parser.model.v3.License;
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -90,6 +91,17 @@
   }
 
   @Override
+  public void sendParameterTraversals(ImmutableList<Parameter> parameterList) {
+    Optional.ofNullable(parameterList)
+        .ifPresent(
+            parameters ->
+                parameters.forEach(
+                    parameter ->
+                        coordinator.handleTraversalCommand(
+                            factory.create(parameter, traversalPath))));
+  }
+
+  @Override
   public void sendServerTraversals(ImmutableList<Server> serversList) {
     Optional.ofNullable(serversList)
         .ifPresent(
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
index 013073f..428e7ef 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OperationTraversal.java
@@ -36,8 +36,9 @@
     traversalHelper.sendExternalDocsTraversal(openApiSchemaObj.getExternalDocs());
     // TODO(b/162949100): Send Callback Traversals.
     traversalHelper.sendServerTraversals(Immutables.toImmutableList(openApiSchemaObj.getServers()));
-    // TODO(b/162942095): Send Parameter Traversals.
     // TODO(b/163024263): Send Response Traversals.
     // TODO(b/163024265): Send Security Requirement Traversals.
+    traversalHelper.sendParameterTraversals(
+        Immutables.toImmutableList(openApiSchemaObj.getParameters()));
   }
 }
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversal.java
new file mode 100644
index 0000000..869fcb7
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversal.java
@@ -0,0 +1,30 @@
+package com.apigee.security.oas.extendedvalidator;
+
+import com.google.common.collect.ImmutableList;
+import com.google.inject.assistedinject.Assisted;
+import java.util.Map;
+import java.util.Optional;
+import javax.inject.Inject;
+import org.openapi4j.parser.model.OpenApiSchema;
+import org.openapi4j.parser.model.v3.Parameter;
+
+/** A {@link Traversal} that traverses a {@link Parameter} object. */
+final class ParameterTraversal extends Traversal<Parameter> implements ParameterTraversalCommand {
+  @Inject
+  ParameterTraversal(
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionValidationIntegrator extensionValidationIntegrator,
+      @Assisted
+          ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      @Assisted Parameter openApiSchemaObj) {
+    super(traversalHelperFactory, extensionValidationIntegrator, traversalPath, openApiSchemaObj);
+  }
+
+  @Override
+  public void traverse() {
+    // TODO(b/161441872): Process extensions.
+
+    // TODO(b/162897637): Send MediaType Traversal
+    // TODO(b/162942899): Send Example Traversal
+  }
+}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversalCommand.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversalCommand.java
new file mode 100644
index 0000000..81b4dd6
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ParameterTraversalCommand.java
@@ -0,0 +1,4 @@
+package com.apigee.security.oas.extendedvalidator;
+
+/** A {@link TraversalCommand} interface for {@link ParameterTraversal}. */
+public interface ParameterTraversalCommand extends TraversalCommand {}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
index 89e15d6..e857632 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactory.java
@@ -10,6 +10,7 @@
 import org.openapi4j.parser.model.v3.License;
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -43,6 +44,10 @@
       ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
       String name);
 
+  ParameterTraversalCommand create(
+      Parameter parameter,
+      ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath);
+
   ServerTraversalCommand create(
       Server server,
       ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath);
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
index a4a71ca..d69d230 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryModule.java
@@ -16,6 +16,7 @@
             .implement(
                 OpenApiSpecificationTraversalCommand.class, OpenApiSpecificationTraversal.class)
             .implement(OperationTraversalCommand.class, OperationTraversal.class)
+            .implement(ParameterTraversalCommand.class, ParameterTraversal.class)
             .implement(ServerTraversalCommand.class, ServerTraversal.class)
             .implement(ServerVariableTraversalCommand.class, ServerVariableTraversal.class)
             .implement(TagTraversalCommand.class, TagTraversal.class)
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
index 319252a..3351ad1 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/TraversalHelper.java
@@ -8,6 +8,7 @@
 import org.openapi4j.parser.model.v3.License;
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -27,6 +28,8 @@
 
   void sendOperationTraversals(ImmutableMap<String, Operation> operations);
 
+  void sendParameterTraversals(ImmutableList<Parameter> parameters);
+
   void sendServerTraversals(ImmutableList<Server> serversList);
 
   void sendServerVariableTraversals(ImmutableMap<String, ServerVariable> serverVariables);
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
index 9ce9a18..f42f992 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseTraversalHelperTest.java
@@ -22,6 +22,7 @@
 import org.openapi4j.parser.model.v3.License;
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -35,6 +36,8 @@
   private final License license = new License();
   private final OpenApi3 openApiSpec = new OpenApi3();
 
+  private final ImmutableList<Parameter> parameters =
+      ImmutableList.of(new Parameter(), new Parameter(), new Parameter(), new Parameter());
   private final ImmutableList<Server> servers =
       ImmutableList.of(new Server(), new Server(), new Server());
   private final ImmutableList<Tag> tags =
@@ -137,6 +140,19 @@
   }
 
   @Test
+  public void sendParameterTraversals_sendsParameterTraversalCommandsToCoordinator() {
+    traversalHelper.sendParameterTraversals(parameters);
+
+    verify(traversalCoordinator, times(parameters.size()))
+        .handleTraversalCommand(any(ParameterTraversalCommand.class));
+  }
+
+  @Test
+  public void sendParameterTraversals_nullParameter_doesNotFail() {
+    traversalHelper.sendParameterTraversals(null);
+  }
+
+  @Test
   public void sendServerTraversals_sendsServerTraversalCommandsToCoordinator() {
     traversalHelper.sendServerTraversals(servers);
 
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
index e20fc57..05ea8f3 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OperationTraversalTest.java
@@ -17,6 +17,7 @@
 import org.mockito.quality.Strictness;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 
 @RunWith(JUnit4.class)
@@ -32,6 +33,9 @@
   private final ExternalDocs externalDocs = new ExternalDocs();
   private final ImmutableList servers = ImmutableList.of(new Server(), new Server(), new Server());
 
+  private final ImmutableList parameters =
+      ImmutableList.of(new Parameter(), new Parameter(), new Parameter(), new Parameter());
+
   private OperationTraversal operationTraversal;
 
   /** Sets up live and mocked instances for testing. */
@@ -40,6 +44,7 @@
 
     when(operation.getExternalDocs()).thenReturn(externalDocs);
     when(operation.getServers()).thenReturn(servers);
+    when(operation.getParameters()).thenReturn(parameters);
 
     operationTraversal =
         new OperationTraversal(
@@ -60,6 +65,22 @@
   }
 
   @Test
+  public void traverse_sendsParametersToTraversalHelper() {
+    operationTraversal.traverse();
+
+    verify(traversalHelper).sendParameterTraversals(parameters);
+  }
+
+  @Test
+  public void traverse_nullParametersMember_doesNotFail() {
+    when(operation.getParameters()).thenReturn(null);
+
+    operationTraversal.traverse();
+
+    verify(traversalHelper, atLeastOnce()).sendParameterTraversals(any());
+  }
+
+  @Test
   public void traverse_sendsServersToTraversalHelper() {
     operationTraversal.traverse();
 
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
index 7e1d85e..17450af 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/TraversalCommandFactoryTest.java
@@ -17,6 +17,7 @@
 import org.openapi4j.parser.model.v3.License;
 import org.openapi4j.parser.model.v3.OpenApi3;
 import org.openapi4j.parser.model.v3.Operation;
+import org.openapi4j.parser.model.v3.Parameter;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -61,6 +62,11 @@
   }
 
   @Test
+  public void create_parameterPassed_returnsNonNullObject() {
+    assertThat(traversalCommandFactory.create(new Parameter(), traversalPath)).isNotNull();
+  }
+
+  @Test
   public void create_serverPassed_returnsNonNullObject() {
     assertThat(traversalCommandFactory.create(new Server(), traversalPath)).isNotNull();
   }
