Nearcharger · For Partners

Feed Specification for Partners

Technical documentation for integrating an EV listing feed with the Nearcharger platform.

Version 2.0 Updated July 2026 BEV vehicles only Slovenská verzia
This document will help you prepare your feed for integration with the Nearcharger platform.

Fields are split into required, recommended and optional. Your feed only needs to contain the required fields - we fill in the rest from our catalog.

A1. Master Data API - overview and discovery

What master data is for

Before you send us your feed, you need to know what to map it to. The Master Data API is a public export of our catalog and lookup tables: the list of brands, models, variants (including production years), equipment, colors and other values, together with their stable IDs. Store our IDs in your system as mapping keys and send IDs in your feed instead of free text - this eliminates ambiguous matching.

The entry point is the discovery index - a single URL that returns the list of all available feeds, their version and the time they were last generated:

GET https://nearcharger.sk/wp-json/nearcharger/v1/master-data
Endpoint Contents
/master-dataDiscovery index - list of feeds, schema_version, URLs, generated_at
/master-data/catalogVehicle catalog (variant + production year = 1 item), paginated, filters ?brand= and ?year=
/master-data/brandsBrand → model tree with stable IDs and slugs
/master-data/equipmentEquipment - categories + items
/master-data/enumsOther lookup tables: drivetrain, body type, segment, charge port, listing status, market, listing type, vehicle state, colors, seats, doors

Formats and pagination

{
  "schema_version": 1,
  "generated_at": "2026-07-07T03:30:00+02:00",
  "page": 1,
  "total_pages": 3,
  "total_items": 1101,
  "items": [ ... ]
}

A2. Vehicle catalog (/catalog)

Each catalog item is a specific variant in a specific production year. A variant produced across several years therefore has multiple items - each with its own id. The mapping key is id (stable, never changes).

{
  "id": 15498,
  "slug": "mini-aceman-e-2190",
  "make": "Mini",
  "model": "Aceman",
  "version": "E",
  "year": 2024,
  "parent_model_slug": "mini-aceman",
  "brand_id": 125,
  "model_id": 704,
  "body_type": "suv",
  "segment": "jb-small",
  "drivetrain": "front",
  "charge_port": "ccs",
  "price_eur": 34990,
  "range_wltp": 310,
  "battery_kwh": 42.5,
  "power_kw": 135,
  "power_hp": 184,
  "battery_warranty_years": 8,
  "battery_warranty_km": 160000,
  "detail_url": "https://nearcharger.sk/..."
}
Nullable fields

The version field can be null - some models exist in a single version only (the base model is the variant). In that case the item's identity is make + model + year. Likewise, battery_warranty_years / battery_warranty_km are null when the manufacturer does not publish a warranty.

Filters

A3. Lookup tables (/brands, /equipment, /enums)

Each lookup item has a stable id, an English slug and names in three languages:

{
  "id": 87,
  "slug": "heat-pump",
  "names": { "en": "Heat Pump", "sk": "Tepelné čerpadlo", "cz": "Tepelné čerpadlo" }
}

A4. Stability, versioning and caching

Stability contract

You can rely on master data long-term. We guarantee:

HTTP caching and the recommended pull

A5. Your listings feed (token)

For every partner we can generate a private feed of their published listings on Nearcharger - for example to check what is currently online, or to sync back into your own system. The feed is protected by a static token handed over during onboarding:

GET https://nearcharger.sk/wp-json/nearcharger/v1/partner/{id}/listings?key={token}

Without a valid token the API returns 401. The feed contains only the public listing data (no contact details) and uses the same vehicle structure as your inbound feed:

{
  "id": 15498,
  "url": "https://nearcharger.sk/inzerat/...",
  "title": "Mini Aceman E, 2024",
  "status": "active",
  "car_version_id": 9876,
  "car_version_slug": "mini-aceman-e-2190",
  "make": "Mini",
  "model": "Aceman",
  "version": "E",
  "year": 2024,
  "price": { "amount": 34990, "currency": "EUR", "vat_deductible": true },
  "mileage_km": 12000,
  "color": "black",
  "vin": "...",
  "condition": "used",
  "state": ["first-owner", "service-book"],
  "equipment": ["heat-pump", "matrix-led"],
  "images": { "main": "https://...", "gallery": ["https://...", "https://..."] },
  "location": { "lat": 48.1, "lng": 17.1, "city": "Bratislava" }
}

car_version_id is the ID from /catalog - the link to master data. color, condition, state and equipment contain canonical slugs from /enums and /equipment. Pagination and formats work the same as for master data (section A1).

1. Key information before you start

We currently support BEV (battery-electric) vehicles only

Hybrid vehicles (HEV), plug-in hybrids (PHEV) and hydrogen-powered vehicles are ignored in the current version. Please send us fully electric vehicles only. You therefore do not need to include a "fuel type" field - we assume BEV.

Our catalog is based on EV Database

We source vehicle technical data (battery capacity, range, power, body type, etc.) from ev-database.org, which provides up-to-date information on most old and new EV models. Occasionally a specific vehicle may be missing from the catalog (especially less common models, special editions or very old vehicles). In that case we fill in the data from your feed - which is why the recommended fields in section 4 matter.

Flexible field mapping

You do not have to strictly follow the exact field names used in this document. During onboarding we walk through your feed and map your own field names to our structure. What matters is that the data itself is present in some form. Example: your price field can be called price, cena, cena_s_dph or cash_selling_price - we will map it.

2. Technical requirements

ParameterRequirement
FormatXML (preferred) or JSON
EncodingUTF-8
AvailabilityPublic HTTPS URL, or protected with Basic Auth / Bearer Token
Update frequencyAt least once a day, ideally 2-4 times a day
StructureFlat - each vehicle as a separate element / object in an array
Vehicle typeBEV only - fully electric vehicles
Feed sizeRecommended limit of 500 vehicles per feed. For larger volumes, contact us in advance.

3. Required fields

Without these fields we cannot create the listing.

If even a single required field is missing, we skip the record and flag it as not imported. Pay attention to every item below.

# Field Type Description Example
1 id string Stable unique identifier of the vehicle in the partner system. Must not change during the lifetime of the listing. "0300172062"
2 brand string Vehicle brand "Škoda"
3 model string Vehicle model, ideally without the variant (the variant is a separate field below). "Model Y"
4 variant string Specific version / trim level. Example split: brand Tesla · model Model Y · variant Long Range AWD. If your system does not distinguish model and variant, send them together in the model field and omit this one. "Long Range AWD"
5 year_of_production integer (YYYY) Production year of the vehicle. For new cars this equals the registration year; for used cars it may differ. 2023
6 price integer Vehicle price including VAT (digits only, no spaces) 536000
7 currency string (ISO 4217) Price currency "EUR" or "CZK"
8 vat_deductible boolean (0/1) Whether VAT is deductible 1
9 mileage_km integer Odometer reading in km. 0 for new vehicles. 55279
10 status string Current status. Accepted values: active, available, reserved, sold. "active"
11 photos[] array of URLs At least 1 photo. Public HTTPS URLs. We recommend 10+ photos for better conversion. ["https://.../1.jpg", "https://.../2.jpg"]

Validation rules for required fields

The most reliable mapping: catalog_id from master data

If you map your vehicles to our catalog (part A, the /master-data/catalog endpoint), additionally include a catalog_id field with the catalog item ID in your feed. The brand, model and variant fields then serve only as a cross-check and the match is unambiguous - no text-based name comparison.

Main photo

We treat the first photo in the list as the main one (shown in overviews and listing cards). If your system distinguishes a main photo from the gallery, either send the main photo first or mark it with the <photo main="1"> attribute - we accept both.

4. Recommended fields (covered by the catalog, but ideally provided)

These fields are not technically required, because we have most of them in the EV Database catalog. Providing them, however, helps us match your vehicle to our catalog correctly and covers the cases where the vehicle is missing from the catalog.

Field Type Why we want it If you don't provide it
vin string (17) The most precise identifier + uniqueness across feeds (dedup) We fall back to model + variant matching
engine / powertrain string Factory powertrain / motorization designation (not just battery capacity). Narrows down the exact catalog version, e.g. "Long Range Dual Motor" or "iV 60". We try to derive it from model and variant
battery_kwh integer/float Battery capacity in kWh From the EV Database catalog
wltp_range_km integer Range per the WLTP cycle From the EV Database catalog
power_kw integer Power in kW From the EV Database catalog
body_type string Body type (SUV, Hatchback, Sedan, Coupe, Liftback, Combi, MPV, Pickup) From the EV Database catalog
drive string Drivetrain type (FWD, RWD, AWD, 4WD) From the EV Database catalog
seats integer Number of seats From the EV Database catalog, but it may not always match (the same version can come with 5 or 7 seats), so it is worth providing as well

5. Optional fields (specific to the individual listing)

We do not have these values in the catalog - they are specific to the individual vehicle. If you have them, send them - they increase the credibility of the listing (especially for used vehicles).

5.1 Vehicle registration and battery warranty

Why do we need the registration year and month separately?

We calculate the battery warranty automatically from the first registration date (typically 8 years or 160,000 km, depending on the manufacturer). So instead of an exact warranty end date, all we need is the registration year and month. We do not need the day.

Field Type Description Example
registration_year integer (YYYY) Year of the vehicle's first registration 2021
registration_month integer (1-12) Month of first registration (needed for a precise warranty calculation) 5 (= May)
battery_warranty boolean (0/1) Whether the vehicle has a valid battery warranty 1
battery_warranty_km integer Maximum km covered by the battery warranty (if it differs from the manufacturer default) 160000

5.2 Battery State of Health (SoH)

For a used EV, SoH is one of the most important data points.

If you have a certificate for the SoH measurement (PDF, image), send a link - it significantly increases buyer trust.

Field Type Description Example
soh integer (0-100) Battery State of Health in % (current capacity vs. new) 94
soh_certificate_url URL Link to a PDF / image of the SoH measurement certificate (Aviloo, Moba, manufacturer, etc.) "https://.../soh-cert.pdf"
soh_measurement_date date (YYYY-MM-DD) Date the SoH was measured (optional but useful) "2024-11-15"

5.3 Vehicle appearance

Field Type Description Example
color_exterior string Body color (as text). Ideally a canonical slug from /master-data/enums (e.g. black, pearl-white) - we map free text during onboarding. "black metallic"
color_interior string Interior color / material "black leather"
metallic boolean (0/1) Metallic paint 1

5.4 Location and seller

Field Type Description Example
branch / location string City / branch where the vehicle is located "Bratislava"
address string Full address (optional) "Pestovateľská 5, Bratislava"
gps_lat float GPS coordinates - latitude 48.1486
gps_lng float GPS coordinates - longitude 17.1077
We strongly recommend GPS coordinates

Without gps_lat / gps_lng the listing will not appear in location and distance based filtering. If you do not provide coordinates, we attempt to derive them by geocoding the address or city - which is not always accurate. You get the best results by sending the coordinates directly.

5.5 Price details

Field Type Description Example
price_without_vat integer Price excluding VAT 442975
original_price integer Original price before discount (if the vehicle is discounted) 580000

5.6 Additional information

Field Type Description Example
doors integer Number of doors. We do not have this in the catalog, so it is displayed only if you provide it. 5
description string (text) Free-text vehicle description (may contain HTML break tags) "Vehicle in certified condition..."
equipment[] array of strings List of equipment. One item = one entry. Ideally send our slugs from /master-data/equipment (e.g. heat-pump) - we map your own names during onboarding. ["navigation", "cruise control", "leather seats"]
condition string We need to know whether the car is new, used or a demo vehicle: new, used, demo "used"
state[] array of strings Vehicle state flags (multiple allowed). Ideally send our slugs from /master-data/enums (listing_state group): e.g. first-owner, service-book, imported-vehicle, crashed - we map free text during onboarding. ["first-owner", "service-book"]

6. Structure examples

6.1 XML - minimal example (required fields only)

<?xml version="1.0" encoding="UTF-8"?>
<feed>
  <vehicle>
    <id>VIN123456789</id>
    <brand>Škoda</brand>
    <model>Enyaq</model>
    <variant>iV 60</variant>
    <year_of_production>2023</year_of_production>
    <price>536000</price>
    <currency>CZK</currency>
    <vat_deductible>1</vat_deductible>
    <mileage_km>55279</mileage_km>
    <status>active</status>
    <photos>
      <photo>https://partner.sk/img/123/1.jpg</photo>
      <photo>https://partner.sk/img/123/2.jpg</photo>
    </photos>
  </vehicle>
</feed>

6.2 XML - full example (all fields)

<?xml version="1.0" encoding="UTF-8"?>
<feed>
  <vehicle>
    <!-- REQUIRED -->
    <id>VIN123456789</id>
    <brand>Škoda</brand>
    <model>Enyaq</model>
    <variant>iV 60</variant>
    <year_of_production>2023</year_of_production>
    <price>536000</price>
    <currency>CZK</currency>
    <vat_deductible>1</vat_deductible>
    <mileage_km>55279</mileage_km>
    <status>active</status>
    <photos>
      <photo>https://partner.sk/img/123/1.jpg</photo>
      <photo>https://partner.sk/img/123/2.jpg</photo>
    </photos>

    <!-- RECOMMENDED (from the catalog) -->
    <vin>TMBJB7NY2NF022916</vin>
    <engine>iV 60 (RWD)</engine>
    <battery_kwh>62</battery_kwh>
    <wltp_range_km>412</wltp_range_km>
    <power_kw>132</power_kw>
    <body_type>SUV</body_type>
    <drive>RWD</drive>
    <seats>5</seats>

    <!-- REGISTRATION + BATTERY WARRANTY -->
    <registration_year>2021</registration_year>
    <registration_month>5</registration_month>
    <battery_warranty>1</battery_warranty>
    <battery_warranty_km>160000</battery_warranty_km>

    <!-- SOH -->
    <soh>94</soh>
    <soh_certificate_url>https://partner.sk/cert/123-soh.pdf</soh_certificate_url>
    <soh_measurement_date>2024-11-15</soh_measurement_date>

    <!-- APPEARANCE -->
    <color_exterior>white</color_exterior>
    <color_interior>black leather</color_interior>
    <metallic>1</metallic>

    <!-- LOCATION -->
    <branch>Bratislava</branch>
    <gps_lat>48.1486</gps_lat>
    <gps_lng>17.1077</gps_lng>

    <!-- PRICING -->
    <price_without_vat>442975</price_without_vat>

    <!-- ADDITIONAL -->
    <doors>5</doors>
    <description><![CDATA[Vehicle in perfect condition, first owner.]]></description>
    <condition>used</condition>
    <state>
      <item>first-owner</item>
      <item>service-book</item>
    </state>
    <equipment>
      <item>heat pump</item>
      <item>navigation</item>
      <item>adaptive cruise control</item>
      <item>panoramic roof</item>
    </equipment>
  </vehicle>
</feed>

6.3 JSON - equivalent example

{
  "feed_version": "1.0",
  "generated_at": "2024-12-15T08:00:00Z",
  "vehicles": [
    {
      "id": "VIN123456789",
      "brand": "Škoda",
      "model": "Enyaq",
      "variant": "iV 60",
      "year_of_production": 2023,
      "price": 536000,
      "currency": "CZK",
      "vat_deductible": true,
      "mileage_km": 55279,
      "status": "active",
      "photos": [
        "https://partner.sk/img/123/1.jpg",
        "https://partner.sk/img/123/2.jpg"
      ],

      "vin": "TMBJB7NY2NF022916",
      "engine": "iV 60 (RWD)",
      "battery_kwh": 62,
      "wltp_range_km": 412,
      "power_kw": 132,
      "body_type": "SUV",
      "drive": "RWD",
      "seats": 5,

      "registration_year": 2021,
      "registration_month": 5,
      "battery_warranty": true,
      "battery_warranty_km": 160000,

      "soh": 94,
      "soh_certificate_url": "https://partner.sk/cert/123-soh.pdf",
      "soh_measurement_date": "2024-11-15",

      "color_exterior": "white",
      "color_interior": "black leather",
      "metallic": true,

      "branch": "Bratislava",
      "gps_lat": 48.1486,
      "gps_lng": 17.1077,

      "price_without_vat": 442975,

      "doors": 5,
      "description": "Vehicle in perfect condition, first owner.",
      "condition": "used",
      "state": ["first-owner", "service-book"],
      "equipment": [
        "heat pump",
        "navigation",
        "adaptive cruise control",
        "panoramic roof"
      ]
    }
  ]
}

7. Quick checklist before submitting your feed

8. Frequently asked questions

Can we also send vehicle types other than BEV (e.g. hybrids)?

We currently support fully electric vehicles (BEV) only. If your feed contains other types, you can leave them in - we ignore them. Or send us a separate EV-only feed.

What if we don't have some of the recommended fields?

No problem - we fill those fields in from the EV Database catalog based on brand + model + variant. The more data you provide, the more precise the matching and the higher the chance we identify the vehicle correctly.

What happens if our vehicle is not in EV Database?

In that case we rely exclusively on the data from your feed. The recommended fields (battery_kwh, wltp_range_km, power_kw, body_type, drive) then become critical - without them we cannot display complete technical information. For less common models, be sure to include them.

Do we have to use your exact field names?

No. Our integration supports mapping your own field names to our structure. During onboarding we walk through your feed and set up the mapping. What matters is that the data itself is present in some form.

How often are changes imported?

Once a day by default. On request we can set up more frequent imports (2-4 times a day) or real-time webhooks.

What happens when we sell a vehicle?

Simply remove it from the feed or set its status to sold. We reflect it automatically within 48 hours (a grace period that protects against accidental feed outages).

Can we send vehicles from multiple branches in a single feed?

Yes. Use the branch / location field to distinguish branches.

What is the maximum feed size you can handle?

The currently recommended limit is up to 500 vehicles per feed. For higher volumes (over 500), please contact us in advance - we will either agree on a split into multiple feed files (e.g. by branch or model), or set up a dedicated batch import. This limit reflects what we can handle reliably without risking outages.

Do you host the photos yourself, or pull them from our servers on every page view?

We download them to our side (Cloudflare R2) and serve them from our own CDN. You only need to make sure the photo URLs are reachable at import time and that the photos do not have hotlink protection enabled.

Can we change the feed structure after implementation?

Yes, but please notify us at least 7 days before the change. Otherwise the import may fail and your listings would be left with stale data.

Why do you need the registration year and month separately?

We calculate the battery warranty automatically from the first registration date. So instead of an exact warranty end date (which varies across manufacturers), we only need the registration year and month. From these we compute the exact warranty end date ourselves, following the given manufacturer's rules.

Why don't you need a fuel type / transmission type field?

We currently support BEV (battery-electric) vehicles only, which always have an electric motor and an automatic transmission. You therefore do not need to provide these fields - we add the values automatically.

9. Downloads

For self-service feed validation before submission, we provide machine-readable definitions of the listing template (part B):

File Description
listing-template.schema.json JSON Schema (draft 2020-12) for the JSON feed - validate your feed with e.g. ajv or an online validator
listing-template.xsd XSD schema for the XML feed - validate with xmllint --schema or any XML tool

The schemas validate the structure and types of both required and optional fields. They do not enforce exact field names - as noted in section 1, we map your own field names during onboarding. Using the schema names, however, makes the integration fastest.