List service accounts
List service accounts in the caller's organization.
/admin/service-accountsList service accounts
3 parameters
- X-Pinecone-Api-Versionstringheaderrequired
Required date-based version header
- limitintegerquery
The number of results to return per page. When omitted, the server defaults to 100. Out-of-range values return `400 OUT_OF_RANGE`.
- paginationTokenstringquery
Cursor from `pagination.next` of a prior response. Must be reused with the same query context (path parameters, filters, and `limit`).
curl --request GET \
--url https://api.pinecone.io/admin/service-accounts \
--header 'Authorization: Bearer <token>' \
--header 'X-Pinecone-Api-Version: <x-pinecone-api-version>'import requests
url = "https://api.pinecone.io/admin/service-accounts"
headers = {
"Authorization": "Bearer <token>",
"X-Pinecone-Api-Version": "<x-pinecone-api-version>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: "GET", headers: {"Authorization": "Bearer <token>", "X-Pinecone-Api-Version": "<x-pinecone-api-version>"}};
fetch("https://api.pinecone.io/admin/service-accounts", options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pinecone.io/admin/service-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Pinecone-Api-Version: <x-pinecone-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.pinecone.io/admin/service-accounts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.pinecone.io/admin/service-accounts")
.header("Authorization", "Bearer <token>")
.header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pinecone.io/admin/service-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Pinecone-Api-Version"] = '<x-pinecone-api-version>'
response = http.request(request)
puts response.read_body{
"data": [
{
"client_id": "l3Ow0CmFyc4jOONcwiKUCRqQKN0tiCAn",
"created_at": "2026-04-10T15:23:00.000Z",
"id": "f8a3b2c1-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"name": "My Service Account",
"updated_at": "2026-04-12T09:11:00.000Z"
}
],
"pagination": {
"next": "eyJsYXN0X2lkIjoiZDI0MTc3YTAifQ=="
}
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Bad request. The request body included invalid request parameters."
},
"status": 400
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Invalid API key."
},
"status": 401
}{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "The index exceeds the project quota of 5 pods by 2 pods. Upgrade your account or change the project settings to increase the quota."
},
"status": 429
}{
"error": {
"code": "UNKNOWN",
"message": "Internal server error"
},
"status": 500
}{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "The index exceeds the project quota of 5 pods by 2 pods. Upgrade your account or change the project settings to increase the quota."
},
"status": 429
}Authorizations
Section titled “Authorizations”AuthorizationstringrequiredAn access token must be provided in the Authorization header using the Bearer scheme.
Headers
Section titled “Headers”X-Pinecone-Api-VersionstringrequiredRequired date-based version header
Query Parameters
Section titled “Query Parameters”limit?integerThe number of results to return per page. When omitted, the server defaults to 100. Out-of-range values return 400 OUT_OF_RANGE.
Required range: 1 <= x <= 100
paginationToken?stringCursor from pagination.next of a prior response. Must be reused with the same query context (path parameters, filters, and limit).
Response
Section titled “Response”200 — A paginated list of service accounts. Role bindings are not included; use GET /admin/role-bindings to list them.
A paginated list of service accounts in the organization.
dataobject[]requiredThe page of service accounts.
Show child attributes
idstringrequiredThe unique identifier for the service account. Use this as the path parameter on /admin/service-accounts/service_account_id endpoints and as the principal_id when querying or creating role bindings.
namestringrequiredA short human-readable label, set by the caller at creation time.
Required string length: 1 - 80
client_idstringrequiredThe OAuth client ID used by the service account to obtain access tokens. Used only for OAuth token exchange.
created_atstringrequiredThe date and time the service account was created.
updated_atstringrequiredThe date and time of the service account's most recent metadata update.
pagination?object | nullCursor envelope for the next page. null (or absent) on the final page of results.
Show child attributes
next?stringOpaque cursor for the next page. Do not parse or construct. Invalid or expired tokens return 400.
Example: eyJsYXN0X2lkIjogImluZGV4LTQifQ==