List service accounts (integration + API-key) in the organization.
const url = 'https://api.adversarial.com/api/v1/service-accounts?page_size=25&page=1';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.adversarial.com/api/v1/service-accounts?page_size=25&page=1'Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Rows per page. Defaults to 25, max 100; zero is rejected.
1-indexed page number. Defaults to 1; zero is rejected.
Freetext ILIKE across first_name, last_name, and email.
true returns only active service accounts (deactivated_date IS NULL); false only deactivated; absent returns both.
Restrict to integration SAs, credential SAs, or both (default).
Role UUIDs — matches SAs holding any of the listed roles.
Inclusive lower bound on users.created_date.
Inclusive upper bound on users.created_date.
Responses
Section titled “Responses”List service accounts in the organization
Paginated list envelope: { "results": [...], "pagination": {...} }.
object
Pagination metadata describing the slice.
object
1-indexed page number of this result slice.
Number of items requested per page.
Total number of matching items across all pages.
Total number of pages at this page size.
The items on this page.
A non-human account belonging to the organization. Covers both integration
service accounts, created automatically when an integration is configured,
and credential service accounts created through POST /v1/oauth/clients.
Unlike a member, a service account has no last_login.
object
Relative path to the user’s avatar endpoint, e.g.
"users/{id}/avatar?v={hash}". None when the user has no avatar.
IP allowlist enforced on token exchange. Populated only for credential SAs.
Public OAuth client ID (arm_sa_…). Populated only for credential SAs.
The administrator who created this credential. Present only for credential service accounts whose creator is still a member of the organization.
object
Relative path to the user’s avatar endpoint, e.g.
"users/{id}/avatar?v={hash}". None when the user has no avatar.
Soft-deactivation timestamp from organization_user.deactivated_date.
None means the SA is currently active. The unified Service Accounts
page uses this to render disabled rows alongside active ones.
Hard expiry on the credential. Populated only for credential SAs.
Primary discriminator on a service account.
Wire format is SCREAMING_SNAKE_CASE (INTEGRATION, CREDENTIAL) so the
values read as constants.
Most-recent successful token exchange. Populated only for credential SAs.
The id used to address this credential at /v1/oauth/clients/{id},
for updating or deleting it. Present only for credential service
accounts. Distinct from client_id, the public arm_sa_… string
presented at token exchange.
When the credential was administratively revoked. Populated only for
credential SAs; mirrors deactivated_date once revoked.
Roles held by this SA. Empty for integration SAs; populated from
role_user_org for credential SAs.
Example
{ "results": [ { "kind": "INTEGRATION" } ]}Unauthorized
Internal server error