Payout Submissions

Suppliers submit payout reports per month, broken down by product type (short-term tickets, contracts and EV sessions) and by parking lot. Each submission is exported to its own SIE4 file that is imported into our ERP.

Every POST creates a new, independent submission — you may send more than one submission for the same period (for example a later supplement or a correction). Submissions are never replaced in place; instead, send another submission and, when it corrects an earlier one, flag it with intent and corrects_reference. To withdraw a submission that has not yet been locked, use DELETE.

All amounts are integers in öre (1/100 SEK) and the only accepted currency is SEK. A submission must cover a fully closed month in YYYY-MM format.

A freshly accepted submission has the status received. After a grace window it is automatically locked and exported to its own SIE4 file, becoming locked (or export_failed if the export could not be produced). A locked submission can no longer be cancelled. A submission cancelled with DELETE has the status cancelled. There is no manual release step.

Authentication uses a bearer token issued to your integration user, sent as Authorization: Bearer {token}. The integration user must have the accounting.payouts.write scope and be linked to a payout supplier on our side.

GET /api/v1/accounting/payouts

List your payout submissions

Returns the payout submissions previously sent by your supplier, ordered by most recently received first. Optionally filter to a single period.

Headers

  • Name
    Authorization
    Type
    Bearer
    Required
    Description

    Bearer token issued to your integration user.

  • Name
    Accept
    Type
    application/json
    Description

    Tell the server that you want to receive JSON responses.

Query parameters

  • Name
    period
    Type
    string
    Description

    Filter by reporting period. Must match the format YYYY-MM.

Request Example

curl -X GET 'https://falun.parkeraisverige.com/api/v1/accounting/payouts?period=2026-03' \
  -H 'Authorization: Bearer {token}' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \

200 List of submissions

{
  "data": [
    {
      "submission_id": 42,
      "period": "2026-03",
      "supplier_reference": "PAYOUT-2026-03-001",
      "status": "received",
      "received_at": "2026-04-15T10:30:00+00:00",
      "grand_totals": {
        "gross_amount": 1000000,
        "total_paid_amount": 962500,
        "processor_fee_amount": 0,
        "processor_refund_amount": 0,
        "processor_adjustment_amount": 0,
        "bank_payout_amount": 962500
      }
    }
  ]
}

400 Invalid period format

{
  "errors": [
    {
      "field": "period",
      "message": "period must match YYYY-MM.",
      "code": "invalid_period"
    }
  ]
}

401 Missing or invalid bearer token

Unauthorized

403 Token lacks the accounting.payouts.write scope or no payout supplier is linked

Forbidden
POST /api/v1/accounting/payouts

Submit a payout for a period

Send a payout submission for a closed reporting period. Every call creates a new, independent submission and returns 201 — there is no replace semantics. You may submit more than one report for the same period; use intent and corrects_reference to mark a submission that supplements or corrects an earlier one. The only uniqueness constraint is on supplier_reference, which must not have been used before for your supplier.

The submission consists of one or more sections, one per product type (short_term, contract, ev_session), each with section totals and a per parking lot breakdown. Several arithmetic invariants are enforced — see the parameter notes below.

Headers

  • Name
    Authorization
    Type
    Bearer
    Required
    Description

    Bearer token issued to your integration user.

  • Name
    Content-Type
    Type
    application/json
    Required
    Description

    Request body must be JSON.

  • Name
    Accept
    Type
    application/json
    Description

    Tell the server that you want to receive JSON responses.

Body

  • Name
    period
    Type
    string
    Required
    Description

    Reporting period in YYYY-MM format. Must be a fully closed month.

  • Name
    supplier_reference
    Type
    string
    Required
    Description

    Your own unique reference for this submission. Maximum 120 characters.

  • Name
    currency
    Type
    string
    Required
    Description

    Currency code. Must be SEK.

    Possible values
    SEK
  • Name
    amount_unit
    Type
    string
    Required
    Description

    Unit for all integer amounts. Must be ore (1/100 SEK).

    Possible values
    ore
  • Name
    intent
    Type
    string
    Description

    Why this submission is being sent. supplement (the default) is a normal or additional report for the period; correction marks it as correcting an earlier submission. Informational only — it does not alter how the figures are exported.

    Possible values
    supplement correction
  • Name
    corrects_reference
    Type
    string
    Description

    The supplier_reference of an earlier submission that this one corrects or supplements. For your own traceability. Maximum 120 characters.

  • Name
    sections
    Type
    array
    Required
    Description

    One section per product type. At least one section is required and each product_type may appear at most once.

    • Name
      product_type
      Type
      string
      Required
      Description

      The product type covered by the section.

      Possible values
      short_term contract ev_session
    • Name
      totals
      Type
      object
      Required
      Description

      Section level totals. Must satisfy: net_amount = gross_amount - vat_output_amount, and total_paid_amount = gross_amount - refund_amount - fee_amount - vat_input_amount + rounding_amount.

      • Name
        gross_amount
        Type
        int
        Required
        Description

        Total gross revenue for the section, in öre. Must be >= 0.

      • Name
        vat_output_amount
        Type
        int
        Required
        Description

        Output VAT charged to customers, in öre. Must be >= 0.

      • Name
        net_amount
        Type
        int
        Required
        Description

        Net revenue (gross_amount - vat_output_amount), in öre.

      • Name
        fee_amount
        Type
        int
        Required
        Description

        Service fees deducted by your platform, in öre. Must be >= 0.

      • Name
        vat_input_amount
        Type
        int
        Description

        Input VAT on deducted expenses, in öre. Must be >= 0.

      • Name
        refund_amount
        Type
        int
        Description

        Refunded amounts in the period, in öre. Must be >= 0.

      • Name
        refund_vat_amount
        Type
        int
        Description

        VAT included in refunds, in öre. Must be >= 0.

      • Name
        rounding_amount
        Type
        int
        Description

        Rounding adjustment applied when computing total_paid_amount, in öre. Can be negative.

      • Name
        total_paid_amount
        Type
        int
        Required
        Description

        Net amount paid out to us for the section, in öre.

    • Name
      lot_rows
      Type
      array
      Required
      Description

      Per parking lot breakdown. At least one row required. Sum of lot_rows.gross_amount must equal totals.gross_amount exactly. Sum of lot_rows.paid_amount must be within 50 öre of totals.total_paid_amount.

      • Name
        parking_lot_id
        Type
        int
        Required
        Description

        Our identifier for the parking lot.

      • Name
        gross_amount
        Type
        int
        Required
        Description

        Gross revenue contributed by this lot, in öre.

      • Name
        vat_output_amount
        Type
        int
        Required
        Description

        Output VAT contributed by this lot, in öre.

      • Name
        net_amount
        Type
        int
        Required
        Description

        Net revenue contributed by this lot, in öre.

      • Name
        paid_amount
        Type
        int
        Required
        Description

        Paid out amount contributed by this lot, in öre.

      • Name
        refund_amount
        Type
        int
        Description

        Refunds attributable to this lot, in öre.

      • Name
        ticket_count
        Type
        int
        Description

        Number of tickets / parking events for this lot. Must be >= 0.

  • Name
    grand_totals
    Type
    object
    Required
    Description

    Totals across all sections. gross_amount and total_paid_amount must equal the sum of the corresponding fields on sections.totals. The processor_* fields disclose batch-level deductions taken by the payment processor from the gross payout; they are not product-attributable. bank_payout_amount, when provided, must equal total_paid_amount minus the three processor_* values.

    • Name
      gross_amount
      Type
      int
      Required
      Description

      Sum of sections.totals.gross_amount, in öre.

    • Name
      total_paid_amount
      Type
      int
      Required
      Description

      Sum of sections.totals.total_paid_amount, in öre.

    • Name
      processor_fee_amount
      Type
      int
      Description

      Batch-level processor fee withheld from the payout, in öre. Defaults to 0.

    • Name
      processor_refund_amount
      Type
      int
      Description

      Batch-level processor refund deducted from the payout, in öre. Defaults to 0.

    • Name
      processor_adjustment_amount
      Type
      int
      Description

      Batch-level processor adjustment (disputes, FX, chargebacks), in öre. Defaults to 0.

    • Name
      bank_payout_amount
      Type
      int
      Description

      The actual amount deposited to your bank account, in öre. If omitted it is derived as total_paid_amount − processor_fee_amount − processor_refund_amount − processor_adjustment_amount. If provided, must equal that value.

  • Name
    metadata
    Type
    object
    Description

    Optional free form key/value data stored with the submission for your own use.

Request Example

curl -X POST 'https://falun.parkeraisverige.com/api/v1/accounting/payouts' \
  -H 'Authorization: Bearer {token}' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{
    "period": "2026-03",
    "supplier_reference": "PAYOUT-2026-03-001",
    "currency": "SEK",
    "amount_unit": "ore",
    "sections": [
        {
            "product_type": "short_term",
            "totals": {
                "gross_amount": 1000000,
                "vat_output_amount": 200000,
                "net_amount": 800000,
                "fee_amount": 30000,
                "vat_input_amount": 7500,
                "refund_amount": 0,
                "refund_vat_amount": 0,
                "rounding_amount": 0,
                "total_paid_amount": 962500
            },
            "lot_rows": [
                {
                    "parking_lot_id": 123,
                    "gross_amount": 600000,
                    "vat_output_amount": 120000,
                    "net_amount": 480000,
                    "paid_amount": 577500,
                    "refund_amount": 0,
                    "ticket_count": 100
                },
                {
                    "parking_lot_id": 124,
                    "gross_amount": 400000,
                    "vat_output_amount": 80000,
                    "net_amount": 320000,
                    "paid_amount": 385000,
                    "refund_amount": 0,
                    "ticket_count": 67
                }
            ]
        }
    ],
    "grand_totals": {
        "gross_amount": 1000000,
        "total_paid_amount": 962500
    }
}'

201 Submission accepted

{
  "submission_id": 42,
  "period": "2026-03",
  "supplier_reference": "PAYOUT-2026-03-001",
  "status": "received",
  "received_at": "2026-04-30T14:22:18+00:00",
  "grand_totals": {
    "gross_amount": 1000000,
    "total_paid_amount": 962500,
    "processor_fee_amount": 0,
    "processor_refund_amount": 0,
    "processor_adjustment_amount": 0,
    "bank_payout_amount": 962500
  }
}

400 Malformed JSON body

{
  "errors": [
    {
      "field": null,
      "message": "Malformed JSON body.",
      "code": "invalid_json"
    }
  ]
}

409 The supplier_reference has already been used

{
  "errors": [
    {
      "field": null,
      "message": "supplier_reference PAYOUT-2026-03-001 has already been used.",
      "code": "duplicate_supplier_reference"
    }
  ]
}

422 Validation error

{
  "errors": [
    {
      "field": "sections.0.totals.net_amount",
      "message": "net_amount must equal gross_amount - vat_output_amount (expected 800000, got 700000).",
      "code": "invalid_field"
    }
  ]
}

422 Period is not yet a closed month

{
  "errors": [
    {
      "field": "period",
      "message": "Period 2026-06 is not yet closed.",
      "code": "period_open"
    }
  ]
}

401 Missing or invalid bearer token

Unauthorized

403 Token lacks the accounting.payouts.write scope or no payout supplier is linked

Forbidden
DELETE /api/v1/accounting/payouts/{submission}

Cancel a payout submission

Cancel a submission you sent earlier. Use the submission_id returned when the submission was created. On success the response is 200 with the submission in status cancelled.

A submission can only be cancelled while it is still received. Once it has been locked and exported to a SIE4 file (status locked or export_failed) it can no longer be cancelled and the response is 409 with code submission_locked. To revise the figures after that, send a new submission with intent = correction.

Headers

  • Name
    Authorization
    Type
    Bearer
    Required
    Description

    Bearer token issued to your integration user.

  • Name
    Accept
    Type
    application/json
    Description

    Tell the server that you want to receive JSON responses.

Path parameters

  • Name
    submission
    Type
    int
    Required
    Description

    The submission_id of the submission to cancel. Must belong to your supplier.

Request Example

curl -X DELETE 'https://falun.parkeraisverige.com/api/v1/accounting/payouts/42' \
  -H 'Authorization: Bearer {token}' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \

200 Submission cancelled

{
  "submission_id": 42,
  "period": "2026-03",
  "supplier_reference": "PAYOUT-2026-03-001",
  "status": "cancelled",
  "received_at": "2026-04-30T14:22:18+00:00",
  "grand_totals": {
    "gross_amount": 1000000,
    "total_paid_amount": 962500,
    "processor_fee_amount": 0,
    "processor_refund_amount": 0,
    "processor_adjustment_amount": 0,
    "bank_payout_amount": 962500
  }
}

409 Submission is locked and can no longer be cancelled

{
  "errors": [
    {
      "field": null,
      "message": "This submission is locked and can no longer be cancelled.",
      "code": "submission_locked"
    }
  ]
}

403 The submission belongs to a different supplier

{
  "errors": [
    {
      "field": null,
      "message": "You may not cancel this submission.",
      "code": "forbidden"
    }
  ]
}

404 No submission with that id exists

Not Found

401 Missing or invalid bearer token

Unauthorized

403 Token lacks the accounting.payouts.write scope or no payout supplier is linked

Forbidden