---
title: "Plan Ateco"
method: POST
path: "/api/plan/ateco"
tags: ["plan"]
---

# Plan Ateco

`POST /api/plan/ateco`

## Request

- Base URL: `https://api.taxcompass.it` (the document declares no server; this is the origin it was published from)
- URL: `https://api.taxcompass.it/api/plan/ateco`
- Auth: none declared

Suggest ATECO code(s) from the activity description — async enrich.

``_ateco_candidates`` already swallows model errors and returns ``[]``, so
this responds 200 with an empty list rather than erroring when the LLM is
down — the card then shows its fallback copy instead of breaking the plan.

## Request body

- PlanRequest: Structured intake answers → one-shot Setup Plan. Five of the Italy pack's six ``critical`` slots are required here; the rest are optional but improve the cross-border risk flags + accountant match. ``regulated_profession`` is the exception — it is **derived** from the activity, not asked (see the field comment), so the intake never poses a question a foreign founder can't answer.
  - `locale` 'en' | 'pl' | 'it' | 'de' | 'fr' | 'es'
  - `current_residency` string, required
  - `target_setup` 'moving_to_italy' | 'staying_abroad' | 'already_in_italy', required
  - `expected_annual_revenue_eur` number, required
  - `activity_description` string, required
  - `impatriate_eligibility` boolean, required
  - `regulated_profession` boolean, nullable
  - `expected_annual_costs_eur` number, nullable
  - `business_type` 'professionista' | 'artigiano' | 'commerciante', nullable
  - `passport_country` string, nullable
  - `permit_status` 'eu_no_permit_needed' | 'has_self_employment' | 'has_other_permit' | 'needs_permit' | 'unsure', nullable
  - `ateco_chosen` string, nullable
  - `single_client_is_employer` boolean, nullable
  - `existing_business` string, nullable
  - `client_situation` string, nullable
  - `family_situation` string, nullable
  - `pension_situation` string, nullable
  - `prior_employment_income_eur` number, nullable
  - `social_security_coverage` 'none' | 'eu_a1' | 'non_eu_totalization' | 'unsure', nullable
  - `days_in_italy_this_year` integer, nullable
  - `urgency` string, nullable

## Response `200`

Successful Response

- AtecoResponse: AI-suggested ATECO 2025 candidates for the Setup Plan.
  - `ateco_candidates` AtecoCandidate[]
    - `code` string, required
    - `title` string, required
    - `title_en` string, nullable
    - `rationale` string, required
    - `coefficiente` integer, nullable
    - `chunk_id` string, nullable
    - `url` string, nullable

## Other responses

- `422`: Validation Error

---

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