HTTP Interface for Traversals

Traversals

ArangoDB's graph traversals are executed on the server. Traversals can be initiated by clients by sending the traversal description for execution to the server.

Traversals in ArangoDB are used to walk over a graph stored in one edge collection. It can easily be described which edges of the graph should be followed and which actions should be performed on each visited vertex. Furthermore the ordering of visiting the nodes can be specified, for instance depth-first or breadth-first search are offered.

Executing Traversals via HTTP

executes a traversal

execute a server-side traversal

POST /_api/traversal

Starts a traversal starting from a given vertex and following. edges contained in a given edgeCollection. The request must contain the following attributes.

A JSON object with these properties is required:

  • sort: body (JavaScript) code of a custom comparison function for the edges. The signature of this function is (l, r) -> integer (where l and r are edges) and must return -1 if l is smaller than, +1 if l is greater than, and 0 if l and r are equal. The reason for this is the following: The order of edges returned for a certain vertex is undefined. This is because there is no natural order of edges for a vertex with multiple connected edges. To explicitly define the order in which edges on the vertex are followed, you can specify an edge comparator function with this attribute. Note that the value here has to be a string to conform to the JSON standard, which in turn is parsed as function body on the server side. Furthermore note that this attribute is only used for the standard expanders. If you use your custom expander you have to do the sorting yourself within the expander code.
  • direction: direction for traversal
    • if set, must be either "outbound", "inbound", or "any"
    • if not set, the expander attribute must be specified
  • minDepth: ANDed with any existing filters): visits only nodes in at least the given depth
  • startVertex: id of the startVertex, e.g. "users/foo".
  • visitor: body (JavaScript) code of custom visitor function function signature: (config, result, vertex, path, connected) -> void The visitor function can do anything, but its return value is ignored. To populate a result, use the result variable by reference. Note that the connected argument is only populated when the order attribute is set to "preorder-expander".
  • itemOrder: item iteration order can be "forward" or "backward"
  • strategy: traversal strategy can be "depthfirst" or "breadthfirst"
  • filter: default is to include all nodes: body (JavaScript code) of custom filter function function signature: (config, vertex, path) -> mixed can return four different string values:
    • "exclude" -> this vertex will not be visited.
    • "prune" -> the edges of this vertex will not be followed.
    • "" or undefined -> visit the vertex and follow it's edges.
    • Array -> containing any combination of the above. If there is at least one "exclude" or "prune" respectivly is contained, it's effect will occur.
  • init: body (JavaScript) code of custom result initialization function function signature: (config, result) -> void initialize any values in result with what is required
  • maxIterations: Maximum number of iterations in each traversal. This number can be set to prevent endless loops in traversal of cyclic graphs. When a traversal performs as many iterations as the maxIterations value, the traversal will abort with an error. If maxIterations is not set, a server-defined value may be used.
  • maxDepth: ANDed with any existing filters visits only nodes in at most the given depth
  • uniqueness: specifies uniqueness for vertices and edges visited. If set, must be an object like this: "uniqueness": {"vertices": "none"|"global"|"path", "edges": "none"|"global"|"path"}
  • order: traversal order can be "preorder", "postorder" or "preorder-expander"
  • graphName: name of the graph that contains the edges. Either edgeCollection or graphName has to be given. In case both values are set the graphName is prefered.
  • expander: body (JavaScript) code of custom expander function must be set if direction attribute is not set function signature: (config, vertex, path) -> array expander must return an array of the connections for vertex each connection is an object with the attributes edge and vertex
  • edgeCollection: name of the collection that contains the edges.

If the Traversal is successfully executed HTTP 200 will be returned. Additionally the result object will be returned by the traversal.

For successful traversals, the returned JSON object has the following properties:

  • error: boolean flag to indicate if an error occurred (false in this case)

  • code: the HTTP status code

  • result: the return value of the traversal

If the traversal specification is either missing or malformed, the server will respond with HTTP 400.

The body of the response will then contain a JSON object with additional error details. The object has the following attributes:

  • error: boolean flag to indicate that an error occurred (true in this case)

  • code: the HTTP status code

  • errorNum: the server error number

  • errorMessage: a descriptive error message

Example:

In the following examples the underlying graph will contain five persons Alice, Bob, Charlie, Dave and Eve. We will have the following directed relations:

  • Alice knows Bob
  • Bob knows Charlie
  • Bob knows Dave
  • Eve knows Alice
  • Eve knows Bob

The starting vertex will always be Alice.

Follow only outbound edges

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dhvG---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dhvG--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dhvG--A", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dhvG--B", 
          "name" : "Dave" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhvG---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13619", 
              "_id" : "knows/13619", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhvG--D", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhvG---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhvG--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13619", 
              "_id" : "knows/13619", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhvG--D", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13623", 
              "_id" : "knows/13623", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dhvK---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhvG---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhvG--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dhvG--A", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13619", 
              "_id" : "knows/13619", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhvG--D", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13626", 
              "_id" : "knows/13626", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dhvK--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhvG---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhvG--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dhvG--B", 
              "name" : "Dave" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Follow only inbound edges

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "inbound" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dg2m---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dg2q--A", 
          "name" : "Eve" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg2m---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13298", 
              "_id" : "knows/13298", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dg2y---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg2m---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dg2q--A", 
              "name" : "Eve" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Follow any direction of edges

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "global" 
  } 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dfWa---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dfWa--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dfWe---", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dfWe--_", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dfWe--A", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dfWa---", 
          "name" : "Alice" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12751", 
              "_id" : "knows/12751", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWi---", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfWa--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12751", 
              "_id" : "knows/12751", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWi---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12755", 
              "_id" : "knows/12755", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dfWi--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfWa--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dfWe---", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12751", 
              "_id" : "knows/12751", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWi---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12758", 
              "_id" : "knows/12758", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dfWm---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfWa--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dfWe--_", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12751", 
              "_id" : "knows/12751", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWi---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12764", 
              "_id" : "knows/12764", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWm--A", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfWa--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfWe--A", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12751", 
              "_id" : "knows/12751", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWi---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12764", 
              "_id" : "knows/12764", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfWm--A", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12761", 
              "_id" : "knows/12761", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfWm--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfWa--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfWe--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfWa---", 
              "name" : "Alice" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Excluding Charlie and Bob

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "filter" : "if (vertex.name === \"Bob\" ||     vertex.name === \"Charlie\") {  return \"exclude\";}return;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dgZu--_", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dgZy--A", 
          "name" : "Dave" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgZu--_", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13137", 
              "_id" : "knows/13137", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgZ2--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13144", 
              "_id" : "knows/13144", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dgZ6---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgZu--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgZy---", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dgZy--A", 
              "name" : "Dave" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Do not follow edges from Bob

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "filter" : "if (vertex.name === \"Bob\") {return \"prune\";}return;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dgpe---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dgpe--_", 
          "name" : "Bob" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgpe---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13215", 
              "_id" : "knows/13215", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgpm---", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgpe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgpe--_", 
              "name" : "Bob" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Visit only nodes in a depth of at least 2

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "minDepth" : 2 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dhga--B", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dhge---", 
          "name" : "Dave" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ 
            { 
              "_key" : "13541", 
              "_id" : "knows/13541", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhge--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13545", 
              "_id" : "knows/13545", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dhge--B", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhga--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhga--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dhga--B", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13541", 
              "_id" : "knows/13541", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhge--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13548", 
              "_id" : "knows/13548", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dhge--C", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhga--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhga--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dhge---", 
              "name" : "Dave" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Visit only nodes in a depth of at most 1

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "maxDepth" : 1 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dhDq---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dhDq--_", 
          "name" : "Bob" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhDq---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13362", 
              "_id" : "knows/13362", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dhDy---", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dhDq---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dhDq--_", 
              "name" : "Bob" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Using a visitor function to return vertex ids only

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "visitor" : "result.visited.vertices.push(vertex._id);" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        "persons/alice", 
        "persons/bob", 
        "persons/charlie", 
        "persons/dave" 
      ], 
      "paths" : [ ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Count all visited nodes and return a list of nodes only

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "init" : "result.visited = 0; result.myVertices = [ ];", 
  "visitor" : "result.visited++; result.myVertices.push(vertex);" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : 4, 
    "myVertices" : [ 
      { 
        "_key" : "alice", 
        "_id" : "persons/alice", 
        "_rev" : "_Vp0diI6---", 
        "name" : "Alice" 
      }, 
      { 
        "_key" : "bob", 
        "_id" : "persons/bob", 
        "_rev" : "_Vp0diI6--_", 
        "name" : "Bob" 
      }, 
      { 
        "_key" : "charlie", 
        "_id" : "persons/charlie", 
        "_rev" : "_Vp0diI6--A", 
        "name" : "Charlie" 
      }, 
      { 
        "_key" : "dave", 
        "_id" : "persons/dave", 
        "_rev" : "_Vp0diI6--B", 
        "name" : "Dave" 
      } 
    ] 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Expand only inbound edges of Alice and outbound edges of Eve

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "expander" : "var connections = [ ];if (vertex.name === \"Alice\") {config.datasource.getInEdges(vertex).forEach(function (e) {connections.push({ vertex: require(\"internal\").db._document(e._from), edge: e});});}if (vertex.name === \"Eve\") {config.datasource.getOutEdges(vertex).forEach(function (e) {connections.push({vertex: require(\"internal\").db._document(e._to), edge: e});});}return connections;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0diVW--_", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0diVa--_", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0diVW--A", 
          "name" : "Bob" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0diVW--_", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13889", 
              "_id" : "knows/13889", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0diVe---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0diVW--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0diVa--_", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13889", 
              "_id" : "knows/13889", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0diVe---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13892", 
              "_id" : "knows/13892", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0diVe--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0diVW--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0diVa--_", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0diVW--A", 
              "name" : "Bob" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Follow the depthfirst strategy

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "strategy" : "depthfirst" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dg_6---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dg_6--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dgA----", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dgA---_", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dgAC---", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dg_6---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dgAC---", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dg_6--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dgA----", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dgA---_", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dg_6---", 
          "name" : "Alice" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12948", 
              "_id" : "knows/12948", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dgAG---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dgA----", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12951", 
              "_id" : "knows/12951", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dgAG--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dgA---_", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12948", 
              "_id" : "knows/12948", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dgAG---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dgA----", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12951", 
              "_id" : "knows/12951", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dgAG--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dgA---_", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12954", 
              "_id" : "knows/12954", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgAK---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12957", 
              "_id" : "knows/12957", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAK--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12944", 
              "_id" : "knows/12944", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgAC--_", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgAC---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dg_6--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dg_6---", 
              "name" : "Alice" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Using postorder ordering

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "order" : "postorder" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dh6m--B", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dh6m--C", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dh6m--_", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dh6q---", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dh6m--A", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dh6m--B", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dh6m--C", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dh6m--_", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dh6m--A", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dh6q---", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dh6m--_", 
          "name" : "Alice" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13701", 
              "_id" : "knows/13701", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dh6q--A", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dh6m--B", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13704", 
              "_id" : "knows/13704", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dh6q--B", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dh6m--C", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13701", 
              "_id" : "knows/13701", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dh6q--A", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dh6m--B", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13704", 
              "_id" : "knows/13704", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dh6q--B", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dh6m--C", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13697", 
              "_id" : "knows/13697", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--_", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13710", 
              "_id" : "knows/13710", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dh6q--D", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dh6m--A", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13707", 
              "_id" : "knows/13707", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dh6q--C", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dh6q---", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dh6m--_", 
              "name" : "Alice" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Using backward item-ordering:

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "itemOrder" : "backward" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dfxe---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dfxi--A", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dfxe--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dfxe---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dfxi--_", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dfxi---", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dfxe--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dfxi--A", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dfxe---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dfxi--_", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dfxi---", 
          "name" : "Charlie" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12847", 
              "_id" : "knows/12847", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dfxm--A", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dfxi--_", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12844", 
              "_id" : "knows/12844", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dfxm--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dfxi---", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12853", 
              "_id" : "knows/12853", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxq--_", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "12850", 
              "_id" : "knows/12850", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dfxq---", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dfxi--A", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12847", 
              "_id" : "knows/12847", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dfxm--A", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dfxi--_", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "12840", 
              "_id" : "knows/12840", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dfxm---", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "12844", 
              "_id" : "knows/12844", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dfxm--_", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dfxe---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dfxe--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dfxi---", 
              "name" : "Charlie" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

Edges should only be included once globally, but nodes are included every time they are visited

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "global" 
  } 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "result" : { 
    "visited" : { 
      "vertices" : [ 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dgNO---", 
          "name" : "Alice" 
        }, 
        { 
          "_key" : "bob", 
          "_id" : "persons/bob", 
          "_rev" : "_Vp0dgNO--_", 
          "name" : "Bob" 
        }, 
        { 
          "_key" : "charlie", 
          "_id" : "persons/charlie", 
          "_rev" : "_Vp0dgNO--A", 
          "name" : "Charlie" 
        }, 
        { 
          "_key" : "dave", 
          "_id" : "persons/dave", 
          "_rev" : "_Vp0dgNS---", 
          "name" : "Dave" 
        }, 
        { 
          "_key" : "eve", 
          "_id" : "persons/eve", 
          "_rev" : "_Vp0dgNS--_", 
          "name" : "Eve" 
        }, 
        { 
          "_key" : "alice", 
          "_id" : "persons/alice", 
          "_rev" : "_Vp0dgNO---", 
          "name" : "Alice" 
        } 
      ], 
      "paths" : [ 
        { 
          "edges" : [ ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13048", 
              "_id" : "knows/13048", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNS--A", 
              "vertex" : "alice" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgNO--_", 
              "name" : "Bob" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13048", 
              "_id" : "knows/13048", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNS--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13052", 
              "_id" : "knows/13052", 
              "_from" : "persons/bob", 
              "_to" : "persons/charlie", 
              "_rev" : "_Vp0dgNS--B", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgNO--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "charlie", 
              "_id" : "persons/charlie", 
              "_rev" : "_Vp0dgNO--A", 
              "name" : "Charlie" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13048", 
              "_id" : "knows/13048", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNS--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13055", 
              "_id" : "knows/13055", 
              "_from" : "persons/bob", 
              "_to" : "persons/dave", 
              "_rev" : "_Vp0dgNW---", 
              "vertex" : "bob" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgNO--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "dave", 
              "_id" : "persons/dave", 
              "_rev" : "_Vp0dgNS---", 
              "name" : "Dave" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13048", 
              "_id" : "knows/13048", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNS--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13061", 
              "_id" : "knows/13061", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNW--A", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgNO--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgNS--_", 
              "name" : "Eve" 
            } 
          ] 
        }, 
        { 
          "edges" : [ 
            { 
              "_key" : "13048", 
              "_id" : "knows/13048", 
              "_from" : "persons/alice", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNS--A", 
              "vertex" : "alice" 
            }, 
            { 
              "_key" : "13061", 
              "_id" : "knows/13061", 
              "_from" : "persons/eve", 
              "_to" : "persons/bob", 
              "_rev" : "_Vp0dgNW--A", 
              "vertex" : "eve" 
            }, 
            { 
              "_key" : "13058", 
              "_id" : "knows/13058", 
              "_from" : "persons/eve", 
              "_to" : "persons/alice", 
              "_rev" : "_Vp0dgNW--_", 
              "vertex" : "eve" 
            } 
          ], 
          "vertices" : [ 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            }, 
            { 
              "_key" : "bob", 
              "_id" : "persons/bob", 
              "_rev" : "_Vp0dgNO--_", 
              "name" : "Bob" 
            }, 
            { 
              "_key" : "eve", 
              "_id" : "persons/eve", 
              "_rev" : "_Vp0dgNS--_", 
              "name" : "Eve" 
            }, 
            { 
              "_key" : "alice", 
              "_id" : "persons/alice", 
              "_rev" : "_Vp0dgNO---", 
              "name" : "Alice" 
            } 
          ] 
        } 
      ] 
    } 
  }, 
  "error" : false, 
  "code" : 200 
}

Example:

If the underlying graph is cyclic, maxIterations should be set

The underlying graph has two vertices Alice and Bob. With the directed edges:

  • Alice knows Bob
  • Bob knows Alice
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "none" 
  }, 
  "maxIterations" : 5 
}
EOF

HTTP/1.1 500 Internal Server Error
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

{ 
  "error" : true, 
  "code" : 500, 
  "errorNum" : 1909, 
  "errorMessage" : "too many iterations - try increasing the value of 'maxIterations'" 
}

Return Codes

  • 200: If the traversal is fully executed HTTP 200 will be returned.
  • 400: If the traversal specification is either missing or malformed, the server will respond with HTTP 400.
  • 404: The server will responded with HTTP 404 if the specified edge collection does not exist, or the specified start vertex cannot be found.
  • 500: The server will responded with HTTP 500 when an error occurs inside the traversal or if a traversal performs more than maxIterations iterations.

Examples

In the following examples the underlying graph will contain five persons Alice, Bob, Charlie, Dave and Eve. We will have the following directed relations:

  • Alice knows Bob
  • Bob knows Charlie
  • Bob knows Dave
  • Eve knows Alice
  • Eve knows Bob The starting vertex will always be Alice. Follow only outbound edges
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Follow only inbound edges

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "inbound" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Follow any direction of edges

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "global" 
  } 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Excluding Charlie and Bob

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "filter" : "if (vertex.name === \"Bob\" ||     vertex.name === \"Charlie\") {  return \"exclude\";}return;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Do not follow edges from Bob

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "filter" : "if (vertex.name === \"Bob\") {return \"prune\";}return;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Visit only nodes in a depth of at least 2

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "minDepth" : 2 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Visit only nodes in a depth of at most 1

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "maxDepth" : 1 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Using a visitor function to return vertex ids only

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "visitor" : "result.visited.vertices.push(vertex._id);" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Count all visited nodes and return a list of nodes only

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "outbound", 
  "init" : "result.visited = 0; result.myVertices = [ ];", 
  "visitor" : "result.visited++; result.myVertices.push(vertex);" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Expand only inbound edges of Alice and outbound edges of Eve

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "expander" : "var connections = [ ];if (vertex.name === \"Alice\") {config.datasource.getInEdges(vertex).forEach(function (e) {connections.push({ vertex: require(\"internal\").db._document(e._from), edge: e});});}if (vertex.name === \"Eve\") {config.datasource.getOutEdges(vertex).forEach(function (e) {connections.push({vertex: require(\"internal\").db._document(e._to), edge: e});});}return connections;" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Follow the depthfirst strategy

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "strategy" : "depthfirst" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Using postorder ordering

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "order" : "postorder" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Using backward item-ordering:

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "itemOrder" : "backward" 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

Edges should only be included once globally, but nodes are included every time they are visited

shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "global" 
  } 
}
EOF

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

If the underlying graph is cyclic, maxIterations should be set The underlying graph has two vertices Alice and Bob. With the directed edges:

  • Alice knows Bob
  • Bob knows Alice
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/traversal <<EOF
{ 
  "startVertex" : "persons/alice", 
  "graphName" : "knows_graph", 
  "direction" : "any", 
  "uniqueness" : { 
    "vertices" : "none", 
    "edges" : "none" 
  }, 
  "maxIterations" : 5 
}
EOF

HTTP/1.1 500 Internal Server Error
content-type: application/json; charset=utf-8
x-content-type-options: nosniff

show response body

All examples were using this graph:

Persons relation Example Graph