> ## Documentation Index
> Fetch the complete documentation index at: https://upstash-redis-1-18.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# VECTOR.GET

> Get the vector stored under an ID.

Use `VECTOR.GET` to read back the vector stored under an ID.

The reply is the vector's elements as doubles, in the order they were written. Because the index stores them as 32-bit floats, the values come back with float precision rather than exactly as sent, which matters when comparing them against the original embedding.

An ID that is not in the index replies null, while an index that does not exist is an error, so the two cases stay distinguishable.

Vector indexes are an Upstash extension. See the [vector command overview](/redis/commands/vector/overview) for how an index is created, written to, and queried.

## Syntax

```redis theme={null}
VECTOR.GET <index> <id>
```

## Arguments

| Argument  | Required | Repeatable | Description                          |
| --------- | -------- | ---------- | ------------------------------------ |
| `<index>` | Yes      | No         | Key holding the vector index.        |
| `<id>`    | Yes      | No         | Identifier to read. Cannot be empty. |

## Important points

* An index that does not exist returns `ERR Index <index> is not found`; an ID that is not in an existing index replies null.

## Response

The reply reports the result of the operation. Error replies have the same shape in RESP2 and RESP3 and are surfaced as exceptions by the SDKs below.

| Protocol | Reply                                                   |
| -------- | ------------------------------------------------------- |
| RESP2    | Array of bulk strings containing numbers, or Null array |
| RESP3    | Array of doubles, or Null                               |

<Note>
  Client libraries often decode bulk strings, maps, sets, and numeric strings into language-native values. The table describes the Redis wire reply.
</Note>

## Examples

TCP examples use the TLS `REDIS_URL` from the Upstash console. REST examples use `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN`.

<AccordionGroup>
  <Accordion title="Redis CLI" icon="terminal">
    ```bash theme={null}
    VECTOR.GET my-index doc:1
    ```
  </Accordion>

  <Accordion title="@upstash/redis" icon="node-js" iconType="brands">
    <Note>
      This command is not supported yet in `@upstash/redis`.
    </Note>
  </Accordion>

  <Accordion title="upstash_redis" icon="python" iconType="brands">
    <Note>
      This command is not supported yet in `upstash_redis`.
    </Note>
  </Accordion>

  <Accordion title="ioredis" icon="node-js" iconType="brands">
    ```ts theme={null}
    import Redis from "ioredis";

    const redis = new Redis(process.env.REDIS_URL!);
    const result = await redis.call("VECTOR.GET", "my-index", "doc:1");
    console.log(result);
    ```
  </Accordion>

  <Accordion title="node-redis" icon="node-js" iconType="brands">
    ```ts theme={null}
    import { createClient } from "redis";

    const client = await createClient({ url: process.env.REDIS_URL })
      .on("error", console.error)
      .connect();
    const result = await client.sendCommand(["VECTOR.GET", "my-index", "doc:1"]);
    console.log(result);
    ```
  </Accordion>

  <Accordion title="redis-py" icon="python" iconType="brands">
    ```python theme={null}
    import os
    import redis

    client = redis.from_url(os.environ["REDIS_URL"])
    result = client.execute_command("VECTOR.GET", "my-index", "doc:1")
    print(result)
    ```
  </Accordion>

  <Accordion title="go-redis" icon="golang" iconType="brands">
    ```go theme={null}
    package main

    import (
        "context"
        "fmt"
        "os"

        "github.com/redis/go-redis/v9"
    )

    func main() {
        opts, err := redis.ParseURL(os.Getenv("REDIS_URL"))
        if err != nil {
            panic(err)
        }
        client := redis.NewClient(opts)
        result, err := client.Do(context.Background(), "VECTOR.GET", "my-index", "doc:1").Result()
        if err != nil {
            panic(err)
        }
        fmt.Println(result)
    }
    ```
  </Accordion>

  <Accordion title="jedis" icon="java" iconType="brands">
    ```java theme={null}
    import java.net.URI;

    import redis.clients.jedis.Jedis;

    try (Jedis jedis = new Jedis(new URI(System.getenv("REDIS_URL")))) {
      Object result = jedis.sendCommand(() -> "VECTOR.GET".getBytes(), "my-index", "doc:1");
      System.out.println(result);
    }
    ```
  </Accordion>

  <Accordion title="redis-rs" icon="rust" iconType="brands">
    ```rust theme={null}
    fn main() -> redis::RedisResult<()> {
        let url = std::env::var("REDIS_URL").expect("REDIS_URL is not set");
        let client = redis::Client::open(url)?;
        let mut connection = client.get_connection()?;

        let mut command = redis::cmd("VECTOR.GET");
        command.arg("my-index");
        command.arg("doc:1");
        let result: redis::Value = command.query(&mut connection)?;
        println!("{result:?}");
        Ok(())
    }
    ```
  </Accordion>
</AccordionGroup>
