Authentication

The Hubbl API uses HTTP Basic Authentication to secure all API requests. You must include your API credentials in the Authorization header of every request.

Getting your API key

API keys are created in the Hubbl app and require an account admin. Open Settings (the Account Settings page), scroll to the API Keys section, and click Create API Key to generate your API Key ID and API Key Secret.

Credentials

  • Username: Your API Key ID
  • Password: Your API Key Secret

Example Request

Here is how to authenticate using cURL:

curl -X GET "https://api.hubbl.com/v1/orgs/{orgId}" \
  -u "YOUR_API_KEY_ID:YOUR_API_KEY_SECRET"

Or using the Authorization header directly:

curl -X GET "https://api.hubbl.com/v1/orgs/{orgId}" \
  -H "Authorization: Basic BASE64_ENCODED_CREDENTIALS"

Note: Replace BASE64_ENCODED_CREDENTIALS with the Base64-encoded value of YOUR_API_KEY_ID:YOUR_API_KEY_SECRET.

Encoding your credentials

Run the command for your operating system, substituting your actual API Key ID and API Key Secret. The output is the value you pass after Basic in the Authorization header.

Mac and Linux

echo -n "YOUR_API_KEY_ID:YOUR_API_KEY_SECRET" | base64

Windows (PowerShell)

[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("YOUR_API_KEY_ID:YOUR_API_KEY_SECRET"))
Keep your credentials private. Do not commit them to source control.
Hubbl - API Documentation

Account

getAccountQuota

Returns the calling account's current rate-limit state — the daily and monthly request ceilings, how many requests remain in each window, and when each window resets. Quota is account-level, so the numbers cover every user and org under the account. Use it as a pre-flight check before large fan-out workflows. This endpoint is not itself rate-limited, so checking quota does not consume quota.


/v1/account/quota

Parameters

Responses

Status: 200 - The calling account's rate-limit state.

{
data
The calling account's rate-limit state. Quota is account-level — every user and every org under the account draws on the same windows.
Required
{
rateLimit
{
daily
Rate-limit state for a single window.
{
limit
Integer
Hard request ceiling for the window.
remaining
Integer
Requests remaining in the window.
resetAt
String (date-time)
When the window resets.
}
monthly
Rate-limit state for a single window.
{
limit
Integer
Hard request ceiling for the window.
remaining
Integer
Requests remaining in the window.
resetAt
String (date-time)
When the window resets.
}
}
}
}

Status: 401 - Authentication failed.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - The caller is impersonating, is not provisioned into an account, or has access

to no scans.
{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Orgs

getOrgById

Returns a summary of information about an organization.


/v1/orgs/{orgId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required

Responses

Status: 200 - Org details

{
data
Required
{
id
String
The unique Salesforce identifier for the organization
name
String
The name of the organization
userName
String
The username associated with the organization connection
hubblScore
Integer
The Hubbl score for the organization
complexityScore
Integer
The complexity score for the organization
lastScanDate
String (date-time)
The date and time of the last scan
totalIssueCount
Integer
The total number of issues found in the organization
highSeverityIssueCount
Integer
The number of high severity issues found in the organization
}
}

Status: 404 - Org not found

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgClassTypesList

Retrieves a paginated list of Apex class-type classifications scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: classFamily


/v1/orgs/{orgId}/classTypes

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,4524697,4524698)
itemId eq, in filter=eq(itemId,344631619)
classFamily eq, in, ne filter=eq(classFamily,controller)
classType eq, in, ne filter=eq(classType,aura controller)
dependentId eq, in filter=eq(dependentId,344627653)

Combine with and(...), or(...), not(...). The inequality operator is ne.

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • classFamily
  • classType
  • dependentId

Use a - prefix for descending order. Default sort: classFamily.

Examples:

  • sort=classFamily (Ascending)
  • sort=-classFamily (Descending)
  • sort=classFamily,classType (Multiple fields)

Responses

Status: 200 - List of Apex class-type classifications scanned in the org.

Paginated response containing Apex class-type classifications scanned in an org.
{
data
Array[
An Apex class-type classification (the controller / model / test / etc. family assigned to a scanned Apex item).
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (Apex class) being classified.
classFamily
String
The high-level class family (e.g. controller, model, test, service).
classType
String
The specific class-type label (e.g. aura controller, batch, queueable).
dependentId
Integer
Internal Hubbl ID of a related code item this classification depends on, if any.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgCloudUsage

Returns the cloud-usage summary for an org — a per-cloud adoption breakdown (record counts, record share, object-utilization %) plus an overall usage summary (active users, object / record counts, last-used date). Powers the Adoption "Cloud" tab. Read-only, computed from the org's latest scan.


/v1/orgs/{orgId}/cloudUsage

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required

Responses

Status: 200 - The cloud-usage summary for the org.

{
data
Cloud-usage summary for an org's latest scan — a per-cloud adoption breakdown plus an overall usage summary. Computed, read-only.
Required
{
clouds
Array[
Adoption breakdown for a single cloud classification.
{
cloud
String
Cloud classification — one of `Sales Cloud`, `Service Cloud`, `Commerce Cloud`, `Platform`, `Packages`, `Custom Objects`, `Unclassified`.
recordCount
Integer
Total records held by this cloud's objects.
recordPercentage
Number
This cloud's share of the org's total records, 0–100.
objectUtilizationPercentage
Number
Percentage of this cloud's objects that hold at least one record, 0–100 (object utilization across all of the cloud's objects).
}
]
summary
Overall usage summary across the org's adoption-relevant objects.
{
activeUsers
Integer
Distinct users active across the org's objects.
lastUsedDate
String (date-time)
Most recent last-used date across the org's objects.
objectCount
Integer
Number of adoption-relevant objects in the org.
recordCount
Integer
Total records across the org's adoption-relevant objects.
}
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgCodeCount

Retrieves a single code-count record (full per-item line-count breakdown) by its ID for a specific organization.


/v1/orgs/{orgId}/codeCounts/{codeCountId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
codeCountId*
String

Internal Hubbl integer primary key ID for the code-count record (per-scan internal id).

Required

Responses

Status: 200 - Successful response containing the requested code-count record.

{
data
A full representation of per-item code line-count metrics scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) these counts belong to.
source
Integer
Number of source (executable) lines.
comment
Integer
Number of comment lines.
todo
Integer
Number of TODO-comment lines.
block
Integer
Number of block-comment lines.
blockEmpty
Integer
Number of empty lines within block comments.
empty
Integer
Number of empty (blank) lines.
mixed
Integer
Number of lines containing both code and a comment.
single
Integer
Number of single-line comment lines.
total
Integer
Total number of lines.
name
String
Name of the code item (file).
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or code count not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgCodeCountsList

Retrieves a paginated list of per-item code line-count metrics scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -total


/v1/orgs/{orgId}/codeCounts

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,13633376,13633377)
itemId eq, in filter=eq(itemId,344631619)
name eq, contains filter=contains(name,Controller)
total gte, lte, between filter=gte(total,100)
source gte, lte, between filter=gte(source,50)
comment gte, lte, between filter=gte(comment,1)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • name
  • total
  • source
  • comment

Use a - prefix for descending order. Default sort: -total.

Examples:

  • sort=total (Ascending)
  • sort=-total (Descending)
  • sort=-total,name (Multiple fields)

Responses

Status: 200 - List of code line-count metrics scanned in the org.

Paginated response containing per-item code line-count metrics scanned in an org.
{
data
Array[
A minimal representation of per-item code line-count metrics scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) these counts belong to.
name
String
Name of the code item (file).
source
Integer
Number of source (executable) lines.
comment
Integer
Number of comment lines.
empty
Integer
Number of empty (blank) lines.
block
Integer
Number of block-comment lines.
total
Integer
Total number of lines.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgConnectedAppAssignmentsList

Retrieves a list of connected-app assignments for an organization — junction rows linking a connected app to a profile or permission set. Defaults to sort connectedAppId when no sort query parameter is supplied. No default filter is applied.


/v1/orgs/{orgId}/connectedAppAssignments

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,243788,243789)
connectedAppId eq, in filter=eq(connectedAppId,255958)
profileId eq, in filter=eq(profileId,560046)
permissionSetId eq, in filter=eq(permissionSetId,2607360)
sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • connectedAppId
  • profileId
  • permissionSetId

Use a - prefix for descending order. Default sort: connectedAppId.

Examples:

  • sort=connectedAppId (Ascending)
  • sort=-connectedAppId (Descending)
  • sort=connectedAppId,profileId (Multiple fields)

Responses

Status: 200 - List of connected-app assignments for an organization.

Paginated response containing a list of connected-app assignments for an organization.
{
data
Array[
A connected-app assignment — a junction row linking a connected app to exactly one target: `profileId` XOR `permissionSetId` is set (the other is null).
{
id
Integer
Internal Hubbl primary key of the junction row.
connectedAppId
Integer
FK to the connected app the assignment grants.
profileId
Integer
FK to the assigned profile; null when the assignment targets a permission set.
permissionSetId
Integer
FK to the assigned permission set; null when the assignment targets a profile.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgConnectedAppById

Retrieves a single connected app by its ID for a specific organization.


/v1/orgs/{orgId}/connectedApps/{connectedAppId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
connectedAppId*
String

Internal Hubbl integer primary key ID

Required

Responses

Status: 200 - Successfull response containing the requested connected app.

{
data
A full representation of a connected app including mobile and canvas configuration.
{
id
Integer
Internal Hubbl primary key ID.
isInstalled
Boolean
Indicates if the app is currently installed in the org.
salesforceId
String
The 18-character Salesforce ID of the app record.
salesforceApplicationId
String
The Salesforce application identifier.
label
String
The display name (UI Label) of the connected app.
name
String
The developer name (API Name) of the connected app.
namespacePrefix
String
The namespace prefix associated with the connected app.
description
String
A brief description of the app's purpose.
createdDate
String (date-time)
The timestamp the app was created in Salesforce.
lastModifiedDate
String (date-time)
The timestamp the app was last modified in Salesforce.
userCount
Integer
Number of users who have authorized this app.
usageCount
Integer
Total number of times this app has been used.
firstUsedDate
String (date-time)
The timestamp of the first recorded use.
lastUsedDate
String (date-time)
The timestamp of the most recent use.
canvasAccessMethod
String
The method used to access the canvas app (e.g., Get, Post).
canvasEnabled
Boolean
Indicates if canvas functionality is enabled.
canvasOptions
String
Configuration options for the canvas app.
canvasReferenceId
String
External reference ID for canvas integration.
canvasSelectedLocations
String
Locations where the canvas app is exposed (e.g., Layout, Mobile).
canvasUrl
String
The secure URL for the canvas app.
iconUrl
String
URL for the app icon.
infoUrl
String
URL for additional information about the app.
isRegisteredDeviceOnly
Boolean
Indicates if access is restricted to registered devices.
isUsingAdminAuthorization
Boolean
Indicates if the app uses admin-preauthorized OAuth scopes.
logoUrl
String
URL for the app logo.
mobileAppBinaryId
String
Identifier for the mobile app binary.
mobileAppInstallUrl
String
URL to install the mobile app.
mobileAppInstalledDate
String (date-time)
Date the mobile app was installed.
mobileAppInstalledVersion
String
The specific version of the mobile app currently installed.
mobileAppVer
String
The version string of the mobile app.
mobileDeviceType
String
The targeted device type for the mobile app.
mobileMinOsVer
String
The minimum OS version required for the mobile app.
mobilePlatform
String
The mobile platform (iOS, Android).
mobileSessionTimeout
String
Session timeout configuration for the mobile app.
mobileStartUrl
String
The starting URL for the mobile app experience.
namedUserUvidTimeout
String
Timeout for named user UVIDs.
optionsFullContentPushNotifications
Boolean
Indicates if full content push notifications are enabled.
optionsHasSessionLevelPolicy
Boolean
Indicates if session-level policies are applied.
optionsRefreshTokenValidityMetric
Boolean
Metric for refresh token validity.
pinLength
String
Required PIN length for mobile access.
refreshTokenValidityPeriod
Integer
The period for which a refresh token remains valid.
setupUrl
String
URL to the app's setup page in Salesforce.
startUrl
String
The starting URL for the web app experience.
uvidTimeout
String
Timeout for UVIDs.
isLocal
Boolean
Indicates if the app was created locally in the org.
isBlocked
Boolean
Indicates if the app has been blocked by an administrator.
clientId
String
The consumer key (Client ID) for the connected app.
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or connected app not found

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgConnectedAppsList

Retrieves a list of apps registered against an organization. Defaults to sort -lastUsedDate when no sort query parameter is supplied. No default filter is applied.


/v1/orgs/{orgId}/connectedApps

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,248161)
name eq, contains filter=contains(name,OIQ)
label eq, contains filter=contains(label,Hubbl)
namespacePrefix eq, in filter=eq(namespacePrefix,OIQ)
salesforceId eq, in filter=eq(salesforceId,0DSau000001DtcqGAC)
clientId eq, in filter=eq(clientId,3MVG9riCAn8...)
isInstalled eq filter=eq(isInstalled,true)
isLocal eq filter=eq(isLocal,false)
isBlocked eq filter=eq(isBlocked,false)
userCount gte, lte filter=gte(userCount,1)
usageCount gte, lte filter=gte(usageCount,1)
createdDate gte, lte, between filter=gte(createdDate,2026-01-01)
lastModifiedDate gte, lte, between filter=between(lastModifiedDate,2026-01-01,2026-04-30)
firstUsedDate gte, lte, between filter=gte(firstUsedDate,2026-01-01)
lastUsedDate gte, lte, between filter=gte(lastUsedDate,2026-04-01)
sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • name
  • label
  • namespacePrefix
  • salesforceId
  • clientId
  • isInstalled
  • isLocal
  • isBlocked
  • userCount
  • usageCount
  • createdDate
  • lastModifiedDate
  • firstUsedDate
  • lastUsedDate

Use a - prefix for descending order. Default sort: -lastUsedDate.

Examples:

  • sort=lastUsedDate (Ascending)
  • sort=-lastUsedDate (Descending)
  • sort=-lastUsedDate,name (Multiple fields)

Responses

Status: 200 - List of connected apps registered against an organization.

Paginated response containing a list of connected apps registered against an organization.
{
data
Array[
A minimal representation of a connected app.
{
id
Integer
Internal Hubbl primary key ID.
isInstalled
Boolean
Indicates if the app is currently installed in the org.
salesforceId
String
The 18-character Salesforce ID of the app record.
salesforceApplicationId
String
The Salesforce application identifier.
label
String
The display name (UI Label) of the connected app.
name
String
The developer name (API Name) of the connected app.
namespacePrefix
String
The namespace prefix associated with the connected app.
description
String
A brief description of the app's purpose.
createdDate
String (date-time)
The timestamp the app was created in Salesforce.
userCount
Integer
Number of users who have authorized this app.
usageCount
Integer
Total number of times this app has been used.
firstUsedDate
String (date-time)
The timestamp of the first recorded use.
lastUsedDate
String (date-time)
The timestamp of the most recent usage of this app in the org.
infoUrl
String
URL for additional information about the app.
isUsingAdminAuthorization
Boolean
Indicates if the app uses admin-preauthorized OAuth scopes.
isBlocked
Boolean
Indicates if the app has been blocked by an administrator.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgEsLint

Retrieves a single ESLint finding (full record) by its ID for a specific organization.


/v1/orgs/{orgId}/esLints/{esLintId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
esLintId*
String

Internal Hubbl integer primary key ID for the ESLint finding (per-scan internal id).

Required

Responses

Status: 200 - Successful response containing the requested ESLint finding record.

{
data
A full representation of an ESLint finding reported against LWC / Aura JavaScript source in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) the finding was reported against.
metadataId
Integer
Internal Hubbl ID of the metadata record the finding is associated with.
metadataName
String
Name of the associated metadata record.
scanName
String
Name of the scan the finding belongs to.
itemName
String
Name of the code item (file) the finding was reported against.
type
String
The source type the finding applies to (e.g. lwc, aura).
rule
String
The ESLint rule that produced the finding (e.g. no-undef).
category
String
The rule category (e.g. problem, suggestion).
engine
String
The lint engine that produced the finding (e.g. eslint-lwc).
severity
Integer
Numeric severity of the finding (higher is more severe).
description
String
Human-readable description of the finding.
line
Integer
Line number in the source file where the finding was reported.
column
Integer
Column number in the source file where the finding was reported.
problem
Integer
Internal problem code associated with the finding.
url
String
URL to the rule documentation.
name
String
Name of the code item the finding was reported against.
label
String
Label of the code item the finding was reported against.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or ESLint finding not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgEsLintsList

Retrieves a paginated list of ESLint findings reported against LWC / Aura JavaScript source in an org. If no sort preference is provided, the API defaults to:

  • Sort: -severity


/v1/orgs/{orgId}/esLints

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,146423689,146422383)
itemId eq, in filter=eq(itemId,344649842)
metadataId eq, in filter=eq(metadataId,11543)
type eq, in, ne filter=eq(type,lwc)
rule eq, in, ne filter=eq(rule,no-undef)
category eq, in, ne filter=eq(category,problem)
engine eq, in, ne filter=eq(engine,eslint-lwc)
severity eq, gte, lte filter=eq(severity,2)
name eq, contains filter=contains(name,labels)
label eq, contains filter=eq(label,labels)

Combine with and(...), or(...), not(...). The inequality operator is ne.

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • metadataId
  • type
  • rule
  • category
  • engine
  • severity
  • name
  • label

Use a - prefix for descending order. Default sort: -severity.

Examples:

  • sort=severity (Ascending)
  • sort=-severity (Descending)
  • sort=-severity,rule (Multiple fields)

Responses

Status: 200 - List of ESLint findings scanned in the org.

Paginated response containing ESLint findings reported against LWC / Aura JavaScript source in an org.
{
data
Array[
A minimal representation of an ESLint finding reported against LWC / Aura JavaScript source in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) the finding was reported against.
type
String
The source type the finding applies to (e.g. lwc, aura).
rule
String
The ESLint rule that produced the finding (e.g. no-undef).
category
String
The rule category (e.g. problem, suggestion).
severity
Integer
Numeric severity of the finding (higher is more severe).
description
String
Human-readable description of the finding.
line
Integer
Line number in the source file where the finding was reported.
label
String
Label of the code item the finding was reported against.
name
String
Name of the code item the finding was reported against.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgFieldById

Retrieves a single Salesforce field by its ID for a specific organization.


/v1/orgs/{orgId}/fields/{fieldId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
fieldId*
String

Internal Hubbl integer primary key ID for the field

Required

Responses

Status: 200 - Successful response containing the requested field record.

{
data
A full representation of a Salesforce field record within an organization.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID linking this field to its parent item record.
label
String
The user-facing display label of the field.
apiName
String
The Salesforce API name of the field.
type
String
The Salesforce field type (e.g., Checkbox, Text, Picklist).
length
Integer
The maximum length of the field value.
picklistValues
String
Comma-separated list of picklist API values.
picklistLabels
String
Comma-separated list of picklist display labels.
picklistActive
String
Comma-separated list indicating which picklist values are active.
globalPicklistName
String
The name of the global picklist this field references, if any.
singleOrMulti
String
Indicates whether the picklist is single-select or multi-select.
isMasterDetail
Boolean
Indicates whether this is a master-detail relationship field.
isLookup
Boolean
Indicates whether this is a lookup relationship field.
allowOrPreventDelete
String
Defines the delete behavior for related records (e.g., SetNull, Restrict, Cascade).
referenceTo
String
The API name of the object this field references.
objectApiName
String
The API name of the Salesforce object this field belongs to.
isCustomField
Boolean
Indicates whether this is a custom field as opposed to a standard field.
recordCount
Integer
The number of records that have a non-null value for this field.
isAggregatable
Boolean
Indicates whether this field can be used in aggregate functions.
isUsable
Boolean
Indicates whether this field is available for use in queries.
namespace
String
The namespace prefix of the package that installed this field, if any.
description
String
A description of the field's purpose.
sobjectId
Integer
Internal Hubbl ID of the parent SObject record.
objectRecordCount
Integer
The total number of records in the parent object.
percentPopulated
Number (double)
The percentage of records that have a non-null value for this field.
isEncrypted
Boolean
Indicates whether this field is encrypted using Salesforce Shield.
usageQueryFailed
Boolean
Indicates whether the usage data query for this field failed.
setupUrl
String
The direct URL to this field's configuration page in Salesforce Setup.
isFormula
Boolean
Indicates whether this field is a formula field.
isRollupSummary
Boolean
Indicates whether this field is a roll-up summary field.
complianceGroup
String
The compliance classification group assigned to this field (e.g., PII, HIPAA).
securityClassification
String
The security classification assigned to this field (e.g., Public, Confidential).
businessStatus
String
The business status of this field (e.g., Active, Deprecated).
encryptedScheme
String
The encryption scheme used if this field is encrypted with Shield Platform Encryption.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or field not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgFieldsList

Retrieves a paginated list of Salesforce fields scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -percentPopulated


/v1/orgs/{orgId}/fields

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,82892677)
itemId eq, in filter=eq(itemId,344655843)
sobjectId eq, in filter=eq(sobjectId,6026156)
objectApiName eq, contains filter=eq(objectApiName,Account)
apiName eq, contains filter=contains(apiName,__c)
label eq, contains filter=contains(label,Status)
type eq, in, ne filter=eq(type,Checkbox)
namespace eq, in filter=eq(namespace,FSL)
isCustomField eq filter=eq(isCustomField,true)
isFormula eq filter=eq(isFormula,true)
isRollupSummary eq filter=eq(isRollupSummary,true)
isLookup eq filter=eq(isLookup,true)
isMasterDetail eq filter=eq(isMasterDetail,true)
isEncrypted eq filter=eq(isEncrypted,true)
isUsable eq filter=eq(isUsable,true)
isAggregatable eq filter=eq(isAggregatable,true)
usageQueryFailed eq filter=eq(usageQueryFailed,false)
recordCount gte, lte filter=gte(recordCount,1)
objectRecordCount gte, lte filter=gte(objectRecordCount,100)
percentPopulated gte, lte filter=lte(percentPopulated,5)
complianceGroup eq, in, ne filter=eq(complianceGroup,PII)
securityClassification eq, in, ne filter=eq(securityClassification,Confidential)
businessStatus eq, in, ne filter=eq(businessStatus,Active)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • sobjectId
  • objectApiName
  • apiName
  • label
  • type
  • namespace
  • isCustomField
  • isFormula
  • isRollupSummary
  • isLookup
  • isMasterDetail
  • isEncrypted
  • isUsable
  • isAggregatable
  • usageQueryFailed
  • recordCount
  • objectRecordCount
  • percentPopulated
  • complianceGroup
  • securityClassification
  • businessStatus

Use a - prefix for descending order. Default sort: -percentPopulated.

Examples:

  • sort=percentPopulated (Ascending)
  • sort=-percentPopulated (Descending)
  • sort=-percentPopulated,objectApiName (Multiple fields)

Responses

Status: 200 - List of Salesforce fields scanned in the org.

Paginated response containing a list of Salesforce fields scanned in an org.
{
data
Array[
A minimal representation of a Salesforce field scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectApiName
String
API name of the parent object (e.g. Account, Contact).
apiName
String
API name of the field (e.g. FirstName, Custom_Field__c).
label
String
Display label of the field.
type
String
Salesforce field data type (e.g. Text, Number, Checkbox).
description
String
Description text of the field.
isCustomField
Boolean
Whether this is a custom field (__c suffix).
isUsable
Boolean
Whether the field is usable for querying.
recordCount
Integer
Number of records where this field is populated.
objectRecordCount
Integer
Total number of records in the parent object.
percentPopulated
Number (double)
Percentage of records where this field is populated.
namespace
String
Namespace prefix for managed package fields.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgFlowById

Retrieves a single Salesforce flow by its ID for a specific organization.


/v1/orgs/{orgId}/flows/{flowId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
flowId*
String

Internal Hubbl integer primary key ID for the flow.

Required

Responses

Status: 200 - Successful response containing the requested flow record.

{
data
A full representation of a Salesforce flow record within an organization.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
label
String
Display label of the flow.
description
String
Description text of the flow.
interviewLabel
String
Interview label (largely mirrors the flow label).
status
String
Flow status (e.g. Active, Draft, Obsolete).
isActive
Boolean
Whether the flow is currently active.
objectName
String
API name of the object the flow runs against.
triggerType
String
The flow trigger type (e.g. onCreateOnly, onAllChanges).
recordTriggerType
String
Record-trigger timing (e.g. Create, Update).
processType
String
The flow process type (e.g. Flow, AutoLaunchedFlow, Workflow).
builderType
String
The builder that produced the flow (e.g. LightningFlowBuilder).
apiName
String
Developer/API name of the flow.
namespace
String
Namespace prefix for managed-package flows.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
}
}

Status: 401 - Missing or invalid authentication.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found or flow not found within the org.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgFlowsList

Retrieves a paginated list of Salesforce flows scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -updatedAt


/v1/orgs/{orgId}/flows

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,1701890)
itemId eq, in filter=eq(itemId,344648571)
sobjectId eq, in filter=eq(sobjectId,6027056)
objectName eq, contains filter=eq(objectName,Contract)
apiName eq, contains filter=contains(apiName,Activate)
label eq, contains filter=contains(label,Cancel)
status eq, in, ne filter=eq(status,Active)
isActive eq filter=eq(isActive,true)
triggerType eq, in, ne filter=eq(triggerType,onCreateOnly)
recordTriggerType eq, in, ne filter=eq(recordTriggerType,RecordAfterSave)
processType eq, in, ne filter=eq(processType,Flow)
builderType eq, in, ne filter=eq(builderType,LightningFlowBuilder)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • sobjectId
  • objectName
  • apiName
  • label
  • status
  • isActive
  • triggerType
  • recordTriggerType
  • processType
  • builderType
  • updatedAt

Use a - prefix for descending order. Default sort: -updatedAt.

Examples:

  • sort=label (Ascending)
  • sort=-updatedAt (Descending)
  • sort=-isActive,label (Multiple fields)

Responses

Status: 200 - List of Salesforce flows scanned in the org.

Paginated response containing a list of Salesforce flows scanned in an org.
{
data
Array[
A minimal representation of a Salesforce flow scanned in an org. The subset of fields returned by the flows list endpoint.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectName
String
API name of the object the flow runs against (e.g. Account, Opportunity).
apiName
String
Developer/API name of the flow.
label
String
Display label of the flow.
status
String
Flow status (e.g. Active, Draft, Obsolete).
isActive
Boolean
Whether the flow is currently active.
triggerType
String
The flow trigger type (e.g. onCreateOnly, onAllChanges).
recordTriggerType
String
Record-trigger timing (e.g. Create, Update).
processType
String
The flow process type (e.g. Flow, AutoLaunchedFlow, Workflow).
builderType
String
The builder that produced the flow (e.g. LightningFlowBuilder).
namespace
String
Namespace prefix for managed-package flows.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 401 - Missing or invalid authentication.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgInstalledPackageById

Retrieves a single installed package by its ID for a specific organization.


/v1/orgs/{orgId}/installedPackages/{installedPackageId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
installedPackageId*
String

Internal Hubbl integer primary key ID

Required

Responses

Status: 200 - Successfull response containing the requested installed package.

{
data
A full representation of an installed package.
{
label
String
The display label of the package.
id
Integer
Internal Hubbl primary key ID.
name
String
The developer name of the package.
description
String
A brief description of the package's purpose.
publisherName
String
The name of the organization that published the package.
namespacePrefix
String
The namespace prefix that identifies this package.
majorVersion
Integer
The major version number.
minorVersion
Integer
The minor version number.
patchVersion
Integer
The patch version number.
buildNumber
Integer
The specific build number of the installed version.
releaseState
String
The release state (e.g., Released, Beta).
isDeprecated
Boolean
Indicates whether the package version is deprecated.
isManaged
Boolean
Indicates whether the package is a managed package.
isPasswordProtected
Boolean
Indicates whether the package is protected by a password.
isSecurityReviewed
Boolean
Indicates whether the package has passed Salesforce security review.
salesforceId
String
The 18-character Salesforce ID of the installed package.
salesforceVersionId
String
The Salesforce ID for this specific package version (starts with 04t).
isOrgDependent
Boolean
Indicates whether the package is dependent on the organization's metadata.
isValid
Boolean
Indicates whether the package installation is valid.
packageVersionDescription
String
Description of the specific package version.
packageVersionName
String
Name of the specific package version.
package2ContainerOptions
String
Container options for the package.
isBeta
Boolean
Indicates whether this is a beta version of the package.
packageType
String
The type of the package (e.g., Managed, Unmanaged).
packageId
Integer
The Hubbl ID of the parent package.
packageVersionId
Integer
The Hubbl ID of the package version.
installDate
String (date-time)
The date and time when the package was installed in the org.
isOutdated
Boolean
Indicates whether a newer version of the package is available.
latestVersion
String
The version number of the latest available version of the package.
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or installed package not found

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgInstalledPackagesList

Retrieves a list of managed and unmanaged packages installed in an organization.


/v1/orgs/{orgId}/installedPackages

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,248161)
name eq, contains filter=contains(name,Sales)
publisherName eq, contains filter=eq(publisherName,Salesforce)
namespacePrefix eq, in filter=eq(namespacePrefix,OIQ)
salesforceId eq, in filter=eq(salesforceId,03358000000Q8xqAAC)
salesforceVersionId eq, in filter=eq(salesforceVersionId,04t...)
packageType eq, in filter=eq(packageType,Managed)
releaseState eq, in filter=eq(releaseState,Released)
isManaged eq filter=eq(isManaged,true)
isDeprecated eq filter=eq(isDeprecated,false)
isSecurityReviewed eq filter=eq(isSecurityReviewed,true)
isBeta eq filter=eq(isBeta,false)
isOutdated eq filter=eq(isOutdated,true)
installDate gte, lte, between filter=between(installDate,2026-01-01,2026-04-30)
sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • name
  • publisherName
  • namespacePrefix
  • salesforceId
  • salesforceVersionId
  • packageType
  • releaseState
  • isManaged
  • isDeprecated
  • isSecurityReviewed
  • isBeta
  • isOutdated
  • installDate

Use a - prefix for descending order. Default sort: -installDate.

Responses

Status: 200 - List of installed packages in an organization.

Paginated response containing a list of installed packages in an organization.
{
data
Array[
{
id
Integer
Internal Hubbl primary key ID.
name
String
The developer name of the package.
label
String
The display label of the package.
description
String
A brief description of the package's purpose.
publisherName
String
The name of the organization that published the package.
namespacePrefix
String
The namespace prefix that identifies this package.
buildNumber
Integer
The specific build number of the installed version.
releaseState
String
The release state (e.g., Released, Beta).
isDeprecated
Boolean
Indicates whether the package version is deprecated.
isManaged
Boolean
Indicates whether the package is a managed package.
isPasswordProtected
Boolean
Indicates whether the package is protected by a password.
isSecurityReviewed
Boolean
Indicates whether the package has passed Salesforce security review.
salesforceId
String
The 18-character Salesforce ID of the installed package.
salesforceVersionId
String
The Salesforce ID for this specific package version (starts with 04t).
isOrgDependent
Boolean
Indicates whether the package is dependent on the organization's metadata.
isValid
Boolean
Indicates whether the package installation is valid.
isBeta
Boolean
Indicates whether this is a beta version of the package.
installDate
String (date-time)
The date and time when the package was installed in the org.
isOutdated
Boolean
Indicates whether a newer version of the package is available.
latestVersion
String
The version number of the latest available version of the package.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgIssues

Retrieves a list of issues for the organization's latest scan. Defaults to sort -priority,effort (highest priority first, then lowest effort) when no sort query parameter is supplied. No default filter is applied.


/v1/orgs/{orgId}/issues

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50. Maximum is 200.

offset
Integer

Number of items to skip

fields
String

A comma-separated list of fields to include in the response. If omitted, all fields are returned. Example: fields=priority,effort,title

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

  • priority
  • effort
  • wellArchitectedCategoryLevel1
  • wellArchitectedCategoryLevel2
  • wellArchitectedCategoryLevel3
  • wellArchitectedCategoryLevel4
  • metadataType
  • namespace
  • relatedObject
  • category
  • apiName
  • rule
  • title
  • label
  • content

Supported Operators:

  • Logical: and(), or(), not()
  • Comparison: eq(), ne(), gt(), gte(), lt(), lte()
  • Array: in(), out()
  • Pattern Matching: like(), ilike(), contains()
  • Null Checks: isNull(), isNotNull()

Examples:

  • filter=eq(priority,High)
  • filter=and(gt(effort,2),contains(title,Security))
  • filter=or(in(metadataType,ApexClass,ApexTrigger),out(category,Testing,Dev))
  • filter=isNotNull(namespace)
sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • priority
  • effort
  • wellArchitectedCategoryLevel1
  • wellArchitectedCategoryLevel2
  • wellArchitectedCategoryLevel3
  • wellArchitectedCategoryLevel4
  • metadataType
  • namespace
  • relatedObject
  • category
  • apiName
  • rule
  • title
  • label
  • content

Use a - prefix for descending order.

Examples:

  • sort=priority (Ascending)
  • sort=-effort (Descending)
  • sort=-priority,effort (Multiple fields)

Responses

Status: 200 - List of issues for the organization

{
data
Array[
{
key
String
Unique identifier of an issue across all scans of an org
priority
String
The priority level of the recommendation (Low, Medium, High)
effort
String
Estimated effort required to implement the recommendation (Low, Medium, High)
title
String
Human-readable title of the recommendation
wellArchitectedCategoryLevel1
String
The top-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel2
String
The second-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel3
String
The third-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel4
String
The fourth-level category in the Salesforce Well-Architected framework
category
String
The functional category of the recommendation
namespace
String
The Salesforce namespace where the issue was found
apiName
String
The API name of the Salesforce component or metadata item
relatedObject
String
The Salesforce object related to the issue
metadataType
String
The type of Salesforce metadata
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found or no scans available

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgItem

Retrieves a single metadata item (full record) by its ID for a specific organization.


/v1/orgs/{orgId}/items/{itemId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
itemId*
String

Internal Hubbl integer primary key ID for the metadata item (per-scan internal id).

Required

Responses

Status: 200 - Successful response containing the requested metadata item record.

{
data
A full representation of a metadata item (code file or directory) scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
parentId
Integer
Internal Hubbl ID of the parent item (directory), if any.
ultimateParentId
Integer
Internal Hubbl ID of the top-level ancestor item, if any.
metadataId
Integer
Internal Hubbl ID of the metadata record this item belongs to.
parentName
String
Name of the parent item (directory), if any.
metadataName
String
Name of the associated metadata record.
scanName
String
Name of the scan this item belongs to.
name
String
Name of the item (file or directory).
nameWithoutExtension
String
The item name with its file extension removed.
extension
String
The file extension of the item, if any.
extensionWithXML
String
The file extension including the -meta.xml suffix, if any.
isDirectory
Boolean
Whether this item is a directory rather than a file.
typeDirectory
String
The metadata type directory the item belongs to (e.g. lwc, aura, classes).
relatedObject
String
The Salesforce object this item relates to, if any.
directory
String
The absolute directory path containing the item.
path
String
The absolute path of the item.
relativePath
String
Path of the item relative to the scanned source root.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or metadata item not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgItemsList

Retrieves a paginated list of metadata items (code files and directories) scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: name


/v1/orgs/{orgId}/items

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,344626869,344626870)
parentId eq, in filter=eq(parentId,344626000)
ultimateParentId eq, in filter=eq(ultimateParentId,344620000)
metadataId eq, in filter=eq(metadataId,11543)
typeDirectory eq, in, ne filter=eq(typeDirectory,aura)
isDirectory eq filter=eq(isDirectory,false)
name eq, contains filter=contains(name,Modal)

Combine with and(...), or(...), not(...). The inequality operator is ne.

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • parentId
  • ultimateParentId
  • metadataId
  • typeDirectory
  • isDirectory
  • name

Use a - prefix for descending order. Default sort: name.

Examples:

  • sort=name (Ascending)
  • sort=-name (Descending)
  • sort=typeDirectory,name (Multiple fields)

Responses

Status: 200 - List of metadata items scanned in the org.

Paginated response containing metadata items (code files and directories) scanned in an org.
{
data
Array[
A minimal representation of a metadata item (code file or directory) scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
parentId
Integer
Internal Hubbl ID of the parent item (directory), if any.
metadataId
Integer
Internal Hubbl ID of the metadata record this item belongs to.
name
String
Name of the item (file or directory).
nameWithoutExtension
String
The item name with its file extension removed.
extension
String
The file extension of the item, if any.
typeDirectory
String
The metadata type directory the item belongs to (e.g. lwc, aura, classes).
isDirectory
Boolean
Whether this item is a directory rather than a file.
relativePath
String
Path of the item relative to the scanned source root.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLicenseUsageByApiName

Retrieves a single license usage entry (provisioned / used / remaining license counts for one license type) by its stable apiName.


/v1/orgs/{orgId}/licenseUsages/{apiName}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
apiName*
String

The license type's stable apiName, constant across scans. This MUST be Base64URL encoded to avoid routing conflicts with special characters.

Required

Responses

Status: 200 - The license usage entry.

A single license usage entry for an org.
{
data
A license usage entry — provisioned / used / remaining license counts for one license type in an org.
{
id
Integer
Internal Hubbl primary key ID (per-scan; not stable across scans).
apiName
String
Stable Salesforce identifier for the license type (e.g. INSIGHTS_INTEGRATION_USER), constant across scans.
name
String
Display label of the license type.
type
String
License category (e.g. User Licenses, Permission Set Licenses, Feature Licenses).
status
String
License status (e.g. Active, Disabled).
totalLicenses
Integer
Total provisioned license count.
usedLicenses
Integer
Number of licenses currently in use.
remainingLicenses
Integer
Number of licenses remaining (total minus used).
expirationDate
String
License expiration date (ISO YYYY-MM-DD), if any.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or license usage not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLicenseUsagesList

Retrieves a paginated list of license usage entries (provisioned / used / remaining license counts per license type) for an org. If no sort preference is provided, the API defaults to:

  • Sort: name


/v1/orgs/{orgId}/licenseUsages

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,798478,798324)
apiName eq, contains filter=eq(apiName,INSIGHTS_INTEGRATION_USER)
name eq, contains filter=contains(name,Integration)
type eq, in, ne filter=eq(type,User Licenses)
status eq, in, ne filter=eq(status,Active)
totalLicenses gte, lte filter=gte(totalLicenses,1)
usedLicenses gte, lte filter=eq(usedLicenses,0)
remainingLicenses gte, lte filter=gte(remainingLicenses,1)
expirationDate gte, lte, between filter=lte(expirationDate,2026-12-31)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • apiName
  • name
  • type
  • status
  • totalLicenses
  • usedLicenses
  • remainingLicenses
  • expirationDate

Use a - prefix for descending order. Default sort: name.

Examples:

  • sort=name (Ascending)
  • sort=-remainingLicenses (Descending)
  • sort=type,name (Multiple fields)

Responses

Status: 200 - List of license usage entries for the org.

Paginated response containing a list of license usage entries for an org.
{
data
Array[
A license usage entry — provisioned / used / remaining license counts for one license type in an org.
{
id
Integer
Internal Hubbl primary key ID (per-scan; not stable across scans).
apiName
String
Stable Salesforce identifier for the license type (e.g. INSIGHTS_INTEGRATION_USER), constant across scans.
name
String
Display label of the license type.
type
String
License category (e.g. User Licenses, Permission Set Licenses, Feature Licenses).
status
String
License status (e.g. Active, Disabled).
totalLicenses
Integer
Total provisioned license count.
usedLicenses
Integer
Number of licenses currently in use.
remainingLicenses
Integer
Number of licenses remaining (total minus used).
expirationDate
String
License expiration date (ISO YYYY-MM-DD), if any.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLimit

Retrieves a single org limit by its stable name, with its cap, remaining headroom, and derived percent used. The record is identical in shape to a getOrgLimitsList record. Use getOrgLimitsList to discover available limit names.


/v1/orgs/{orgId}/orgLimits/{name}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
name*
String

The org limit's stable natural key (a Salesforce limit key, e.g. DailyApiRequests). Matches the name field returned by getOrgLimitsList.

Required

Responses

Status: 200 - The org limit record.

A single org limit for an org.
{
data
A single Salesforce/Hubbl org limit with its cap, remaining headroom, and derived percent used.
{
name
String
The limit's stable natural key (e.g. DailyApiRequests). The by-name path param on getOrgLimit.
max
Integer
The cap for the limit.
remaining
Integer
Headroom left for the limit.
percentUsed
Number (double)
Derived server-side as (max - remaining) / max, a number in [0,1]. Null when max is 0 or unknown.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or org limit not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLimitsList

Retrieves a paginated list of org limits for an org, each with its cap, remaining headroom, and derived percent used. This is a small dataset (one row per limit); the full set fits in a single page. If no sort preference is provided, the API defaults to:

  • Sort: -percentUsed


/v1/orgs/{orgId}/orgLimits

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
name eq, in, contains filter=in(name,DailyApiRequests,PermissionSets)
percentUsed gte, lte filter=gte(percentUsed,0.8)
max gte, lte filter=gte(max,1000)
remaining gte, lte filter=lte(remaining,100)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • name
  • percentUsed
  • max
  • remaining

Use a - prefix for descending order. Default sort: -percentUsed.

Examples:

  • sort=percentUsed (Ascending)
  • sort=-percentUsed (Descending)
  • sort=-percentUsed,name (Multiple fields)

Responses

Status: 200 - List of org limits for the org.

Paginated response containing a list of org limits for an org.
{
data
Array[
A single Salesforce/Hubbl org limit with its cap, remaining headroom, and derived percent used.
{
name
String
The limit's stable natural key (e.g. DailyApiRequests). The by-name path param on getOrgLimit.
max
Integer
The cap for the limit.
remaining
Integer
Headroom left for the limit.
percentUsed
Number (double)
Derived server-side as (max - remaining) / max, a number in [0,1]. Null when max is 0 or unknown.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLoginActivityList

Retrieves a paginated list of per-user Salesforce login activity for an org — one row per user with 30/90/365-day login counts. If no sort preference is provided, the API defaults to:

  • Sort: -last30DaysLoginCount


/v1/orgs/{orgId}/loginActivity

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50, max 200.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
userLicense eq, in filter=in(userLicense,Salesforce,Salesforce Platform)
last30DaysLoginCount eq, gte, lte filter=eq(last30DaysLoginCount,0)
last90DaysLoginCount gte, lte filter=gte(last90DaysLoginCount,1)
last365DaysLoginCount eq, gte, lte filter=eq(last365DaysLoginCount,0)
userCreatedDate gte, lte, between filter=gte(userCreatedDate,2026-01-01)

Combine with and(...), or(...), not(...). To find users who have never logged in: filter=eq(last365DaysLoginCount,0).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • salesforceUserId
  • userLicense
  • last30DaysLoginCount
  • last90DaysLoginCount
  • last365DaysLoginCount
  • userCreatedDate

Use a - prefix for descending order. Default sort: -last30DaysLoginCount.

Examples:

  • sort=last30DaysLoginCount (Ascending)
  • sort=-last30DaysLoginCount (Descending)
  • sort=userLicense,-last365DaysLoginCount (Multiple fields)

Responses

Status: 200 - List of per-user login-activity rows for the org.

Paginated response containing per-user Salesforce login activity for an org.
{
data
Array[
Per-user Salesforce login activity within an org — one row per user.
{
salesforceUserId
String
The Salesforce user id.
userLicense
String
The user's license, resolved from `sfProfiles`. Falls back to the raw user type in parentheses (e.g. `(Guest)`) when there is no profile match.
last30DaysLoginCount
Integer
Number of logins over the trailing 30 days.
last90DaysLoginCount
Integer
Number of logins over the trailing 90 days.
last365DaysLoginCount
Integer
Number of logins over the trailing 365 days.
userCreatedDate
String (date-time)
When the user was created.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgLoginActivityOverview

Returns the login-activity adoption rollup for an org — total licensed users plus logged-in / did-not-log-in / adoption % over the trailing 30, 90, and 365 days. Powers the Adoption "Salesforce Login Activity" summary card. Read-only, computed from the org's latest scan.


/v1/orgs/{orgId}/loginActivity/overview

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
license
String

One or more Salesforce license names to scope the rollup to (e.g. Salesforce, Salesforce Platform). When present, every count in the response reflects only users on the selected licenses.

Repeat the parameter (?license=A&license=B) or pass a comma-separated list (?license=A,B).

Responses

Status: 200 - The login-activity overview for the org.

{
data
Login-activity adoption rollup for an org's latest scan. When a `license` filter is supplied, `totalLicensedUsers` and every window count reflect only the selected licenses.
Required
{
totalLicensedUsers
Integer
Total licensed users (sum of used User Licenses) for the org's latest scan.
last30Days
Login adoption for a single trailing time window.
{
loggedInUsers
Integer
Licensed users who logged in at least once during the window.
didNotLogIn
Integer
Licensed users who did not log in during the window — `max(totalLicensedUsers − loggedInUsers, 0)`.
loginAdoption
Integer
Percentage of licensed users who logged in, 0–100 — `round(loggedInUsers / totalLicensedUsers × 100)`, capped at 100.
}
last90Days
Login adoption for a single trailing time window.
{
loggedInUsers
Integer
Licensed users who logged in at least once during the window.
didNotLogIn
Integer
Licensed users who did not log in during the window — `max(totalLicensedUsers − loggedInUsers, 0)`.
loginAdoption
Integer
Percentage of licensed users who logged in, 0–100 — `round(loggedInUsers / totalLicensedUsers × 100)`, capped at 100.
}
last365Days
Login adoption for a single trailing time window.
{
loggedInUsers
Integer
Licensed users who logged in at least once during the window.
didNotLogIn
Integer
Licensed users who did not log in during the window — `max(totalLicensedUsers − loggedInUsers, 0)`.
loginAdoption
Integer
Percentage of licensed users who logged in, 0–100 — `round(loggedInUsers / totalLicensedUsers × 100)`, capped at 100.
}
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgObjectById

Retrieves a single Salesforce object by its ID for a specific organization.


/v1/orgs/{orgId}/objects/{objectId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
objectId*
String

Internal Hubbl integer primary key ID

Required

Responses

Status: 200 - Successful response containing the requested object.

{
data
A full representation of a Salesforce object record within an organization.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
apiName
String
API name of the object.
apiNameLower
String
Lowercased API name of the object (used for case-insensitive lookups).
label
String
Display label of the object.
type
String
Salesforce object type (e.g. Standard Object, Custom Object).
customSettingType
String
Custom setting type, if the object is a custom setting.
isReportable
Boolean
Whether the object is reportable.
isQueryable
Boolean
Whether the object is queryable via SOQL.
description
String
Description text of the object.
namespace
String
Namespace prefix for managed package objects.
recordCount
Integer
Total number of records in the object at scan time.
setupUrl
String
Direct URL to the object's configuration page in Salesforce Setup.
lastUsedDate
String (date-time)
Most recent time any record in the object was created or updated.
recordsCreatedOrUpdatedLast90Days
Integer
Count of records created or updated in the last 90 days.
recordsCreatedOrUpdatedLast365Days
Integer
Count of records created or updated in the last 365 days.
internalSharingModel
String
Internal sharing model (e.g. Private, Read, ReadWrite).
externalSharingModel
String
External sharing model (e.g. Private, Read, ReadWrite).
usageQueryFailed
Boolean
Indicates whether the usage data query for this object failed.
last90DaysUsageQueryFailed
Boolean
Indicates whether the 90-day usage query for this object failed.
last365DaysUsageQueryFailed
Boolean
Indicates whether the 365-day usage query for this object failed.
lastUsedDateQueryFailed
Boolean
Indicates whether the last-used-date query for this object failed.
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or object not found

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgObjectFieldsList

Retrieves a paginated list of Salesforce fields belonging to a specific parent SObject within an organization. The parent is pinned by the objectId path parameter, so callers do not need to filter by sobjectId themselves.

If no sort preference is provided, the API defaults to:

  • Sort: -percentPopulated


/v1/orgs/{orgId}/objects/{objectId}/fields

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
objectId*
String

Internal Hubbl integer primary key ID of the parent SObject.

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria. The parent object is already pinned by the objectId path parameter, so sobjectId and objectApiName are not filterable here.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,82892677)
itemId eq, in filter=eq(itemId,344655843)
apiName eq, contains filter=contains(apiName,__c)
label eq, contains filter=contains(label,Status)
type eq, in, ne filter=eq(type,Checkbox)
namespace eq, in filter=eq(namespace,FSL)
isCustomField eq filter=eq(isCustomField,true)
isFormula eq filter=eq(isFormula,true)
isRollupSummary eq filter=eq(isRollupSummary,true)
isLookup eq filter=eq(isLookup,true)
isMasterDetail eq filter=eq(isMasterDetail,true)
isEncrypted eq filter=eq(isEncrypted,true)
isUsable eq filter=eq(isUsable,true)
isAggregatable eq filter=eq(isAggregatable,true)
recordCount gte, lte filter=gte(recordCount,1)
percentPopulated gte, lte filter=lte(percentPopulated,5)
complianceGroup eq, in, ne filter=eq(complianceGroup,PII)
securityClassification eq, in, ne filter=eq(securityClassification,Confidential)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • apiName
  • label
  • type
  • namespace
  • isCustomField
  • isFormula
  • isRollupSummary
  • isLookup
  • isMasterDetail
  • isEncrypted
  • isUsable
  • isAggregatable
  • recordCount
  • percentPopulated
  • complianceGroup
  • securityClassification

Use a - prefix for descending order. Default sort: -percentPopulated.

Examples:

  • sort=percentPopulated (Ascending)
  • sort=-percentPopulated (Descending)
  • sort=-percentPopulated,apiName (Multiple fields)

Responses

Status: 200 - List of Salesforce fields belonging to the parent object.

Paginated response containing a list of Salesforce fields scanned in an org.
{
data
Array[
A minimal representation of a Salesforce field scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectApiName
String
API name of the parent object (e.g. Account, Contact).
apiName
String
API name of the field (e.g. FirstName, Custom_Field__c).
label
String
Display label of the field.
type
String
Salesforce field data type (e.g. Text, Number, Checkbox).
description
String
Description text of the field.
isCustomField
Boolean
Whether this is a custom field (__c suffix).
isUsable
Boolean
Whether the field is usable for querying.
recordCount
Integer
Number of records where this field is populated.
objectRecordCount
Integer
Total number of records in the parent object.
percentPopulated
Number (double)
Percentage of records where this field is populated.
namespace
String
Namespace prefix for managed package fields.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or object not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgObjectUsagesList

Retrieves a paginated list of per-object adoption/usage metrics scanned in an org — record counts, active users, automations, field counts, and last-used dates per object. If no sort preference is provided, the API defaults to:

  • Sort: -recordCount


/v1/orgs/{orgId}/objectUsages

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
apiName eq, contains, in filter=eq(apiName,Account)
objectName eq, contains filter=contains(objectName,Case)
cloud eq, in filter=in(cloud,Sales Cloud,Service Cloud)
lastUsedDate gte, lte filter=gte(lastUsedDate,2026-01-01)
recordCount gte, lte filter=gte(recordCount,1000)
activeUsers gte, lte filter=gte(activeUsers,1)
automations gte, lte filter=gte(automations,1)
fields gte, lte filter=lte(fields,50)
emptyFields gte, lte filter=gte(emptyFields,10)

Combine with and(...), or(...), not(...). The inequality operator is ne.

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • objectName
  • apiName
  • lastUsedDate
  • recordCount
  • automations
  • fields
  • emptyFields
  • activeUsers

Use a - prefix for descending order. Default sort: -recordCount.

Examples:

  • sort=recordCount (Ascending)
  • sort=-recordCount (Descending)
  • sort=-recordCount,apiName (Multiple fields)

Responses

Status: 200 - List of per-object usage metrics for the org.

Paginated response containing per-object adoption/usage metrics for an org.
{
data
Array[
Per-object adoption/usage metrics for a Salesforce object in an org's scan.
{
objectName
String
Display label of the object.
apiName
String
API name of the object (e.g. Account, Custom_Object__c).
cloud
String
Cloud classification of the object: one of Sales Cloud, Service Cloud, Commerce Cloud, Platform, Packages, Custom Objects, or Unclassified.
recordCount
Integer
Total number of records in the object at scan time.
lastUsedDate
String (date-time)
Most recent time any record in the object was created or updated.
activeUsers
Integer
Count of distinct users active on the object.
automations
Integer
Count of automations (triggers, workflows, flows) on the object.
fields
Integer
Count of fields defined on the object.
emptyFields
Integer
Count of unpopulated fields (percent populated is zero) on the object.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgObjectsList

Retrieves a paginated list of Salesforce objects scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -lastUsedDate


/v1/orgs/{orgId}/objects

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,6026156)
itemId eq, in filter=eq(itemId,344655384)
apiName eq, contains filter=contains(apiName,__c)
label eq, contains filter=contains(label,Account)
type eq, in, ne filter=eq(type,Standard Object)
namespace eq, in, ne filter=eq(namespace,FSL)
customSettingType eq, in, ne filter=eq(customSettingType,List)
isReportable eq filter=eq(isReportable,true)
isQueryable eq filter=eq(isQueryable,true)
usageQueryFailed eq filter=eq(usageQueryFailed,false)
recordCount gte, lte filter=gte(recordCount,1)
lastUsedDate gte, lte, between filter=gte(lastUsedDate,2026-01-01)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • apiName
  • label
  • type
  • namespace
  • customSettingType
  • isReportable
  • isQueryable
  • usageQueryFailed
  • recordCount
  • lastUsedDate

Use a - prefix for descending order. Default sort: -lastUsedDate.

Examples:

  • sort=lastUsedDate (Ascending)
  • sort=-lastUsedDate (Descending)
  • sort=-recordCount,apiName (Multiple fields)

Responses

Status: 200 - List of Salesforce objects scanned in the org.

Paginated response containing a list of Salesforce objects scanned in an org.
{
data
Array[
A minimal representation of a Salesforce object scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
apiName
String
API name of the object (e.g. Account, Custom_Object__c).
label
String
Display label of the object.
type
String
Salesforce object type (e.g. Standard Object, Custom Object).
description
String
Description text of the object.
namespace
String
Namespace prefix for managed package objects.
recordCount
Integer
Total number of records in the object at scan time.
recordsCreatedOrUpdatedLast90Days
Integer
Count of records created or updated in the last 90 days.
recordsCreatedOrUpdatedLast365Days
Integer
Count of records created or updated in the last 365 days.
lastUsedDate
String (date-time)
Most recent time any record in the object was created or updated.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgPermissionSet

Retrieves a single permission set by its internal Hubbl ID, including the risky-permission flags and the long description free text (which the list endpoint omits).


/v1/orgs/{orgId}/permissionSets/{permissionSetId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
permissionSetId*
String

Internal Hubbl integer ID of the permission set (from the list response).

Required

Responses

Status: 200 - The requested permission set.

Response containing a single permission set record.
{
data
A full permission set record returned by the by-id endpoint — the list subset plus the long `description` free text.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
name
String
Permission set name.
label
String
Display label of the permission set. Mirrors `name` (permission sets have no separate label).
apiName
String
API name of the permission set.
count
Integer
Number of users assigned this permission set.
userLicense
String
User license associated with the permission set (e.g. Salesforce).
isCustom
Boolean
Whether this is a custom permission set.
namespace
String
Namespace prefix for managed-package permission sets.
modifyAllData
Boolean
Grants Modify All Data.
viewAllData
Boolean
Grants View All Data.
resetPasswords
Boolean
Grants Reset User Passwords and Unlock Users.
dataExport
Boolean
Grants Weekly Data Export.
exportReport
Boolean
Grants Export Reports.
manageSharing
Boolean
Grants Manage Sharing.
manageRoles
Boolean
Grants Manage Roles.
manageUsers
Boolean
Grants Manage Users.
managePasswordPolicies
Boolean
Grants Manage Password Policies.
manageLoginAccessPolicies
Boolean
Grants Manage Login Access Policies.
manageProfilesPermissionsets
Boolean
Grants Manage Profiles and Permission Sets.
editReadonlyFields
Boolean
Grants Edit Read Only Fields.
modifyAllPermission
Boolean
Grants Modify All permission.
apiEnabled
Boolean
Grants API Enabled.
authorApex
Boolean
Grants Author Apex.
canApproveUninstalledApps
Boolean
Grants approval of uninstalled connected apps.
description
String
Long free-text description of the permission set.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or permission set not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgPermissionSetsList

Retrieves a paginated list of permission sets scanned in an org, including the risky-permission flags shown on the Profiles & Permission Sets dashboard tab. The list subset omits the long description free text — use the by-id endpoint for that. If no sort preference is provided, the API defaults to:

  • Sort: -count


/v1/orgs/{orgId}/permissionSets

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,2607235,2607237)
itemId eq, in filter=eq(itemId,344674843)
name eq, contains filter=contains(name,Analytics)
label eq, contains filter=contains(label,Integrations)
apiName eq, contains filter=contains(apiName,Cloud)
count gte, lte filter=gte(count,1)
userLicense eq, ne filter=eq(userLicense,Salesforce)
isCustom eq filter=eq(isCustom,true)
modifyAllData eq filter=eq(modifyAllData,true)
viewAllData eq filter=eq(viewAllData,true)
resetPasswords eq filter=eq(resetPasswords,true)
dataExport eq filter=eq(dataExport,true)
exportReport eq filter=eq(exportReport,true)
manageSharing eq filter=eq(manageSharing,true)
manageRoles eq filter=eq(manageRoles,true)
manageUsers eq filter=eq(manageUsers,true)
managePasswordPolicies eq filter=eq(managePasswordPolicies,true)
manageLoginAccessPolicies eq filter=eq(manageLoginAccessPolicies,true)
manageProfilesPermissionsets eq filter=eq(manageProfilesPermissionsets,true)
editReadonlyFields eq filter=eq(editReadonlyFields,true)
modifyAllPermission eq filter=eq(modifyAllPermission,true)
apiEnabled eq filter=eq(apiEnabled,true)
authorApex eq filter=eq(authorApex,true)
canApproveUninstalledApps eq filter=eq(canApproveUninstalledApps,true)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • name
  • label
  • apiName
  • count
  • userLicense
  • isCustom
  • modifyAllData
  • viewAllData
  • resetPasswords
  • dataExport
  • exportReport
  • manageSharing
  • manageRoles
  • manageUsers
  • managePasswordPolicies
  • manageLoginAccessPolicies
  • manageProfilesPermissionsets
  • editReadonlyFields
  • modifyAllPermission
  • apiEnabled
  • authorApex
  • canApproveUninstalledApps

Use a - prefix for descending order. Default sort: -count.

Examples:

  • sort=count (Ascending)
  • sort=-count (Descending)
  • sort=-count,name (Multiple fields)

Responses

Status: 200 - List of permission sets scanned in the org.

Paginated response containing a list of permission sets scanned in an org.
{
data
Array[
A permission set scanned in an org, with its risky-permission flags. The list subset omits the long `description` free text.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
name
String
Permission set name.
label
String
Display label of the permission set. Mirrors `name` (permission sets have no separate label).
apiName
String
API name of the permission set.
count
Integer
Number of users assigned this permission set.
userLicense
String
User license associated with the permission set (e.g. Salesforce).
isCustom
Boolean
Whether this is a custom permission set.
namespace
String
Namespace prefix for managed-package permission sets.
modifyAllData
Boolean
Grants Modify All Data.
viewAllData
Boolean
Grants View All Data.
resetPasswords
Boolean
Grants Reset User Passwords and Unlock Users.
dataExport
Boolean
Grants Weekly Data Export.
exportReport
Boolean
Grants Export Reports.
manageSharing
Boolean
Grants Manage Sharing.
manageRoles
Boolean
Grants Manage Roles.
manageUsers
Boolean
Grants Manage Users.
managePasswordPolicies
Boolean
Grants Manage Password Policies.
manageLoginAccessPolicies
Boolean
Grants Manage Login Access Policies.
manageProfilesPermissionsets
Boolean
Grants Manage Profiles and Permission Sets.
editReadonlyFields
Boolean
Grants Edit Read Only Fields.
modifyAllPermission
Boolean
Grants Modify All permission.
apiEnabled
Boolean
Grants API Enabled.
authorApex
Boolean
Grants Author Apex.
canApproveUninstalledApps
Boolean
Grants approval of uninstalled connected apps.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgPmdViolation

Retrieves a single PMD static-analysis violation (full record) by its ID for a specific organization.


/v1/orgs/{orgId}/pmds/{pmdId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
pmdId*
String

Internal Hubbl integer primary key ID for the PMD violation (per-scan internal id).

Required

Responses

Status: 200 - Successful response containing the requested PMD violation record.

{
data
A full representation of a PMD static-analysis violation reported against Apex source in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) the violation was reported against.
metadataId
Integer
Internal Hubbl ID of the metadata record the violation is associated with.
metadataName
String
Name of the associated metadata record.
scanName
String
Name of the scan the violation belongs to.
itemName
String
Name of the code item (file) the violation was reported against.
type
String
The kind of source element the violation applies to (e.g. class, trigger).
ruleset
String
The PMD ruleset the rule belongs to.
rule
String
The PMD rule that produced the violation.
priority
Integer
PMD priority of the violation (1 is highest priority).
description
String
Human-readable description of the violation.
line
Integer
Line number in the source file where the violation was reported.
column
Integer
Column number in the source file where the violation was reported.
problem
Integer
Internal problem code associated with the violation.
engine
String
The static-analysis engine that produced the violation (e.g. pmd).
url
String
URL to the rule documentation.
name
String
Name of the code item the violation was reported against.
label
String
Label of the code item the violation was reported against.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or PMD violation not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgPmdViolationsList

Retrieves a paginated list of PMD static-analysis violations reported against Apex source in an org. If no sort preference is provided, the API defaults to:

  • Sort: priority


/v1/orgs/{orgId}/pmds

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,142568178,142568179)
itemId eq, in filter=eq(itemId,344632695)
metadataId eq, in filter=eq(metadataId,11543)
priority eq, in, ne filter=eq(priority,3)
type eq, in, ne filter=eq(type,class)
engine eq, in, ne filter=eq(engine,pmd)
name eq, contains filter=contains(name,Point)
label eq, contains filter=eq(label,Point)

Combine with and(...), or(...), not(...). The inequality operator is ne.

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • metadataId
  • priority
  • type
  • engine
  • name
  • label

Use a - prefix for descending order. Default sort: priority.

Examples:

  • sort=priority (Ascending)
  • sort=-priority (Descending)
  • sort=priority,type (Multiple fields)

Responses

Status: 200 - List of PMD static-analysis violations scanned in the org.

Paginated response containing PMD static-analysis violations reported against Apex source in an org.
{
data
Array[
A minimal representation of a PMD static-analysis violation reported against Apex source in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Internal Hubbl ID of the code item (file) the violation was reported against.
type
String
The kind of source element the violation applies to (e.g. class, trigger).
ruleset
String
The PMD ruleset the rule belongs to.
rule
String
The PMD rule that produced the violation.
priority
Integer
PMD priority of the violation (1 is highest priority).
description
String
Human-readable description of the violation.
line
Integer
Line number in the source file where the violation was reported.
label
String
Label of the code item the violation was reported against.
name
String
Name of the code item the violation was reported against.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgSfProfile

Retrieves a single Salesforce profile by its internal Hubbl ID, including the risky-permission flags shown on the Profiles & Permission Sets dashboard tab.


/v1/orgs/{orgId}/sfProfiles/{sfProfileId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
sfProfileId*
String

Internal Hubbl integer ID of the Salesforce profile (from the list response).

Required

Responses

Status: 200 - The requested Salesforce profile.

Response containing a single Salesforce profile record.
{
data
A full Salesforce profile record returned by the by-id endpoint. For this resource the full record is identical to the list subset (no extra columns).
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
name
String
Profile name (e.g. System Administrator).
label
String
Display label of the profile. Mirrors `name` (profiles have no separate label).
count
Integer
Number of users assigned to this profile.
userLicense
String
User license associated with the profile (e.g. Salesforce).
custom
Boolean
Whether this is a custom profile.
modifyAllData
Boolean
Grants Modify All Data.
viewAllData
Boolean
Grants View All Data.
resetPasswords
Boolean
Grants Reset User Passwords and Unlock Users.
dataExport
Boolean
Grants Weekly Data Export.
exportReport
Boolean
Grants Export Reports.
manageSharing
Boolean
Grants Manage Sharing.
manageRoles
Boolean
Grants Manage Roles.
manageUsers
Boolean
Grants Manage Users.
managePasswordPolicies
Boolean
Grants Manage Password Policies.
manageLoginAccessPolicies
Boolean
Grants Manage Login Access Policies.
manageProfilesPermissionsets
Boolean
Grants Manage Profiles and Permission Sets.
editReadonlyFields
Boolean
Grants Edit Read Only Fields.
modifyAllPermission
Boolean
Grants Modify All permission.
apiEnabled
Boolean
Grants API Enabled.
authorApex
Boolean
Grants Author Apex.
canApproveUninstalledApps
Boolean
Grants approval of uninstalled connected apps.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or Salesforce profile not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgSfProfilesList

Retrieves a paginated list of Salesforce profiles scanned in an org, including the risky-permission flags shown on the Profiles & Permission Sets dashboard tab. If no sort preference is provided, the API defaults to:

  • Sort: -count


/v1/orgs/{orgId}/sfProfiles

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=in(id,560023,560024)
itemId eq, in filter=eq(itemId,344675063)
name eq, contains filter=contains(name,Administrator)
label eq, contains filter=contains(label,Community)
count gte, lte filter=gte(count,1)
userLicense eq, ne filter=eq(userLicense,Salesforce)
custom eq filter=eq(custom,true)
modifyAllData eq filter=eq(modifyAllData,true)
viewAllData eq filter=eq(viewAllData,true)
resetPasswords eq filter=eq(resetPasswords,true)
dataExport eq filter=eq(dataExport,true)
exportReport eq filter=eq(exportReport,true)
manageSharing eq filter=eq(manageSharing,true)
manageRoles eq filter=eq(manageRoles,true)
manageUsers eq filter=eq(manageUsers,true)
managePasswordPolicies eq filter=eq(managePasswordPolicies,true)
manageLoginAccessPolicies eq filter=eq(manageLoginAccessPolicies,true)
manageProfilesPermissionsets eq filter=eq(manageProfilesPermissionsets,true)
editReadonlyFields eq filter=eq(editReadonlyFields,true)
modifyAllPermission eq filter=eq(modifyAllPermission,true)
apiEnabled eq filter=eq(apiEnabled,true)
authorApex eq filter=eq(authorApex,true)
canApproveUninstalledApps eq filter=eq(canApproveUninstalledApps,true)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • name
  • label
  • count
  • userLicense
  • custom
  • modifyAllData
  • viewAllData
  • resetPasswords
  • dataExport
  • exportReport
  • manageSharing
  • manageRoles
  • manageUsers
  • managePasswordPolicies
  • manageLoginAccessPolicies
  • manageProfilesPermissionsets
  • editReadonlyFields
  • modifyAllPermission
  • apiEnabled
  • authorApex
  • canApproveUninstalledApps

Use a - prefix for descending order. Default sort: -count.

Examples:

  • sort=count (Ascending)
  • sort=-count (Descending)
  • sort=-count,name (Multiple fields)

Responses

Status: 200 - List of Salesforce profiles scanned in the org.

Paginated response containing a list of Salesforce profiles scanned in an org.
{
data
Array[
A Salesforce profile scanned in an org, with its risky-permission flags.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
name
String
Profile name (e.g. System Administrator).
label
String
Display label of the profile. Mirrors `name` (profiles have no separate label).
count
Integer
Number of users assigned to this profile.
userLicense
String
User license associated with the profile (e.g. Salesforce).
custom
Boolean
Whether this is a custom profile.
modifyAllData
Boolean
Grants Modify All Data.
viewAllData
Boolean
Grants View All Data.
resetPasswords
Boolean
Grants Reset User Passwords and Unlock Users.
dataExport
Boolean
Grants Weekly Data Export.
exportReport
Boolean
Grants Export Reports.
manageSharing
Boolean
Grants Manage Sharing.
manageRoles
Boolean
Grants Manage Roles.
manageUsers
Boolean
Grants Manage Users.
managePasswordPolicies
Boolean
Grants Manage Password Policies.
manageLoginAccessPolicies
Boolean
Grants Manage Login Access Policies.
manageProfilesPermissionsets
Boolean
Grants Manage Profiles and Permission Sets.
editReadonlyFields
Boolean
Grants Edit Read Only Fields.
modifyAllPermission
Boolean
Grants Modify All permission.
apiEnabled
Boolean
Grants API Enabled.
authorApex
Boolean
Grants Author Apex.
canApproveUninstalledApps
Boolean
Grants approval of uninstalled connected apps.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgTriggerById

Retrieves a single Salesforce trigger by its ID for a specific organization.


/v1/orgs/{orgId}/triggers/{triggerId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
triggerId*
String

Internal Hubbl integer primary key ID for the trigger.

Required

Responses

Status: 200 - Successful response containing the requested trigger record.

{
data
A full representation of an Apex trigger scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectName
String
API name of the object the trigger runs against (e.g. Account, Opportunity).
name
String
Developer/API name of the trigger.
label
String
Display label of the trigger (populated with name).
isActive
Boolean
Whether the trigger is currently active.
beforeInsert
Boolean
Whether this trigger runs before insert.
afterInsert
Boolean
Whether this trigger runs after insert.
beforeUpdate
Boolean
Whether this trigger runs before update.
afterUpdate
Boolean
Whether this trigger runs after update.
beforeDelete
Boolean
Whether this trigger runs before delete.
afterDelete
Boolean
Whether this trigger runs after delete.
afterUndelete
Boolean
Whether this trigger runs after undelete.
apiVersion
Number
Salesforce API version of the trigger.
namespace
String
Namespace prefix for managed-package triggers.
}
}

Status: 401 - Missing or invalid authentication.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found or trigger not found within the org.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgTriggersList

Retrieves a paginated list of Salesforce triggers scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -updatedAt


/v1/orgs/{orgId}/triggers

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,1492577)
itemId eq, in filter=eq(itemId,344678317)
sobjectId eq, in filter=eq(sobjectId,6026271)
objectName eq, contains filter=eq(objectName,Case)
name eq, contains filter=contains(name,Attachment)
isActive eq filter=eq(isActive,true)
beforeInsert eq filter=eq(beforeInsert,true)
afterInsert eq filter=eq(afterInsert,true)
beforeUpdate eq filter=eq(beforeUpdate,true)
afterUpdate eq filter=eq(afterUpdate,true)
beforeDelete eq filter=eq(beforeDelete,true)
afterDelete eq filter=eq(afterDelete,true)
afterUndelete eq filter=eq(afterUndelete,true)
apiVersion gte, lte filter=gte(apiVersion,48)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • sobjectId
  • objectName
  • name
  • isActive
  • beforeInsert
  • afterInsert
  • beforeUpdate
  • afterUpdate
  • beforeDelete
  • afterDelete
  • afterUndelete
  • apiVersion
  • updatedAt

Use a - prefix for descending order. Default sort: -updatedAt.

Examples:

  • sort=name (Ascending)
  • sort=-updatedAt (Descending)

Responses

Status: 200 - List of Apex triggers scanned in the org.

Paginated response containing a list of Apex triggers scanned in an org.
{
data
Array[
A minimal representation of an Apex trigger scanned in an org.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectName
String
API name of the object the trigger runs against (e.g. Account, Opportunity).
name
String
Developer/API name of the trigger.
label
String
Display label of the trigger (populated with name).
isActive
Boolean
Whether the trigger is currently active.
beforeInsert
Boolean
Whether this trigger runs before insert.
afterInsert
Boolean
Whether this trigger runs after insert.
beforeUpdate
Boolean
Whether this trigger runs before update.
afterUpdate
Boolean
Whether this trigger runs after update.
beforeDelete
Boolean
Whether this trigger runs before delete.
afterDelete
Boolean
Whether this trigger runs after delete.
afterUndelete
Boolean
Whether this trigger runs after undelete.
apiVersion
Number
Salesforce API version of the trigger.
namespace
String
Namespace prefix for managed-package triggers.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 401 - Missing or invalid authentication.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found or no scans available.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgWorkflowById

Retrieves a single Salesforce workflow rule by its ID for a specific organization.


/v1/orgs/{orgId}/workflows/{workflowId}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
workflowId*
String

Internal Hubbl integer primary key ID for the workflow rule.

Required

Responses

Status: 200 - Successful response containing the requested workflow rule record.

{
data
A full representation of a Salesforce workflow rule record within an organization.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectName
String
API name of the object the workflow runs against.
label
String
Display label of the workflow rule.
triggerType
String
The workflow trigger type (e.g. onCreateOnly, onCreateOrTriggeringUpdate, onAllChanges).
isActive
Boolean
Whether the workflow rule is currently active.
namespace
String
Namespace prefix for managed-package workflows.
description
String
Description text of the workflow rule.
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or workflow not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgWorkflowsList

Retrieves a paginated list of Salesforce Workflow rules scanned in an org. If no sort preference is provided, the API defaults to:

  • Sort: -updatedAt


/v1/orgs/{orgId}/workflows

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
id eq, in filter=eq(id,852132)
itemId eq, in filter=eq(itemId,344679230)
sobjectId eq, in filter=eq(sobjectId,6026156)
objectName eq, contains filter=eq(objectName,Account)
label eq, contains filter=contains(label,Assign)
triggerType eq, in, ne filter=eq(triggerType,onCreateOnly)
isActive eq filter=eq(isActive,true)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • id
  • itemId
  • sobjectId
  • objectName
  • label
  • triggerType
  • isActive
  • updatedAt

Use a - prefix for descending order. Default sort: -updatedAt.

Examples:

  • sort=label (Ascending)
  • sort=-updatedAt (Descending)
  • sort=-isActive,label (Multiple fields)

Responses

Status: 200 - List of Salesforce workflow rules scanned in the org.

Paginated response containing a list of Salesforce workflow rules scanned in an org.
{
data
Array[
A minimal representation of a Salesforce workflow rule scanned in an org. The subset of fields returned by the workflows list endpoint.
{
id
Integer
Internal Hubbl primary key ID.
itemId
Integer
Hubbl item identifier.
sobjectId
Integer
Internal Hubbl ID of the parent SObject.
objectName
String
API name of the object the workflow runs against (e.g. Account, Opportunity).
label
String
Display label of the workflow rule.
triggerType
String
The workflow trigger type (e.g. onCreateOnly, onCreateOrTriggeringUpdate, onAllChanges).
isActive
Boolean
Whether the workflow rule is currently active.
namespace
String
Namespace prefix for managed-package workflows.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - User is not authorized to access this organization.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization not found.

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getOrgsList

Retrieves a paginated list of the Salesforce orgs the caller can access — the same orgs visible from the dashboard. An empty result set is a valid 200, not a 404 (this is a collection root, not scoped to a single org). If no sort preference is provided, the API defaults to:

  • Sort: -lastScanDate


/v1/orgs

Parameters

Query parameters
Name Description
limit
Integer

Number of items to return. Default is 50.

offset
Integer

Number of items to skip.

filter
String

Resource Query Language (RQL) formatted filter criteria.

Supported Fields:

Field Supported Operators Example
name eq, contains filter=contains(name,Acme)
salesforceId eq, in filter=eq(salesforceId,00D...)
edition eq, in filter=eq(edition,Enterprise Edition)
isSandbox eq filter=eq(isSandbox,false)
lastScanDate gte, lte, between filter=gte(lastScanDate,2026-01-01)
hubblScore gte, lte filter=lte(hubblScore,60)

Combine with and(...), or(...), not(...).

sort
String

JSON:API Sort string (see https://jsonapi.org/format/#fetching-sorting).

Supported Fields:

  • name
  • salesforceId
  • edition
  • isSandbox
  • lastScanDate
  • hubblScore

Use a - prefix for descending order. Default sort: -lastScanDate.

Examples:

  • sort=lastScanDate (Ascending)
  • sort=-lastScanDate (Descending)
  • sort=-lastScanDate,name (Multiple fields)

Responses

Status: 200 - List of Salesforce orgs the caller can access.

Paginated response containing a list of Salesforce orgs the caller can access.
{
data
Array[
A minimal representation of a Salesforce org the caller can access.
{
salesforceId
String
The unique Salesforce identifier for the organization.
name
String
The name of the organization.
edition
String
The Salesforce edition of the organization (e.g. Enterprise Edition).
instanceUrl
String
The Salesforce instance URL for the organization.
isSandbox
Boolean
Whether this org is a sandbox.
lastScanDate
String (date-time)
Completion date of the org's most recent completed scan, or null if it has none.
lastScanStatus
String
Status of the org's most recent completed scan (always "Completed" when present), or null if it has none.
scanCount
Integer
Total number of scans the caller is entitled to for this org, of any status.
hubblScore
Integer
The Hubbl score from the org's most recent completed scan, or null if it has none.
}
]
meta
Pagination metadata for the public API, including navigation links.
{
total
Integer
Total number of items
offset
Integer
Current offset
nextOffset
Integer
Next offset value (null if last page)
nextPageUrl
String
URL for the next page (null if last page)
}
}

Status: 400 - Invalid query parameters (e.g., malformed RQL filter or unsupported field).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 403 - Caller is not authorized (no provisioned user, or impersonation attempted).

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

getRecommendationByKey

Retrieves rich context for a given recommendation in an organization based on issueKey.


/v1/orgs/{orgId}/issues/{issueKey}

Parameters

Path parameters
Name Description
orgId*
String

Salesforce Organization ID

Required
issueKey*
String

The unique key assigned to the issue that is constant across scans. This MUST be Base64URL encoded to avoid routing conflicts with special characters.

Required

Responses

Status: 200 - Contextual Recommendation data

{
data
{
rule
String
The unique rule identifier for the issue
priority
String
The priority level of the recommendation (Low, Medium, High)
effort
String
Estimated effort required to implement the recommendation (Low, Medium, High)
title
String
Human-readable title of the recommendation
content
String
Detailed description or instructions for the recommendation
wellArchitectedCategoryLevel1
String
The top-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel2
String
The second-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel3
String
The third-level category in the Salesforce Well-Architected framework
wellArchitectedCategoryLevel4
String
The fourth-level category in the Salesforce Well-Architected framework
category
String
The functional category of the recommendation
wellArchitectedLevel4Url
String
URL to the documentation for the level 4 Well-Architected category
relatedObject
String
The Salesforce object related to the issue
metadataType
String
The type of Salesforce metadata
isNew
Boolean
Indicates if the recommendation was first introduced in the current scan
isResolved
Boolean
Indicates if the issue was not found in the most recent scan
firstDetectedDate
String (date-time)
The date the this issue was first detected by a Hubbl scan.
lastDetectedDate
String (date-time)
The date the this issue was most recently detected by a Hubbl scan.
key
String
Unique identifier of an issue across all scans of an org
namespace
String
The Salesforce namespace where the issue was found
label
String
A human-readable label for the metadata or component
apiName
String
The API name of the Salesforce component or metadata item
line
Integer
The line number where the issue was identified
isBasic
Boolean
Indicates whether this is a basic health check recommendation
subScoreArea
String
The sub-score area this recommendation affects natively
developerSolutionUrl
String
URL to documentation on how a developer can resolve this issue
adminSolutionUrl
String
URL to documentation on how an administrator can resolve this issue
relativePath
String
Relative path from repository root to the related component
}
}

Status: 403 - User is not authorized to access this organization

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Status: 404 - Organization or recommendation not found

{
error
Required
{
status
Number
Required
title
String
Required
detail
String
}
}

Was this page helpful?