Export Pipe Audit Logs Report

How to export a pipe audit logs report using the exportPipeAuditLogsReport GraphQL mutation

⚠️

BETA - This API is currently in beta testing. If you encounter issues or have feedback, contact our support team.

Overview

The exportPipeAuditLogsReport mutation creates an asynchronous export job that fetches pipe audit logs and delivers a downloadable report file. You can filter by activity type, date range, and user, and choose between CSV and JSONL output formats.

The export is delivered in one of two ways:

  • Email (default): a download link is sent to the requesting user's email once processing is complete.
  • Webhook: a push notification is sent to the configured webhook endpoint as soon as processing completes. The download URL is available via the auditLogExportRequest query using the correlationId.

Prerequisites

  1. Authentication: This mutation requires the id_token from your Pipefy session cookie to authenticate requests to the activities service.
  2. Permissions: The authenticated user must have the pipe admin role on the target pipe.
  3. Pipe UUID: You must know the UUID of the pipe you want to export logs for. See Get resource IDs.

Mutation Reference

Full signature

mutation ExportPipeAuditLogsReport(
  $pipeUuid: ID!
  $auditLogType: AuditLogTypeEnum
  $outputFormat: AuditLogOutputFormat
  $deliveryMethod: AuditLogDeliveryMethod
  $searchTerm: String
  $filterDateFrom: DateTime
  $filterDateTo: DateTime
) {
  exportPipeAuditLogsReport(input: {
    pipeUuid: $pipeUuid
    auditLogType: $auditLogType
    outputFormat: $outputFormat
    deliveryMethod: $deliveryMethod
    searchTerm: $searchTerm
    filterDateFrom: $filterDateFrom
    filterDateTo: $filterDateTo
  }) {
    success
    correlationId
  }
}

Arguments

ArgumentTypeRequiredDefaultDescription
pipeUuidIDYesUUID of the pipe
auditLogTypeAuditLogTypeEnumNonull (all)Scope export to a specific activity type
outputFormatAuditLogOutputFormatNoCSVFile format for the exported report
deliveryMethodAuditLogDeliveryMethodNoEMAILHow the export is delivered
searchTermStringNo""Filter logs by user name or email (case-insensitive)
filterDateFromDateTimeNo30 days ago (beginning of day)Start of the date range (inclusive)
filterDateToDateTimeNoYesterday (end of day)End of the date range (inclusive)

AuditLogTypeEnum values

ValueDescription
card_activityActivities related to card execution
configuration_changesActivities related to pipe configuration changes
(omitted)All activity types

AuditLogOutputFormat values

ValueDescription
CSVComma-separated values with UTF-8 BOM header
JSONLJSON Lines — one JSON object per line ({ "user": ..., "action": ..., "date": ... })

AuditLogDeliveryMethod values

ValueDescription
EMAILA download link is sent to the user's email when the export is ready
WEBHOOKA push notification is sent to the configured webhook endpoint; the download URL is retrievable via the auditLogExportRequest query

Response fields

FieldTypeDescription
successBooleantrue if the export job was created successfully
correlationIdIDUnique identifier for this export request. Use it to poll the auditLogExportRequest query when deliveryMethod is WEBHOOK

Business Rules

Date range

  • filterDateFrom is normalized to the beginning of the day (00:00:00).
  • filterDateTo is normalized to the end of the day (23:59:59).
  • filterDateTo must be after filterDateFrom.
  • filterDateTo cannot be in the future.
  • The maximum range between filterDateFrom and filterDateTo is 30 days.
  • filterDateFrom cannot be older than 180 days from today.

Rate limit

Each user can create at most 6 export requests per day. Exceeding this limit returns a UsageLimitExceededError.


Query Reference — auditLogExportRequest

Use this query to retrieve the full details of an export request by its correlationId.

Signature

query AuditLogExportRequest($correlationId: ID!) {
  auditLogExportRequest(correlationId: $correlationId) {
    correlationId
    status
    outputFormat
    deliveryMethod
    signedUrl
    signedUrlExpiresAt
    dateFrom
    dateTo
    observation
    pipe {
      id
      uuid
      name
    }
  }
}

Arguments

ArgumentTypeRequiredDescription
correlationIdIDYesReturned by exportPipeAuditLogsReport

Response fields

FieldTypeDescription
correlationIdIDUnique identifier for this export request
statusAuditLogExportStatusPROCESSING, FINISHED, or FAILED
outputFormatAuditLogOutputFormatCSV or JSONL
deliveryMethodAuditLogDeliveryMethodEMAIL or WEBHOOK
signedUrlStringPre-signed download URL — present only when status is FINISHED and deliveryMethod is WEBHOOK
signedUrlExpiresAtDateTimeExpiration of the signed URL (up to 7 days)
dateFrom / dateToDateTimeDate range that was exported
observationStringError message — present only when status is FAILED
pipeobjectPipe identity: id, uuid, name

Usage Examples

Minimal — email delivery, all activities, last 30 days

mutation {
  exportPipeAuditLogsReport(input: {
    pipeUuid: "87654321-4321-4321-4321-cba987654321"
  }) {
    success
    correlationId
  }
}
{
  "data": {
    "exportPipeAuditLogsReport": {
      "success": true,
      "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    }
  }
}

Filter by activity type and date range

mutation ExportPipeAuditLogsReport(
  $pipeUuid: ID!
  $auditLogType: AuditLogTypeEnum
  $filterDateFrom: DateTime
  $filterDateTo: DateTime
) {
  exportPipeAuditLogsReport(input: {
    pipeUuid: $pipeUuid
    auditLogType: $auditLogType
    filterDateFrom: $filterDateFrom
    filterDateTo: $filterDateTo
  }) {
    success
    correlationId
  }
}
{
  "pipeUuid": "87654321-4321-4321-4321-cba987654321",
  "auditLogType": "card_activity",
  "filterDateFrom": "2025-03-01T00:00:00Z",
  "filterDateTo": "2025-03-30T23:59:59Z"
}

Webhook delivery

The delivery method is independent of the output format — WEBHOOK works with either CSV or JSONL. The example below uses JSONL, but CSV behaves the same way.

When deliveryMethod is WEBHOOK, the signed download URL is not sent by email. You can retrieve it in two ways:

  • Polling: query auditLogExportRequest using the correlationId until status is finished, then read signedUrl for the download link.
  • Push notification: configure a pipe webhook with action audit_log.export_finished to receive an HTTP POST as soon as processing completes. The payload contains only correlation_id (and details on failure) — use the correlationId to fetch the full export details, including signedUrl, via auditLogExportRequest. See Audit Log Export Finished for the full payload reference.

Step 1 — Request the export

mutation ExportPipeAuditLogsReport(
  $pipeUuid: ID!
  $outputFormat: AuditLogOutputFormat
  $deliveryMethod: AuditLogDeliveryMethod
) {
  exportPipeAuditLogsReport(input: {
    pipeUuid: $pipeUuid
    outputFormat: $outputFormat
    deliveryMethod: $deliveryMethod
  }) {
    success
    correlationId
  }
}
{
  "pipeUuid": "87654321-4321-4321-4321-cba987654321",
  "outputFormat": "JSONL",
  "deliveryMethod": "WEBHOOK"
}

Step 2 — Poll for status and signed URL

query AuditLogExportRequest($correlationId: ID!) {
  auditLogExportRequest(correlationId: $correlationId) {
    status
    signedUrl
    signedUrlExpiresAt
    pipe {
      id
      uuid
      name
    }
  }
}
{
  "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Poll until status is finished. The signedUrl field will contain the pre-signed download URL, valid for up to 7 days. The pipe object exposes the id, uuid, and name of the pipe the export belongs to — request only the fields you need.


Export File Structure

Each export contains the following columns regardless of the output format:

ColumnDescription
userName of the user who performed the action
actionLocalized description of the action
dateTimestamp of the action (ISO 8601)

CSV example

User,Action,Date
John Doe,Created card "Q3 Review",2025-03-15T14:32:00Z
Jane Smith,Moved card to "Done",2025-03-15T15:10:00Z

JSONL example

{"user":"John Doe","action":"Created card \"Q3 Review\"","date":"2025-03-15T14:32:00Z"}
{"user":"Jane Smith","action":"Moved card to \"Done\"","date":"2025-03-15T15:10:00Z"}

Error Handling

Common error scenarios

ScenarioError typeMessage
User is not a pipe adminPermission deniedPermission denied
filterDateTo before filterDateFromInvalidInputErrorfilter_date_to must be after filter_date_from
Date range exceeds 30 daysInvalidInputErrordate range cannot exceed 30 days
filterDateFrom older than 180 daysInvalidInputErrorfilter_date_from cannot be older than 180 days
filterDateTo in the futureInvalidInputErrorfilter_date_to cannot be in the future
Daily request limit reachedUsageLimitExceededErrorYou've reached the daily limit for audit log export requests...

Error response shape

{
  "data": {
    "exportPipeAuditLogsReport": null
  },
  "errors": [
    {
      "message": "filter_date_to must be after filter_date_from",
      "locations": [{ "line": 2, "column": 3 }],
      "path": ["exportPipeAuditLogsReport"]
    }
  ]
}