Skip to content

Page Lookout API version 1.2.0

Page Lookout API

The Page Lookout API lets your own systems - a CI job, a script, a back office - start scans of your organization's sites and read what they found, with an API key instead of a person's sign-in. Webhooks work the other way round: Page Lookout sends a signed request to your own HTTPS endpoint whenever a scan finishes.

What an API key can do

An organization admin creates keys on the Integrations screen of the dashboard. A key belongs to one organization and holds one or more scopes; each operation needs one of the scopes listed for it. Scopes are independent: scans:write does not include scans:read.

OperationRequestScope
listDomainsGET /organizations/{organizationId}/domainsscans:read
readDomainGET /organizations/{organizationId}/domains/{domainId}scans:read
readDomainConsentInventoryGET /organizations/{organizationId}/domains/{domainId}/consent-inventoryscans:read
listDomainConsentInventoryTrackersGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/trackersscans:read
listDomainConsentInventoryCookiesGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/cookiesscans:read
listDomainConsentInventoryStorageKeysGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/storage-keysscans:read
exportDomainConsentInventoryTrackersGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/trackers.csvscans:read
exportDomainConsentInventoryCookiesGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/cookies.csvscans:read
exportDomainConsentInventoryStorageKeysGET /organizations/{organizationId}/domains/{domainId}/consent-inventory/storage-keys.csvscans:read
listOrganizationConsentInventoryTrackersGET /organizations/{organizationId}/consent-inventory/trackersscans:read
listOrganizationConsentInventoryCookiesGET /organizations/{organizationId}/consent-inventory/cookiesscans:read
exportOrganizationConsentInventoryTrackersGET /organizations/{organizationId}/consent-inventory/trackers.csvscans:read
exportOrganizationConsentInventoryCookiesGET /organizations/{organizationId}/consent-inventory/cookies.csvscans:read
listOrganizationConsentInventoryTrackerSitesGET /organizations/{organizationId}/consent-inventory/trackers/sitesscans:read
listOrganizationConsentInventoryCookieSitesGET /organizations/{organizationId}/consent-inventory/cookies/sitesscans:read
exportOrganizationConsentInventoryTrackerSitesGET /organizations/{organizationId}/consent-inventory/trackers/sites.csvscans:read
exportOrganizationConsentInventoryCookieSitesGET /organizations/{organizationId}/consent-inventory/cookies/sites.csvscans:read
listScanRunConsentSignalsGET /organizations/{organizationId}/scans/{scanRunId}/consent-signalsscans:read
exportScanRunConsentSignalsGET /organizations/{organizationId}/scans/{scanRunId}/consent-signals.csvscans:read
readConsentApprovalsGET /organizations/{organizationId}/consent-approvalsscans:read
listApprovedTrackersGET /organizations/{organizationId}/consent-approvals/trackersscans:read
readDomainConsentApprovalsEffectiveGET /organizations/{organizationId}/domains/{domainId}/consent-approvals/effectivescans:read
listOrganizationConsentClassificationsGET /organizations/{organizationId}/consent-classificationsscans:read
readOrganizationConsentClassificationGET /organizations/{organizationId}/consent-classifications/{entryId}scans:read
readDomainConsentClassificationsEffectiveGET /organizations/{organizationId}/domains/{domainId}/consent-classifications/effectivescans:read
createScanRunPOST /organizations/{organizationId}/domains/{domainId}/scansscans:write
listDomainScanRunsGET /organizations/{organizationId}/domains/{domainId}/scansscans:read
listScanRunsGET /organizations/{organizationId}/scansscans:read
readScanRunGET /organizations/{organizationId}/scans/{scanRunId}scans:read
listScanTasksGET /organizations/{organizationId}/scans/{scanRunId}/tasksscans:read
readScanRunComparisonGET /organizations/{organizationId}/scans/{scanRunId}/comparisonscans:read
listScanRunFindingsGET /organizations/{organizationId}/scans/{scanRunId}/findingsfindings:read
listScanRunClosedFindingsGET /organizations/{organizationId}/scans/{scanRunId}/comparison/closed-findingsfindings:read
listDomainFindingsGET /organizations/{organizationId}/domains/{domainId}/findingsfindings:read
listDomainIssuesGET /organizations/{organizationId}/domains/{domainId}/issuesfindings:read
listDomainIssuePagesGET /organizations/{organizationId}/domains/{domainId}/issues/{ruleId}/pagesfindings:read
listOrganizationFindingsGET /organizations/{organizationId}/findingsfindings:read
listOrganizationFindingRulesGET /organizations/{organizationId}/findings/rulesfindings:read
readDashboardSummaryGET /organizations/{organizationId}/dashboard/summaryscans:read
readDashboardPortfolioGET /organizations/{organizationId}/dashboard/portfolioscans:read
readScanRunReportSnapshotGET /organizations/{organizationId}/scans/{scanRunId}/report-snapshotreports:read
listReportDocumentsGET /organizations/{organizationId}/report-documentsreports:read
readScanRunReportDocumentGET /organizations/{organizationId}/scans/{scanRunId}/report-documentreports:read
downloadScanRunReportGET /organizations/{organizationId}/scans/{scanRunId}/report/downloadreports:read
downloadArtifactGET /organizations/{organizationId}/artifacts/{artifactId}/contentreports:read

The paths call a site a domain: {domainId} is a site id. A key can call nothing else - not the key management operations, not team, site, tag or webhook settings - and a request for another organization's id answers 404, exactly as an id that names nothing. The two site operations return each site's tags (id, name and colour, by name); a key reads them and cannot change them. downloadArtifact serves report PDFs only. readScanRunReportSnapshot always returns a report.snapshot/1 document, whatever the dashboard holds for that run; a newer snapshot format is announced in the changelog before it reaches keys.

A key sees every site of its organization. If your organization limits what each member sees to their access groups, that limit applies to people signed in to the dashboard and not to API keys: a key reads every site and starts a scan of any of them, whoever created it. Only organization admins create keys, so give each key the scopes it needs and no more.

Conventions