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 265431f..71e3a01 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
@@ -7,6 +7,7 @@
 import java.util.Optional;
 import javax.inject.Inject;
 import org.openapi4j.parser.model.OpenApiSchema;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.Contact;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Info;
@@ -44,6 +45,17 @@
   }
 
   @Override
+  public void sendCallbackTraversals(ImmutableMap<String, Callback> callbackMap) {
+    Optional.ofNullable(callbackMap)
+        .ifPresent(
+            callbacks ->
+                callbackMap.forEach(
+                    (name, callback) ->
+                        coordinator.handleTraversalCommand(
+                            factory.create(callback, traversalPath, name))));
+  }
+
+  @Override
   public void sendContactTraversal(Contact contact) {
     Optional.ofNullable(contact)
         .ifPresent(
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversal.java
new file mode 100644
index 0000000..ca89f3c
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversal.java
@@ -0,0 +1,34 @@
+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.Callback;
+
+/** A {@link Traversal} that traverses a {@link Callback} object. */
+public class CallbackTraversal extends Traversal<Callback> implements CallbackTraversalCommand {
+  @Inject
+  CallbackTraversal(
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionValidationIntegrator extensionValidationIntegrator,
+      @Assisted
+          ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      @Assisted Callback openApiSchemaObj,
+      @Assisted String name) {
+    super(
+        traversalHelperFactory,
+        extensionValidationIntegrator,
+        traversalPath,
+        openApiSchemaObj,
+        name);
+  }
+
+  @Override
+  public void traverse() {
+    // TODO(b/161441872): Process extensions.
+    // TODO(b/162508047): Add path object traversal and callback object traversal logic.
+  }
+}
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversalCommand.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversalCommand.java
new file mode 100644
index 0000000..fdd48d1
--- /dev/null
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/CallbackTraversalCommand.java
@@ -0,0 +1,4 @@
+package com.apigee.security.oas.extendedvalidator;
+
+/** A {@link TraversalCommand} interface for {@link CallbackTraversal}. */
+public interface CallbackTraversalCommand extends TraversalCommand {}
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 c929fa8..6fd6f9f 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
@@ -34,7 +34,8 @@
     TraversalHelper traversalHelper = traversalHelperFactory.create(getUpdatedTraversalPath());
 
     traversalHelper.sendExternalDocsTraversal(openApiSchemaObj.getExternalDocs());
-    // TODO(b/162949100): Send Callback Traversals.
+    traversalHelper.sendCallbackTraversals(
+        Immutables.toImmutableMap(openApiSchemaObj.getCallbacks()));
     traversalHelper.sendServerTraversals(Immutables.toImmutableList(openApiSchemaObj.getServers()));
     traversalHelper.sendParameterTraversals(
         Immutables.toImmutableList(openApiSchemaObj.getParameters()));
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 ac98888..5d7f241 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
@@ -4,6 +4,7 @@
 import java.util.Map;
 import java.util.Optional;
 import org.openapi4j.parser.model.OpenApiSchema;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.Contact;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Info;
@@ -22,6 +23,11 @@
  */
 interface TraversalCommandFactory {
 
+  CallbackTraversalCommand create(
+      Callback callback,
+      ImmutableList<Map.Entry<Class<? extends OpenApiSchema>, Optional<String>>> traversalPath,
+      String name);
+
   ContactTraversalCommand create(
       Contact contact,
       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 b0e6c56..dfc7cb9 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
@@ -9,6 +9,7 @@
   protected void configure() {
     install(
         new FactoryModuleBuilder()
+            .implement(CallbackTraversalCommand.class, CallbackTraversal.class)
             .implement(ContactTraversalCommand.class, ContactTraversal.class)
             .implement(ExternalDocsTraversalCommand.class, ExternalDocsTraversal.class)
             .implement(InfoTraversalCommand.class, InfoTraversal.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 ca55a12..776c07d 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
@@ -2,6 +2,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.Contact;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Info;
@@ -17,6 +18,8 @@
 /** A set of methods to handle the building and sending of {@linkplain Traversal Traversals}. */
 interface TraversalHelper {
 
+  void sendCallbackTraversals(ImmutableMap<String, Callback> callbackMap);
+
   void sendContactTraversal(Contact contact);
 
   void sendExternalDocsTraversal(ExternalDocs externalDocs);
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 f42f992..4a5e6c5 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
@@ -16,6 +16,7 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 import org.mockito.quality.Strictness;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.Contact;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Info;
@@ -43,6 +44,8 @@
   private final ImmutableList<Tag> tags =
       ImmutableList.of(new Tag(), new Tag(), new Tag(), new Tag());
 
+  private final ImmutableMap<String, Callback> callbacks =
+      ImmutableMap.of("one", new Callback(), "two", new Callback(), "three", new Callback());
   private final ImmutableMap<String, ServerVariable> serverVariables =
       ImmutableMap.of(
           "one", new ServerVariable(), "two", new ServerVariable(), "three", new ServerVariable());
@@ -66,6 +69,19 @@
   }
 
   @Test
+  public void sendCallbackTraversals_sendsCallbackTraversalCommandsToCoordinator() {
+    traversalHelper.sendCallbackTraversals(callbacks);
+
+    verify(traversalCoordinator, times(callbacks.size()))
+        .handleTraversalCommand(any(CallbackTraversalCommand.class));
+  }
+
+  @Test
+  public void sendCallbackTraversals_nullParameter_doesNotFail() {
+    traversalHelper.sendCallbackTraversals(null);
+  }
+
+  @Test
   public void sendContactTraversal_sendsContactTraversalCommandToCoordinator() {
     traversalHelper.sendContactTraversal(contact);
 
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 eca900f..6a5c9af 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
@@ -16,6 +16,7 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 import org.mockito.quality.Strictness;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Operation;
 import org.openapi4j.parser.model.v3.Parameter;
@@ -33,12 +34,15 @@
   @Mock private Operation operation;
 
   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 final ImmutableMap responses =
       ImmutableMap.of("one", new Response(), "two", new Response());
+  private final ImmutableMap callbacks =
+      ImmutableMap.of("one", new Callback(), "two", new Callback(), "three", new Callback());
 
   private OperationTraversal operationTraversal;
 
@@ -50,6 +54,7 @@
     when(operation.getServers()).thenReturn(servers);
     when(operation.getParameters()).thenReturn(parameters);
     when(operation.getResponses()).thenReturn(responses);
+    when(operation.getCallbacks()).thenReturn(callbacks);
 
     operationTraversal =
         new OperationTraversal(
@@ -116,4 +121,20 @@
 
     verify(traversalHelper, atLeastOnce()).sendServerTraversals(any());
   }
+
+  @Test
+  public void traverse_sendsCallbacksToTraversalHelper() {
+    operationTraversal.traverse();
+
+    verify(traversalHelper).sendCallbackTraversals(callbacks);
+  }
+
+  @Test
+  public void traverse_nullCallbacksMember_doesNotFail() {
+    when(operation.getCallbacks()).thenReturn(null);
+
+    operationTraversal.traverse();
+
+    verify(traversalHelper, atLeastOnce()).sendCallbackTraversals(any());
+  }
 }
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 baa2e8b..3a31349 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
@@ -11,6 +11,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 import org.openapi4j.parser.model.OpenApiSchema;
+import org.openapi4j.parser.model.v3.Callback;
 import org.openapi4j.parser.model.v3.Contact;
 import org.openapi4j.parser.model.v3.ExternalDocs;
 import org.openapi4j.parser.model.v3.Info;
@@ -33,6 +34,11 @@
       traversalPath = ImmutableList.copyOf(new ArrayDeque<>());
 
   @Test
+  public void create_callbackAndNamePassed_returnsNonNullObject() {
+    assertThat(traversalCommandFactory.create(new Callback(), traversalPath, "name")).isNotNull();
+  }
+
+  @Test
   public void create_contactPassed_returnsNonNullObject() {
     assertThat(traversalCommandFactory.create(new Contact(), traversalPath)).isNotNull();
   }
