Skip to main content

REST - /v1/objects

LICENSEย Weaviate on Stackoverflow badgeย Weaviate issues on GitHub badgeย Weaviate version badgeย Weaviate total Docker pulls badgeย Go Report Card

List data objectsโ€‹

Do you want to list all objects from Weaviate?

Use the after parameter.

List data objects in reverse order of creation. The data will be returned as an array of objects.

After a class object count?

A: This Aggregate query will output a total object count in a class.

import weaviate

client = weaviate.Client("https://some-endpoint.weaviate.network")

client.query.aggregate(<ClassName>).with_meta_count().do()

Method and URLโ€‹

Without any restrictions (across classes, default limit = 25):

GET /v1/objects

With optional query params:

GET /v1/objects?class={ClassName}&limit={limit}&include={include}

Parametersโ€‹

All parameters below are optional URL query parameters
NameTypeDescription
classstringList objects by class using the class name.
limitintegerThe maximum number of data objects to return. Default 25.
offsetintegerThe offset of objects returned (the starting index of the returned objects).

Cannot be used with after.
Should be used in conjunction with limit.
afterstringID of the object after which (i.e. non-inclusive ID) objects are to be listed.

Must be used with class
Cannot be used with offset or sort.
Should be used in conjunction with limit.
includestringInclude additional information, such as classification info.

Allowed values include: classification, vector, featureProjection and other module-specific additional properties.
sortstringName of the property to sort by - i.e. sort=city

You can also provide multiple names โ€“ i.e. sort=country,city
orderstringOrder in which to sort by.

Possible values: asc (default) and desc.
Should be used in conjunction with sort.

Paging: offsetโ€‹

tip

You can use limit and offset for paging results.

The offset parameter is a flexible way to page results as it allows use with parameters such as sort. It is limited by the value of QUERY_MAXIMUM_RESULTS which sets the maximum total number of objects that can be listed using this parameter.

Get the first 10 objects:

GET /v1/objects?class=MyClass&limit=10

Get the second batch of 10 objects:

GET /v1/objects?class=MyClass&limit=10&offset=10

Get the next batch of 10 objects:

GET /v1/objects?class=MyClass&limit=10&offset=20

Exhaustive listing using a cursor: afterโ€‹

tip
  • Available from version v1.18.0.
  • You can use class, limit and after for listing an entire object set from a class.
  • The after parameter is based on the order of ids. It can therefore only be applied to list queries without sorting.

You can use the after parameter to retrieve all objects from a Weaviate instance . The after parameter ("Cursor API") retrieves objects of a class based on the order of ids. You can pass the id of the last retrieved object as a cursor to start the next page.

It is not possible to use the after parameter without specifying a class.

For a null value similar to offset=0, set after= or after (i.e. with an empty string) in the request.

Examplesโ€‹

Get the first 10 objects of MyClass:

GET /v1/objects?class=MyClass&limit=10

If the last object in the retrieved set above was b1645a32-0c22-5814-8f35-58f142eadf7e, you can retrieve the next 10 objects of MyClass after it as below:

GET /v1/objects?class=MyClass&limit=10&after=b1645a32-0c22-5814-8f35-58f142eadf7e

Example sortingโ€‹

tip

You can use sort and order to sort your results.

Ascending sort by author_name:

GET /v1/objects?class=Book&sort=author_name

Descending sort by author_name:

GET /v1/objects?class=Book&sort=author_name&order=desc

Sort by by author_name, and then title.

GET /v1/objects?class=Book&sort=author_name,title

Sort by author_name, and then title with order:

GET /v1/objects?class=Book&sort=author_name,title&order=desc,asc

Response fieldsโ€‹

The response of a GET query of a data object will give you information about all objects (or a single object). Next to general information about the data objects, like schema information and property values, meta information will be shown depending on the include fields or additional properties of your request.

Response formatโ€‹

{
"objects": [/* list of objects, see below */],
"deprecations": null,
}

Object fieldsโ€‹

Field nameData typeRequired include or additional fieldDescription
classstringnoneThe class name.
creationTimeUnixunix timestampnoneThe time stamp of creation of the data object.
iduuidnoneThe uuid of the data object.
lastUpdateTimeUnixunix timestampnoneThe time stamp when the data object was last updated.
properties > {propertyName}dataTypenoneThe name and value of an individual property.
properties > {crefPropertyName} > classification > closestLosingDistancefloatclassificationThe lowest distance of a neighbor in the losing group. Optional. If k equals the size of the winning group, there is no losing group.
properties > {crefPropertyName} > classification > closestOverallDistancefloatclassificationThe lowest distance of any neighbor, regardless of whether they were in the winning or losing.
properties > {crefPropertyName} > classification > closestWinningDistancefloatclassificationClosest distance of a neighbor from the winning group.
properties > {crefPropertyName} > classification > losingCountintegerclassificationSize of the losing group, can be 0 if the winning group size equals k.
properties > {crefPropertyName} > classification > meanLosingDistancefloatclassificationThe mean distance of the losing group. It is a normalized distance (between 0 and 1), where 0 means equal and 1 would mean a perfect opposite.
properties > {crefPropertyName} > classification > meanWinningDistancefloatclassificationThe mean distance of the winning group. It is a normalized distance (between 0 and 1), where 0 means equal and 1 would mean a perfect opposite.
properties > {crefPropertyName} > classification > overallCountintegerclassificationOverall neighbors checked as part of the classification. In most cases this will equal k, but could be lower than k - for example if not enough data was present.
properties > {crefPropertyName} > classification > winningCountintegerclassificationSize of the winning group, a number between 1 and k.
vectorlist of floatsvectorThe long vector of the location of the object in the 300-dimensional space.
classification > basedOnstringclassificationThe property name where the classification was based on.
classification > classifiedFieldsstringclassificationThe classified property.
classification > completedtimestampclassificationThe time of classification completion.
classification > iduuidclassificationThe classification id.
classification > scopelist of stringsclassificationThe initial fields to classify.
featureProjection > vectorlist of floatsfeatureProjectionThe 2D or 3D vector coordinates of the feature projection.

Status codes and error casesโ€‹

CauseDescriptionResult
No objects presentNo ?class is provided. There are no objects present in the entire Weaviate instance.200 OK - No error
Valid class, no objects present?class is provided, class exists. There are no objects present for this class.200 OK - No error
Invalid class?class is provided, class does not exist.404 Not Found
ValidationOtherwise invalid user request.422 Unprocessable Entity
AuthorizationNot allowed to view resource.403 Forbidden
Server-Side errorCorrect user input, but request failed for another reason.500 Internal Server Error - contains detailed error message

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

all_objects = client.data_object.get(class_name="MyClass")
print(all_objects)

Create a data objectโ€‹

Create a new data object. The provided meta-data and schema values are validated.

objects vs batchโ€‹

tip

The objects endpoint is meant for individual object creations.

If you plan on importing a large number of objects, it's much more efficient to use the /v1/batch endpoint. Otherwise, sending multiple single requests sequentially would incur a large performance penalty:

  1. Each sequential request would be handled by a single thread server-side while most of the server resources are idle. In addition, if you only send the second request once the first has been completed, you will wait for a lot of network overhead.
  2. It's much more efficient to parallelize imports. This will minimize the connection overhead and use multiple threads server-side for indexing.
  3. You do not have to do the parallelization yourself, you can use the /v1/batch endpoint for this. Even if you are sending batches from a single client thread, the objects within a batch will be handled by multiple server threads.
  4. Import speeds, especially for large datasets, will drastically improve when using the batching endpoint.

Method and URLโ€‹

POST /v1/objects[?consistency_level=ONE|QUORUM|ALL]
note

The class name is not specified in the URL, as it is part of the request body.

Parametersโ€‹

The URL supports an optional consistency level query parameter:

NameLocationTypeDescription
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

The request body for a new object has the following fields:

NameTypeRequiredDescription
classstringyesThe class name as defined in the schema
propertiesarrayyesAn object with the property values of the new data object
properties > {propertyName}dataTypeyesThe property and its value according to the set dataType
idv4 UUIDnoOptional id for the object
vector[float]noOptional custom vector

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

data_obj = {
"name": "Jodi Kantor",
"writesFor": [{
"beacon": "weaviate://localhost/Article/f81bfe5e-16ba-4615-a516-46c2ae2e5a80"
}]
}

data_uuid = client.data_object.create(
data_obj,
"Author",
uuid="36ddd591-2dee-4e7e-a3cc-eb86d30a4303", # optional; if not provided, one will be generated
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

With geoCoordinatesโ€‹

If you want to supply a geoCoordinates property, you need to specify the latitude and longitude as floating point decimal degrees:

import weaviate

client = weaviate.Client("http://localhost:8080")

data_obj = {
"name": "Elsevier",
"headquartersGeoLocation": {
"latitude": 52.3932696,
"longitude": 4.8374263
}
}

data_uuid = client.data_object.create(
data_obj,
"Publication",
uuid="df48b9f6-ba48-470c-bf6a-57657cb07390", # optional, if not provided, one is going to be generated
)

With a custom vectorโ€‹

When creating a data object, you can configure Weaviate to generate a vector with a vectorizer module, or you can provide the vector yourself. We sometimes refer to this as a "custom" vector.

You can provide a custom vector during object creation either when:

  • you are not using a vectorizer for that class, or
  • you are using a vectorizer, but you wish to bypass it during the object creation stage.

You can create a data object with a custom vector as follows:

  1. Set the "vectorizer" in the relevant class in the data schema.
    • If you are not using a vectorizer at all, configure the class accordingly. To do this, you can:
      • set the default vectorizer module to "none" (DEFAULT_VECTORIZER_MODULE="none"), or
      • set the "vectorizer" for the class to "none" ("vectorizer": "none") (note: the class vectorizer setting will override the DEFAULT_VECTORIZER_MODULE parameter).
    • If you wish to bypass the vectorizer for object creation:
      • set the vectorizer to the same vectorizer with identical settings used to generate the custom vector

        Note: There is NO validation of this vector besides checking the vector length.

  2. Then, attach the vector in a special "vector" field during object creation. For example, if adding a single object, you can:
import weaviate

client = weaviate.Client("http://localhost:8080")

data_obj = {
"foo": "bar"
}

data_uuid = client.data_object.create(
data_obj,
"YourClass",
uuid="36ddd591-2dee-4e7e-a3cc-eb86d30a0923", # optional, if not provided, one is going to be generated
vector = [0.3, 0.2, 0.1, .... 0.9], # supported types are `list`, `numpy.ndarray`, `torch.Tensor` and `tf.Tensor`.
)
note

You can set custom vectors for batch imports as well as single object creation.

See also how to search using custom vectors.

Get a data objectโ€‹

Collect an individual data object.

Method and URLโ€‹

Available since v1.14 and the preferred way:

GET /v1/objects/{ClassName}/{id}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

GET /v1/objects/{id}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

URL parametersโ€‹

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to.
{id}query paramuuidThe uuid of the data object to retrieve.
includequery paramstringInclude additional information, such as classification info. Allowed values include: classification, vector.
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

Example requestโ€‹

The response fields are explained in the corresponding section above.

import weaviate

client = weaviate.Client("http://localhost:8080")

data_object = client.data_object.get_by_id(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
class_name="MyClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ONE, # default QUORUM
)

# The parameter "consistency_level" can be one of ConsistencyLevel.ALL,
# ConsistencyLevel.QUORUM (default), or ConsistencyLevel.ONE. Determines how many
# replicas must acknowledge a request before it is considered successful.

print(data_object)

Check if a data object existsโ€‹

The same endpoint above can be used with the HEAD HTTP method to check if a data object exists without retrieving it. Internally it skips reading the object from disk (other than checking if it is present), thus not using resources on marshalling, parsing, etc. Additionally, the resulting HTTP request has no body; the existence of an object is indicated solely by the status code (204 when the object exists, 404 when it doesn't, 422 on invalid ID).

Method and URLโ€‹

Available since v1.14 and the preferred way:

HEAD /v1/objects/{ClassName}/{id}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

HEAD /v1/objects/{id}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

URL parametersโ€‹

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to
{id}pathuuidThe uuid of the data object to retrieve
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

exists = client.data_object.exists(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
class_name="MyClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ONE,
)

# The parameter "consistency_level" can be one of ConsistencyLevel.ALL,
# ConsistencyLevel.QUORUM (default), or ConsistencyLevel.ONE. Determines how many
# replicas must acknowledge a request before it is considered successful.

print(exists)

Update a data objectโ€‹

Update an individual data object based on its uuid.

Method and URLโ€‹

In the RESTful API, both PUT and PATCH methods are accepted. PUT replaces all property values of the data object, while PATCH only overwrites the given properties.

Available since v1.14 and the preferred way:

PUT /v1/objects/{ClassName}/{id}[?consistency_level=ONE|QUORUM|ALL]
PATCH /v1/objects/{ClassName}/{id}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

PUT /v1/objects/{id}
PATCH /v1/objects/{id}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

Vector inference at object update

Where Weaviate is configured with a vectorizer, it will only obtain a new vector if an object update changes the underlying text to be vectorized.

Parametersโ€‹

The URL has two required path parameters and supports an optional query parameter for the consistency level:

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to
{id}pathuuidThe uuid of the data object to update
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

The request body for replacing (some) properties of an object has the following fields:

NameTypeRequiredDescription
classstringyesThe class name as defined in the schema
idstring?Required for PUT to be the same id as the one passed in the URL
propertiesarrayyesAn object with the property values of the new data object
properties > {propertyName}dataTypeyesThe property and its value according to the set dataType
vector[float]noOptional custom vector

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

updated_schema = {
"name": "J. Kantor"
}

# Update only the properties in variable "updated_schema"
client.data_object.update(
updated_schema,
class_name="Author",
uuid="36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

# Replaces the whole data object with the "updated_schema"
client.data_object.replace(
updated_schema,
"Author",
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

If the update was successful, no content will be returned.

Delete a data objectโ€‹

Delete an individual data object from Weaviate.

Method and URLโ€‹

Available since v1.14 and preferred way:

DELETE /v1/objects/{ClassName}/{id}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

DELETE /v1/objects/{id}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

URL parametersโ€‹

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to
{id}pathuuidThe uuid of the data object to delete
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

client.data_object.delete(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
class_name="MyClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

If the deletion was successful, no content will be returned.

Validate a data objectโ€‹

You can validate an object's schema and metadata without creating it. If the schema of the object is valid, the request should return True/true in case of the clients, and nothing with a plain RESTful request. Otherwise, an error object will be returned.

Method and URLโ€‹

POST /v1/objects/validate
note

As with creating an object, the class name is not specified through the URL, as it is part of the request body.

Parametersโ€‹

The request body for validating an object has the following fields:

NameTypeRequiredDescription
classstringyesThe class name as defined in the schema
propertiesarrayyesAn object with the property values of the new data object
properties > {propertyName}dataTypeyesThe property and its value according to the set dataType
idv4 uuidno*The id of the data object.
*An ID is required by the clients.

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

schema = {"name": "New York Times"}

valid_thing = client.data_object.validate(
schema,
"Publication",
"f81bfe5e-16ba-4615-a516-46c2ae2e5a80"
)
print(valid_thing)

Cross-referencesโ€‹

Cross-references are object properties for establishing links from the source object to another object via a beacon.

Cross-references do not affect vectors

Creating cross-references does not affect object vectors in either direction.

Add a cross-referenceโ€‹

POST request that adds a reference to the array of cross-references of the given property in the source object specified by its class name and id.

Method and URLโ€‹

Available since v1.14 and the preferred way:

POST /v1/objects/{ClassName}/{id}/references/{propertyName}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

POST /v1/objects/{id}/references/{propertyName}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

Parametersโ€‹

The URL includes three required path parameters and supports an optional query parameter for the consistency level:

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to, e.g. Article
{id}pathuuidThe uuid of the object to add the reference to
{propertyName}pathstringThe name of the cross-reference property, e.g. author
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

The request body is an object with the following field:

NameTypeRequiredDescription
beaconWeaviate BeaconyesThe beacon URL of the reference, in the format weaviate://localhost/<ClassName>/<id>
caution

In the beacon format, you need to always use localhost as the host, rather than the actual hostname. localhost refers to the fact that the beacon's target is on the same Weaviate instance, as opposed to a foreign instance.

note

For backward compatibility, you can omit the class name in the beacon format and specify it as weaviate://localhost/<id>. This is, however, considered deprecated and will be removed with a future release, as duplicate IDs across classes could mean that this beacon is not uniquely identifiable.

Example requestโ€‹

import weaviate
# weaviate.__version__ >= 3.7.0

client = weaviate.Client("http://localhost:8080")

client.data_object.reference.add(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
"wroteArticles",
"6bb06a43-e7f0-393e-9ecf-3c0f4e129064",
from_class_name="SourceClass",
to_class_name="TargetClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

If the addition was successful, no content will be returned.

Update a cross-referenceโ€‹

PUT request that updates all references in a specified property of an object specified by its class name and id.

Method and URLโ€‹

Available since v1.14 and the preferred way:

PUT /v1/objects/{ClassName}/{id}/references/{propertyName}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

PUT /v1/objects/{id}/references/{propertyName}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

Parametersโ€‹

The URL includes three required path parameters and supports an optional query parameter for the consistency level:

NameLocationTypeDescription
{ClassName}pathstringThe name of the class that the object belongs to
{id}pathuuidThe uuid of the object to update the reference(s) of
{propertyName}pathstringThe name of the cross-reference property
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

The PUT request body is a list of beacons:

NameTypeRequiredDescription
beaconWeaviate Beacon arrayyesArray of beacons in the format weaviate://localhost/<ClassName>/<id>
caution

In the beacon format, you need to always use localhost as the host, rather than the actual hostname. localhost refers to the fact that the beacon's target is on the same Weaviate instance, as opposed to a foreign instance.

note

For backward compatibility, you can omit the class name in the beacon format and specify it as weaviate://localhost/<id>. This is, however, considered deprecated and will be removed with a future release, as duplicate IDs across classes could mean that this beacon is not uniquely identifiable.

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

client.data_object.reference.update(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
"wroteArticles",
["6bb06a43-e7f0-393e-9ecf-3c0f4e129064", "b72912b9-e5d7-304e-a654-66dc63c55b32"]
from_class_name="SourceClass",
to_class_name="TargetClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

If the update was successful, no content will be returned.

Delete a cross-referenceโ€‹

Delete the single reference that is given in the body from the list of references that the specified property of a given object has, if it exists in the list. Returns 204 No Content either way.

Method and URLโ€‹

Available since v1.14 and the preferred way:

DELETE /v1/objects/{ClassName}/{id}/references/{propertyName}[?consistency_level=ONE|QUORUM|ALL]

Available for backward compatibility and deprecated:

DELETE /v1/objects/{id}/references/{propertyName}
Class Name in Object CRUD Operations

Prior to Weaviate v1.14 it was possible to manipulate objects using only their ID without specifying the class name. This way is still supported for backward compatibility, but is considered deprecated now. Avoid using the deprecated endpoints, as they will be removed with Weaviate v2.0.0.

The reason for the deprecation is that classes generally act like namespaces, therefore it is also feasible to have duplicate IDs across classes. However, when manipulating exactly one object by its ID (such as an update or delete), the ID may not be unique. It is thus recommended to always include the class name when manipulating objects.

Parametersโ€‹

The URL includes two required path parameters and supports an optional query parameter for the consistency level:

NameLocationTypeDescription
{id}pathuuidThe uuid of the object to delete the reference from
{propertyName}pathstringThe name of the cross-reference property
consistency_levelquery paramstringOptional consistency level: ONE, QUORUM (default) or ALL.

The request body is a beacon object:

NameTypeRequiredDescription
beaconWeaviate BeaconyesThe beacon URL of the reference, formatted as weaviate://localhost/<ClassName>/<id>
caution

In the beacon format, you need to always use localhost as the host, rather than the actual hostname. localhost refers to the fact that the beacon's target is on the same Weaviate instance, as opposed to a foreign instance.

note

For backward compatibility, beacons generally support an older, deprecated format without the class name, as well. This means you might find beacons with the old, deprecated format, as well as beacons with the new format in the same Weaviate instance. When deleting a reference, the beacon specified has to match the beacon to be deleted exactly. In other words, if a beacon is present using the old format (without class id) you also need to specify it the same way.

Example requestโ€‹

import weaviate

client = weaviate.Client("http://localhost:8080")

client.data_object.reference.delete(
"36ddd591-2dee-4e7e-a3cc-eb86d30a4303",
"wroteArticles",
"6bb06a43-e7f0-393e-9ecf-3c0f4e129064"
from_class_name="SourceClass",
to_class_name="TargetClass",
consistency_level=weaviate.data.replication.ConsistencyLevel.ALL, # default QUORUM
)

If the addition was successful, no content will be returned.