> ## Documentation Index
> Fetch the complete documentation index at: https://developer.easyparkgroup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Initiate report generation

> 
Generates a report based on the provided parameters. Requested data period must not be older than 14 months from current date.

<h3>Required fields</h3>
Mandatory fields to be passed in the request body:

| Field | Type | Description |
| --- | --- | --- |
| operatorId | integer | The ID of the operator for which the report is being generated |
| reportFormat | string | The format of the report (JSON or CSV) |
| startDate | string | The start date of the data period for the report (yyyy-MM-dd) |
| endDate | string | The end date of the data period for the report (yyyy-MM-dd) |

<h3>Additional fields</h3>
Following fields (columns) can be requested by passing them to the `additionalFields` parameter in the request body.

| Field | Description |
| --- | --- |
| ORDER_ID | Invoice billing ID |
| SUPPLIER_NAME | Name of the parking operator |
| CLIENT_ID | EPIC customer ID or parkmobile user id |
| CUSTOMER_PHONE | Phone number of the user |
| EMAIL | Email of the user |
| LPN | License plate from payment parking |
| LPN_STATE | U.S. state where the license plate is registered in. From payment parking |
| CLEARING_PERIOD | The settlement date in YYYYMM format |
| START_PARKING_ON_LOCAL | Start timestamp of the parking in local time |
| STOP_PARKING_ON_LOCAL | Stop timestamp of the parking in local time |
| DURATION_IN_MINUTES | Difference between parking start and stop date displayed in minutes |
| PAYMENT_ID | ID for the parking |
| PAYMENT_REFERENCE | Payment service provider reference |
| PAYMENT_AMOUNT_VAT_AMOUNT | VAT of the payment amount that the consumer payed. The total sum of VAT amounts |
| PARKING_AMOUNT | Parking amount from payment parking |
| PARKING_AMOUNT_INITIAL | Parking_amount incl. VAT. Defined as the total parking_fee excl all credits and discounts. Also excluding reinvoicing so there should only be one record per parking |
| PARKING_AMOUNT_VAT_AMOUNT | Parking VAT amount from payment parking |
| TRANSACTION_FEE | Transaction fee amount from payment parking |
| TRANSACTION_FEE_INITIAL | Transaction fee incl. VAT. Used in remittance report |
| TRANSACTION_FEE_VAT_AMOUNT | Transaction fee VAT amount from payment parking |
| CONVENIENCE_FEE | Convenience fee amount from payment parking |
| CONVENIENCE_FEE_INITIAL | Convenience fee incl. VAT. Used in remittance report |
| CONVENIENCE_FEE_VAT_AMOUNT | Convenience fee VAT amount from payment parking |
| OPERATOR_SURCHARGE_INCL_TAX | The total amount of operator surcharge imposed on the parker by the operator, including the tax value |
| IS_EXTENSION | Whether the transaction is an extension or an initial parking |
| VAT_PERCENTAGE | VAT percentage from payment parking, applicable in Canada/Europe |
| CURRENCY | Currency used for the parking transaction |
| PAID_MINUTES | How many minutes the user paid for parking |
| INSERT_DATE | Invoice billing insert time local |
| CREDIT_CARD_TYPE | Type of credit card used for payment. Amex, Discover, MasterCard, N/A, PayPal, VISA, Wallet |
| MASKED_CARD_NUMBER | Masked card number used for payment |
| CREDIT_CARD_ZIP | Zip code of the credit card |
| TIME_ZONE | Time zone from payment parking |
| COUNTRY_CODE | Supplier country abbreviation |
| ZONE_ID | ID associated with the parking zone |
| ZONE_DESCRIPTION | Description of the zone (typically city, state) |
| LOCATION | Concatenated location info from station, department_location, station_label, and department_location_label |
| STATION | Zone attribute value |
| DEPARTMENT_LOCATION | Zone attribute value |
| SPACE_NUMBER | Parking space number |
| PARKMOBILE_PARKING_DISCOUNT | Represent the discount offered by EasyPark on parking fee and the user can see the discount |
| PARKMOBILE_TRANSACTION_FEE_DISCOUNT | Represent the discount offered by EasyPark on transaction fee and the user can see the discount |
| PARKMOBILE_CONVENIENCE_FEE_DISCOUNT | Represent the discount offered by EasyPark on convenience fee and the user can see the discount |
| CLIENT_PARKING_DISCOUNT | Represent the discount offered by the supplier on parking fee and the user can see the discount |
| CLIENT_TRANSACTION_FEE_DISCOUNT | Represent the discount offered by the supplier on transaction fee and the user can see the discount |
| CLIENT_CONVENIENCE_FEE_DISCOUNT | Represent the discount offered by the supplier on convenience fee and the user can see the discount |
| WAIVED_FEE_INCL_TAX | The total amount of fee waived for the end user, including the tax value |
| GROUPED_PARKING_RIGHT_ID | ID of multiple transactions that are part of a session grouping |
| IS_MULTI_TIER | Indicates whether a transaction has applied tiered pricing |
| PRODUCT_TYPE | Sort of Parking Type the underlying session is (MOBILE_PAY_PARKING, AUTOMOTIVE_APP, ANPR_GATED, TICKET_TAKEOVER) |
| EXTERNAL_PARKING_ACTION_ID | Unique identifier for a parking transaction initiated by a third-party system |
| CONTRACT_OWNER | The entity responsible for owning and managing the contract's terms |
| MARKET_FACILITATOR | The entity responsible for collecting and remitting sales tax on transactions |
| CITY_TAX | The amount of city tax applied to a parking |
| COUNTY_TAX | The amount of county tax applied to a parking |
| STATE_TAX | The amount of state tax applied to a parking |
| VIRTUAL_ACCESS_CODE | It is a code that gives special rates to customers based on their LPN |
| ADD_ON | It is a vehicle specific add-on price that comes from Flash |
| VENUE_NAME | It is the name of the venue where the event is held (defined only for reservations) |
| EVENT_NAME | It is the name of the event for which the parking reservation is made (defined only for reservations) |
| STATUS | It shows whether a reservation is purchased or refunded. It has the status FINISHED or REFUNDED |
| RECONCILIATION_ID | CyberSource reconciliation ID |
| POST_ID | Single space meter number |
| PAYSTATION_ID | Multi-space paystation number |
| PBLP_ZONE | Pay by license plate zone number |
| STREET_AND_BLOCK | Combination of street name and block number |
| STREET | Street name |
| COLLECTION_ROUTE | Geographic route ID for collection |
| COLLECTION_SUB_ROUTE | Subset of geographic route ID for collection |
| PARKING_METER_MAINTENANCE_ROUTES | Geographic route ID for meter maintenance |
| ENFORCEMENT_BEATS | Geographic route ID for enforcement |



## OpenAPI

````yaml post /report/generate
openapi: 3.1.0
info:
  title: Operator Financial Reporting API
  description: >

    Operator Financial Reporting API is a collection of endpoints (currently
    available only in US region) 

    that allows parking operators and data aggregators to fetch parking
    transactions report

    which will be generated in JSON or CSV formats.


    ## API Usage Workflow


    1. Authenticate using the `auth/v1` endpoint to obtain a JWT token

    2. Use the token in subsequent requests in the X-Authorization header

    3. Generate a report using the `/report/generate` endpoint

    4. Check report status using the URL returned in the response

    5. Since reports take time to generate, the API follows a polling approach
    where users request a report, then periodically check its status until
    completion.

    6. Download the completed report when status indicates it's ready


    ## Authentication of API user


    API users must authenticate using JWT tokens passed in the `X-Authorization`
    header with the format `Bearer YOUR-JWT-TOKEN`.

    Tokens can be obtained from the `auth/v1` endpoint using client credentials
    (clientId and clientSecret).


    For testing purposes, you can request test credentials from the support
    team.


    ## Error Handling


    The API returns appropriate HTTP status codes and detailed error messages:

    * 400: Bad Request - Invalid parameters or request structure

    * 401: Unauthorized - Missing or invalid authentication token

    * 403: Forbidden - Insufficient permissions for the requested operation

    * 429: Too Many Requests - Rate limit exceeded

    * 500: Internal Server Error - Something went wrong on the server side


    **Important Note**: When checking report status, if the report generation
    fails, the API returns a 200 OK HTTP status code with a problem details
    object in the response body containing status code 400. 

    Client applications should always check the response content type
    (application/problem+json) and examine the response body to properly handle
    error scenarios.



    ## Testing in Staging Environment


    * URL: https://operator-financial-reporting.staging.ezprk.dev

    * Database: Contains sample parking transactions for testing purposes

    * Test Operator ID: 60879 (use this ID for testing report generation)

    * Data Range: Test data is available for last two days, each day having 5
    records

    * Authentication: Use test credentials provided by the support team

    * Rate Limits: 30 requests per 10 min in test environment


    ## Report Formats and Limitations


    * Available formats: JSON or CSV

    * Maximum report size: 100,000 records

    * Historical data available: Up to 3 months from current date

    * Default columns: Always included in the report

    * Additional fields: Can be requested as needed


    The report contains default columns and additional fields requested by the
    user.


    ## Response Format and Pagination


    * All successful responses use HAL+JSON format with hypermedia links

    * Long-running operations follow the HATEOAS pattern with self-referencing
    links

    * Reports follow an asynchronous generation pattern with status polling


    ## Environment URLs


    * Production US: https://operator-financial-reporting.usa.ezprk.net

    * Staging: https://operator-financial-reporting.staging.ezprk.dev
  version: 2025.0.0
servers:
  - url: https://operator-financial-reporting.staging.ezprk.dev
    description: Staging
  - url: https://operator-financial-reporting.usa.ezprk.net
    description: Production US
security: []
tags:
  - name: Report Resource
    description: API for generating and downloading reports
  - name: Authentication Resource
    description: API for authentication
paths:
  /report/generate:
    post:
      tags:
        - Report Resource
      summary: Initiate report generation
      description: >-

        Generates a report based on the provided parameters. Requested data
        period must not be older than 14 months from current date.


        <h3>Required fields</h3>

        Mandatory fields to be passed in the request body:


        | Field | Type | Description |

        | --- | --- | --- |

        | operatorId | integer | The ID of the operator for which the report is
        being generated |

        | reportFormat | string | The format of the report (JSON or CSV) |

        | startDate | string | The start date of the data period for the report
        (yyyy-MM-dd) |

        | endDate | string | The end date of the data period for the report
        (yyyy-MM-dd) |


        <h3>Additional fields</h3>

        Following fields (columns) can be requested by passing them to the
        `additionalFields` parameter in the request body.


        | Field | Description |

        | --- | --- |

        | ORDER_ID | Invoice billing ID |

        | SUPPLIER_NAME | Name of the parking operator |

        | CLIENT_ID | EPIC customer ID or parkmobile user id |

        | CUSTOMER_PHONE | Phone number of the user |

        | EMAIL | Email of the user |

        | LPN | License plate from payment parking |

        | LPN_STATE | U.S. state where the license plate is registered in. From
        payment parking |

        | CLEARING_PERIOD | The settlement date in YYYYMM format |

        | START_PARKING_ON_LOCAL | Start timestamp of the parking in local time
        |

        | STOP_PARKING_ON_LOCAL | Stop timestamp of the parking in local time |

        | DURATION_IN_MINUTES | Difference between parking start and stop date
        displayed in minutes |

        | PAYMENT_ID | ID for the parking |

        | PAYMENT_REFERENCE | Payment service provider reference |

        | PAYMENT_AMOUNT_VAT_AMOUNT | VAT of the payment amount that the
        consumer payed. The total sum of VAT amounts |

        | PARKING_AMOUNT | Parking amount from payment parking |

        | PARKING_AMOUNT_INITIAL | Parking_amount incl. VAT. Defined as the
        total parking_fee excl all credits and discounts. Also excluding
        reinvoicing so there should only be one record per parking |

        | PARKING_AMOUNT_VAT_AMOUNT | Parking VAT amount from payment parking |

        | TRANSACTION_FEE | Transaction fee amount from payment parking |

        | TRANSACTION_FEE_INITIAL | Transaction fee incl. VAT. Used in
        remittance report |

        | TRANSACTION_FEE_VAT_AMOUNT | Transaction fee VAT amount from payment
        parking |

        | CONVENIENCE_FEE | Convenience fee amount from payment parking |

        | CONVENIENCE_FEE_INITIAL | Convenience fee incl. VAT. Used in
        remittance report |

        | CONVENIENCE_FEE_VAT_AMOUNT | Convenience fee VAT amount from payment
        parking |

        | OPERATOR_SURCHARGE_INCL_TAX | The total amount of operator surcharge
        imposed on the parker by the operator, including the tax value |

        | IS_EXTENSION | Whether the transaction is an extension or an initial
        parking |

        | VAT_PERCENTAGE | VAT percentage from payment parking, applicable in
        Canada/Europe |

        | CURRENCY | Currency used for the parking transaction |

        | PAID_MINUTES | How many minutes the user paid for parking |

        | INSERT_DATE | Invoice billing insert time local |

        | CREDIT_CARD_TYPE | Type of credit card used for payment. Amex,
        Discover, MasterCard, N/A, PayPal, VISA, Wallet |

        | MASKED_CARD_NUMBER | Masked card number used for payment |

        | CREDIT_CARD_ZIP | Zip code of the credit card |

        | TIME_ZONE | Time zone from payment parking |

        | COUNTRY_CODE | Supplier country abbreviation |

        | ZONE_ID | ID associated with the parking zone |

        | ZONE_DESCRIPTION | Description of the zone (typically city, state) |

        | LOCATION | Concatenated location info from station,
        department_location, station_label, and department_location_label |

        | STATION | Zone attribute value |

        | DEPARTMENT_LOCATION | Zone attribute value |

        | SPACE_NUMBER | Parking space number |

        | PARKMOBILE_PARKING_DISCOUNT | Represent the discount offered by
        EasyPark on parking fee and the user can see the discount |

        | PARKMOBILE_TRANSACTION_FEE_DISCOUNT | Represent the discount offered
        by EasyPark on transaction fee and the user can see the discount |

        | PARKMOBILE_CONVENIENCE_FEE_DISCOUNT | Represent the discount offered
        by EasyPark on convenience fee and the user can see the discount |

        | CLIENT_PARKING_DISCOUNT | Represent the discount offered by the
        supplier on parking fee and the user can see the discount |

        | CLIENT_TRANSACTION_FEE_DISCOUNT | Represent the discount offered by
        the supplier on transaction fee and the user can see the discount |

        | CLIENT_CONVENIENCE_FEE_DISCOUNT | Represent the discount offered by
        the supplier on convenience fee and the user can see the discount |

        | WAIVED_FEE_INCL_TAX | The total amount of fee waived for the end user,
        including the tax value |

        | GROUPED_PARKING_RIGHT_ID | ID of multiple transactions that are part
        of a session grouping |

        | IS_MULTI_TIER | Indicates whether a transaction has applied tiered
        pricing |

        | PRODUCT_TYPE | Sort of Parking Type the underlying session is
        (MOBILE_PAY_PARKING, AUTOMOTIVE_APP, ANPR_GATED, TICKET_TAKEOVER) |

        | EXTERNAL_PARKING_ACTION_ID | Unique identifier for a parking
        transaction initiated by a third-party system |

        | CONTRACT_OWNER | The entity responsible for owning and managing the
        contract's terms |

        | MARKET_FACILITATOR | The entity responsible for collecting and
        remitting sales tax on transactions |

        | CITY_TAX | The amount of city tax applied to a parking |

        | COUNTY_TAX | The amount of county tax applied to a parking |

        | STATE_TAX | The amount of state tax applied to a parking |

        | VIRTUAL_ACCESS_CODE | It is a code that gives special rates to
        customers based on their LPN |

        | ADD_ON | It is a vehicle specific add-on price that comes from Flash |

        | VENUE_NAME | It is the name of the venue where the event is held
        (defined only for reservations) |

        | EVENT_NAME | It is the name of the event for which the parking
        reservation is made (defined only for reservations) |

        | STATUS | It shows whether a reservation is purchased or refunded. It
        has the status FINISHED or REFUNDED |

        | RECONCILIATION_ID | CyberSource reconciliation ID |

        | POST_ID | Single space meter number |

        | PAYSTATION_ID | Multi-space paystation number |

        | PBLP_ZONE | Pay by license plate zone number |

        | STREET_AND_BLOCK | Combination of street name and block number |

        | STREET | Street name |

        | COLLECTION_ROUTE | Geographic route ID for collection |

        | COLLECTION_SUB_ROUTE | Subset of geographic route ID for collection |

        | PARKING_METER_MAINTENANCE_ROUTES | Geographic route ID for meter
        maintenance |

        | ENFORCEMENT_BEATS | Geographic route ID for enforcement |
      operationId: generateReport
      requestBody:
        description: Request body containing parameters for report generation
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportRequestDto'
            examples:
              Report Generation Request - JSON:
                summary: Example of a report generation request - JSON format
                description: >

                  Example of a report generation request. The report will be
                  generated in JSON format, for the operator 123, 

                  for the period between 2025-01-14 and 2025-01-15, with
                  additional fields CUSTOMER_PHONE and EMAIL.
                value:
                  operatorId: 123
                  reportFormat: JSON
                  startDate: '2025-01-14'
                  endDate: '2025-01-15'
                  additionalFields:
                    - CUSTOMER_PHONE
                    - EMAIL
              Report Generation Request - CSV:
                summary: Example of a report generation request - CSV format
                description: >

                  Example of a report generation request. The report will be
                  generated in CSV format, for the operator 123, 

                  for the period between 2025-01-18 and 2025-01-19, with
                  additional fields CUSTOMER_PHONE , EMAIL, LOCATION and
                  CREDIT_CARD_TYPE.
                value:
                  operatorId: 123
                  reportFormat: CSV
                  startDate: '2025-01-18'
                  endDate: '2025-01-19'
                  additionalFields:
                    - CUSTOMER_PHONE
                    - EMAIL
                    - LOCATION
                    - CREDIT_CARD_TYPE
        required: true
      responses:
        '202':
          description: >-
            The API link to check the report generation status which has the
            report identifier. It also returns the time to wait before checking
            the status
          content:
            application/hal+json:
              examples:
                Accepted Response:
                  summary: Example of an accepted response
                  description: >-
                    The report generation has been accepted and the user can
                    check the status after 60 seconds.
                  value:
                    message: >-
                      Your task to generate report has been accepted. Check for
                      the report status after 60 seconds.
                    retryAfter: 60
                    _links:
                      self:
                        href: >-
                          https://operator-financial-reporting.staging.ezprk.dev/report/generate/{reportIdentifier}
      security:
        - jwt: []
components:
  schemas:
    ReportRequestDto:
      type: object
      description: Report generation request parameters
      properties:
        operatorId:
          type: integer
          format: int64
          description: The ID of the operator for which the report is being generated
        reportFormat:
          type: string
          description: The format of the report
          enum:
            - JSON
            - CSV
        startDate:
          type: string
          format: date
          description: The start date of the data period for the report (format yyyy-MM-dd)
          example: '2025-01-14'
        endDate:
          type: string
          format: date
          description: The end date of the data period for the report (format yyyy-MM-dd)
          example: '2025-01-15'
        additionalFields:
          type: array
          description: Additional fields to include in the report
          items:
            type: string
            enum:
              - ORDER_ID
              - SUPPLIER_NAME
              - CLIENT_ID
              - CUSTOMER_PHONE
              - EMAIL
              - LPN
              - LPN_STATE
              - PROMOTION_CODE
              - CLEARING_PERIOD
              - PAYMENT_ID
              - PAYMENT_REFERENCE
              - PAYMENT_AMOUNT_VAT_AMOUNT
              - PARKING_AMOUNT
              - PARKING_AMOUNT_INITIAL
              - PARKING_AMOUNT_VAT_AMOUNT
              - TRANSACTION_FEE
              - TRANSACTION_FEE_INITIAL
              - TRANSACTION_FEE_VAT_AMOUNT
              - CONVENIENCE_FEE
              - CONVENIENCE_FEE_INITIAL
              - CONVENIENCE_FEE_VAT_AMOUNT
              - OPERATOR_SURCHARGE_INCL_TAX
              - IS_EXTENSION
              - VAT_PERCENTAGE
              - CURRENCY
              - PAID_MINUTES
              - INSERT_DATE
              - CREDIT_CARD_TYPE
              - MASKED_CARD_NUMBER
              - CREDIT_CARD_ZIP
              - START_PARKING_ON_LOCAL
              - STOP_PARKING_ON_LOCAL
              - DURATION_IN_MINUTES
              - TIME_ZONE
              - COUNTRY_CODE
              - ZONE_ID
              - ZONE_DESCRIPTION
              - LOCATION
              - STATION
              - DEPARTMENT_LOCATION
              - SPACE_NUMBER
              - PARKMOBILE_PARKING_DISCOUNT
              - PARKMOBILE_TRANSACTION_FEE_DISCOUNT
              - PARKMOBILE_CONVENIENCE_FEE_DISCOUNT
              - CLIENT_PARKING_DISCOUNT
              - CLIENT_TRANSACTION_FEE_DISCOUNT
              - CLIENT_CONVENIENCE_FEE_DISCOUNT
              - WAIVED_FEE_INCL_TAX
              - GROUPED_PARKING_RIGHT_ID
              - IS_MULTI_TIER
              - PRODUCT_TYPE
              - EXTERNAL_PARKING_ACTION_ID
              - CONTRACT_OWNER
              - MARKET_FACILITATOR
              - CITY_TAX
              - COUNTY_TAX
              - STATE_TAX
              - VIRTUAL_ACCESS_CODE
              - ADD_ON
              - VENUE_NAME
              - EVENT_NAME
              - STATUS
              - RECONCILIATION_ID
              - POST_ID
              - PAYSTATION_ID
              - PBLP_ZONE
              - STREET_AND_BLOCK
              - STREET
              - COLLECTION_ROUTE
              - COLLECTION_SUB_ROUTE
              - PARKING_METER_MAINTENANCE_ROUTES
              - ENFORCEMENT_BEATS
      required:
        - endDate
        - operatorId
        - reportFormat
        - startDate
  securitySchemes:
    jwt:
      type: apiKey
      description: >-
        For the header value, use the format: `Bearer YOUR-JWT-TOKEN`. You can
        get the token from the  auth/v1 endpoint.
      name: X-Authorization
      in: header

````