# OpenAI Embedding

> OpenAI Embedding response with vector data, model, and usage statistics.

- Name: `openai-embedding`
- Categories: openai
- Detail page: https://open-types.dev/types/openai-embedding

## Install

```bash
# Types only
npx shadcn add @open-types/openai-embedding

# Types + Zod v4 validators
npx shadcn add @open-types/openai-embedding-zod

# Types + real-world examples
npx shadcn add @open-types/openai-embedding-examples
```

## Types

```typescript
export interface OpenAIEmbeddingData {
  object: "embedding";
  embedding: number[];
  index: number;
}

export interface OpenAIEmbeddingUsage {
  prompt_tokens: number;
  total_tokens: number;
}

export interface OpenAIEmbeddingResponse {
  object: "list";
  data: OpenAIEmbeddingData[];
  model: string;
  usage: OpenAIEmbeddingUsage;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  OpenAIEmbeddingData,
  OpenAIEmbeddingUsage,
  OpenAIEmbeddingResponse,
} from "../types/openai-embedding";

export const openAIEmbeddingDataSchema = z.object({
  object: z.literal("embedding"),
  embedding: z.array(z.number()),
  index: z.number(),
}) satisfies z.ZodType<OpenAIEmbeddingData>;

export const openAIEmbeddingUsageSchema = z.object({
  prompt_tokens: z.number(),
  total_tokens: z.number(),
}) satisfies z.ZodType<OpenAIEmbeddingUsage>;

export const openAIEmbeddingResponseSchema = z.object({
  object: z.literal("list"),
  data: z.array(openAIEmbeddingDataSchema),
  model: z.string(),
  usage: openAIEmbeddingUsageSchema,
}) satisfies z.ZodType<OpenAIEmbeddingResponse>;

export type {
  OpenAIEmbeddingData,
  OpenAIEmbeddingUsage,
  OpenAIEmbeddingResponse,
} from "../types/openai-embedding";
```

## Examples

```typescript
// Source: https://platform.openai.com/docs/api-reference/embeddings/object
// Captured: 2026-05
import type {
  OpenAIEmbeddingData,
  OpenAIEmbeddingUsage,
  OpenAIEmbeddingResponse,
} from "../types/openai-embedding";

const embeddingVector = [
  0.0023064255, -0.009327292, -0.0028842222, 0.013485645, 0.012367213,
  -0.014902353, 0.018745321, -0.0067324252, 0.027810302, 0.0091241245,
];

const dataItemFirst = {
  object: "embedding",
  embedding: embeddingVector,
  index: 0,
} as const satisfies OpenAIEmbeddingData;

const dataItemSecond = {
  object: "embedding",
  embedding: embeddingVector.map((v) => v * -1),
  index: 1,
} as const satisfies OpenAIEmbeddingData;

export const openAIEmbeddingDataExamples = {
  single: dataItemFirst,
  second: dataItemSecond,
  empty: { object: "embedding", embedding: [], index: 0 } satisfies OpenAIEmbeddingData,
} as const;

export const openAIEmbeddingUsageExamples = {
  small: { prompt_tokens: 8, total_tokens: 8 } satisfies OpenAIEmbeddingUsage,
  batch: { prompt_tokens: 142, total_tokens: 142 } satisfies OpenAIEmbeddingUsage,
} as const;

export const openAIEmbeddingResponseExamples = {
  single: {
    object: "list",
    data: [dataItemFirst],
    model: "text-embedding-3-small",
    usage: { prompt_tokens: 8, total_tokens: 8 },
  } satisfies OpenAIEmbeddingResponse,
  batch: {
    object: "list",
    data: [dataItemFirst, dataItemSecond],
    model: "text-embedding-3-large",
    usage: { prompt_tokens: 16, total_tokens: 16 },
  } satisfies OpenAIEmbeddingResponse,
  empty: {
    object: "list",
    data: [],
    model: "text-embedding-3-small",
    usage: { prompt_tokens: 0, total_tokens: 0 },
  } satisfies OpenAIEmbeddingResponse,
} as const;
```
