---
title: "Créer une session Diagnostic Guide (Beta)"
method: POST
path: "/v2/diagnostic-sessions"
---

# Créer une session Diagnostic Guide (Beta)

`POST /v2/diagnostic-sessions`

## Request

- Base URL: `https://api.askmarcel.app`
- URL: `https://api.askmarcel.app/v2/diagnostic-sessions`
- Auth: HTTP bearer

Ouvre une session stateful : lookup SKU + code fabricant (technical_error_codes) au démarrage, pack figé (pac_air_eau / pac_air_air, 0.0.1). Consomme le quota sessions une seule fois (api_harnais_sessions_monthly). Idempotency-Key obligatoire. Surface désactivable via DIAGNOSTIC_SESSIONS_PUBLIC. MCP : start_diagnostic. Ne remplace pas resolve → coverage → diagnostic.

## Request body

- StartDiagnosticSessionInput
  - `brand` string
  - `model` string
  - `model_id` string, uuid
  - `error_code` string
  - `market` string
  - `symptom` string
  - `family` string
  - `topology` 'monosplit' | 'multisplit'
  - `supply_phase_count` union
    - 1
    - 3
  - `indoor_unit_type` 'mural' | 'gainable'
  - `indoor_unit_count` integer
  - `concerned_asset` string
  - `refrigerant` string
  - `machine_regime` 'stopped' | 'transient' | 'steady'
  - `operating_mode` string
  - `external_reference` string

## Response `200`

Session créée

- DiagnosticSession
  - `session_id` string, required
  - `session_version` integer, required
  - `session_lifecycle` 'active' | 'paused' | 'closed', required
  - `release_channel` 'beta', required
  - `engine_state` 'in_progress' | 'probable' | 'engine_confirmed' | 'inconclusive' | 'escalated' | 'emergency', required
  - `engine_assessment` EngineAssessment, required
    - `state` 'in_progress' | 'probable' | 'engine_confirmed' | 'inconclusive' | 'escalated' | 'emergency', required
    - `cause_id` string, nullable, required
    - `conclusion_source` 'engine' | 'none', required
  - `hypotheses` DiagnosticHypothesis[], required
    - `cause_id` string, required
    - `label` string, required
    - `rank` integer, required
    - `support_level` 'high' | 'medium' | 'low', required
  - `technician_assessment` TechnicianAssessmentView, required
    - `state` 'unset' | 'probable' | 'technician_confirmed' | 'disagrees' | 'inconclusive', required
    - `cause_id` string, nullable, required
    - `reason` string, nullable, required
    - `conclusion_source` 'technician' | 'none', required
  - `outcome_state` 'none' | 'repair_recorded' | 'verification_pending' | 'resolved' | 'partially_resolved' | 'unresolved' | 'reopened', required
  - `fault_code` DiagnosticFaultCode, nullable, required
    - `code` string, required
    - `status` 'recognized' | 'not_found' | 'unavailable', required
    - `relation` 'confirme' | 'oriente' | 'etat' | 'non_mappe', required
    - `definitions` object[], required
      - `title` string, required
      - `description` string, nullable, required
      - `severity` string, nullable, required
      - `citations` DiagnosticActionCitation[], required
        - `document_id` string, uuid, required
        - `page_start` integer, required
        - `page_end` integer, required
  - `next_action` DiagnosticNextAction, nullable, required
    - `action_id` string, required
    - `title` string, required
    - `objective` string, required
    - `target` string, required
    - `location` string, required
    - `method` string, required
    - `tools` string[], required
    - `conditions` string, required
    - `warnings` string[], required
    - `regulatory_scope` 'none' | 'fluide_frigorigene' | 'gaz' | 'electrique', required
    - `source` string, required
    - `applicability` 'exact_equipment' | 'generic_triage' | 'coverage_insufficient' | 'equipment_ambiguous', required
    - `decision_role` 'proposed' | 'human_action_required' | 'abstain' | 'discriminating_measurement' | 'confirmation_measurement' | 'safety' | 'clarification', required
    - `discriminates_cause_ids` string[], required
    - `source_basis` 'manufacturer' | 'regulatory' | 'expert_field_reference' | 'generic', required
    - `citations` DiagnosticActionCitation[], required
      - `document_id` string, uuid, required
      - `page_start` integer, required
      - `page_end` integer, required
    - `expected_input` object
      - `quantity_id` string, required
      - `type` 'number' | 'text' | 'enum', required
      - `unit` string
      - `options` string[]
      - `option_labels` object
      - `required_operating_state` string
      - `requires_regime_established` boolean
    - `expected_range` object
      - `min` number, required
      - `max` number, required
      - `unit` string, required
      - `condition` string
      - `provenance` 'manufacturer' | 'indicative', required
      - `citations` DiagnosticActionCitation[], required
        - `document_id` string, uuid, required
        - `page_start` integer, required
        - `page_end` integer, required
    - `gesture_safety` object
      - `version` string, required
      - `energy_isolation` string, required
      - `measurement_mode` 'off_power' | 'on_power' | 'mixed', required
      - `tools_required` string[], required
      - `cannot_perform_triggers` string[], required
      - `regulatory_note` string
  - `verification_hint` object, nullable
    - `family` string, required
    - `immediate` string, required
    - `followup` string, required
    - `missing_data` string, required
  - `safety` DiagnosticSessionSafety, required
    - `level` 'informational' | 'warning' | 'emergency', required
    - `warnings` string[], required
    - `halt_automatic` boolean, required
  - `applicability` DiagnosticSessionApplicability, required
    - `mode` 'exact_equipment' | 'generic_triage' | 'coverage_insufficient' | 'equipment_ambiguous', required
    - `sku_id` string, uuid, nullable, required
    - `market` string, nullable, required
    - `exact_manual` boolean, required
    - `reason` string, required
  - `trace` DiagnosticSessionTrace, required
    - `engine_version` string, required
    - `reducer_version` string, required
    - `protocol_id` string, nullable, required
    - `protocol_version` string, nullable, required
    - `allowlist_version` string, nullable, required
    - `allowlist_content_hash` string, nullable, required
    - `allowlist_action_ids` string[], nullable, required
    - `consumed_event_types` string[], required
    - `rules_fired` string[], required
  - `quota` DiagnosticSessionQuota, required
    - `state` 'available' | 'low' | 'exhausted_for_new_sessions', required
  - `expires_at` string, date-time, required
  - `request_id` string, required
  - `retryable` boolean, required
  - `actor_profile` 'qualified_hvac_technician', required: Hypothèse de contrat B2B (l’API s’adresse à un professionnel HVAC). Ce n’est pas une preuve d’habilitation électrique ou F-Gas.

## Other responses

- `400`: invalid_params
- `402`: quota_exhausted
- `404`: not_found / surface_disabled
- `409`: idempotency_conflict / session_version_conflict / session_closed

---

[API](https://skmtc.dev/askmarcel/apis/askmarcel-api.md) · [All operations](https://skmtc.dev/askmarcel/apis/askmarcel-api/llms.txt) · [OpenAPI document](https://skmtc.dev/askmarcel/apis/askmarcel-api/revisions/6865e207410e?raw)
