{
	"info": {
		"_postman_id": "7df4a362-d96a-4d76-8025-a131a9862590",
		"name": "DigitalChip IoT Platform API",
		"description": "Complete Postman collection for DigitalChip Cloud Functions (us-central1 / yosh-digitalchip).\n\n• gatewayPing — HTTP POST + X-Device-Api-Key\n• All other endpoints — HTTPS Callable: Authorization Bearer {{firebase_id_token}} and body { \"data\": { ... } }\n\nSee /docs.html for full reference.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"variable": [
		{
			"key": "base_url",
			"value": "https://us-central1-yosh-digitalchip.cloudfunctions.net"
		},
		{
			"key": "firebase_id_token",
			"value": ""
		},
		{
			"key": "device_api_key",
			"value": "dc_dev_wash_01_api_key_demo_2026"
		},
		{
			"key": "user_uid",
			"value": ""
		},
		{
			"key": "tenant_id",
			"value": "tenant_wash_central"
		},
		{
			"key": "company_id",
			"value": "comp_alpha"
		}
	],
	"item": [
		{
			"name": "IoT Gateway",
			"item": [
				{
					"name": "gatewayPing",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "X-Device-Api-Key",
								"value": "{{device_api_key}}",
								"description": "devices/{deviceId}.apiKey"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"deviceId\": \"dev_wash_01\",\n  \"status\": \"ONLINE\",\n  \"subDevices\": [\n    { \"id\": \"bay_1\", \"status\": \"ACTIVE\" },\n    { \"id\": \"bay_2\", \"status\": \"INACTIVE\" }\n  ]\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/gatewayPing",
						"description": "Heartbeat + pending commands. Seeded demo key: dc_dev_wash_01_api_key_demo_2026"
					}
				}
			]
		},
		{
			"name": "End-user / Mobile",
			"item": [
				{
					"name": "activateService",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"userId\": \"{{user_uid}}\",\n    \"tenantId\": \"{{tenant_id}}\",\n    \"deviceId\": \"dev_wash_01\",\n    \"subDeviceId\": \"bay_1\",\n    \"tokensToSpend\": 5\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/activateService"
					}
				},
				{
					"name": "getUserProfile",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{ \"data\": {} }",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/getUserProfile"
					}
				},
				{
					"name": "updateUserProfile",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"name\": \"Petar Petrovic\",\n    \"phone\": \"+38761123456\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/updateUserProfile"
					}
				},
				{
					"name": "changeUserPassword",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"currentPassword\": \"Password123!\",\n    \"newPassword\": \"NewPassword123!\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/changeUserPassword"
					}
				},
				{
					"name": "creditOwnWallet",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"amount\": 10,\n    \"replace\": false\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/creditOwnWallet"
					}
				}
			]
		},
		{
			"name": "B2B Admin",
			"item": [
				{
					"name": "onboardEmployee",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"{{company_id}}\",\n    \"email\": \"ana@alphacorp.com\",\n    \"name\": \"Ana Anic\",\n    \"phone\": \"+38761123456\",\n    \"password\": \"Password123!\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/onboardEmployee"
					}
				},
				{
					"name": "dispenseTokens",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"fromCompanyId\": \"{{company_id}}\",\n    \"toUserId\": \"{{user_uid}}\",\n    \"amount\": 50\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/dispenseTokens"
					}
				},
				{
					"name": "getCompanySpendingReport",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"{{company_id}}\",\n    \"limit\": 100\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/getCompanySpendingReport"
					}
				},
				{
					"name": "updateSpendingRules",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"{{company_id}}\",\n    \"rules\": {\n      \"startTime\": \"08:00\",\n      \"endTime\": \"20:00\",\n      \"dailyLimit\": 50,\n      \"allowedDays\": [1,2,3,4,5]\n    }\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/updateSpendingRules"
					}
				},
				{
					"name": "removeCompanyEmployee",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"{{company_id}}\",\n    \"userId\": \"{{user_uid}}\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/removeCompanyEmployee"
					}
				}
			]
		},
		{
			"name": "Super / Tenant Admin",
			"item": [
				{
					"name": "createTenantWithAdmin",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"tenantId\": \"tenant_eco_wash\",\n    \"tenantName\": \"Eco Wash Center\",\n    \"industryType\": \"CAR_WASH\",\n    \"adminName\": \"Petar Petrovic\",\n    \"adminEmail\": \"admin@ecowash.com\",\n    \"adminPassword\": \"Password123!\",\n    \"currency\": \"BAM\",\n    \"address\": \"Ulica 1, Sarajevo\",\n    \"jib\": \"4200123450001\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/createTenantWithAdmin"
					}
				},
				{
					"name": "rotateDeviceApiKey",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_01\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/rotateDeviceApiKey"
					}
				},
				{
					"name": "getEarningsReport",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"tenantId\": \"{{tenant_id}}\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/getEarningsReport",
						"description": "tenantId optional for SUPER_ADMIN (all tenants). TENANT_ADMIN is scoped to own tenant."
					}
				},
				{
					"name": "createB2bCompany",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"comp_demo\",\n    \"name\": \"Demo Co\",\n    \"adminEmail\": \"admin@demo.com\",\n    \"initialBalance\": 500,\n    \"dailyLimit\": 50,\n    \"currency\": \"BAM\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/createB2bCompany"
					}
				},
				{
					"name": "deleteB2bCompany",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"comp_demo\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/deleteB2bCompany"
					}
				},
				{
					"name": "assignCompanyAdmin",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"companyId\": \"{{company_id}}\",\n    \"email\": \"admin@alphacorp.com\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/assignCompanyAdmin"
					}
				},
				{
					"name": "registerDevice",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_02\",\n    \"tenantId\": \"{{tenant_id}}\",\n    \"firmwareVersion\": \"1.0.0\",\n    \"status\": \"OFFLINE\",\n    \"location\": {\n      \"city\": \"Sarajevo\",\n      \"address\": \"Ulica 1\",\n      \"lat\": 43.8563,\n      \"lng\": 18.4131,\n      \"mapsUrl\": null\n    }\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/registerDevice"
					}
				},
				{
					"name": "registerSubDevice",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_02\",\n    \"subDeviceId\": \"bay_3\",\n    \"name\": \"Bay 3\",\n    \"pulsePerToken\": 10,\n    \"location\": {\n      \"city\": \"Sarajevo\",\n      \"address\": \"Ulica 1 — bay 3\",\n      \"lat\": 43.8564,\n      \"lng\": 18.4132,\n      \"mapsUrl\": null\n    }\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/registerSubDevice"
					}
				},
				{
					"name": "deleteDevice",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_02\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/deleteDevice"
					}
				},
				{
					"name": "deleteSubDevice",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_02\",\n    \"subDeviceId\": \"bay_3\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/deleteSubDevice"
					}
				},
				{
					"name": "linkDeviceToTenant",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"deviceId\": \"dev_wash_02\",\n    \"tenantId\": \"{{tenant_id}}\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/linkDeviceToTenant"
					}
				},
				{
					"name": "adminUpdateUser",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"userId\": \"{{user_uid}}\",\n    \"role\": \"USER\",\n    \"b2bCompanyId\": \"{{company_id}}\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/adminUpdateUser"
					}
				},
				{
					"name": "creditUserWallet",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"userId\": \"{{user_uid}}\",\n    \"amount\": 100\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/creditUserWallet"
					}
				},
				{
					"name": "deleteUserAccount",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"userId\": \"{{user_uid}}\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/deleteUserAccount"
					}
				},
				{
					"name": "deleteTenantCascade",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Authorization",
								"value": "Bearer {{firebase_id_token}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"data\": {\n    \"tenantId\": \"tenant_demo\"\n  }\n}",
							"options": {
								"raw": {
									"language": "json"
								}
							}
						},
						"url": "{{base_url}}/deleteTenantCascade"
					}
				}
			]
		}
	]
}
