Developer Documentation
Integrate with the Lorikeet Security PTaaS platform. Pull your pentest findings, configure real-time webhook alerts, and connect your security workflow to the tools your team already uses.
Base URL
All API endpoints are served over HTTPS. There is no versioning prefix the path prefix identifies the service.
https://lorikeetsecurity.com/ptaas/api/
All URLs are extensionless. Do not include .php in API calls. For example:
POST https://lorikeetsecurity.com/ptaas/api/login
POST https://lorikeetsecurity.com/ptaas/api/createproject
GET https://lorikeetsecurity.com/ptaas/api/findinginfo?finding_id=42
Authentication
Lorikeet Security uses passwordless, magic-link authentication there are no passwords stored anywhere on the platform. Sign-in is a two-step flow:
- Request a magic link POST your email to
/ptaas/api/login. A one-time login link is emailed to you. - Validate the link opening the emailed link hits
/ptaas/api/validate, which establishes a session cookie in your browser.
For programmatic / scripted access, contact support@lorikeetsecurity.com to provision a long-lived API token tied to your account. The interactive endpoints below assume you already hold a valid session cookie obtained through the browser flow.
Step 1: Request a Magic Link
Sends a one-time login link to the supplied email address.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Your email address |
curl -X POST https://lorikeetsecurity.com/ptaas/api/login \
-d "[email protected]"
The response always indicates success regardless of whether the account exists (to prevent account enumeration). If the email is valid, a login link arrives within seconds.
Step 2: Validate the Magic Link
The emailed link points at /ptaas/api/validate?token=<token>. Opening it in a browser sets a PHPSESSID cookie scoped to .lorikeetsecurity.com. All authenticated endpoints below accept that cookie.
curl -b cookies.txt https://lorikeetsecurity.com/ptaas/api/getUserInfo
401 Unauthorized request a new magic link and re-validate.
Session Data Available After Validation
{
"loggedin": true,
"email": "[email protected]",
"id": "<user uuid>",
"company_id": 47,
"company_name": "Acme Corp",
"fullname": "Jane Smith",
"role": "admin",
"account_admin": true,
"partner_id": 0,
"session_id": "<php session id>"
}
Rate Limiting
Rate limits are enforced per IP address. Exceeding a limit returns HTTP 429 Too Many Requests.
| Endpoint | Limit | Window |
|---|---|---|
Magic-link request (/login) | 5 attempts | 15 minutes |
| Signup | 3 attempts | 15 minutes |
| Magic-link validation | 10 attempts | 15 minutes |
| Create project | 5 requests | 5 minutes |
| Create asset | 10 requests | 60 seconds |
Error Handling
All API responses are JSON. Errors return a success: false or status: "error" field alongside a human-readable message.
// Standard error format
{
"success": false,
"message": "Unauthorized"
}
// Public endpoint format
{
"status": "error",
"message": "Email is required"
}
| HTTP Status | Meaning |
|---|---|
200 | Success |
400 | Bad request missing or invalid parameters |
401 | Unauthenticated session missing or expired |
403 | Forbidden insufficient permissions |
405 | Method not allowed |
429 | Rate limit exceeded |
500 | Internal server error |
Contact Form API
Submit a contact/sales inquiry. Requires a corporate email address free provider domains (Gmail, Yahoo, etc.) are rejected.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Corporate email address | |
| fullname | string | required | Full name |
| jobtitle | string | optional | Job title |
| company | string | required | Company name |
| industry | string | optional | Industry vertical |
| country | string | optional | Country |
| how_heard | string | optional | How did you hear about us |
| services_interest | string | optional | Service of interest |
| message | string | required | Message body (English only) |
On success the sales team is notified in Microsoft Teams and the submitter receives a confirmation email.
Newsletter Subscribe API
Subscribe an email to the Lorikeet Security newsletter. Sends a welcome email immediately on success.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Email address to subscribe | |
| first_name | string | optional | Subscriber first name (derived from email prefix if omitted) |
// Success
{ "status": "success", "message": "You're subscribed! Check your inbox for a welcome email." }
// Already subscribed
{ "status": "error", "message": "This email is already subscribed." }
Request a Quote
Submit a scoped engagement request. The team responds with pricing within 24 hours.
Projects API
All project operations are scoped to your company_id from the active session.
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_name | string | required | Unique project name within your account |
| project_type | string | required | See project types: webapp, api, mobile, cloud, thickclient, iot, hardware, physical, pcidss, iso, atm, kiosk, redteam, soc2, activedirectory |
| start_date | date | optional | Engagement start date YYYY-MM-DD |
| end_date | date | optional | Engagement end date YYYY-MM-DD |
| csrf_token | string | required | CSRF token from session |
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_id | integer | required | ID of the project to delete |
Assets API
Assets define the targets in scope for a pentest engagement.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_name | string | required | Asset identifier (URL, IP, hostname) |
| asset_type | string | required | web, api, mobile, network, cloud |
| testing_type | string | optional | black-box, grey-box, white-box |
| asset_storage | string | optional | cloud, on-prem, hybrid |
| additional_information | string | optional | Extra context for the pentest team |
Update an existing asset's metadata.
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_id | integer | required | ID of the asset to delete |
Findings API
Query vulnerability findings from your pentest engagements. Sorted by severity (Critical → Info) by default.
Retrieve a single finding by ID with full detail including remediation, evidence, and CVSS score.
Mark a finding as remediated and ready for retest verification.
| Parameter | Type | Required | Description |
|---|---|---|---|
| finding_id | integer | required | ID of the finding to mark |
Finding Schema
{
"id": 42,
"title": "SQL Injection in /api/search",
"severity": "Critical",
"status": "Open",
"category": "Injection",
"cwe_id": "CWE-89",
"cvss_score": 9.8,
"description": "The search parameter is vulnerable to blind SQL injection...",
"remediation": "Use parameterized queries or prepared statements...",
"evidence": "[request/response proof]",
"project_id": 7,
"project_name": "Q1 2026 Web App Assessment",
"company_id": 47,
"created_at": "2026-01-15 14:23:00"
}
ASM Scan API
The Attack Surface Management module continuously monitors your external-facing assets.
| Parameter | Type | Required | Description |
|---|---|---|---|
| target | string | required | Domain to scan (e.g. example.com) |
| scan_type | string | optional | full or quick (default: full) |
Retrieve all ASM findings for your account, ordered by severity.
Webhooks
Receive real-time HTTP POST notifications when events occur in your account. Custom webhooks are available on the Professional plan and above.
Configuring a Webhook
Webhooks are configured from the portal at Settings → Integrations → Custom Webhook, or programmatically through the integration controller:
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | required | webhook |
| endpoint_url | string | required | Your receiving URL (HTTPS strongly recommended) |
| secret_key | string | optional | Shared secret used to sign every payload with HMAC-SHA256 |
| auth_header | string | optional | Value sent in the Authorization header (e.g. Bearer token123). Only applied to generic endpoints not chat-platform webhooks. |
| events[] | array | optional | Events to subscribe to (see below). Defaults to finding.created and scan.completed if omitted. |
endpoint_url points at Discord (discord.com/api/webhooks/...), Slack (hooks.slack.com/...), or Microsoft Teams (*.webhook.office.com, *.logic.azure.com), Lorikeet Security automatically reformats the payload as a Discord embed, Slack block, or Teams Adaptive Card respectively. All other URLs receive the generic JSON payload shown below.
Webhook Events
test.connection is fired when you click Test on a webhook in the portal it is not a subscribable event.
Generic Payload Format
{
"event": "finding.created",
"timestamp": "2026-05-30T09:00:00+00:00",
"source": "lorikeet-asm",
"data": {
"finding": {
"id": 42,
"title": "SQL Injection in /api/search",
"severity": "Critical",
"category": "Injection",
"status": "Open",
"description": "The search parameter is vulnerable to blind SQLi...",
"affected_asset": "api.example.com/search",
"created_at": "2026-05-30 09:00:00",
"updated_at": "2026-05-30 09:00:00"
}
}
}
For finding.updated and ticket.updated events, the payload also includes a changes object describing which fields changed. scan.completed includes aggregate counts (subdomains_found, ips_found, technologies_found, findings_count).
Verifying Signatures
If you configure a secret_key, every payload includes an X-Webhook-Signature header containing sha256=<hmac-hex> computed over the raw request body.
# Python
import hmac, hashlib
def verify(secret, body, header_sig):
expected = 'sha256=' + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, header_sig)
// Node.js
const crypto = require('crypto');
function verify(secret, body, headerSig) {
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(body).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(headerSig));
}
Delivery Guarantees
Webhooks are delivered at-most-once with a 15-second request timeout and up to 3 redirect follows. Failures (non-2xx responses, connection errors, timeouts) are logged to the integration activity feed in your portal but are not automatically retried subscribe to a queueing system on your end if you need durability guarantees. Use the Test button in the portal to verify endpoint reachability before going live.
Slack Integration
Post security alerts to your Slack workspace when findings are discovered or scan jobs complete.
Setup
- In Slack: Apps → Incoming Webhooks → Add to Slack. Choose a channel and copy the webhook URL.
- In your portal: Settings → Integrations → Slack paste the URL.
| Field | Required | Description |
|---|---|---|
| webhook_url | required | Slack Incoming Webhook URL |
| channel | optional | Override the default channel (e.g. #security-alerts) |
| username | optional | Bot display name (default: Lorikeet Security) |
Jira Integration
Auto-create Jira issues when Critical and High findings are reported.
Setup
- Generate a Jira API token at
id.atlassian.com → Security → API tokens. - In your portal: Settings → Integrations → Jira.
| Field | Required | Description |
|---|---|---|
| base_url | required | Your Jira base URL (e.g. https://yourorg.atlassian.net) |
| required | Jira account email | |
| api_token | required | Jira API token |
| project_key | required | Jira project key (e.g. SEC) |
| issue_type | optional | Issue type (default: Bug) |
Microsoft Teams Integration
Send alerts to a Teams channel via an Incoming Webhook connector.
Setup
- In Teams: channel settings → Integrations → Incoming Webhook → Configure. Copy the URL.
- In your portal: Settings → Integrations → Microsoft Teams.
Discord Integration
Receive security alerts in a Discord channel.
Setup
- In Discord: channel settings → Integrations → Create Webhook. Copy the URL.
- In your portal: Settings → Integrations → Discord.
GitHub Integration
Link repositories to findings. Findings can be auto-converted to GitHub security advisories or issues.
Setup
- Generate a GitHub PAT with
repoandsecurity_eventsscopes. - In your portal: Settings → Integrations → GitHub. Enter your username, PAT, and repo name.
GitLab Integration
Push pentest findings into GitLab as issues, linked to a specific project. Mirrors the GitHub integration's behavior for self-hosted and SaaS GitLab.
Setup
- In GitLab: User Settings → Access Tokens create a personal access token with the
apiscope. - In your portal: Settings → Integrations → GitLab. Enter your GitLab instance URL (defaults to
https://gitlab.com), the project ID, and the access token.
Azure DevOps Integration
Sync findings into Azure DevOps Boards as work items, with severity mapped to area paths and priority levels.
Setup
- In Azure DevOps: User Settings → Personal Access Tokens → New Token. Grant
Work Items (Read & Write)scope. - In your portal: Settings → Integrations → Azure DevOps. Enter your organization, project, and PAT. Optionally specify a default work item type (defaults to
Bug).
Enterprise & Compliance Integrations
Available on the Company plan tier. These connectors stream findings into security operations platforms, cloud-native security tooling, and compliance frameworks.
SIEM & Logging
- Splunk HEC ingestion of findings, scan completions, and audit events
- Microsoft Sentinel custom log table ingestion via Data Collection Rules
- Elastic Security bulk indexing into a configured datastream
Cloud Security
- AWS Security Hub findings written in ASFF format
- Microsoft Defender for Cloud recommendations attached to subscription resources
- Google Cloud Security Command Center finding ingestion into your org's source
Compliance & GRC
- Drata evidence pushed against pentest controls
- Vanta automated test results synced into your trust report
- Anchorpoint partner integration for compliance program management
Paging & Notification
- PagerDuty Critical and High findings routed to your on-call schedule
- SMS direct text notifications via the integration controller
Severity Levels
| Severity | CVSS Range | Description |
|---|---|---|
| Critical | 9.0–10.0 | Immediate exploitation risk; full system compromise likely |
| High | 7.0–8.9 | Significant impact; realistic exploitation path |
| Medium | 4.0–6.9 | Exploitable with prerequisites; material security risk |
| Low | 0.1–3.9 | Minimal direct impact; defense-in-depth value |
| Info | 0.0 | Informational; no direct exploitability |
Need help? Email support@lorikeetsecurity.com or open a ticket from your portal dashboard.
Also see: Product Knowledge Base for portal guides and FAQs.
Last updated: May 2026 · Lorikeet Security