Skip to main content
A service account is a non-human member of an organization, assigned a role (its scopes). An OIDC trust lets an external workload (e.g. a GitHub Actions run) exchange its OIDC token for a short-lived Synthetiq token that acts as a service account — no stored credentials. This is the identity model behind BYOI CI provisioning. Node SDK: sdk.serviceAccounts.* and sdk.oidcTrusts.*. See Node SDK.

Service accounts

List service accounts

GET /api/organizations/{id}/service-accounts
Returns the organization’s service accounts, each with its role and OIDC trusts. Authentication: Organization member + org:service-accounts scope (token: platform:orgs:service-accounts:read).

Create service account

POST /api/organizations/{id}/service-accounts
ParameterTypeRequiredDescription
namebodyYesDisplay name for the service account
role_idbodyYesRole granting the account its scopes
Authentication: Organization member + org:service-accounts scope (token: platform:orgs:service-accounts:write).

Update service account

PATCH /api/organizations/{id}/service-accounts/{userId}
ParameterTypeDescription
namebodyNew display name
role_idbodyNew role
Authentication: Organization member + org:service-accounts scope.

Delete service account

DELETE /api/organizations/{id}/service-accounts/{userId}
Authentication: Organization member + org:service-accounts scope.

OIDC trusts

A trust binds an (issuer, subject) pair to a service account. When a request presents an OIDC token whose issuer and subject match, the platform mints a Synthetiq token for that service account.

List OIDC trusts

GET /api/organizations/{id}/oidc-trusts
Authentication: Organization member + org:trusts scope (token: platform:orgs:trusts:read).

Create OIDC trust

POST /api/organizations/{id}/oidc-trusts
ParameterTypeRequiredDescription
user_idbodyYesService account the trust authenticates as
issuer_urlbodyYesOIDC issuer (e.g. https://token.actions.githubusercontent.com)
subjectbodyYesExact subject claim to match (e.g. repo:org/repo:ref:refs/heads/main)
descriptionbodyNoHuman-readable label
jwksbodyNoStatic JWKS, for issuers without a discovery endpoint
The subject is the security boundary — keep it exact (a specific repo and ref), never a wildcard. Authentication: Organization member + org:trusts scope (token: platform:orgs:trusts:write).

Update OIDC trust

PATCH /api/organizations/{id}/oidc-trusts/{trustId}
Updates issuer_url, subject, user_id, and/or description. Authentication: Organization member + org:trusts scope.

Delete OIDC trust

DELETE /api/organizations/{id}/oidc-trusts/{trustId}
Authentication: Organization member + org:trusts scope.

See also