OpenAI 管理 API

2026-11-09 15:41 更新

管理 API(Admin APIs)可自动执行组织管理工作,包括邀请用户、查看审计日志、管理项目和 API 密钥、设置支出上限与提醒、数据保留及速率限制,适合在控制台之外运行的后台自动化、安全流程与运维工具。

管理凭据、用户所属的项目密钥与工作负载的服务账号各有适用场景,见 API 密钥和服务账号。

端点详情见管理接口参考,包括管理密钥、邀请、用户、项目、支出上限及审计日志。

在 SDK 中使用管理 API 密钥

访问这些端点前,先创建 Admin API 密钥。管理密钥不能用于非管理端点。

以下 SDK 版本开始支持管理 API,必要时升级:Node 6.36.0、Python 2.34.0、Go 3.34.0、Ruby 0.61.0、Java 4.34.0。设置 OPENAI_ADMIN_KEY,再初始化对应语言的 SDK:

来源示例 1(javascript):

// [中文] 仅使用OPENAI_ADMIN_KEY初始化管理客户端;Admin密钥不能用于普通推理端点。
import OpenAI from "openai";

const client = new OpenAI({
  adminAPIKey: process.env.OPENAI_ADMIN_KEY,
});

来源示例 2(python):

## [中文] 仅使用OPENAI_ADMIN_KEY初始化管理客户端;Admin密钥不能用于普通推理端点。
import os
from openai import OpenAI

client = OpenAI(
    admin_api_key=os.environ["OPENAI_ADMIN_KEY"],
)

来源示例 3(go):

// [中文] 仅使用OPENAI_ADMIN_KEY初始化管理客户端;Admin密钥不能用于普通推理端点。
package main

import (
    "os"

    "github.com/openai/openai-go/v3"
    "github.com/openai/openai-go/v3/option"
)

func main() {
    client := openai.NewClient(
        option.WithAdminAPIKey(os.Getenv("OPENAI_ADMIN_KEY")),
    )

    _ = client
}

来源示例 4(java):

// [中文] 仅使用OPENAI_ADMIN_KEY初始化管理客户端;Admin密钥不能用于普通推理端点。
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;

OpenAIClient client =
    OpenAIOkHttpClient.builder().adminApiKey(System.getenv("OPENAI_ADMIN_KEY")).build();

来源示例 5(ruby):

## [中文] 仅使用OPENAI_ADMIN_KEY初始化管理客户端;Admin密钥不能用于普通推理端点。
require "openai"

openai = OpenAI::Client.new(
  admin_api_key: ENV.fetch("OPENAI_ADMIN_KEY")
)

限制项目的模型访问

项目模型权限可配置允许列表或拒绝列表。mode: allow_list 仅允许所列模型;mode: deny_list 阻止所列模型,允许其他可用模型。模型 ID 必须对组织可见,包括可见的微调模型快照。

来源示例 6(javascript):

// [中文] 设置项目模型允许/拒绝列表;allow_list只允许所列模型,deny_list仅阻止所列模型。
const modelPermissions =
  await client.admin.organization.projects.modelPermissions.update("proj_abc", {
    mode: "allow_list",
    model_ids: ["gpt-4.1", "o3"],
  });

console.log(modelPermissions.mode);

来源示例 7(python):

## [中文] 设置项目模型允许/拒绝列表;allow_list只允许所列模型,deny_list仅阻止所列模型。
model_permissions = client.admin.organization.projects.model_permissions.update(
    "proj_abc",
    mode="allow_list",
    model_ids=["gpt-4.1", "o3"],
)

print(model_permissions.mode)

来源示例 8(go):

// [中文] 设置项目模型允许/拒绝列表;allow_list只允许所列模型,deny_list仅阻止所列模型。
ctx := context.Background()

modelPermissions, err := client.Admin.Organization.Projects.ModelPermissions.Update(
    ctx,
    "proj_abc",
    openai.AdminOrganizationProjectModelPermissionUpdateParams{
        Mode:     openai.AdminOrganizationProjectModelPermissionUpdateParamsModeAllowList,
        ModelIDs: []string{"gpt-4.1", "o3"},
    },
)
if err != nil {
    panic(err)
}

fmt.Println(modelPermissions.Mode)

来源示例 9(java):

// [中文] 设置项目模型允许/拒绝列表;allow_list只允许所列模型,deny_list仅阻止所列模型。
import com.openai.models.admin.organization.projects.modelpermissions.ModelPermissionUpdateParams;
import com.openai.models.admin.organization.projects.modelpermissions.ProjectModelPermissions;
import java.util.List;

ProjectModelPermissions modelPermissions =
    client
        .admin()
        .organization()
        .projects()
        .modelPermissions()
        .update(
            "proj_abc",
            ModelPermissionUpdateParams.builder()
                .mode(ModelPermissionUpdateParams.Mode.ALLOW_LIST)
                .modelIds(List.of("gpt-4.1", "o3"))
                .build());

System.out.println(modelPermissions.mode());

来源示例 10(ruby):

## [中文] 设置项目模型允许/拒绝列表;allow_list只允许所列模型,deny_list仅阻止所列模型。
model_permissions = openai.admin.organization.projects.model_permissions.update(
  "proj_abc",
  mode: :allow_list,
  model_ids: ["gpt-4.1", "o3"]
)

puts(model_permissions.mode)

设置组织支出上限

通过支出上限端点创建或替换组织的月度硬支出上限,threshold_amount 以美分为单位。下例设置每月 100 美元:

来源示例 11(bash):

## [中文] 组织月度硬支出上限以美分计;此处10000美分为100美元,达到上限的受影响请求返回429。
curl -X POST https://api.openai.com/v1/organization/spend_limit \
  -H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "threshold_amount": 10000,
    "currency": "USD",
    "interval": "month"
  }'

已跟踪支出达到硬上限后,受影响请求返回 429。详情见支出限制指南。

管理支出提醒

项目支出达到阈值时,可通过项目提醒通知团队,阈值同样以美分为单位。创建提醒:

来源示例 12(javascript):

// [中文] 创建项目支出提醒,金额以美分计;提醒与阻止请求的硬上限不同,收件地址是示例。
const spendAlert = await client.admin.organization.projects.spendAlerts.create(
  "proj_abc",
  {
    currency: "USD",
    interval: "month",
    notification_channel: {
      recipients: ["billing@example.com"],
      type: "email",
      subject_prefix: "OpenAI spend",
    },
    threshold_amount: 50000,
  }
);

console.log(spendAlert.id);

来源示例 13(python):

## [中文] 创建项目支出提醒,金额以美分计;提醒与阻止请求的硬上限不同,收件地址是示例。
spend_alert = client.admin.organization.projects.spend_alerts.create(
    "proj_abc",
    currency="USD",
    interval="month",
    notification_channel={
        "recipients": ["billing@example.com"],
        "type": "email",
        "subject_prefix": "OpenAI spend",
    },
    threshold_amount=50000,
)

print(spend_alert.id)

来源示例 14(go):

// [中文] 创建项目支出提醒,金额以美分计;提醒与阻止请求的硬上限不同,收件地址是示例。
ctx := context.Background()

spendAlert, err := client.Admin.Organization.Projects.SpendAlerts.New(
    ctx,
    "proj_abc",
    openai.AdminOrganizationProjectSpendAlertNewParams{
        Currency: openai.AdminOrganizationProjectSpendAlertNewParamsCurrencyUsd,
        Interval: openai.AdminOrganizationProjectSpendAlertNewParamsIntervalMonth,
        NotificationChannel: openai.AdminOrganizationProjectSpendAlertNewParamsNotificationChannel{
            Recipients:    []string{"billing@example.com"},
            Type:          "email",
            SubjectPrefix: openai.String("OpenAI spend"),
        },
        ThresholdAmount: 50000,
    },
)
if err != nil {
    panic(err)
}

fmt.Println(spendAlert.ID)

来源示例 15(java):

// [中文] 创建项目支出提醒,金额以美分计;提醒与阻止请求的硬上限不同,收件地址是示例。
import com.openai.models.admin.organization.projects.spendalerts.ProjectSpendAlert;
import com.openai.models.admin.organization.projects.spendalerts.SpendAlertCreateParams;

ProjectSpendAlert spendAlert =
    client
        .admin()
        .organization()
        .projects()
        .spendAlerts()
        .create(
            "proj_abc",
            SpendAlertCreateParams.builder()
                .currency(SpendAlertCreateParams.Currency.USD)
                .interval(SpendAlertCreateParams.Interval.MONTH)
                .notificationChannel(
                    SpendAlertCreateParams.NotificationChannel.builder()
                        .addRecipient("billing@example.com")
                        .subjectPrefix("OpenAI spend")
                        .build())
                .thresholdAmount(50000L)
                .build());

System.out.println(spendAlert.id());

来源示例 16(ruby):

## [中文] 创建项目支出提醒,金额以美分计;提醒与阻止请求的硬上限不同,收件地址是示例。
spend_alert = openai.admin.organization.projects.spend_alerts.create(
  "proj_abc",
  currency: :USD,
  interval: :month,
  notification_channel: {
    recipients: ["billing@example.com"],
    type: :email,
    subject_prefix: "OpenAI spend"
  },
  threshold_amount: 50_000
)

puts(spend_alert.id)

管理数据保留

项目数据保留控制可覆盖或继承组织政策。设 retention_type: organization_default 继承组织设置:

来源示例 17(javascript):

// [中文] 为项目设置数据保留;organization_default表示继承组织政策,不代表自动获得ZDR批准。
const dataRetention =
  await client.admin.organization.projects.dataRetention.update("proj_abc", {
    retention_type: "organization_default",
  });

console.log(dataRetention.type);

来源示例 18(python):

## [中文] 为项目设置数据保留;organization_default表示继承组织政策,不代表自动获得ZDR批准。
data_retention = client.admin.organization.projects.data_retention.update(
    "proj_abc",
    retention_type="organization_default",
)

print(data_retention.type)

来源示例 19(go):

// [中文] 为项目设置数据保留;organization_default表示继承组织政策,不代表自动获得ZDR批准。
ctx := context.Background()

dataRetention, err := client.Admin.Organization.Projects.DataRetention.Update(
    ctx,
    "proj_abc",
    openai.AdminOrganizationProjectDataRetentionUpdateParams{
        RetentionType: openai.AdminOrganizationProjectDataRetentionUpdateParamsRetentionTypeOrganizationDefault,
    },
)
if err != nil {
    panic(err)
}

println(dataRetention.Type)

来源示例 20(java):

// [中文] 为项目设置数据保留;organization_default表示继承组织政策,不代表自动获得ZDR批准。
import com.openai.models.admin.organization.projects.dataretention.DataRetentionUpdateParams;
import com.openai.models.admin.organization.projects.dataretention.ProjectDataRetention;

ProjectDataRetention dataRetention =
    client
        .admin()
        .organization()
        .projects()
        .dataRetention()
        .update(
            "proj_abc",
            DataRetentionUpdateParams.builder()
                .retentionType(DataRetentionUpdateParams.RetentionType.ORGANIZATION_DEFAULT)
                .build());

System.out.println(dataRetention.type());

来源示例 21(ruby):

## [中文] 为项目设置数据保留;organization_default表示继承组织政策,不代表自动获得ZDR批准。
data_retention = openai.admin.organization.projects.data_retention.update(
  "proj_abc",
  retention_type: :organization_default
)

puts(data_retention.type)

通过邮箱邀请用户

通过 Invites 端点向指定邮箱发送加入组织的邀请:

来源示例 22(javascript):

// [中文] 向示例邮箱发送组织邀请的来源代码;实际执行前须替换地址并确认目标组织与邀请范围。
const invite = await client.admin.organization.invites.create({
  email: "user@example.com",
  role: "reader",
});

console.log(invite.id);

来源示例 23(python):

## [中文] 向示例邮箱发送组织邀请的来源代码;实际执行前须替换地址并确认目标组织与邀请范围。
invite = client.admin.organization.invites.create(
    email="user@example.com",
    role="reader",
)

print(invite.id)

来源示例 24(go):

// [中文] 向示例邮箱发送组织邀请的来源代码;实际执行前须替换地址并确认目标组织与邀请范围。
ctx := context.Background()

invite, err := client.Admin.Organization.Invites.New(ctx, openai.AdminOrganizationInviteNewParams{
    Email: "user@example.com",
    Role:  openai.AdminOrganizationInviteNewParamsRoleReader,
})
if err != nil {
    panic(err)
}

fmt.Println(invite.ID)

来源示例 25(java):

// [中文] 向示例邮箱发送组织邀请的来源代码;实际执行前须替换地址并确认目标组织与邀请范围。
import com.openai.models.admin.organization.invites.Invite;
import com.openai.models.admin.organization.invites.InviteCreateParams;

Invite invite =
    client
        .admin()
        .organization()
        .invites()
        .create(
            InviteCreateParams.builder()
                .email("user@example.com")
                .role(InviteCreateParams.Role.READER)
                .build());

System.out.println(invite.id());

来源示例 26(ruby):

## [中文] 向示例邮箱发送组织邀请的来源代码;实际执行前须替换地址并确认目标组织与邀请范围。
invite = openai.admin.organization.invites.create(
  email: "user@example.com",
  role: :reader
)

puts(invite.id)

检索审计日志

通过 Audit Logs 端点列出组织近期的用户操作和配置变更:

来源示例 27(javascript):

// [中文] 通过管理客户端读取组织审计记录;只读返回近期用户操作和配置变化。
const auditLogs = await client.admin.organization.auditLogs.list({
  limit: 10,
});

console.log(auditLogs.data);

来源示例 28(python):

## [中文] 通过管理客户端读取组织审计记录;只读返回近期用户操作和配置变化。
audit_logs = client.admin.organization.audit_logs.list(limit=10)

for audit_log in audit_logs.data:
    print(audit_log.id)

来源示例 29(go):

// [中文] 通过管理客户端读取组织审计记录;只读返回近期用户操作和配置变化。
ctx := context.Background()

auditLogs, err := client.Admin.Organization.AuditLogs.List(ctx, openai.AdminOrganizationAuditLogListParams{
    Limit: openai.Int(10),
})
if err != nil {
    panic(err)
}

for _, auditLog := range auditLogs.Data {
    fmt.Println(auditLog.ID)
}

来源示例 30(java):

// [中文] 通过管理客户端读取组织审计记录;只读返回近期用户操作和配置变化。
import com.openai.models.admin.organization.auditlogs.AuditLogListParams;

var page =
    client
        .admin()
        .organization()
        .auditLogs()
        .list(AuditLogListParams.builder().limit(10L).build());

page.data().forEach(auditLog -> System.out.println(auditLog.id()));

来源示例 31(ruby):

## [中文] 通过管理客户端读取组织审计记录;只读返回近期用户操作和配置变化。
audit_logs = openai.admin.organization.audit_logs.list(limit: 10)

(audit_logs.data || []).each do |audit_log|
  puts(audit_log.id)
end
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号