GetResource
/api/v1/resources/{resource}Fetch a resource by name.
Example request
Section titled “Example request”curl \ -H "Authorization: Bearer ${OBLIQUE_API_KEY}" \ "https://us.oblique.security/api/v1/resources/{resource}"Set OBLIQUE_API_KEY to your API key.
curl \ -H "Authorization: Bearer ${OBLIQUE_API_KEY}" \ "https://eu.oblique.security/api/v1/resources/{resource}"Set OBLIQUE_API_KEY to your API key.
Path parameters
Section titled “Path parameters”namestringrequiredName of the resource of the format
resources/{id}.
Response
Section titled “Response”200ResourceA resource represents a managed resource in the system.
namestringAssigned by Oblique. Name of the resource of the format
resources/{id}.displayNamestringrequiredDisplay name of the resource.
descriptionstringDescription of the resource.
integrationstringrequiredThe integration that this resource is associated with.
resourceIdstringread-onlyThe identifier the integration uses for this resource.
IDs are optional and opaque to clients. They are guarenteed to be unique within the scope of a single integration, but may overlap between integrations.
kindstringread-onlyA string representing the value of the metadata oneof. For example,
cloudflare_user_grouporcloudflare_resource_group.resourceUristringread-onlyA link to the resource in the system that reported it, for example the member list of a Cloudflare user group. Empty for a resource whose integration reports no link for it.
createTimestring (date-time)read-onlyCreate and update timestamps.
updateTimestring (date-time)read-onlydeleteTimestring (date-time)read-onlyResources can only be soft-deleted to preserve logs and history. If this field is present, the resource has been deleted and won’t be returned in lists.
managedStartTimestring (date-time)read-onlyThe time when the resource was first switched to
PUSHmode indicating when Oblique started managing the resource as the source of truth. Empty otherwise.userCountinteger (int32)read-onlyThe number of users that have either direct or indirect access to this resource.
Note that this will move to
status.user_countin the future.syncModestringsupportsPushbooleanread-onlyWhether the integration that reported this resource can push to the object backing it. Determined by the access the integration was granted, and re-evaluated on every sync.
capabilitiesCapabilitiesread-onlyThe changes Oblique can push to this resource, determined by the integration that reported it and re-evaluated on every sync alongside
supports_push. Requests for changes the resource doesn’t support are rejected. Unset for a resource whose integration can’t push to it, which places no constraint on requests.entitlementUpdatebooleanread-onlyWhether Oblique can change the roles an existing entitlement carries.
entitlementAddbooleanread-onlyWhether Oblique can grant access to a subject that holds none.
entitlementRemovebooleanread-onlyWhether Oblique can take a subject’s access away, including when an entitlement expires.
visibilityVisibilityWho can view this resource. An unset visibility is equivalent to PUBLIC.
modestringrequiredaudienceAudienceWho has visibility into an object in addition to owners/admins. Ignored when mode = PUBLIC. Retained during mode changes so that users can toggle visibility modes without rebuilding the list every time.
usersstring[]Users named directly in the audience.
Format:
users/{user}groupsstring[]Groups whose effective members are in the audience.
Format:
groups/{group}teamsstring[]Teams whose effective members are in the audience.
Format:
teams/{team}
memberRulesMemberRule[]read-onlyThe rules for each kind of member the resource can hold, as reported by the integration that owns it. A resource with rules only holds members of the kinds they name, each at the roles its rule allows.
A resource holds another resource only through a rule for that resource’s kind. A resource without rules holds accounts alone, at any roles.
memberKindstringread-onlyThe kind of member the rule covers.
“account” covers the accounts the integration reports, which users, teams and groups hold the resource through. Any other value is a kind of resource from the same integration, named as that resource’s
kindnames it: the name of the field in Resource that holds it, such as “github_team”.roleGroupsRoleGroup[]read-onlyThe roles such a member can hold, in groups that each say how many of their roles an entitlement names. An entitlement can only name roles in one of the groups, and its count in each group must fall between the group’s min and max. A rule without groups places no constraint on roles.
For example, a team holds a GitHub repository at exactly one permission, but never triage plus: a group of triage plus with a max of zero, and a group covering every other permission with a min and max of one.
roleIdsstring[]read-onlyThe roles in the group. Empty covers every role the integration reports for the resource’s kind that no other group in the rule names.
mininteger (int32)read-onlyThe fewest roles of the group an entitlement names.
maxinteger (int32)read-onlyThe most roles of the group an entitlement names. Unset places no limit, and zero forbids the group’s roles.
minRolesinteger (int32)read-onlyThe fewest roles such an entitlement names across all the groups. Zero places no minimum.
For example, a person in a GitHub organization is an owner or a member at most, and holds any of the organization’s own roles besides, but always holds at least one role.
maxHeldinteger (int32)read-onlyThe most resources of this resource’s kind such a member can hold at once. Zero places no limit.
One of
- oktaGroup
- oktaApp
- googleGroup
- githubTeam
- cloudflareUserGroup
- cloudflareResourceGroup
- linearWorkspace
- linearTeam
- claudeConsoleOrganization
- claudeConsoleWorkspace
- posthogOrganization
- posthogProject
- bamboohrCompany
- notionWorkspace
- rampBusiness
- tailscaleTailnet
- gongWorkspace
- githubOrganization
- githubRepository
- googleOrgUnit
- onepasswordAccount
- googleSamlApp
- slackWorkspace
- slackChannel
- slackUserGroup
- googleStripeAccount
- googleStripeOrganization
oktaGroupOktaGroupFor groups/teams that are sourced from an integration, this field holds information about that object.
idstringThe ID of the Okta group. Required when creating or updating a resource.
domainBaseUristringFull base URL of the Okta domain, including the schema. For example:
https://dev-45752433-admin.okta.comgroupCreateNamestringIf provided, the name of a group to be created in Okta. Rejected by
CreateResourceandUpdateResource.groupCreateDescriptionstringIf provided, the description of the group to be created in Okta. Rejected by
CreateResourceandUpdateResource.groupRulesOktaGroupRule[]The set of rules that are applied to the group.
idstringThe ID of the rule.
namestringThe name of the rule.
appIdstringWhen the group is an
APP_GROUP, this field will be set to the ID of the Okta app that the group is associated with.typestring
oktaAppOktaAppidstringThe ID of the Okta app.
oinstringThe Okta Integration Network (OIN) ID of the app.
domainBaseUristringFull base URL of the Okta domain, including the schema. Used to generate a URL to the app. For example:
https://dev-45752433-admin.okta.comgroupAssignmentsstring[]The IDs of the Okta groups that are assigned to the app.
pushesOktaGroupPush[]The set of pushes that are applied to the app.
sourceIdstringThe ID of the group that is the source of the push.
targetIdstringThe ID of the group that is the target of the push.
appLinksAppLink[]The set of app links for launching the app. Most apps have a single entry. Some apps (e.g. Google Workspace) have multiple entries, one per sub-application (e.g. drive, gmail).
namestringThe name of the link as defined by Okta, e.g. “login”, “slack_ink”. The name is app-specific and defined by Okta.
hrefstringThe URL to launch the app.
statusstringThe status of the app in Okta (
ACTIVE,INACTIVE, orDELETED).groupPushEnabledbooleanWhether group push is enabled for this app.
googleGroupGoogleGroupidstringThe immutable, Google assigned ID of the group. Oblique uses this to match the group across syncs.
emailstringThe email of the Google group. Emails change when a group is renamed, so this isn’t a stable identifier for the group.
githubTeamGitHubTeamslugstringThe GitHub team slug within the organization.
nodeIdstringThe GitHub team node ID.
organizationLoginstringThe login of the organization the team belongs to, as it appears in URLs.
cloudflareUserGroupCloudflareUserGroupidstringThe ID Cloudflare assigns the user group.
cloudflareResourceGroupCloudflareResourceGroupidstringThe ID Cloudflare assigns the resource group.
scopeKeystringThe key of the Cloudflare object the group is scoped under, for example
com.cloudflare.api.account.{account id}.scopeObjectKeysstring[]The keys of the objects the group covers within its scope, for example
com.cloudflare.api.account.zone.{zone id}. A group covering every object in its scope reports none.
linearWorkspaceLinearWorkspaceidstringThe ID Linear assigns the workspace.
uriKeystringThe URL key of the workspace, used to build links into Linear. For example
obliqueforhttps://linear.app/oblique.
linearTeamLinearTeamidstringThe ID Linear assigns the team.
parentIdstringIf present, the parent team’s ID.
keystringThe team key, the prefix Linear puts on the team’s issue identifiers. For example “ABC” for the issue “ABC-123”.
claudeConsoleOrganizationClaudeConsoleOrganizationidstringThe ID Anthropic assigns the organization.
claudeConsoleWorkspaceClaudeConsoleWorkspaceidstringThe ID Anthropic assigns the workspace.
posthogOrganizationPostHogOrganizationidstringThe ID PostHog assigns the organization.
posthogProjectPostHogProjectidstringThe ID PostHog assigns the project.
demobooleanWhether PostHog fills the project with generated data rather than the organization’s own. An organization holds at most one such project.
bamboohrCompanyBambooHRCompanysubdomainstringThe subdomain the company is reached at: “acme” for an account reached at https://acme.bamboohr.com.
notionWorkspaceNotionWorkspaceidstringThe ID Notion assigns the workspace.
rampBusinessRampBusinessidstringThe ID Ramp assigns the business.
tailscaleTailnetTailscaleTailnetidstringThe tailnet’s ID, as Tailscale reports it on the tailnet’s users.
gongWorkspaceGongWorkspaceidstringThe ID Gong assigns the workspace.
githubOrganizationGitHubOrganizationloginstringThe organization’s login, as it appears in URLs.
nodeIdstringThe organization’s node ID, which is stable across renames.
githubRepositoryGitHubRepositoryrepositoryNamestringThe repository’s name within the organization, for example “web” for the repository “oblique-security/web”.
nodeIdstringThe repository’s node ID, which is stable across renames.
organizationLoginstringThe login of the organization that owns the repository, as it appears in URLs. Oblique connects only to organizations, so every repository has one.
visibilitystringarchivedbooleanWhether the repository is archived, which makes it read-only.
googleOrgUnitGoogleOrgUnitidstringThe ID Google assigns the organizational unit, stable across renames and moves.
pathstringThe path the organizational unit sits at, such as “/Engineering”. It changes when the unit or one of its ancestors is renamed or moved.
parentPathstringThe path of the organizational unit this one sits under, empty for the one at the root of the Workspace.
onepasswordAccountOnePasswordAccountidstringThe account’s ID, such as
ABYALEX3KZF3ZD4DJVBKARRNPY.
googleSamlAppGoogleSamlAppidstringThe ID Google assigns the app, which addresses it in the Admin console. Empty for an app whose addition the audit log Oblique read doesn’t record: Google keeps six months of log, so one added more than six months before Oblique first read it.
entityIdstringThe SAML entity ID the app was configured with, empty when Oblique hasn’t seen it configured.
accessCompletebooleanWhether the entitlements to the app cover everyone it is turned on for. False for an app whose addition the audit log Oblique read doesn’t record, such as one added more than six months before Oblique first read it: its entitlements are only the organizational units and groups an administrator has turned it on for since, and it may be on for others.
slackWorkspaceSlackWorkspaceteamIdstringThe ID Slack assigns the workspace, which its API calls the team ID.
domainstringThe subdomain the workspace is reached at: “acme” for a workspace at https://acme.slack.com.
slackChannelSlackChannelidstringThe ID Slack assigns the channel.
teamIdstringThe ID of the workspace the channel belongs to.
privateChannelbooleanWhether the channel is private, meaning only its members can see it.
defaultChannelbooleanWhether the channel is the workspace’s default channel, which every member other than a guest belongs to and can’t leave.
slackUserGroupSlackUserGroupidstringThe ID Slack assigns the user group.
teamIdstringThe ID of the workspace the user group belongs to.
handlestringThe name members mention the group by, without the leading ”@”.
googleStripeAccountGoogleStripeAccountidstringThe ID Stripe assigns the account, such as “acct_1Nv0FGQ9RKHgCVdK”. Empty if the Google Workspace SAML attribute mapping is unknown, since the account is then unknown too.
googleStripeOrganizationGoogleStripeOrganizationidstringThe ID Stripe assigns the organization, such as “org_6SD3oI0eSQemPzdmaGLJ5j6”.
syncTimestring (date-time)read-onlyThe last time this resource was synchronized successfully with its downstream.
statestringread-only
Errors
Section titled “Errors”| Status | Meaning |
|---|---|
400 | Malformed request |
401 | Missing or invalid API key |
403 | Not allowed for this API key |
404 | Not found |
429 | Too many requests |
500 | Internal server error |