Payout Submissions
Suppliers submit a single payout report per month, broken down by product type (short-term tickets, contracts and EV sessions) and by parking lot. We use the submitted figures to generate the monthly SIE4 file that is imported into our ERP.
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.
Submit with POST the first time, and use PUT to replace a submission until the period
has been released as a SIE4 file.
An accepted submission has the status validated. Once the period has been released as a SIE4
file it becomes locked and can no longer be replaced.
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.
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": "validated",
"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
403 Token lacks the accounting.payouts.write scope or no payout supplier is linked
Submit a payout for a period
Send a payout submission for a closed reporting period.
If a submission already exists for the period the response is 409 with code
submission_exists — use PUT to replace it.
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
- 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": "validated",
"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 A submission already exists for this period
{
"errors": [
{
"field": "period",
"message": "A submission for period 2026-03 already exists. Use PUT to replace it.",
"code": "submission_exists"
}
]
}
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
403 Token lacks the accounting.payouts.write scope or no payout supplier is linked
Replace a payout submission
Idempotently create or replace the submission for a period.
If a submission already exists it is replaced and the response is 200;
if no submission exists yet for the period one is created and the response is 201.
Once the period has been released as a SIE4 file the submission is locked and cannot be replaced —
in that case the response is 409 with the conflict reason in the code field.
The request body is identical to POST /api/v1/accounting/payouts —
see that endpoint for the full parameter reference and invariants.
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.
Request Example
curl -X PUT '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-rev2",
"currency": "SEK",
"amount_unit": "ore",
"sections": [
{
"product_type": "short_term",
"totals": {
"gross_amount": 1050000,
"vat_output_amount": 210000,
"net_amount": 840000,
"fee_amount": 31500,
"vat_input_amount": 7875,
"refund_amount": 0,
"refund_vat_amount": 0,
"rounding_amount": 0,
"total_paid_amount": 1010625
},
"lot_rows": [
{
"parking_lot_id": 123,
"gross_amount": 1050000,
"vat_output_amount": 210000,
"net_amount": 840000,
"paid_amount": 1010625,
"ticket_count": 175
}
]
}
],
"grand_totals": {
"gross_amount": 1050000,
"total_paid_amount": 1010625
}
}'
200 Submission replaced
{
"submission_id": 42,
"period": "2026-03",
"supplier_reference": "PAYOUT-2026-03-001-rev2",
"status": "validated",
"received_at": "2026-04-30T15:01:42+00:00",
"grand_totals": {
"gross_amount": 1050000,
"total_paid_amount": 1010625,
"processor_fee_amount": 0,
"processor_refund_amount": 0,
"processor_adjustment_amount": 0,
"bank_payout_amount": 1010625
}
}
201 Submission created (no prior submission for this period)
{
"submission_id": 43,
"period": "2026-04",
"supplier_reference": "PAYOUT-2026-04-001",
"status": "validated",
"received_at": "2026-05-12T09:14:00+00:00",
"grand_totals": {
"gross_amount": 1100000,
"total_paid_amount": 1058000,
"processor_fee_amount": 0,
"processor_refund_amount": 0,
"processor_adjustment_amount": 0,
"bank_payout_amount": 1058000
}
}
409 Period is locked (already released as SIE4)
{
"errors": [
{
"field": null,
"message": "Period 2026-03 is locked \u2014 SIE4 has already been released.",
"code": "sie4_already_released"
}
]
}
409 The supplier_reference has already been used
{
"errors": [
{
"field": null,
"message": "supplier_reference PAYOUT-2026-03-001-rev2 has already been used.",
"code": "duplicate_supplier_reference"
}
]
}