Prerequisites
- Admin access to the Living Security Dashboard.
- The Developer Hub visible under Settings → Integrations & Developers → Developer Hub.
Create credentials
1
Create a service account
In the Developer Hub, open the Service accounts tab and create an
account. Give it a descriptive name (for example
reporting-pipeline) and
grant the permissions its keys may use — for this guide, organization:read
is enough.The account’s permissions are the ceiling for every key created under it:
a key can never do more than its service account allows.2
Create an API key
Open the service account’s detail page and create a key. Pick the
permissions this specific key needs (a subset of the account’s) and an
expiration — 30, 90, or 365 days, or a custom period. Expiration is
mandatory.The key’s secret starts with
lsk_live_ and is shown once. Copy it
into a secret manager immediately; it cannot be retrieved later.3
Choose your region
Call the regional
/v1 host that matches the organization’s data
residency. Keys authenticate only on that host.See Regions if you are not sure which host to
use. A valid key sent to the other region fails as
unauthorized. Use
the region dropdown on the sample below to switch the host.4
Make your first request
Load A successful response returns your organization:
LIVING_SECURITY_API_KEY from your secret manager into the environment
of the process making the request. The examples below read it without embedding
a secret in source code. For Python, install requests first.Call the API with the secret in the HTTP Basic auth password or username
field — either works, so clients that require both fields filled (such as
Power BI’s Web connector) can put a placeholder like apikey in the other
field.Response
If you get this response, your credentials work. The request also appears in
the Developer Hub’s Request logs tab within moments.
How authentication works
- The credential determines the organization.
/v1requests carry no tenant selector: no organization path segment and no organization header. Sending anx-organization-idheader is rejected withinvalid_request. The host must still match that organization’s region. See Regions. - Permissions are checked per operation. Each
/v1operation requires a named permission (for example,GET /v1/organizationrequiresorganization:read). A key missing the permission gets a403with codeinsufficient_permission. - Keys expire and can be rotated without downtime. See API keys for rotation with an overlap window.
Reading error responses
Every/v1 error is application/problem+json
(RFC 9457) with a stable machine
code. For example, a request with a missing or unknown credential returns:
401 Unauthorized
code, never on detail. Follow doc_url for the resolution
steps, and include request_id when contacting support — it matches the
Request-Id response header and the Developer Hub request logs. The full
code set is in the error reference.
Contract versions
Every response echoes the contract version that served it in theLiving-Security-Version header, alongside a Request-Id header for
correlation.
You can pin a request to a published contract version by date:
400 with code unsupported_version. Published versions and their
changes are listed in the API changelog.
Troubleshoot your first request
For other errors, follow the response’s
doc_url. Keep the Request-Id for
support; never include the Authorization header or your API key in a ticket.
Next steps
Regions
Choose the US or EU
/v1 host for the organization.Pagination
Walk lists with
page_token and the list envelope.Rate limits
Understand request budgets and handle
429 responses.Error reference
Every error code, its HTTP status, and how to resolve it.
Developer Hub
Manage service accounts, API keys, and request logs.

