{
  "info": {
    "_postman_id": "ym-api-v1-partner",
    "name": "YouMotor API v1 (Partner)",
    "description": "YouMotor — API per integrazioni partner (percorsi `/partner/...`).\n\n**Base URL produzione:** `https://api.youmotor.com/api/v1`. Per test in ambiente concordato con YouMotor, impostare la variabile `baseUrl` di conseguenza.\n\n**Variabili**\n- `partnerToken`: chiave di provisioning `ym_partner_...` (fornita da YouMotor per la vostra integrazione).\n- `dealerApiKey`: API key autosalone `ym_live_...`. Dopo *Create dealer* con `issueApiKey: true`, lo script Tests può salvare il valore se la risposta è `201`.\n- `plate`: targa usata anche nel body annuncio, per *Upload vehicle photos*.\n\n**Foto:** usare *Upload vehicle photos* (`multipart/form-data`, campo `images`), poi inserire gli URL restituiti in `images` / `coverImage` nel body di *Create listing submission*.\n\n**Nuovo autosalone** (`POST …/partner/saloni`): viene inviata una password temporanea **solo all’email** del salone indicata nel body; non compare nel JSON. Accesso portale salone: https://app.youmotor.com/login\n\n**Auth dealer:** oltre a `Authorization: Bearer <ym_live_...>`, è supportato `X-API-Key` con lo stesso valore.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "https://api.youmotor.com/api/v1" },
    { "key": "partnerToken", "value": "" },
    { "key": "dealerApiKey", "value": "" },
    { "key": "dealerId", "value": "" },
    { "key": "vehicleId", "value": "" },
    { "key": "submissionId", "value": "" },
    { "key": "plate", "value": "EF456GH" },
    { "key": "quattroruoteMarca", "value": "" },
    { "key": "quattroruoteModello", "value": "" }
  ],
  "item": [
    {
      "name": "Partner provisioning",
      "item": [
        {
          "name": "List dealers (same provisioning token)",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{partnerToken}}" }],
            "url": "{{baseUrl}}/partner/saloni",
            "description": "Elenca gli autosaloni creati con la stessa chiave `ym_partner_...` usata in questo request."
          }
        },
        {
          "name": "Create dealer with API key",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 201) {",
                  "    const data = pm.response.json();",
                  "    if (data.dealerApiKey) {",
                  "        pm.collectionVariables.set('dealerApiKey', data.dealerApiKey);",
                  "    }",
                  "    if (data.dealer && data.dealer.id) {",
                  "        pm.collectionVariables.set('dealerId', data.dealer.id);",
                  "    }",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{partnerToken}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"dealer-partner-test@example.com\",\n  \"displayName\": \"Autosalone Demo\",\n  \"legalName\": \"Autosalone Demo Srl\",\n  \"phone\": \"+390212345678\",\n  \"vatNumber\": \"12345678901\",\n  \"address\": {\n    \"line1\": \"Via Roma 10\",\n    \"city\": \"Milano\",\n    \"province\": \"MI\",\n    \"postalCode\": \"20100\",\n    \"country\": \"IT\"\n  },\n  \"issueApiKey\": true,\n  \"apiKeyLabel\": \"CarMove stock\",\n  \"externalAccount\": {\n    \"provider\": \"CarMove\",\n    \"customerReference\": \"external-dealer-id-123\"\n  }\n}"
            },
            "url": "{{baseUrl}}/partner/saloni",
            "description": "Crea l’account autosalone: **password temporanea inviata solo via email** all’indirizzo `email` (non è nel JSON di risposta).\n\nUsa un `email` **unico** per ogni prova. Con `issueApiKey: true` la risposta include `dealerApiKey` (`ym_live_...`) e lo script *Tests* la salva in `dealerApiKey`.\n\n`externalAccount` è opzionale: collega il salone al gestionale CarMove (provider + riferimento esterno)."
          }
        }
      ]
    },
    {
      "name": "Partner stock",
      "item": [
        {
          "name": "Me",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/me"
          }
        },
        {
          "name": "Vehicle options",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicle-options?groups=fuel_type,transmission,color,equipment"
          }
        },
        {
          "name": "Quattroruote marche",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/quattroruote/marche"
          }
        },
        {
          "name": "Quattroruote modelli",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/quattroruote/modelli?codiceMarca={{quattroruoteMarca}}"
          }
        },
        {
          "name": "Quattroruote allestimenti",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/quattroruote/allestimenti?codiceModello={{quattroruoteModello}}"
          }
        },
        {
          "name": "List vehicles",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicles?limit=100&offset=0"
          }
        },
        {
          "name": "Get vehicle by id",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}",
            "description": "`vehicleId` = UUID del veicolo (da *List vehicles* o portale). Scope: `vehicles:read`."
          }
        },
        {
          "name": "Upload vehicle photos",
          "request": {
            "method": "POST",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "images",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "images",
                  "type": "file",
                  "src": []
                }
              ]
            },
            "url": "{{baseUrl}}/partner/vehicles/{{plate}}/photos",
            "description": "`POST multipart/form-data`, campo file **`images`** (ripetibile). Richiede scope **`media:write`** sulla dealer API key.\n\nLa targa nell’URL deve coincidere con quella dell’annuncio (`plate` variabile / JSON).\n\nOpzionale in query: aggiungi `?kind=cover` sul path se vuoi marcare il batch come copertina (es. prima foto).\n\nRisposta `201`: usa `uploaded[].url` nell’array `images` (e opz. `coverImage`) in *Create listing submission*."
          }
        },
        {
          "name": "Create listing submission",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 201) {",
                  "    const j = pm.response.json();",
                  "    if (j && j.id) {",
                  "        pm.collectionVariables.set('submissionId', j.id);",
                  "    }",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{dealerApiKey}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Volkswagen Golf 8 Life 1.5 TSI\",\n  \"make\": \"Volkswagen\",\n  \"model\": \"Golf\",\n  \"version\": \"1.5 TSI Life\",\n  \"segment\": \"Berlina\",\n  \"model_year\": 2022,\n  \"first_registration\": \"2022-03-01\",\n  \"price\": 27500,\n  \"max_negotiation_price\": 26000,\n  \"youmotor_fee\": 300,\n  \"km\": 18000,\n  \"mileage\": 1498,\n  \"condition\": \"usato\",\n  \"body_type\": \"Berlina\",\n  \"fuel_type\": \"Benzina\",\n  \"transmission\": \"Manuale\",\n  \"drivetrain\": \"Anteriore\",\n  \"power_kw\": 96,\n  \"power_hp\": 131,\n  \"co2_emissions\": 124,\n  \"fuel_consumption_combined\": \"5.4 l/100km\",\n  \"plate\": \"{{plate}}\",\n  \"owners\": 1,\n  \"warranty\": \"12 mesi concessionario\",\n  \"service_history\": \"Tagliandi ufficiali completi\",\n  \"availability\": \"Pronta consegna\",\n  \"location\": \"Milano\",\n  \"color\": \"Grigio Metallizzato\",\n  \"interior\": \"Tessuto nero\",\n  \"coverImage\": null,\n  \"images\": [],\n  \"highlights\": [\"Unico proprietario\", \"Tagliandi ufficiali\", \"Pronta consegna\"],\n  \"description\": \"Auto pronta consegna con storico manutenzione documentato.\",\n  \"equipment\": [\"Cerchi in lega\", \"Fari LED\"],\n  \"comfort\": [\"Clima automatico bi-zona\"],\n  \"safety\": [],\n  \"infotainment\": []\n}"
            },
            "url": "{{baseUrl}}/partner/vehicles",
            "description": "Risposta `201`: `id` è l’identificativo della **pratica (submission)**, salvato anche in `submissionId`. Per PATCH / sold serve l’UUID del **veicolo** in piattaforma (`vehicleId`), di solito dopo approvazione pratica o da *List vehicles*.\n\n**Foto:** eseguire prima *Upload vehicle photos* (stessa `plate`), poi riempire `images` / `coverImage` nel body con gli URL restituiti (`uploaded[].url`)."
          }
        },
        {
          "name": "Bulk import",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{dealerApiKey}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"vehicles\": [\n    {\n      \"title\": \"Fiat Panda 1.0 Hybrid\",\n      \"make\": \"Fiat\",\n      \"model\": \"Panda\",\n      \"version\": \"1.0 Hybrid\",\n      \"segment\": \"City Car\",\n      \"model_year\": 2023,\n      \"first_registration\": \"2023-05-01\",\n      \"price\": 13900,\n      \"max_negotiation_price\": 13000,\n      \"youmotor_fee\": 300,\n      \"km\": 9500,\n      \"mileage\": 999,\n      \"condition\": \"usato\",\n      \"fuel_type\": \"Ibrida\",\n      \"transmission\": \"Manuale\",\n      \"drivetrain\": \"Anteriore\",\n      \"plate\": \"GH123JK\",\n      \"owners\": 1,\n      \"warranty\": \"12 mesi concessionario\",\n      \"service_history\": \"Tagliandi regolari documentati\",\n      \"availability\": \"Pronta consegna\",\n      \"location\": \"Torino\",\n      \"color\": \"Bianco\",\n      \"description\": \"City car ibrida pronta consegna.\",\n      \"equipment\": [\"Cerchi in lega\"]\n    }\n  ]\n}"
            },
            "url": "{{baseUrl}}/partner/vehicles/import"
          }
        },
        {
          "name": "Update listing submission",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "Bearer {{dealerApiKey}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Volkswagen Golf aggiornata\",\n  \"make\": \"Volkswagen\",\n  \"model\": \"Golf\",\n  \"version\": \"1.5 TSI Life\",\n  \"segment\": \"Berlina\",\n  \"model_year\": 2022,\n  \"first_registration\": \"2022-03-01\",\n  \"price\": 26900,\n  \"max_negotiation_price\": 25500,\n  \"youmotor_fee\": 300,\n  \"km\": 18500,\n  \"mileage\": 1498,\n  \"condition\": \"usato\",\n  \"fuel_type\": \"Benzina\",\n  \"transmission\": \"Manuale\",\n  \"drivetrain\": \"Anteriore\",\n  \"plate\": \"{{plate}}\",\n  \"owners\": 1,\n  \"warranty\": \"12 mesi concessionario\",\n  \"service_history\": \"Tagliandi ufficiali completi\",\n  \"availability\": \"Pronta consegna\",\n  \"location\": \"Milano\",\n  \"color\": \"Grigio Metallizzato\",\n  \"description\": \"Prezzo aggiornato e disponibilita confermata.\",\n  \"equipment\": [\"Cerchi in lega\"]\n}"
            },
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}",
            "description": "`vehicleId` = UUID del veicolo in piattaforma (non l’id submission). Impostalo da *List vehicles* dopo che il veicolo esiste."
          }
        },
        {
          "name": "Mark sold",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "Bearer {{dealerApiKey}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"price\": 26500,\n  \"notes\": \"Venduta tramite partner\"\n}" },
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}/sold",
            "description": "Richiede `vehicleId` valido come per *Update listing submission*."
          }
        },
        {
          "name": "Unmark sold",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}/sold",
            "description": "Rimuove vendita (ripristina annuncio non venduto). Scope: `stock-status:write`."
          }
        },
        {
          "name": "Archive vehicle",
          "request": {
            "method": "POST",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}/archive",
            "description": "Archivia il veicolo. Scope: `stock-status:write`."
          }
        },
        {
          "name": "Unarchive vehicle",
          "request": {
            "method": "POST",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/vehicles/{{vehicleId}}/unarchive",
            "description": "Riattiva un veicolo archiviato. Scope: `stock-status:write`."
          }
        },
        {
          "name": "Submissions",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/submissions"
          }
        },
        {
          "name": "Get submission by id",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "Bearer {{dealerApiKey}}" }],
            "url": "{{baseUrl}}/partner/submissions/{{submissionId}}",
            "description": "Dettaglio pratica. Usa `submissionId` da *Create listing submission* o dalla lista. Scope: `submissions:read`."
          }
        },
        {
          "name": "Update pending submission (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "Bearer {{dealerApiKey}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Volkswagen Golf 8 Life 1.5 TSI\",\n  \"make\": \"Volkswagen\",\n  \"model\": \"Golf\",\n  \"version\": \"1.5 TSI Life\",\n  \"segment\": \"Berlina\",\n  \"model_year\": 2022,\n  \"first_registration\": \"2022-03-01\",\n  \"price\": 27000,\n  \"max_negotiation_price\": 25800,\n  \"youmotor_fee\": 300,\n  \"km\": 18000,\n  \"mileage\": 1498,\n  \"condition\": \"usato\",\n  \"body_type\": \"Berlina\",\n  \"fuel_type\": \"Benzina\",\n  \"transmission\": \"Manuale\",\n  \"drivetrain\": \"Anteriore\",\n  \"plate\": \"{{plate}}\",\n  \"owners\": 1,\n  \"warranty\": \"12 mesi concessionario\",\n  \"service_history\": \"Tagliandi ufficiali completi\",\n  \"availability\": \"Pronta consegna\",\n  \"location\": \"Milano\",\n  \"color\": \"Grigio Metallizzato\",\n  \"description\": \"Correzione dati richiesta da YouMotor.\",\n  \"equipment\": [\"Cerchi in lega\"],\n  \"comfort\": [],\n  \"safety\": [],\n  \"infotainment\": []\n}"
            },
            "url": "{{baseUrl}}/partner/submissions/{{submissionId}}",
            "description": "Aggiorna il payload di una pratica ancora **pending**. Stessi campi obbligatori del create partner. Scope: `vehicles:write`."
          }
        }
      ]
    }
  ]
}
