M1: contracts and vectors (SPEC v0.1, schema 1)
contracts/openapi.yaml (OpenAPI 3.1, E-1..E-33, error shape and the exhaustive error code enum, device bearer scheme), contracts/schema/ server-v1.sql (SPEC §14.1 verbatim), seven test-vector files per §14.5.5, 80 examples (every JSON body of §14.3.4, every error code, sync pull/push, every FCM push type), and tools/contracts-check.py (stdlib-only reference of §9.1, §9.3, §9.4 and §14.5.4 plus shape checks; the M1 gate). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "ok",
|
||||
"server_version": "0.1.0",
|
||||
"schema_version": 1,
|
||||
"db_ok": true
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T09:12:00.000Z",
|
||||
"server_version": 42
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"kind": "partner",
|
||||
"target_user_id": null
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "0192a002-0000-7000-8000-000000000001",
|
||||
"kind": "partner",
|
||||
"target_user_id": null,
|
||||
"code": "4N8RVT2KW6ZC",
|
||||
"link": "https://icehack.asuscomm.com:8443/i/4N8RVT2KW6ZC",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"expires_at": "2026-10-20T06:30:02.004Z"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"invites": [
|
||||
{
|
||||
"id": "0192a002-0000-7000-8000-000000000002",
|
||||
"kind": "device",
|
||||
"target_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"code": null,
|
||||
"link": null,
|
||||
"created_at": "2026-10-17T09:00:00.000Z",
|
||||
"expires_at": "2026-10-20T09:00:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"devices": [
|
||||
{
|
||||
"id": "0192a001-0000-7000-8000-000000000001",
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"name": "Galaxy S26",
|
||||
"app_version_code": 41,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"last_seen_at": "2026-10-17T09:00:00.000Z",
|
||||
"revoked_at": null,
|
||||
"is_current": true
|
||||
},
|
||||
{
|
||||
"id": "0192a001-0000-7000-8000-000000000003",
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"name": "Old phone",
|
||||
"app_version_code": null,
|
||||
"created_at": "2026-10-17T06:20:00.000Z",
|
||||
"last_seen_at": "2026-10-17T06:25:00.000Z",
|
||||
"revoked_at": "2026-10-17T06:40:00.000Z",
|
||||
"is_current": false
|
||||
},
|
||||
{
|
||||
"id": "0192a001-0000-7000-8000-000000000002",
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"name": "Galaxy S26+",
|
||||
"app_version_code": 41,
|
||||
"created_at": "2026-10-17T07:01:15.000Z",
|
||||
"last_seen_at": "2026-10-17T08:40:12.000Z",
|
||||
"revoked_at": null,
|
||||
"is_current": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"fcm_token": "fGx1c2hUb2tlbjpBUEE5MWJIUG5vQ2tFeGFtcGxl"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Vardag",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000001",
|
||||
"name": "Vardag",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T07:10:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 13
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Vardag & mat",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000001",
|
||||
"name": "Vardag & mat",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T09:13:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 43
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"initialized": true
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000002",
|
||||
"name": "Resor",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T09:14:00.000Z",
|
||||
"archived_at": "2026-10-17T09:14:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 44
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000002",
|
||||
"name": "Resor",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T09:15:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 45
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000002",
|
||||
"name": "Resor",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T09:16:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": "2026-10-17T09:16:00.000Z",
|
||||
"server_version": 46
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "Husdjur",
|
||||
"icon": "pets",
|
||||
"color": "lime"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "0192a007-0000-7000-8000-000000000001",
|
||||
"default_key": null,
|
||||
"name": "Husdjur",
|
||||
"icon": "pets",
|
||||
"color": "lime",
|
||||
"sort_order": 110,
|
||||
"created_at": "2026-10-17T09:17:00.000Z",
|
||||
"updated_at": "2026-10-17T09:17:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 47
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "Matvaror",
|
||||
"sort_order": 15
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "01920000-0000-7000-8000-000000000001",
|
||||
"default_key": "groceries",
|
||||
"name": "Matvaror",
|
||||
"icon": "shopping_cart",
|
||||
"color": "green",
|
||||
"sort_order": 15,
|
||||
"created_at": "2026-10-17T00:00:00.000Z",
|
||||
"updated_at": "2026-10-17T09:18:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 48
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "0192a007-0000-7000-8000-000000000001",
|
||||
"default_key": null,
|
||||
"name": "Husdjur",
|
||||
"icon": "pets",
|
||||
"color": "lime",
|
||||
"sort_order": 110,
|
||||
"created_at": "2026-10-17T09:17:00.000Z",
|
||||
"updated_at": "2026-10-17T09:19:00.000Z",
|
||||
"archived_at": "2026-10-17T09:19:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 49
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "0192a007-0000-7000-8000-000000000001",
|
||||
"default_key": null,
|
||||
"name": "Husdjur",
|
||||
"icon": "pets",
|
||||
"color": "lime",
|
||||
"sort_order": 110,
|
||||
"created_at": "2026-10-17T09:17:00.000Z",
|
||||
"updated_at": "2026-10-17T09:20:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 50
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "0192a007-0000-7000-8000-000000000001",
|
||||
"default_key": null,
|
||||
"name": "Husdjur",
|
||||
"icon": "pets",
|
||||
"color": "lime",
|
||||
"sort_order": 110,
|
||||
"created_at": "2026-10-17T09:17:00.000Z",
|
||||
"updated_at": "2026-10-17T09:21:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": "2026-10-17T09:21:00.000Z",
|
||||
"server_version": 51
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": false
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"id": "0192a004-0000-7000-8000-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": false,
|
||||
"last_generated_period": null,
|
||||
"next_occurrence_date": "2026-10-25",
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"updated_at": "2026-10-17T06:30:02.004Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 30
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"paused": true
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"id": "0192a004-0000-7000-8000-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": true,
|
||||
"last_generated_period": null,
|
||||
"next_occurrence_date": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"updated_at": "2026-10-17T09:22:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 52
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "7K3MQX9D2HPA",
|
||||
"device_name": "Galaxy S26",
|
||||
"display_name": "Jacob"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"token": "kvt_q7Zm0yHc1u2R9vXgB4kLw8sTn3eP6aJdF5oQ1iYbV0c",
|
||||
"user": {
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
},
|
||||
"device": {
|
||||
"id": "0192a001-0000-7000-8000-000000000001",
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"name": "Galaxy S26",
|
||||
"app_version_code": 41,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"last_seen_at": "2026-10-17T09:00:00.000Z",
|
||||
"revoked_at": null,
|
||||
"is_current": true
|
||||
},
|
||||
"household": [
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"id": "0192a004-0000-7000-8000-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": false,
|
||||
"last_generated_period": null,
|
||||
"next_occurrence_date": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"updated_at": "2026-10-17T09:23:00.000Z",
|
||||
"deleted_at": "2026-10-17T09:23:00.000Z",
|
||||
"server_version": 53
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"epoch": "30b85fb529aac0016dc91650841005b9",
|
||||
"since": 0,
|
||||
"next_since": 921,
|
||||
"has_more": true,
|
||||
"server_time": "2026-10-25T12:00:00.000Z",
|
||||
"users": [
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
},
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000002",
|
||||
"role": "member",
|
||||
"display_name": "Anna",
|
||||
"picture_version": 2,
|
||||
"created_at": "2026-10-17T07:01:15.000Z",
|
||||
"updated_at": "2026-10-17T07:05:00.250Z",
|
||||
"server_version": 12
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"id": "01920000-0000-7000-8000-000000000001",
|
||||
"default_key": "groceries",
|
||||
"name": null,
|
||||
"icon": "shopping_cart",
|
||||
"color": "green",
|
||||
"sort_order": 10,
|
||||
"created_at": "2026-10-17T00:00:00.000Z",
|
||||
"updated_at": "2026-10-17T00:00:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 1
|
||||
},
|
||||
{
|
||||
"id": "01920000-0000-7000-8000-000000000002",
|
||||
"default_key": "restaurants",
|
||||
"name": null,
|
||||
"icon": "restaurant",
|
||||
"color": "orange",
|
||||
"sort_order": 20,
|
||||
"created_at": "2026-10-17T00:00:00.000Z",
|
||||
"updated_at": "2026-10-17T00:00:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 2
|
||||
}
|
||||
],
|
||||
"accounts": [
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000001",
|
||||
"name": "Vardag",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T07:10:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 13
|
||||
}
|
||||
],
|
||||
"recurring_templates": [
|
||||
{
|
||||
"id": "0192a004-0000-7000-8000-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": false,
|
||||
"last_generated_period": "2026-10",
|
||||
"next_occurrence_date": "2026-11-25",
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"updated_at": "2026-10-25T05:00:00.031Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 921
|
||||
}
|
||||
],
|
||||
"expenses": [
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 913
|
||||
},
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-15T10:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 914
|
||||
},
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000003",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-25",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 750000,
|
||||
"share_bp": 6000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 500000,
|
||||
"share_bp": 4000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": "0192a004-0000-7000-8000-000000000001",
|
||||
"recurring_period": "2026-10",
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-25T05:00:00.031Z",
|
||||
"updated_at": "2026-10-25T05:00:00.031Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 919
|
||||
}
|
||||
],
|
||||
"settlements": [
|
||||
{
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T18:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 915
|
||||
}
|
||||
],
|
||||
"audit_entries": [
|
||||
{
|
||||
"id": "0192a006-0000-7000-8000-000000000001",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"action": "create",
|
||||
"source": "app",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"client_at": "2026-10-16T17:02:11.123Z",
|
||||
"server_at": "2026-10-16T17:02:12.480Z",
|
||||
"changes": [
|
||||
{
|
||||
"field": "account_id",
|
||||
"old": null,
|
||||
"new": "0192a003-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "category_id",
|
||||
"old": null,
|
||||
"new": "01920000-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "payer_user_id",
|
||||
"old": null,
|
||||
"new": "0192a000-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "amount_ore",
|
||||
"old": null,
|
||||
"new": 41200
|
||||
},
|
||||
{
|
||||
"field": "description",
|
||||
"old": null,
|
||||
"new": "ICA Maxi"
|
||||
},
|
||||
{
|
||||
"field": "notes",
|
||||
"old": null,
|
||||
"new": ""
|
||||
},
|
||||
{
|
||||
"field": "expense_date",
|
||||
"old": null,
|
||||
"new": "2026-10-16"
|
||||
},
|
||||
{
|
||||
"field": "split_mode",
|
||||
"old": null,
|
||||
"new": "default"
|
||||
},
|
||||
{
|
||||
"field": "splits",
|
||||
"old": null,
|
||||
"new": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"server_version": 916
|
||||
},
|
||||
{
|
||||
"id": "0192a006-0000-7000-8000-000000000002",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"action": "update",
|
||||
"source": "app",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"client_at": "2026-10-16T18:05:00.000Z",
|
||||
"server_at": "2026-10-16T18:05:01.200Z",
|
||||
"changes": [
|
||||
{
|
||||
"field": "note",
|
||||
"old": "",
|
||||
"new": "Swish"
|
||||
}
|
||||
],
|
||||
"server_version": 917
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"mutations": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9e",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9f",
|
||||
"entity_type": "settlement",
|
||||
"entity": {
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T18:00:00.000Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"server_time": "2026-10-17T12:00:00.000Z",
|
||||
"results": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9e",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"status": "accepted",
|
||||
"server_version": 913,
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 913
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9f",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"status": "rejected",
|
||||
"reason": "stale",
|
||||
"message": "a newer version exists",
|
||||
"current": {
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish okt",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T19:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 918
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 60000,
|
||||
"exclude_settlement_id": null
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 30000
|
||||
}
|
||||
],
|
||||
"excess_ore": 10000,
|
||||
"over_settled_account_ids": [
|
||||
"0192a003-0000-7000-8000-000000000002"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"version_code": 412,
|
||||
"version_name": "2026.11.02-1a2b3c4",
|
||||
"file_name": "kvitt-412.apk",
|
||||
"size_bytes": 18234567,
|
||||
"sha256": "9f2c4d1e8b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e",
|
||||
"released_at": "2026-11-02T19:40:00.000Z"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"user": {
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
},
|
||||
"device": {
|
||||
"id": "0192a001-0000-7000-8000-000000000001",
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"name": "Galaxy S26",
|
||||
"app_version_code": 41,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"last_seen_at": "2026-10-17T09:00:00.000Z",
|
||||
"revoked_at": null,
|
||||
"is_current": true
|
||||
},
|
||||
"household": [
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
},
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000002",
|
||||
"role": "member",
|
||||
"display_name": "Anna",
|
||||
"picture_version": 2,
|
||||
"created_at": "2026-10-17T07:01:15.000Z",
|
||||
"updated_at": "2026-10-17T07:05:00.250Z",
|
||||
"server_version": 12
|
||||
}
|
||||
],
|
||||
"public_url": "https://icehack.asuscomm.com:8443"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"display_name": "Jacob H"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob H",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T09:10:00.000Z",
|
||||
"server_version": 40
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": 1,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T09:11:00.000Z",
|
||||
"server_version": 41
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "account_not_empty",
|
||||
"message": "account is referenced by expenses, settlements or templates",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "batch_too_large",
|
||||
"message": "more than 100 mutations",
|
||||
"field": "mutations"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "cannot_revoke_current_device",
|
||||
"message": "cannot revoke the calling device",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "category_in_use",
|
||||
"message": "category is used by expenses or templates",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "category_is_default",
|
||||
"message": "default categories cannot be deleted",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "cursor_ahead",
|
||||
"message": "since is greater than the current sequence value",
|
||||
"field": "since"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "device_revoked",
|
||||
"message": "device is revoked",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "forbidden",
|
||||
"message": "role member may not manage invites",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "household_full",
|
||||
"message": "the household already has two users",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "household_incomplete",
|
||||
"message": "the partner has not joined yet",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "image_invalid",
|
||||
"message": "picture cannot be decoded",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "internal",
|
||||
"message": "internal error, request id 0192a0ff-0000-7000-8000-000000000001",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "invalid_request",
|
||||
"message": "missing field `device_name`",
|
||||
"field": "device_name"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "invite_invalid",
|
||||
"message": "invite code is not valid",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "name_taken",
|
||||
"message": "an account with this name exists",
|
||||
"field": "name"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "no_accounts",
|
||||
"message": "no_accounts",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "not_found",
|
||||
"message": "no such account",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "not_implemented",
|
||||
"message": "not implemented",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "payload_too_large",
|
||||
"message": "body exceeds 1 MiB",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "protocol_unsupported",
|
||||
"message": "X-Kvitt-Protocol must be 1",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "rate_limited",
|
||||
"message": "too many requests",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "unauthorized",
|
||||
"message": "missing or unknown bearer token",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "unavailable",
|
||||
"message": "database busy",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "unsupported_media_type",
|
||||
"message": "picture must be image/jpeg, image/png or image/webp",
|
||||
"field": null
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"code": "validation_failed",
|
||||
"message": "amount_ore must be between 1 and 1000000000",
|
||||
"field": "amount_ore"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "expense_created",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "expense_deleted",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "expense_updated",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "recurring_expense_created",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000003",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "settlement_created",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "settlement_deleted",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "settlement_updated",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"count": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"message": {
|
||||
"token": "dGhpcyBpcyBhbiBleGFtcGxlIGZjbSB0b2tlbg",
|
||||
"android": {
|
||||
"priority": "high",
|
||||
"ttl": "86400s"
|
||||
},
|
||||
"data": {
|
||||
"v": "1",
|
||||
"type": "sync_batch",
|
||||
"entity_type": "",
|
||||
"entity_id": "",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"count": "4"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"epoch": "30b85fb529aac0016dc91650841005b9",
|
||||
"since": 921,
|
||||
"next_since": 921,
|
||||
"has_more": false,
|
||||
"server_time": "2026-10-25T12:00:05.000Z",
|
||||
"users": [],
|
||||
"categories": [],
|
||||
"accounts": [],
|
||||
"recurring_templates": [],
|
||||
"expenses": [],
|
||||
"settlements": [],
|
||||
"audit_entries": []
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"epoch": "30b85fb529aac0016dc91650841005b9",
|
||||
"since": 0,
|
||||
"next_since": 921,
|
||||
"has_more": true,
|
||||
"server_time": "2026-10-25T12:00:00.000Z",
|
||||
"users": [
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000001",
|
||||
"role": "admin",
|
||||
"display_name": "Jacob",
|
||||
"picture_version": null,
|
||||
"created_at": "2026-10-17T06:12:40.512Z",
|
||||
"updated_at": "2026-10-17T06:12:40.512Z",
|
||||
"server_version": 11
|
||||
},
|
||||
{
|
||||
"id": "0192a000-0000-7000-8000-000000000002",
|
||||
"role": "member",
|
||||
"display_name": "Anna",
|
||||
"picture_version": 2,
|
||||
"created_at": "2026-10-17T07:01:15.000Z",
|
||||
"updated_at": "2026-10-17T07:05:00.250Z",
|
||||
"server_version": 12
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
{
|
||||
"id": "01920000-0000-7000-8000-000000000001",
|
||||
"default_key": "groceries",
|
||||
"name": null,
|
||||
"icon": "shopping_cart",
|
||||
"color": "green",
|
||||
"sort_order": 10,
|
||||
"created_at": "2026-10-17T00:00:00.000Z",
|
||||
"updated_at": "2026-10-17T00:00:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 1
|
||||
},
|
||||
{
|
||||
"id": "01920000-0000-7000-8000-000000000002",
|
||||
"default_key": "restaurants",
|
||||
"name": null,
|
||||
"icon": "restaurant",
|
||||
"color": "orange",
|
||||
"sort_order": 20,
|
||||
"created_at": "2026-10-17T00:00:00.000Z",
|
||||
"updated_at": "2026-10-17T00:00:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 2
|
||||
}
|
||||
],
|
||||
"accounts": [
|
||||
{
|
||||
"id": "0192a003-0000-7000-8000-000000000001",
|
||||
"name": "Vardag",
|
||||
"default_shares": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T07:10:00.000Z",
|
||||
"updated_at": "2026-10-17T07:10:00.000Z",
|
||||
"archived_at": null,
|
||||
"deleted_at": null,
|
||||
"server_version": 13
|
||||
}
|
||||
],
|
||||
"recurring_templates": [
|
||||
{
|
||||
"id": "0192a004-0000-7000-8000-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_bp": 6000,
|
||||
"share_ore": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_bp": 4000,
|
||||
"share_ore": null
|
||||
}
|
||||
],
|
||||
"day_of_month": 25,
|
||||
"start_period": "2026-10",
|
||||
"end_period": null,
|
||||
"paused": false,
|
||||
"last_generated_period": "2026-10",
|
||||
"next_occurrence_date": "2026-11-25",
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-17T06:30:02.004Z",
|
||||
"updated_at": "2026-10-25T05:00:00.031Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 921
|
||||
}
|
||||
],
|
||||
"expenses": [
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 913
|
||||
},
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-15T10:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 914
|
||||
},
|
||||
{
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000003",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000003",
|
||||
"amount_ore": 1250000,
|
||||
"description": "Hyra",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-25",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "ratio",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 750000,
|
||||
"share_bp": 6000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 500000,
|
||||
"share_bp": 4000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": "0192a004-0000-7000-8000-000000000001",
|
||||
"recurring_period": "2026-10",
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-25T05:00:00.031Z",
|
||||
"updated_at": "2026-10-25T05:00:00.031Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 919
|
||||
}
|
||||
],
|
||||
"settlements": [
|
||||
{
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T18:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 915
|
||||
}
|
||||
],
|
||||
"audit_entries": [
|
||||
{
|
||||
"id": "0192a006-0000-7000-8000-000000000001",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"action": "create",
|
||||
"source": "app",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"client_at": "2026-10-16T17:02:11.123Z",
|
||||
"server_at": "2026-10-16T17:02:12.480Z",
|
||||
"changes": [
|
||||
{
|
||||
"field": "account_id",
|
||||
"old": null,
|
||||
"new": "0192a003-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "category_id",
|
||||
"old": null,
|
||||
"new": "01920000-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "payer_user_id",
|
||||
"old": null,
|
||||
"new": "0192a000-0000-7000-8000-000000000001"
|
||||
},
|
||||
{
|
||||
"field": "amount_ore",
|
||||
"old": null,
|
||||
"new": 41200
|
||||
},
|
||||
{
|
||||
"field": "description",
|
||||
"old": null,
|
||||
"new": "ICA Maxi"
|
||||
},
|
||||
{
|
||||
"field": "notes",
|
||||
"old": null,
|
||||
"new": ""
|
||||
},
|
||||
{
|
||||
"field": "expense_date",
|
||||
"old": null,
|
||||
"new": "2026-10-16"
|
||||
},
|
||||
{
|
||||
"field": "split_mode",
|
||||
"old": null,
|
||||
"new": "default"
|
||||
},
|
||||
{
|
||||
"field": "splits",
|
||||
"old": null,
|
||||
"new": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"server_version": 916
|
||||
},
|
||||
{
|
||||
"id": "0192a006-0000-7000-8000-000000000002",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"action": "update",
|
||||
"source": "app",
|
||||
"actor_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"client_at": "2026-10-16T18:05:00.000Z",
|
||||
"server_at": "2026-10-16T18:05:01.200Z",
|
||||
"changes": [
|
||||
{
|
||||
"field": "note",
|
||||
"old": "",
|
||||
"new": "Swish"
|
||||
}
|
||||
],
|
||||
"server_version": 917
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"mutations": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da0",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-17T08:00:00.000Z",
|
||||
"deleted_at": "2026-10-17T08:00:00.000Z"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"mutations": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da3",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika på stan",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-17T09:00:00.000Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da4",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000004",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20000,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 21200,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da1",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000005",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da2",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000006",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-18T12:00:00.000Z",
|
||||
"updated_at": "2026-10-18T12:00:00.000Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"mutations": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9e",
|
||||
"entity_type": "expense",
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9f",
|
||||
"entity_type": "settlement",
|
||||
"entity": {
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T18:00:00.000Z",
|
||||
"deleted_at": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"server_time": "2026-10-17T08:00:01.000Z",
|
||||
"results": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da0",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"status": "accepted",
|
||||
"server_version": 925,
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-17T08:00:00.000Z",
|
||||
"deleted_at": "2026-10-17T08:00:00.000Z",
|
||||
"server_version": 925
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"server_time": "2026-10-17T12:00:00.000Z",
|
||||
"results": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da3",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"status": "rejected",
|
||||
"reason": "deleted",
|
||||
"message": "the row is deleted",
|
||||
"current": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000002",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000002",
|
||||
"amount_ore": 1001,
|
||||
"description": "Fika",
|
||||
"notes": "Kanelbullar\noch kaffe",
|
||||
"expense_date": "2026-10-15",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"split_mode": "exact",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 701,
|
||||
"share_bp": null
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 300,
|
||||
"share_bp": null
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-15T10:00:00.000Z",
|
||||
"updated_at": "2026-10-17T08:00:00.000Z",
|
||||
"deleted_at": "2026-10-17T08:00:00.000Z",
|
||||
"server_version": 925
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da4",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000004",
|
||||
"status": "rejected",
|
||||
"reason": "validation_failed",
|
||||
"message": "share_ore does not match the split rule",
|
||||
"current": null
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da1",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000005",
|
||||
"status": "rejected",
|
||||
"reason": "reference_not_found",
|
||||
"message": "account_id",
|
||||
"current": null
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8da2",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000006",
|
||||
"status": "rejected",
|
||||
"reason": "clock_skew",
|
||||
"message": "updated_at is more than 10 minutes ahead of server time",
|
||||
"current": null
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"server_time": "2026-10-17T12:00:00.000Z",
|
||||
"results": [
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9e",
|
||||
"entity_type": "expense",
|
||||
"entity_id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"status": "accepted",
|
||||
"server_version": 913,
|
||||
"entity": {
|
||||
"id": "01929c5e-1111-7aaa-8bbb-000000000001",
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"category_id": "01920000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 41200,
|
||||
"description": "ICA Maxi",
|
||||
"notes": "",
|
||||
"expense_date": "2026-10-16",
|
||||
"payer_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"split_mode": "default",
|
||||
"splits": [
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
},
|
||||
{
|
||||
"user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"share_ore": 20600,
|
||||
"share_bp": 5000
|
||||
}
|
||||
],
|
||||
"recurring_template_id": null,
|
||||
"recurring_period": null,
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"created_at": "2026-10-16T17:02:11.123Z",
|
||||
"updated_at": "2026-10-16T17:02:11.123Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 913
|
||||
}
|
||||
},
|
||||
{
|
||||
"mutation_id": "01929c5e-6c1f-7d3a-9b2e-4f5a6b7c8d9f",
|
||||
"entity_type": "settlement",
|
||||
"entity_id": "0192a005-0000-7000-8000-000000000001",
|
||||
"status": "rejected",
|
||||
"reason": "stale",
|
||||
"message": "a newer version exists",
|
||||
"current": {
|
||||
"id": "0192a005-0000-7000-8000-000000000001",
|
||||
"from_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"to_user_id": "0192a000-0000-7000-8000-000000000001",
|
||||
"amount_ore": 50000,
|
||||
"settlement_date": "2026-10-16",
|
||||
"note": "Swish okt",
|
||||
"allocations": [
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000001",
|
||||
"amount_ore": 30000
|
||||
},
|
||||
{
|
||||
"account_id": "0192a003-0000-7000-8000-000000000002",
|
||||
"amount_ore": 20000
|
||||
}
|
||||
],
|
||||
"created_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"updated_by_user_id": "0192a000-0000-7000-8000-000000000002",
|
||||
"created_at": "2026-10-16T18:00:00.000Z",
|
||||
"updated_at": "2026-10-16T19:00:00.000Z",
|
||||
"deleted_at": null,
|
||||
"server_version": 918
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user