@apicity/openai

中文文档
0.27.0发布于 2026/11/06MITTypeScriptES Module近 30 天下载 4740

OpenAI / GPT provider for chat completions.

原始使用文档
文档目录24 节
  1. Installation
  2. Quick Start
  3. API Reference
  4. audio
  5. batches
  6. chat
  7. codex
  8. completions
  9. containers
  10. conversations
  11. embeddings
  12. evals
  13. files
  14. fineTuning
  15. images
  16. models
  17. moderations
  18. organization
  19. realtime
  20. responses
  21. uploads
  22. vectorStores
  23. Middleware
  24. License

@apicity/openai

npm dependencies TypeScript

OpenAI / GPT provider for chat completions.

Realtime voice over WebRTC: openai.post.v1.realtime.calls({ sdp, session }) sends the browser's SDP offer and resolves to the SDP answer plus the callId (from the Location header). The @apicity/openai/realtime subpath exports connectOpenAiRealtime, which opens a server-side WebSocket to that call (callId) or to a new session (model): send() client events such as session.update, and receive server events through onEvent. openai.post.v1.realtime.calls.hangup(callId) ends the call.

Runtime dependencies:

  • ws@^8.21.0 — WebSocket client for the Realtime server control channel in @apicity/openai/realtime
  • zod@^4.6.6 — request schemas attached to every POST endpoint as .schema

Installation

npm install @apicity/openai
# or
pnpm add @apicity/openai

Quick Start

import { createOpenAi } from "@apicity/openai";

const openai = createOpenAi({ apiKey: process.env.OPENAI_API_KEY! });

API Reference

64 endpoints across 19 groups. Each method mirrors an upstream URL path.

audio

POST openai.v1.audio.speech

POST https://api.openai.com/v1/audio/speech

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.audio.speech({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.audio.transcriptions

POST https://api.openai.com/v1/audio/transcriptions

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.audio.transcriptions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.audio.translations

POST https://api.openai.com/v1/audio/translations

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.audio.translations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

batches

GET openai.v1.batches

GET https://api.openai.com/v1/batches/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.batches({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.batches

POST https://api.openai.com/v1/batches

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.batches({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.batches.cancel

POST https://api.openai.com/v1/batches/{id}/cancel

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.batches.cancel({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

chat

DELETE openai.v1.chat.completions

DELETE https://api.openai.com/v1/chat/completions/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.delete.v1.chat.completions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.chat.completions

GET https://api.openai.com/v1/chat/completions/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.chat.completions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.chat.completions.messages

GET https://api.openai.com/v1/chat/completions/{id}/messages

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.chat.completions.messages({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.chat.completions

POST https://api.openai.com/v1/chat/completions/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.chat.completions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

codex

GET openai.codex.usage

GET https://chatgpt.com/backend-api/wham/usage

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.codex.usage();

Source: packages/provider/openai/src/openai.ts

completions

POST openai.v1.completions

POST https://api.openai.com/v1/completions

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.completions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

containers

POST openai.v1.containers

POST https://api.openai.com/v1/containers

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.containers({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

conversations

GET openai.v1.conversations.retrieve

GET https://api.openai.com/v1/conversations/{conversationId}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.conversations.retrieve({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.conversations

POST https://api.openai.com/v1/conversations

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.conversations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

embeddings

POST openai.v1.embeddings

POST https://api.openai.com/v1/embeddings

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.embeddings({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

evals

POST openai.v1.evals

POST https://api.openai.com/v1/evals

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.evals({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

files

DELETE openai.v1.files

DELETE https://api.openai.com/v1/files/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.delete.v1.files({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.files

GET https://api.openai.com/v1/files/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.files({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.files.content

GET https://api.openai.com/v1/files/{id}/content

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.files.content({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.files

POST https://api.openai.com/v1/files

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.files({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

fineTuning

DELETE openai.v1.fineTuning.checkpoints.permissions

DELETE https://api.openai.com/v1/fine_tuning/checkpoints/{checkpoint}/permissions/{permissionId}

Cost tier: expensive

Upstream docs ↗

const res = await openai.delete.v1.fineTuning.checkpoints.permissions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.fineTuning.checkpoints.permissions

GET https://api.openai.com/v1/fine_tuning/checkpoints/{checkpoint}/permissions

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.fineTuning.checkpoints.permissions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.fineTuning.jobs

GET https://api.openai.com/v1/fine_tuning/jobs/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.fineTuning.jobs({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.fineTuning.jobs.checkpoints

GET https://api.openai.com/v1/fine_tuning/jobs/{id}/checkpoints

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.fineTuning.jobs.checkpoints({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.fineTuning.jobs.events

GET https://api.openai.com/v1/fine_tuning/jobs/{id}/events

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.fineTuning.jobs.events({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.fineTuning.checkpoints.permissions

POST https://api.openai.com/v1/fine_tuning/checkpoints/{checkpoint}/permissions

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.fineTuning.checkpoints.permissions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.fineTuning.jobs

POST https://api.openai.com/v1/fine_tuning/jobs

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.fineTuning.jobs({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.fineTuning.jobs.cancel

POST https://api.openai.com/v1/fine_tuning/jobs/{id}/cancel

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.fineTuning.jobs.cancel({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.fineTuning.jobs.pause

POST https://api.openai.com/v1/fine_tuning/jobs/{id}/pause

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.fineTuning.jobs.pause({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.fineTuning.jobs.resume

POST https://api.openai.com/v1/fine_tuning/jobs/{id}/resume

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.fineTuning.jobs.resume({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

images

POST openai.v1.images.edits

POST https://api.openai.com/v1/images/edits

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.images.edits({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.images.generations

POST https://api.openai.com/v1/images/generations

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.images.generations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.images.variations

POST https://api.openai.com/v1/images/variations

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.images.variations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

models

DELETE openai.v1.models

DELETE https://api.openai.com/v1/models/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.delete.v1.models({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.models

GET https://api.openai.com/v1/models/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.models({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

moderations

POST openai.v1.moderations

POST https://api.openai.com/v1/moderations

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.moderations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

organization

GET openai.v1.organization.costs

GET https://api.openai.com/v1/organization/costs

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.costs({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.projects

GET https://api.openai.com/v1/organization/projects/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.projects({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.projects.rateLimits

GET https://api.openai.com/v1/organization/projects/{projectId}/rate_limits

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.projects.rateLimits({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.audioSpeeches

GET https://api.openai.com/v1/organization/usage/audio_speeches

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.audioSpeeches({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.audioTranscriptions

GET https://api.openai.com/v1/organization/usage/audio_transcriptions

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.audioTranscriptions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.codeInterpreterSessions

GET https://api.openai.com/v1/organization/usage/code_interpreter_sessions

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.codeInterpreterSessions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.completions

GET https://api.openai.com/v1/organization/usage/completions

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.completions({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.embeddings

GET https://api.openai.com/v1/organization/usage/embeddings

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.embeddings({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.images

GET https://api.openai.com/v1/organization/usage/images

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.images({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.moderations

GET https://api.openai.com/v1/organization/usage/moderations

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.moderations({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.organization.usage.vectorStores

GET https://api.openai.com/v1/organization/usage/vector_stores

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.organization.usage.vectorStores({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

realtime

POST openai.v1.realtime.calls

POST https://api.openai.com/v1/realtime/calls

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.realtime.calls({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.realtime.calls.hangup

POST https://api.openai.com/v1/realtime/calls/{call_id}/hangup

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.realtime.calls.hangup({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.realtime.clientSecrets

POST https://api.openai.com/v1/realtime/client_secrets

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.realtime.clientSecrets({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

responses

DELETE openai.v1.responses

DELETE https://api.openai.com/v1/responses/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.delete.v1.responses({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.responses

GET https://api.openai.com/v1/responses/{id}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.responses({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.responses.inputItems

GET https://api.openai.com/v1/responses/{id}/input_items

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.responses.inputItems({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.responses

POST https://api.openai.com/v1/responses

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.responses({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.responses.cancel

POST https://api.openai.com/v1/responses/{id}/cancel

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.responses.cancel({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.responses.compact

POST https://api.openai.com/v1/responses/compact

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.responses.compact({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.responses.inputTokens

POST https://api.openai.com/v1/responses/input_tokens

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.responses.inputTokens({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

uploads

POST openai.v1.uploads

POST https://api.openai.com/v1/uploads

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.uploads({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

vectorStores

GET openai.v1.vectorStores

GET https://api.openai.com/v1/vector_stores/{idOrOpts}

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.vectorStores({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

GET openai.v1.vectorStores.files

GET https://api.openai.com/v1/vector_stores/{vectorStoreId}/files

Cost tier: expensive

Upstream docs ↗

const res = await openai.get.v1.vectorStores.files({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.vectorStores

POST https://api.openai.com/v1/vector_stores

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.vectorStores({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.vectorStores.files

POST https://api.openai.com/v1/vector_stores/{vectorStoreId}/files

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.vectorStores.files({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

POST openai.v1.vectorStores.search

POST https://api.openai.com/v1/vector_stores/{vectorStoreId}/search

Cost tier: expensive

Upstream docs ↗

const res = await openai.post.v1.vectorStores.search({ /* ... */ });

Source: packages/provider/openai/src/openai.ts

Middleware

import { createOpenAi, withRetry } from "@apicity/openai";

const openai = createOpenAi({ apiKey: process.env.OPENAI_API_KEY! });
const models = withRetry(openai.get.v1.models, { retries: 3 });

Part of the apicity monorepo.

License

MIT — see LICENSE.

版本与发布记录

@apicity/openai 共发布 90 个版本,首次发布于 2026/05/11;过去 12 个月发布了 90 个版本。

版本发布日期距今
0.27.0latest2026/11/06今天
0.26.02026/11/051 天前
0.25.02026/11/033 天前
0.24.12026/11/024 天前
0.24.02026/11/014 天前
0.23.12026/11/015 天前

关于 @apicity/openai 的常见问题

@apicity/openai 是什么?

OpenAI / GPT provider for chat completions.

如何安装 @apicity/openai?

在项目目录运行 npm install @apicity/openai,或使用 pnpm add / yarn add / bun add。

@apicity/openai 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apicity/openai 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@apicity/openai 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@apicity/openai 可以商用吗?

@apicity/openai 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apicity/openai 的下载量有多少?

根据 npm 官方下载统计,@apicity/openai 在 2026/10/06 – 2026/11/04 这 30 天内被下载 4,740 次,日均约 158 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apicity/openai 还在维护吗?

最新版本 0.27.0 发布于 2026/11/06(今天);至今共发布 90 个版本,其中过去 12 个月发布了 90 个;首次发布于 2026/05/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。