Skip to main content
Findings Ingestion enables uploading OCSF (Open Cybersecurity Schema Framework) scan results to Prowler Cloud. This feature supports importing findings from Prowler CLI output files that use the Detection Finding class.

OCSF Detection Finding Format

The ingestion API accepts .ocsf.json files containing a JSON array of OCSF Detection Finding records. Each finding represents a security check result from Prowler. Example Detection Finding record:
Only Detection Finding (class_uid: 2004) records are accepted. Other OCSF classes are not supported for ingestion.

Required Permissions

The Manage Ingestions RBAC permission controls access to the ingestion endpoints. Without this permission, findings cannot be submitted via the API or --push-to-cloud. For more information about RBAC permissions, refer to the Prowler Cloud RBAC documentation.

Using the CLI

The --push-to-cloud flag uploads scan results directly to Prowler Cloud after a scan completes. This approach automates the ingestion process without manual file uploads.

Prerequisites

  • A valid Prowler Cloud API key (see API Keys)
  • The PROWLER_CLOUD_API_KEY environment variable configured

Basic Usage

Combining with Output Formats

When using --push-to-cloud with custom output formats that exclude OCSF, Prowler generates a temporary OCSF file for upload: The temporary OCSF file is saved in the system temporary directory and not in the output path passed with -o.
When default output formats include OCSF, Prowler reuses the existing file. Default output formats include JSON-OCSF:

CLI Output Examples

Successful upload:
Missing API key:
API unreachable:
No subscription:
Invalid API key:
Ingestion failures do not affect the scan exit code. The CLI emits warnings but completes normally.

Using the API

The Ingestion API provides endpoints for submitting OCSF files and monitoring job status.

Authentication

Include the API key in the Authorization header:

Submit an Ingestion Batch

Upload a .ocsf.json file containing a JSON array of OCSF Detection Finding records. See OCSF Detection Finding format for the expected structure. Endpoint: POST /api/v1/ingestions Request:
Response (202 Accepted):

Get Ingestion Status

Monitor the progress of an ingestion job. Endpoint: GET /api/v1/ingestions/{id} Request:
Response (200 OK):

List Ingestion Jobs

Retrieve a list of ingestion jobs for the tenant. Endpoint: GET /api/v1/ingestions Query parameters: Request:

Get Ingestion Errors

Retrieve error details for a specific ingestion job. Endpoint: GET /api/v1/ingestions/{id}/errors Request:

Ingestion Status Values

CI/CD Integration

Automate findings ingestion in CI/CD pipelines by setting the API key as a secret.
Prowler must be installed in the CI/CD environment before running scans. Refer to the Prowler CLI installation guide for setup instructions.

GitHub Actions

For new projects, use the official Prowler GitHub Action — a Docker-based reusable action that runs scans, optionally pushes findings to Prowler Cloud, and uploads SARIF results to GitHub Code Scanning. The example below documents the legacy pip-based flow.

GitLab CI

Billing Impact

Each unique cloud account discovered in ingested OCSF findings counts as one provider in the Prowler Cloud subscription.
  • Existing providers: If a cloud account was already connected as a provider, findings ingested for that account do not incur additional billing. The existing provider is reused.
  • New accounts: Ingesting findings from accounts not yet connected to Prowler Cloud will result in new providers being created and counted toward the subscription.
  • High-volume ingestion: Importing findings from many different cloud accounts will create a provider for each account. Review plan limits before large-scale ingestion.
  • Deleted providers: Removing a provider no longer counts toward the subscription.
For pricing details, see Prowler Cloud Pricing.

Troubleshooting

”Push to Prowler Cloud skipped: no API key configured”

  • Set the PROWLER_CLOUD_API_KEY environment variable before running the scan
  • Verify the variable is exported and not empty

”Push to Prowler Cloud failed: could not reach the Prowler Cloud API”

  • Verify network connectivity to api.prowler.com
  • Check firewall rules allow outbound HTTPS traffic
  • Confirm the API endpoint is not blocked by proxy settings
  • If using a custom base URL via PROWLER_CLOUD_API_BASE_URL, verify it is correct

”Push to Prowler Cloud failed: this feature is only available with a Prowler Cloud subscription”

  • The API returned HTTP 402, meaning your tenant does not have an active subscription
  • Visit Prowler Cloud Pricing to review available plans

HTTP 401 Unauthorized

  • Verify the API key is valid and not revoked
  • Confirm the API key has the Manage Ingestions permission
  • Check that the Authorization header uses the correct format: Api-Key <key>

HTTP 403 Forbidden

  • The user associated with the API key lacks the Manage Ingestions permission
  • Contact the tenant administrator to grant the required permission

Ingestion job status is “failed”

  • Check the /api/v1/ingestions/{id}/errors endpoint for details
  • Verify the OCSF file format is valid
  • Ensure the file contains Detection Finding records