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 cefbaa1..265431f 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
@@ -14,6 +14,7 @@
 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.Response;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -102,6 +103,17 @@
   }
 
   @Override
+  public void sendResponseTraversals(ImmutableMap<String, Response> responses) {
+    Optional.ofNullable(responses)
+        .ifPresent(
+            responsesObj ->
+                responsesObj.forEach(
+                    (name, response) ->
+                        coordinator.handleTraversalCommand(
+                            factory.create(response, traversalPath, name))));
+  }
+
+  @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 428e7ef..c929fa8 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,9 +36,10 @@
     traversalHelper.sendExternalDocsTraversal(openApiSchemaObj.getExternalDocs());
     // TODO(b/162949100): Send Callback Traversals.
     traversalHelper.sendServerTraversals(Immutables.toImmutableList(openApiSchemaObj.getServers()));
-    // TODO(b/163024263): Send Response Traversals.
-    // TODO(b/163024265): Send Security Requirement Traversals.
     traversalHelper.sendParameterTraversals(
         Immutables.toImmutableList(openApiSchemaObj.getParameters()));
+    traversalHelper.sendResponseTraversals(
+        Immutables.toImmutableMap(openApiSchemaObj.getResponses()));
+    // TODO(b/163024265): Send Security Requirement Traversals.
   }
 }
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversal.java
new file mode 100644
index 0000000..d214ada
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversal.java
@@ -0,0 +1,36 @@
+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.Response;
+
+/** A {@link Traversal} that traverses a {@link Response} object. */
+final class ResponseTraversal extends Traversal<Response> implements ResponseTraversalCommand {
+
+  @Inject
+  ResponseTraversal(
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionValidationIntegrator extensionValidationIntegrator,
+      @Assisted
+          ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      @Assisted Response openApiSchemaObj,
+      @Assisted String name) {
+    super(
+        traversalHelperFactory,
+        extensionValidationIntegrator,
+        traversalPath,
+        openApiSchemaObj,
+        name);
+  }
+
+  @Override
+  public void traverse() {
+    // TODO(b/162897637): Send MediaType Traversals.
+    // TODO(b/162949105): Send Header Traversals.
+    // TODO(b/162949106): Send Link Traversals.
+  }
+}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversalCommand.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversalCommand.java
new file mode 100644
index 0000000..44e235d
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/ResponseTraversalCommand.java
@@ -0,0 +1,4 @@
+package com.apigee.security.oas.extendedvalidator;
+
+/** A {@link TraversalCommand} interface for {@link ResponseTraversal}. */
+public interface ResponseTraversalCommand 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 e857632..ac98888 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
@@ -11,6 +11,7 @@
 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.Response;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -48,6 +49,11 @@
       Parameter parameter,
       ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath);
 
+  ResponseTraversalCommand create(
+      Response response,
+      ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      String name);
+
   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 d69d230..b0e6c56 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
@@ -17,6 +17,7 @@
                 OpenApiSpecificationTraversalCommand.class, OpenApiSpecificationTraversal.class)
             .implement(OperationTraversalCommand.class, OperationTraversal.class)
             .implement(ParameterTraversalCommand.class, ParameterTraversal.class)
+            .implement(ResponseTraversalCommand.class, ResponseTraversal.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 3351ad1..ca55a12 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
@@ -9,6 +9,7 @@
 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.Response;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -30,6 +31,8 @@
 
   void sendParameterTraversals(ImmutableList<Parameter> parameters);
 
+  void sendResponseTraversals(ImmutableMap<String, Response> responses);
+
   void sendServerTraversals(ImmutableList<Server> serversList);
 
   void sendServerVariableTraversals(ImmutableMap<String, ServerVariable> serverVariables);
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 05ea8f3..eca900f 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
@@ -6,6 +6,7 @@
 import static org.mockito.Mockito.when;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -18,6 +19,7 @@
 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.Response;
 import org.openapi4j.parser.model.v3.Server;
 
 @RunWith(JUnit4.class)
@@ -35,6 +37,8 @@
 
   private final ImmutableList parameters =
       ImmutableList.of(new Parameter(), new Parameter(), new Parameter(), new Parameter());
+  private final ImmutableMap responses =
+      ImmutableMap.of("one", new Response(), "two", new Response());
 
   private OperationTraversal operationTraversal;
 
@@ -45,6 +49,7 @@
     when(operation.getExternalDocs()).thenReturn(externalDocs);
     when(operation.getServers()).thenReturn(servers);
     when(operation.getParameters()).thenReturn(parameters);
+    when(operation.getResponses()).thenReturn(responses);
 
     operationTraversal =
         new OperationTraversal(
@@ -81,6 +86,22 @@
   }
 
   @Test
+  public void traverse_sendsResponsesToTraversalHelper() {
+    operationTraversal.traverse();
+
+    verify(traversalHelper).sendResponseTraversals(responses);
+  }
+
+  @Test
+  public void traverse_nullResponsesMember_doesNotFail() {
+    when(operation.getResponses()).thenReturn(null);
+
+    operationTraversal.traverse();
+
+    verify(traversalHelper, atLeastOnce()).sendResponseTraversals(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 17450af..baa2e8b 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
@@ -18,6 +18,7 @@
 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.Response;
 import org.openapi4j.parser.model.v3.Server;
 import org.openapi4j.parser.model.v3.ServerVariable;
 import org.openapi4j.parser.model.v3.Tag;
@@ -67,6 +68,11 @@
   }
 
   @Test
+  public void create_responseAndNamePassed_returnsNonNullObject() {
+    assertThat(traversalCommandFactory.create(new Response(), traversalPath, "name")).isNotNull();
+  }
+
+  @Test
   public void create_serverPassed_returnsNonNullObject() {
     assertThat(traversalCommandFactory.create(new Server(), traversalPath)).isNotNull();
   }
