Mutation API Reference
Edge mutation API. See Mutation for conceptual background.
1. Edge Mutation
Section titled “1. Edge Mutation”Mutate edges between source nodes and target nodes.
Endpoint
Section titled “Endpoint”POST /graph/v3/databases/{database}/tables/{table}/edgesParameters
Section titled “Parameters”| Location | Parameter | Required | Description |
|---|---|---|---|
| Header | Authorization | Optional | Authentication key (reserved for future use) |
| Path | database | Required | Target database name |
| Path | table | Required | Target table name |
| Query | lock | Optional (default: true) | Whether to acquire lock during mutation |
| Body | mutations | Required | List of mutation items |
Request Body
Section titled “Request Body”EdgeBulkMutationRequest - Payload containing mutation items
Response Type
Section titled “Response Type”EdgeMutationResponse - Payload containing mutation results
Request Example
Section titled “Request Example”| Parameter | Value |
|---|---|
| Authorization | YOUR_API_KEY |
| database | your_database |
| table | your_table |
| lock | true |
# POST /graph/v3/databases/your_database/tables/your_table/edgescurl -X POST \ "http://ab.example.com/graph/v3/databases/your_database/tables/your_table/edges?lock=true" \ -H "Authorization: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mutations": [ { "type": "INSERT", "edge": { "version": 1, "source": "source1", "target": "target1", "properties": { "weight": 0.8, "type": "FOLLOWS" } } } ] }'Response Example
Section titled “Response Example”{ "results": [ { "source": "source1", "target": "target1", "status": "CREATED", "count": 1 } ]}2. Edge Mutation (Sync)
Section titled “2. Edge Mutation (Sync)”Mutate edges synchronously. This endpoint waits for the mutation to complete before returning a response.
Endpoint
Section titled “Endpoint”POST /graph/v3/databases/{database}/tables/{table}/edges/syncParameters
Section titled “Parameters”| Location | Parameter | Required | Description |
|---|---|---|---|
| Header | Authorization | Optional | Authentication key (reserved for future use) |
| Path | database | Required | Target database name |
| Path | table | Required | Target table name |
| Query | lock | Optional (default: true) | Whether to acquire lock during mutation |
| Body | mutations | Required | List of mutation items |
Request Body
Section titled “Request Body”EdgeBulkMutationRequest - Payload containing mutation items
Response Type
Section titled “Response Type”EdgeMutationResponse - Payload containing mutation results
Request Example
Section titled “Request Example”| Parameter | Value |
|---|---|
| Authorization | YOUR_API_KEY |
| database | your_database |
| table | your_table |
| lock | true |
# POST /graph/v3/databases/your_database/tables/your_table/edges/synccurl -X POST \ "http://ab.example.com/graph/v3/databases/your_database/tables/your_table/edges/sync?lock=true" \ -H "Authorization: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mutations": [ { "type": "UPDATE", "edge": { "version": 2, "source": "source1", "target": "target1", "properties": { "weight": 0.9, "type": "FOLLOWS" } } } ] }'Response Example
Section titled “Response Example”{ "results": [ { "source": "source1", "target": "target1", "status": "UPDATED", "count": 1 } ]}3. Multi-Edge Mutation
Section titled “3. Multi-Edge Mutation”Mutate multi-edges identified by edge IDs.
Endpoint
Section titled “Endpoint”POST /graph/v3/databases/{database}/tables/{table}/multi-edgesParameters
Section titled “Parameters”| Location | Parameter | Required | Description |
|---|---|---|---|
| Header | Authorization | Optional | Authentication key (reserved for future use) |
| Path | database | Required | Target database name |
| Path | table | Required | Target table name |
| Query | lock | Optional (default: true) | Whether to acquire lock during mutation |
| Body | mutations | Required | List of mutation items |
Request Body
Section titled “Request Body”MultiEdgeBulkMutationRequest - Payload containing mutation items
Response Type
Section titled “Response Type”MultiEdgeMutationResponse - Payload containing mutation results
Request Example
Section titled “Request Example”| Parameter | Value |
|---|---|
| Authorization | YOUR_API_KEY |
| database | your_database |
| table | your_table |
| lock | true |
# POST /graph/v3/databases/your_database/tables/your_table/multi-edgescurl -X POST \ "http://ab.example.com/graph/v3/databases/your_database/tables/your_table/multi-edges?lock=true" \ -H "Authorization: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mutations": [ { "type": "INSERT", "edge": { "version": 1, "id": "edge1", "source": "source1", "target": "target1", "properties": { "weight": 0.8, "type": "FOLLOWS" } } } ] }'Response Example
Section titled “Response Example”{ "results": [ { "id": "edge1", "status": "CREATED", "count": 1 } ]}4. Multi-Edge Mutation (Sync)
Section titled “4. Multi-Edge Mutation (Sync)”Mutate multi-edges synchronously. This endpoint waits for the mutation to complete before returning a response.
Endpoint
Section titled “Endpoint”POST /graph/v3/databases/{database}/tables/{table}/multi-edges/syncParameters
Section titled “Parameters”| Location | Parameter | Required | Description |
|---|---|---|---|
| Header | Authorization | Optional | Authentication key (reserved for future use) |
| Path | database | Required | Target database name |
| Path | table | Required | Target table name |
| Query | lock | Optional (default: true) | Whether to acquire lock during mutation |
| Body | mutations | Required | List of mutation items |
Request Body
Section titled “Request Body”MultiEdgeBulkMutationRequest - Payload containing mutation items
Response Type
Section titled “Response Type”MultiEdgeMutationResponse - Payload containing mutation results
Request Example
Section titled “Request Example”| Parameter | Value |
|---|---|
| Authorization | YOUR_API_KEY |
| database | your_database |
| table | your_table |
| lock | true |
# POST /graph/v3/databases/your_database/tables/your_table/multi-edges/synccurl -X POST \ "http://ab.example.com/graph/v3/databases/your_database/tables/your_table/multi-edges/sync?lock=true" \ -H "Authorization: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mutations": [ { "type": "DELETE", "edge": { "version": 3, "id": "edge1", "source": "source1", "target": "target1", "properties": {} } } ] }'Response Example
Section titled “Response Example”{ "results": [ { "id": "edge1", "status": "DELETED", "count": 1 } ]}5. Scan-Delete (Immutable Edge Tables)
Section titled “5. Scan-Delete (Immutable Edge Tables)”Scan an index range on an immutable edge table and delete the matched rows, returning the count deleted. Used for eviction and retention.
Rejected with 400 on non-immutable tables. limit is required and capped at 1000; one call deletes at most one page, so loop until the returned count is below limit to drain a larger range.
Endpoint
Section titled “Endpoint”DELETE /graph/v3/databases/{database}/tables/{table}/edges/scan/{index}Parameters
Section titled “Parameters”| Location | Parameter | Required | Description |
|---|---|---|---|
| Header | Authorization | Optional | Authentication key (reserved for future use) |
| Path | database | Required | Target database name |
| Path | table | Required | Target table name (must be an immutable edge table) |
| Path | index | Required | Index to scan |
| Query | start | Required | Source node to scan from |
| Query | direction | Required | Scan direction (OUT, IN) |
| Query | limit | Required | Max rows to delete in this call (maximum 1000) |
| Query | ranges | Optional | Index range predicate (e.g., seq:lte:1001) |
Response Type
Section titled “Response Type”EdgeScanDeleteResponse - The count deleted
Request Example
Section titled “Request Example”| Parameter | Value |
|---|---|
| Authorization | YOUR_API_KEY |
| database | your_database |
| table | your_table |
| index | seq_asc |
# DELETE /graph/v3/databases/your_database/tables/your_table/edges/scan/seq_asccurl -X DELETE \ "http://ab.example.com/graph/v3/databases/your_database/tables/your_table/edges/scan/seq_asc?start=1&direction=OUT&limit=100&ranges=seq:lte:1001" \ -H "Authorization: YOUR_API_KEY"Response Example
Section titled “Response Example”{ "database": "your_database", "table": "your_table", "index": "seq_asc", "deleted": 2}Event Types
Section titled “Event Types”The type field in mutation items specifies the operation to perform:
| Type | Description |
|---|---|
INSERT | Create a new edge or update an existing edge with a new version |
UPDATE | Update properties of an existing edge |
DELETE | Delete an edge (marks it as deleted) |
Immutable edge tables accept INSERT only; UPDATE and DELETE are rejected with 400. Rows are removed via scan-delete instead.
Lock Parameter
Section titled “Lock Parameter”The lock parameter controls whether to acquire a lock during mutation:
- true (default): Acquires a lock to prevent concurrent modifications. Ensures data consistency but may have higher latency.
- false: Skips locking. Faster but may lead to race conditions if multiple mutations target the same edge simultaneously.
Note: It is recommended to use lock=true in production environments to ensure data consistency.
Data Model
Section titled “Data Model”EdgeBulkMutationRequest
Section titled “EdgeBulkMutationRequest”Edge mutation request payload.
data class EdgeBulkMutationRequest( val mutations: List<MutationItem>, // List of mutation items) { data class MutationItem( val type: EventType, // Event type (INSERT, UPDATE, DELETE) val edge: Edge, // Edge data )}MultiEdgeBulkMutationRequest
Section titled “MultiEdgeBulkMutationRequest”Multi-edge mutation request payload.
data class MultiEdgeBulkMutationRequest( val mutations: List<MutationItem>, // List of mutation items) { data class MutationItem( val type: EventType, // Event type (INSERT, UPDATE, DELETE) val edge: MultiEdge, // Multi-edge data )}EdgeMutationResponse
Section titled “EdgeMutationResponse”Edge mutation response payload.
data class EdgeMutationResponse( val results: List<Item>, // List of mutation results) { data class Item( val source: Any, // Source node ID val target: Any, // Target node ID val status: String, // Mutation status (e.g., CREATED, UPDATED, DELETED) val count: Int, // Number of edges affected )}MultiEdgeMutationResponse
Section titled “MultiEdgeMutationResponse”Multi-edge mutation response payload.
data class MultiEdgeMutationResponse( val results: List<Item>, // List of mutation results) { data class Item( val id: Any, // Edge ID val status: String, // Mutation status (e.g., CREATED, UPDATED, DELETED) val count: Int, // Number of edges affected )}Individual edge information for mutation.
data class Edge( val version: Long, // Edge version val source: Any, // Source node ID val target: Any, // Target node ID val properties: Map<String, Any?>, // Edge properties)MultiEdge
Section titled “MultiEdge”Individual multi-edge information for mutation.
data class MultiEdge( val version: Long, // Edge version val id: Any, // Edge ID val source: Any? = null, // Source node ID (optional) val target: Any? = null, // Target node ID (optional) val properties: Map<String, Any?>, // Edge properties)EdgeScanDeleteResponse
Section titled “EdgeScanDeleteResponse”Scan-delete response payload.
data class EdgeScanDeleteResponse( val database: String, // Target database name val table: String, // Target table name val index: String, // Index that was scanned val deleted: Int, // Rows deleted by this call (at most `limit`))