Compliance
Reference for OSS thresholds, tax decision sources, OSS/IOSS registrations, Union OSS previews, multi-jurisdiction reporting, and VAT compliance exports.
Overview
Compliance endpoints help you monitor governed Article 59c distance-selling threshold evidence, validate individual consignments against IOSS limits, manage OSS/IOSS scheme registrations, preview Union OSS report outputs, review multi-jurisdiction filing exposure, and download accountant-facing export packages. The authenticated dashboard combines threshold evidence with tax-registration data to produce a conflict-aware, registration-aware OSS Overview. Threshold notifications use the same governed evidence and are withheld when required evidence is incomplete. Read endpoints require a V2 API key with full or read-only scope; write endpoints require full scope.
Reviewed Article 59c country thresholds are read-only in normal account use. A threshold update becomes selectable only as a complete reviewed EU Member State package, so a one-country change cannot silently remove unchanged country coverage. Deployment access-policy maintenance is applied atomically, preserving those read-only protections throughout the update.
Tax Decision Sources
The authenticated Compliance → Decision Sources page shows the reviewed official sources and architecture boundaries for planned cross-platform tax reconciliation. It records the selected legal baseline, later amendments, effective intervals, scenario-specific evidence, known gaps, and shared review reasons.
For specified legal scenarios, the page shows each source's document kind and legal effect separately from supporting guidance, using ordered, gap-free source-coverage segments. When more than one legal source appears in a segment, every listed source must cover the whole segment and every provision and evidence signal shown; they are not interchangeable alternatives. Historical OSS, marketplace, and IOSS rows follow every published VAT Directive consolidation from 1 July 2021 through the current reviewed baseline. A consolidation is an official but non-binding compilation; the authentic acts published in the Official Journal are binding. Current Article 201 coverage ends on 30 June 2028, before its replacement applies. Source effective dates describe reviewed coverage for the listed provisions; they are not publication dates or a claim that every provision in a document applies throughout the interval.
The page also shows the source-review policy. Reviews must be renewed at least every 180 days and sooner when an upstream change is detected, an official authority issues a notice, or a rule-pack release is prepared.
“Specified” means that a scenario's source and architecture requirements are defined. It does not mean the automatic runtime rule is available. Optional or Member-State-dependent treatment stays visibly Unsupported until an approved national rule set exists. Commerce-platform fields are shown as source evidence, not as legal determinations.
The source matrix supports transparency and implementation review. It is not legal advice and does not make an unresolved transaction filing-ready.
OSS / IOSS Tax Registrations
GET /v1/tax-registrations
POST /v1/tax-registrations
PATCH /v1/tax-registrations/{id}Required scope: full or read-only for GET; full for POST and PATCH
Stores scheme-registration metadata for the authenticated account. Registration records are account-scoped, returned with masked identifiers only, and ordered by most recent effective window. Overlapping non-excluded effective windows for the same scheme are rejected.
status=ended requires an effective_to date. Use status=excluded to retire stale or duplicate
overlapping rows, especially same-start duplicates that should no longer count toward filing
coverage.
The dashboard uses the same overlap rule for coverage. Active Union OSS rows with unresolved overlaps are shown as cleanup required and do not count as filing-ready coverage until the duplicate window is ended or excluded.
Registration Fields
| Field | Type | Description |
|---|---|---|
id | integer | Numeric registration ID |
scheme_type | string | union_oss, non_union_oss, or ioss |
member_state_identification | string | EU Member State code used as the Member State of identification |
vat_registration_number_masked | string | Optional masked VAT or IOSS identifier; full identifiers are never returned |
ioss_intermediary_name | string | Optional IOSS intermediary name; only valid for ioss registrations |
ioss_intermediary_number_masked | string | Optional masked IOSS intermediary number; only valid for ioss registrations |
effective_from | string | Start date (YYYY-MM-DD) |
effective_to | string | Optional end date (YYYY-MM-DD) |
status | string | active, pending, ended, or excluded |
Reporting Eligibility
Union OSS report previews require exactly one overlapping active or ended union_oss registration for the requested quarter. pending, excluded, and conflict-cleanup registrations are visible in registration management responses, but they do not satisfy report-preview eligibility.
Example Request
curl -X POST https://api.vat-engine.app/v1/tax-registrations \-H "X-API-Key: YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{ "scheme_type": "union_oss", "member_state_identification": "DE", "effective_from": "2026-01-01", "status": "active"}'On PATCH, omit a property to keep its current value. Send an empty string for optional string
fields or effective_to to clear the stored value. scheme_type is immutable.
Union OSS Quarterly Summary Preview
GET /v1/reports/oss-quarterly-summary?period=YYYY-QnRequired scope: full or read-only
Builds a read-only Union OSS quarterly summary preview from filing-grade vat_supply_events. The result is grouped into the Union OSS return sections 2a, 2b, 2c, and 2d.
Inclusion Rules
- Requires exactly one overlapping
activeorendedunion_ossregistration for the requested quarter. - Includes
saleevents as current-quarter return lines. - Nets same-quarter corrections back into the current return lines when the refund, cancellation, credit note, or adjustment can be linked to the original filed supply.
- Emits later-period correction rows keyed by the original OSS period and Member State of consumption when the linked original supply falls in an earlier quarter.
- Excludes refunds, cancellations, credit notes, and adjustments that cannot be linked to an original filed supply event.
- Excludes source events whose
classification_statusis notclassified, plus zero-rated, exempt, new-means-of-transport, and assembly/installation supplies. - Uses ECB rates from the last day of the quarter when conversion is required, including the return currency of the Member State of identification.
- Keeps separate rows when more than one actual VAT rate applies within the same standard/reduced return grouping.
- Computes the payable grand total per Member State of consumption; a negative balance in one Member State does not offset VAT payable in another Member State.
Response Fields
| Field | Type | Description |
|---|---|---|
scheme_type | string | Always union_oss |
period_key | string | Quarter key such as 2026-Q1 |
member_state_identification | string | Member State of identification from the eligible registration |
return_currency | string | Filing currency for the Member State of identification |
totals | object | Taxable, current-VAT, correction-VAT, and payable-VAT totals in return-currency minor units |
rows | array | Current-quarter return-line rows grouped by section, country, supply kind, and VAT rate |
corrections | array | Later-period correction rows keyed by original period and Member State of consumption |
balances | array | Per-Member-State current VAT, correction VAT, payable VAT, and grand-total inclusion flag |
warnings | array | Warning codes and counts for excluded or blocked source events |
total_source_event_count | integer | Source events loaded for the quarter |
included_source_event_count | integer | Source events included in return lines |
excluded_source_event_count | integer | Source events excluded from return lines |
Warning Codes
| Code | Meaning |
|---|---|
classification_excluded | Source events were not classified, including explicitly excluded rows |
needs_review_excluded | Source events are still marked as needs_review |
missing_exchange_rate_excluded | Required quarter-end ECB rates were unavailable |
correction_reference_missing_excluded | A non-sale event could not be linked to an original filed supply |
correction_reference_invalid_excluded | A linked original event was not a classified sale or failed correction validation |
unsupported_rate_category_excluded | Rate category does not map to the current OSS preview output |
unsupported_supply_kind_excluded | Supply kind is unsupported for the current Union OSS preview |
Example Request
curl "https://api.vat-engine.app/v1/reports/oss-quarterly-summary?period=2026-Q1" \-H "X-API-Key: YOUR_API_KEY"Union OSS Country VAT Breakdown Preview
GET /v1/reports/country-vat-breakdown?period=YYYY-QnRequired scope: full or read-only
Builds a read-only country VAT breakdown using the same inclusion, exclusion, warning, and quarter-end ECB conversion rules as the Union OSS quarterly summary preview. The response groups totals first by Member State of consumption, preserves payable-per-country balances, and nests both current-quarter rows and later-period correction rows for that country.
Response Fields
| Field | Type | Description |
|---|---|---|
scheme_type | string | Always union_oss |
period_key | string | Quarter key such as 2026-Q1 |
member_state_identification | string | Member State of identification from the eligible registration |
return_currency | string | Filing currency for the Member State of identification |
totals | object | Total taxable, current-VAT, correction-VAT, and payable-VAT amounts across all countries |
countries | array | Per-country totals plus current return-line rows and later-period correction rows |
warnings | array | Warning codes and counts shared with the quarterly summary |
total_source_event_count | integer | Source events loaded for the quarter |
included_source_event_count | integer | Source events included in country totals |
excluded_source_event_count | integer | Source events excluded from country totals |
Example Request
curl "https://api.vat-engine.app/v1/reports/country-vat-breakdown?period=2026-Q1" \-H "X-API-Key: YOUR_API_KEY"Union OSS Accountant Exports
GET /v1/reports/oss-quarterly-summary/export?period=YYYY-Qn&format=csv|json
GET /v1/reports/country-vat-breakdown/export?period=YYYY-Qn&format=csv|jsonRequired scope: full or read-only
The European Commission states that OSS VAT returns are submitted quarterly in the Union scheme via the Member State of identification and are additional to domestic VAT returns. These endpoints export the current Union OSS preview state for accountant review; they do not create or lock a filed return.
Format Behavior
format=jsonreturns a manifest plus an export-specific report payload with the same grouping and warnings as the preview, but exported amounts use major-unit decimal strings in the return currency.format=csvreturns a line-oriented CSV with manifest metadata repeated on each row, and all exported amount columns use major-unit decimal strings rather than_minorintegers.- Export packages now include current-quarter rows, later-period correction rows, and per-Member-State payable balances.
- When a quarter has no included rows, the CSV still emits a deterministic manifest-only nil-return row with empty detail fields so period and warning metadata are preserved.
- Both exports reuse the same registration eligibility, warnings, exclusions, and quarter-end ECB conversion rules as their source preview.
Amount Fields
All exported amount fields use major units in the return currency, for example 100.00 rather than 10000. This applies to both the JSON package payload and the CSV columns.
Rate Field
Export rows use the accountant-readable vat_rate_pct field, for example 20.00 or 7.00.
Manifest Fields
| Field | Type | Description |
|---|---|---|
export_kind | string | Export shape identifier, e.g. union_oss_quarterly_summary_preview |
export_version | integer | Package schema version |
generated_at | string | UTC generation timestamp |
scheme_type | string | Always union_oss |
period_key | string | Quarter key such as 2026-Q1 |
member_state_identification | string | Member State of identification from the eligible registration |
return_currency | string | Filing currency for the Member State of identification |
conversion_rule | string | Quarter-end ECB conversion note |
scope_note | string | Preview scope note describing current-quarter rows, correction rows, and original-reference requirements |
source_event_counts | object | Total, included, and excluded event counts |
warnings | array | Warning codes and counts copied from the preview logic |
Example Requests
# Quarterly summary JSON packagecurl -L "https://api.vat-engine.app/v1/reports/oss-quarterly-summary/export?period=2026-Q1&format=json" -H "X-API-Key: YOUR_API_KEY"# Country breakdown CSV packagecurl -L "https://api.vat-engine.app/v1/reports/country-vat-breakdown/export?period=2026-Q1&format=csv" -H "X-API-Key: YOUR_API_KEY"Locked Union OSS Return Periods
GET /v1/reports/locked-return-periods/union-oss?period=YYYY-Qn
POST /v1/reports/locked-return-periods/union-oss?period=YYYY-Qn
POST /v1/reports/locked-return-periods/union-oss/filed?period=YYYY-Qn
GET /v1/reports/locked-return-periods/union-oss/exports/{exportID}Required scope: full or read-only for GET; full for POST
These endpoints persist and retrieve immutable Union OSS filing snapshots. Locking a quarter freezes the current accountant preview, stores filing metadata, and generates immutable JSON and CSV artifacts for later download. Marking the period as filed preserves the original filing audit state rather than regenerating the snapshot.
Behavior
GET /v1/reports/locked-return-periods/union-ossreturns the latest locked quarters for the authenticated account.- Supplying
period=YYYY-Qnaddscurrent_periodwhen that quarter has already been locked, including the immutable export list for that specific quarter. POST /v1/reports/locked-return-periods/union-osscreates the immutable snapshot from the current preview and fails with409if the quarter is already locked.POST /v1/reports/locked-return-periods/union-oss/filedmarks an existing locked quarter as filed and keeps the first filing audit metadata on repeat requests.GET /v1/reports/locked-return-periods/union-oss/exports/{exportID}downloads one stored artifact by ID.
Response Fields
| Field | Type | Description |
|---|---|---|
status | string | locked or filed |
filing_status | string | Filing readiness state captured when the quarter was locked |
filing_status_detail | string | Human-readable explanation of the captured filing state |
nil_return_eligible | boolean | Whether the locked quarter qualified as a nil-return candidate |
total_source_event_count | integer | Source events evaluated when the snapshot was created |
included_source_event_count | integer | Source events included in the locked snapshot |
excluded_source_event_count | integer | Source events excluded from the locked snapshot |
warning_count | integer | Count of captured exclusion or review warnings |
jurisdiction_count | integer | Number of reportable Member States represented in the locked quarter |
export_count | integer | Number of immutable export artifacts stored for the quarter |
exports | array | Optional stored JSON/CSV artifact metadata when a specific quarter is selected |
Example Requests
# List recent locked quarterscurl "https://api.vat-engine.app/v1/reports/locked-return-periods/union-oss" -H "X-API-Key: YOUR_API_KEY"# Lock a quartercurl -X POST "https://api.vat-engine.app/v1/reports/locked-return-periods/union-oss?period=2026-Q1" -H "X-API-Key: YOUR_API_KEY"# Mark the locked quarter as filedcurl -X POST "https://api.vat-engine.app/v1/reports/locked-return-periods/union-oss/filed?period=2026-Q1" -H "X-API-Key: YOUR_API_KEY"Union OSS Accountant Format
GET /v1/reports/oss-accountant-report?period=YYYY-QnRequired scope: full or read-only
Returns a combined accountant-friendly Union OSS quarter view for review before filing. It reuses the same quarter preview rules as the summary and country-breakdown endpoints, exposes the export-safe major-unit amount strings and vat_rate_pct values, and includes later-period correction rows plus country-level payable balances in one JSON payload.
Filing Context Rules
filing_due_datefollows the OSS rule that the return is due by the end of the month following the quarter.nil_return_eligibleis intentionally conservative: it is onlytruewhen zero source events were recorded for the selected quarter.- If source events exist but none are currently included, the response stays in
review_requiredrather than silently treating the quarter as a nil return. - The endpoint does not create, lock, or submit a filed return.
Response Shape
| Field | Type | Description |
|---|---|---|
manifest | object | The same manifest metadata used by the export package |
filing_context | object | Due date plus nil-return/status hint |
summary | object | Quarterly summary totals, current rows, and later-period correction rows using major-unit amounts and vat_rate_pct |
country_breakdown | object | Country totals, nested current rows, and correction rows using the same accountant-readable fields |
Example Request
curl "https://api.vat-engine.app/v1/reports/oss-accountant-report?period=2026-Q1" -H "X-API-Key: YOUR_API_KEY"OSS / IOSS Filing Prep Workspace
GET /v1/reports/filing-prep?period=YYYY-QnRequired scope: full or read-only
Returns an account-scoped filing workspace for the selected quarter. The response combines
Union OSS quarter readiness with month-by-month IOSS summaries derived from committed
imported_goods supply events.
Business Rules
- Quarter-based reporting endpoints accept supported
YYYY-Qnquarter keys only; malformed or out-of-range quarters return400 invalid_period. - Union OSS readiness reuses the same preview, warning, nil-return, and payable-balance logic as the existing quarterly summary surface.
- IOSS months are generated from committed imported-goods supply events only.
- IOSS exclusions include missing or overlapping registration coverage, excise goods, consignments above EUR 150, non-EUR consignment values that lack a verified EUR value, missing third-country origin, and rows outside the active registration window.
- Covered months with zero imported-goods source events remain visible as
nil_return_candidatebecause the import scheme return period is monthly. - The endpoint does not create, lock, submit, or persist a filed return.
Response Shape
| Field | Type | Description |
|---|---|---|
report_kind | string | Shape identifier, oss_ioss_filing_prep_workspace |
registrations | object | Account-level Union OSS / IOSS registration coverage snapshot |
union_oss | object | Quarter readiness, due date, totals, and warning categories |
ioss | object | Quarter-level IOSS month summary status, totals, warnings, and source counts |
return_period | object | Optional locked Union OSS return metadata when the selected quarter is locked |
official_basis | array | Rule anchors used by the workspace |
Example Request
curl "https://api.vat-engine.app/v1/reports/filing-prep?period=2026-Q1" -H "X-API-Key: YOUR_API_KEY"OSS / IOSS Multi-jurisdiction Preview
GET /v1/reports/multi-jurisdiction?period=YYYY-QnRequired scope: full or read-only
Returns a read-only filing-exposure view for the selected quarter. The response reuses the existing Union OSS quarterly preview and country-breakdown rules for reportable Member State totals, then adds month-by-month IOSS summaries for committed imported-goods events inside the quarter.
Business Rules
- Union OSS jurisdiction totals require exactly one overlapping
activeorendedunion_ossregistration for the requested quarter. - Included Union OSS amounts, exclusions, warnings, correction rows, payable balances, and return-currency conversion match the existing quarterly summary and country VAT breakdown endpoints.
- Included rows are grouped by Member State of consumption and preserve the Union OSS sections
2a,2b,2c, and2d. - IOSS periods are monthly, and each month applies the EUR 150 intrinsic-value ceiling, excise exclusion, registration-window checks, and month-end ECB conversion rules independently.
- The endpoint does not create, lock, submit, or persist a filed return.
Response Shape
| Field | Type | Description |
|---|---|---|
report_kind | string | Shape identifier, oss_ioss_multi_jurisdiction_preview |
union_oss | object | Quarter context, filing due date, source-event counts, jurisdiction count, and totals |
ioss | object | Month-by-month import-scheme statuses, totals, warnings, and imported-goods counts |
jurisdictions | array | Member State of consumption totals with return sections and event counts |
warnings | array | Warning codes reused from the Union OSS preview logic |
official_basis | array | Rule anchors used by the preview |
Example Request
curl "https://api.vat-engine.app/v1/reports/multi-jurisdiction?period=2026-Q1" -H "X-API-Key: YOUR_API_KEY"Threshold Status
GET /v1/compliance/threshold-statusRequired scope: full or read-only
Returns governed Article 59c threshold evidence for the current and preceding calendar years. VAT Engine selects the reviewed threshold for the supplier's establishment Member State in its statutory currency (for example, PLN 42,000 for Poland), stops current-year evidence at the exact authenticated source-event cutoff, and never substitutes daily reporting FX for the legal threshold. Each candidate has separate disposition, evidence-quality, and materiality dimensions. A B2B, domestic, imported distance-sale, installed-goods, or new-means exclusion therefore remains conclusive when an unrelated field is absent; only a material unresolved fact can block the comparison. An incomplete response contains no checks entry and therefore no exceeded, remaining, percentage, or crossing conclusion. IOSS remains a separate per-consignment test.
Reviewed threshold releases are complete EU27 snapshots. VAT Engine rejects a partial country-only successor before it becomes selectable, so a legal update for one Member State cannot silently remove the still-valid reviewed threshold for another Member State.
The threshold comparison is not a complete place-of-supply decision. Sole-establishment evidence
and any Article 59c taxation option are reported as separate applicability conditions. Registration
and filing readiness also remain separate from the legal threshold comparison. For goods,
destination-versus-establishment is the applicable condition through 31 December 2026. From
1 January 2027, dispatch must also begin in the supplier's establishment Member State. A statutory
option and an amount crossing are retained as simultaneous triggers; primary_treatment_driver
identifies the deterministic causal trigger for display, while an earlier option never erases
factual crossing provenance.
Authenticated refunds linked to an original qualifying supply adjust that supply's statutory calendar-year amount. The first crossing remains immutable historical evidence even if a later adjustment reduces the final net amount. An unlinked correction is material unresolved evidence and blocks publication instead of being silently ignored.
The dashboard OSS Overview combines this endpoint with /v1/tax-registrations and unread
threshold-notification state. When turnover is exceeded but an active Union OSS registration is
already on file, the dashboard keeps threshold monitoring visible but treats the account as
already covered for Union OSS filing.
When the dashboard reports a material Article 59c gap, Review imported events opens a queue scoped to events whose unresolved facts can change the statutory result, even if their product classification is already complete. Open source profiles opens the store-level defaults for supplier establishment and normal dispatch. A profile default is used only when the imported event does not provide that fact; authenticated event evidence takes priority. Saving a changed default creates a successor shadow decision without rewriting historical decisions, ledger totals, filing periods, or locked records.
Opening the general Review queue shows only imported events whose effective state currently requires review, and its badge counts that same set. Classified events with material Article 59c fact gaps remain available through the explicit Review imported events action on OSS Overview; they do not inflate the general Review queue badge.
POST /v1/vat/calculate does not update this threshold view by itself. The threshold status is
built from committed supply events, while VAT calculations are logged separately as audit
transactions unless the same sale is also committed into the supply ledger.
Response Fields
| Field | Type | Description |
|---|---|---|
checks | array | One OSS threshold result when closing evidence is complete or an earlier authenticated crossing is already proven; otherwise empty |
checks[].currency / currency_scale | string / integer | Reviewed establishment threshold currency and ISO 4217 scale |
checks[].current_minor / previous_year_minor | integer | Qualifying net turnover for both statutory calendar years after authenticated linked adjustments |
checks[].current_comparison / previous_comparison | string | unknown while that year's closing coverage is incomplete; otherwise at_or_below or above |
checks[].source_event_count / previous_year_event_count | integer | Qualifying included event counts for each year |
current_year_candidate_event_count / preceding_year_candidate_event_count | integer | All supply events assessed for the two statutory years |
current_year_excluded_event_count / preceding_year_excluded_event_count | integer | Events conclusively outside the Article 59c amount |
current_year_blocking_event_count / preceding_year_blocking_event_count | integer | Material unresolved events capable of changing the comparison |
current_year_coverage / preceding_year_coverage | array | Counts grouped by reason, disposition, evidence quality, materiality, and original currency where relevant |
checks[].current_year_crossing / checks[].preceding_year_crossing | object | Authenticated source-event time and cumulative amounts that first moved the total above the threshold; retained after later adjustments while internal identifiers remain private |
checks[].historical_crossing_proven | boolean | true when a current- or preceding-year crossing is immutably proven; later refunds and later evidence gaps do not reset it |
checks[].establishment_country | string | Establishment Member State used to select the reviewed policy |
checks[].release_version / policy_version | string | Immutable legal-source release and selected policy versions |
checks[].cutoff_at | string | Exact UTC evidence cutoff |
evidence_status | string | resolved, incomplete_evidence, conflicting_evidence, or not_applicable |
article_59c_applicability_status | string | Separate applicability state; threshold evidence does not prove sole establishment |
threshold_evidence_status | string | complete, incomplete, conflicting, or not_applicable, independent of filing readiness |
filing_readiness | string | Filing-route state; a missing registration does not make the underlying liability legally unresolved |
checks[].treatment_triggers / checks[].primary_treatment_driver | array / string | Simultaneous option/crossing triggers and the deterministic primary display driver |
issues | string[] | Bounded evidence-gap codes; no source payloads or protected identifiers |
eur_only | boolean | Compatibility field; true means governed threshold evidence is incomplete, not that a partial EUR total was accepted |
unconverted_currencies | string[] | Currencies awaiting a governed statutory conversion policy |
disclaimer | string | Threshold-evidence and legal-applicability boundary; when a historical crossing is proven but closing evidence is incomplete, it preserves the crossing and zero statutory headroom instead of claiming that no result was returned |
Example Request
curl https://api.vat-engine.app/v1/compliance/threshold-status \-H "X-API-Key: YOUR_API_KEY"Threshold Check
POST /v1/vat/threshold-checkRequired scope: full or read-only
Checks a threshold depending on the type:
- OSS — Evaluates the current and preceding calendar years using the same reviewed establishment-currency policy and authenticated-event aggregation as shadow expected treatment. Arbitrary partial-year ranges are rejected. Incomplete evidence returns
422 article_59c_evidence_incompleteunless an earlier authenticated crossing is already proven; a proven crossing remains available with the incomplete closing-evidence status. - IOSS — Validates a single consignment amount against the €150 threshold (Art. 369l). No transaction aggregation is performed.
Request Body (OSS)
| Parameter | Type | Required | Description |
|---|---|---|---|
threshold_type | string | Yes | "oss" |
from | string | No | Must be 1 January of the cutoff year; defaults to that date. |
to | string | No | UTC cutoff date (YYYY-MM-DD), no later than today. Defaults to the current instant. |
Request Body (IOSS)
| Parameter | Type | Required | Description |
|---|---|---|---|
threshold_type | string | Yes | "ioss" |
amount_minor | integer | Yes | Consignment value in EUR minor units (e.g. 15000 = €150.00) |
Response Fields
| Field | Type | Description |
|---|---|---|
threshold_type | string | "oss" or "ioss" |
threshold_minor | integer | Reviewed threshold amount in currency minor units |
currency / currency_scale | string / integer | Statutory threshold currency and ISO 4217 scale (OSS); EUR/2 for IOSS |
current_minor | integer | Aggregated turnover (OSS) or consignment value (IOSS) |
remaining_minor | integer | Closing-balance headroom before crossing; always zero after a proven crossing |
percentage_used | integer | Closing-balance percentage (0-100+); it may fall below 100 after a refund without reversing a proven crossing |
exceeded | boolean | Whether a current- or preceding-year crossing has been proven; later adjustments do not reset it |
warning | boolean | true when within 10% of threshold but not exceeded |
previous_year_minor / previous_comparison | integer / string | Preceding-year evidence and comparison (OSS only) |
evidence_status | string | resolved, or incomplete_evidence only when a proven crossing can still be returned safely |
historical_crossing_proven | boolean | Whether immutable crossing provenance exists independently of the closing balance |
unconverted_currencies | string[] | Currency evidence awaiting an approved statutory conversion policy |
disclaimer | string | Threshold-evidence boundary that distinguishes an incomplete closing balance with a proven crossing from no publishable conclusion |
Example Requests
# OSS — aggregate checkcurl -X POST https://api.vat-engine.app/v1/vat/threshold-check \-H "X-API-Key: YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"threshold_type": "oss", "from": "2026-01-01", "to": "2026-03-31"}'# IOSS — per-consignment checkcurl -X POST https://api.vat-engine.app/v1/vat/threshold-check \-H "X-API-Key: YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"threshold_type": "ioss", "amount_minor": 14500}'OSS status uses both statutory years and a fixed reviewed national-currency equivalent where applicable. Daily ECB reporting rates are not legal threshold evidence. Threshold comparison, Article 59c applicability, registration evidence, and filing readiness remain separate states.
Sources
Reference for source profiles used to group stores, channels, and marketplaces for reporting, imports, audits, and compliance workflows.
Health & Readiness
Reference for the public /health and /ready endpoints, including expected responses, readiness semantics, and how to use them in uptime checks.