Admin APIs let you automate organization management workflows such as user invitations, audit log review, project administration, API key management, and rate limit operations. Use them for back-office automation, security workflows, and operational tooling that should run outside the dashboard.
For endpoint details, see the Administration API reference, including Admin API keys, Invites, Users, Projects, and Audit logs.
To access these endpoints, create an Admin API key. Admin API keys cannot be used for non-administration endpoints.
Support for Admin APIs was added in these SDK versions, which may require updating your SDK version:
- Node:
6.36.0
- Python:
2.34.0
- Go:
3.34.0
- Ruby:
0.61.0
- Java:
4.34.0
Set OPENAI_ADMIN_KEY, then initialize the SDK for your language.
1
2
3
4
5
import OpenAI from "openai";
const client = new OpenAI({
adminAPIKey: process.env.OPENAI_ADMIN_KEY,
});
1
2
3
4
5
6
import os
from openai import OpenAI
client = OpenAI(
admin_api_key=os.environ["OPENAI_ADMIN_KEY"],
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}
1
2
3
4
5
require "openai"
openai = OpenAI::Client.new(
admin_api_key: ENV.fetch("OPENAI_ADMIN_KEY")
)
1
2
3
4
5
6
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
OpenAIClient client = OpenAIOkHttpClient.builder()
.adminApiKey(System.getenv("OPENAI_ADMIN_KEY"))
.build();
Use the Invites endpoint to send an organization invitation to an email address.
1
2
3
4
5
6
const invite = await client.admin.organization.invites.create({
email: "user@example.com",
role: "reader",
});
console.log(invite.id);
1
2
3
4
5
6
invite = client.admin.organization.invites.create(
email="user@example.com",
role="reader",
)
print(invite.id)
1
2
3
4
5
6
7
8
9
10
11
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)
}
println(invite.ID)
1
2
3
4
5
6
invite = openai.admin.organization.invites.create(
email: "user@example.com",
role: :reader
)
puts(invite.id)
1
2
3
4
5
6
7
8
9
10
11
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());
Use the Audit Logs endpoint to list recent user actions and configuration changes for the organization.
1
2
3
4
5
const auditLogs = await client.admin.organization.auditLogs.list({
limit: 10,
});
console.log(auditLogs.data);
1
2
3
4
audit_logs = client.admin.organization.audit_logs.list(limit=10)
for audit_log in audit_logs.data:
print(audit_log.id)
1
2
3
4
5
6
7
8
9
10
11
12
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 {
println(auditLog.ID)
}
1
2
3
4
5
audit_logs = openai.admin.organization.audit_logs.list(limit: 10)
audit_logs.data.each do |audit_log|
puts(audit_log.id)
end
1
2
3
4
5
6
7
8
9
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()));