Skip to content

Public API v1

The moldova.travel catalog — tourism experiences, events and operators' packages — as JSON, in Romanian and English, with no API key. The same data and the same publication rule as the site: what is not approved appears nowhere.

This page is for developers — it describes the site's public API, with request and response examples. If you want to plan a trip, start here:

The endpoint and parameter descriptions below are in English, like the OpenAPI document: they are reference text for developers and AI assistants.

In short

Base URL
https://moldova.travel/api/v1
Access
No key, no account. GET requests only; nothing can be written through the API.
Rate limit
60 requests per minute per client IP address. Beyond that, the answer is a 429 with a Retry-After header.
Language
The lang parameter accepts: ro, en. Without lang, the answer is in ro. An unpublished language is a 400 error, never content in another language.
Links
Every item carries url (its page on the site) and goUrl — the tracked link that leads to the partner. goUrl is the only way to reach the partner; contact details are not in the API. Do not rewrite or bypass it.
Prices
Every price is in Moldovan lei (MDL) and indicative (indicative: true), supplied by the partner. On 2 October 2026 the prices and price bands of listings stored in euro were converted to lei (19.5 lei to the euro, rounded to 10 lei); the shape of the response did not change. The platform takes no payment and confirms no booking.
Caching
200 responses carry a public Cache-Control and may be kept for a few minutes. The catalog changes rarely; do not poll it every second.
Errors
Errors are RFC 9457 problem details (application/problem+json) with a stable errorCode field and, for validation, a per-field errors list.

OpenAPI document

The machine-readable description of this API, for client generators and assistants: openapi/v1.json

https://moldova.travel/api/v1/openapi.json

Endpoints

GET/api/v1/experiences

List approved experiences

One page of the experience catalog, filterable by region, category, price band, lodging and traveller type — the same filters as the website's catalog, applied by the same service. Ordered as the site orders them.

Parameters · 8
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en
region
A region's stable code, e.g. orhei — the value every item's region.code carries. An unknown code is a 400.
Example: orhei
category
Comma-separated category tokens, OR-ed: nature, culture, gastronomy, wine, adventure, wellness, history, religious, rural-tourism, entertainment, other. An unknown token is a 400.
Example: wine,gastronomy
price
Comma-separated price-band tokens, OR-ed: free, budget, moderate, premium, luxury, unpriced.
Example: free,budget
audience
Comma-separated traveller-type tokens; matches experiences suited to ANY of them: families, couples, solo, groups, seniors, reduced-mobility, adults-only.
Example: families
lodging
true keeps only places where a visitor can spend the night (guesthouses, hotels, farms with rooms); absent or false applies no filter.
Example: true
page
1-based page number, default 1. A page past the last one is a 404 with errorCode EXPERIENCE_NOT_FOUND, EVENT_NOT_FOUND or PACKAGE_NOT_FOUND.
Example: 2
pageSize
Items per page, 1 to 48. Default: the site's own catalog page size.
Example: 12

Example request

curl \
  "https://moldova.travel/api/v1/experiences?lang=en&category=wine&pageSize=5"
Example response
{
  "items": [
    {
      "id": 12,
      "slug": "chateau-vartely-cellar-tour",
      "lang": "en",
      "name": "Château Vartely cellar tour",
      "summary": "A guided walk through the cellars followed by a tasting of five wines.",
      "category": "wine",
      "region": {
        "code": "orhei",
        "name": "Orhei and the Răut valley",
        "slug": "orhei-and-the-raut-valley"
      },
      "price": {
        "amount": 480,
        "currency": "MDL",
        "indicative": true
      },
      "priceBand": "moderate",
      "audience": [
        "couples",
        "groups"
      ],
      "durationMinutes": 120,
      "offersLodging": false,
      "image": "https://moldova.travel/media/experiences/12/cover.webp",
      "url": "https://moldova.travel/en/experiences/12-chateau-vartely-cellar-tour",
      "goUrl": "https://moldova.travel/go/e/12/api",
      "goKind": "website"
    }
  ],
  "page": 1,
  "pageSize": 12,
  "totalCount": 27,
  "totalPages": 3,
  "lang": "en"
}

GET/api/v1/experiences/{id}

One experience

Everything the experience's page shows: description, location, opening hours, seasonal notes, photos, tags, the partner's name — and goUrl, the only way to reach the partner. Contact details are deliberately absent.

Parameters · 2
id
The item's stable numeric id — the id field of a list item. Slugs are decorative and may change; ids do not.
Example: 12
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en

Example request

curl \
  "https://moldova.travel/api/v1/experiences/12?lang=en"
Example response
{
  "id": 12,
  "slug": "chateau-vartely-cellar-tour",
  "lang": "en",
  "name": "Château Vartely cellar tour",
  "description": "The tour starts in the fermentation hall and ends in the barrel cellar, where five wines are tasted with local cheese. Booking is through the winery's own site.",
  "descriptionMarkdown": "",
  "category": "wine",
  "region": {
    "code": "orhei",
    "name": "Orhei and the Răut valley",
    "slug": "orhei-and-the-raut-valley"
  },
  "partner": {
    "id": 4,
    "name": "Château Vartely"
  },
  "partnerDescription": "A family winery in the Orhei hills, open since 2004.",
  "location": {
    "latitude": 47.383,
    "longitude": 28.816
  },
  "price": {
    "amount": 480,
    "currency": "MDL",
    "indicative": true
  },
  "priceBand": "moderate",
  "services": [
    {
      "name": "Winery tour",
      "priceMdl": 150
    },
    {
      "name": "Tasting of five wines",
      "priceMdl": 280
    }
  ],
  "audience": [
    "couples",
    "groups"
  ],
  "durationMinutes": 120,
  "offersLodging": false,
  "openingHoursState": "scheduled",
  "openingHours": [
    {
      "day": "saturday",
      "opens": "10:00",
      "closes": "18:00"
    },
    {
      "day": "sunday",
      "opens": "10:00",
      "closes": "16:00"
    }
  ],
  "openingHoursNote": null,
  "availabilityNotes": [
    {
      "status": "seasonal-open",
      "note": "Cellar tours run from April to October.",
      "from": "2026-04-01",
      "to": "2026-10-31"
    }
  ],
  "images": [
    "https://moldova.travel/media/experiences/12/cover.webp"
  ],
  "tags": [
    "wine",
    "tasting",
    "cellar"
  ],
  "url": "https://moldova.travel/en/experiences/12-chateau-vartely-cellar-tour",
  "goUrl": "https://moldova.travel/go/e/12/api",
  "goKind": "website",
  "lastModifiedUtc": "2026-05-02T09:30:00Z"
}

GET/api/v1/events

List upcoming events

Approved events that have not yet ended, soonest first. Cancelled events are never listed; a cancelled event's detail still answers, flagged isCancelled.

Parameters · 3
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en
page
1-based page number, default 1. A page past the last one is a 404 with errorCode EXPERIENCE_NOT_FOUND, EVENT_NOT_FOUND or PACKAGE_NOT_FOUND.
Example: 2
pageSize
Items per page, 1 to 48. Default: the site's own catalog page size.
Example: 12

Example request

curl \
  "https://moldova.travel/api/v1/events?lang=ro"
Example response
{
  "items": [
    {
      "id": 3,
      "slug": "opera-butuceni",
      "lang": "ro",
      "title": "Opera Butuceni",
      "summary": "Festival de operă în aer liber, în peisajul Orheiului Vechi.",
      "venue": "Butuceni, Orheiul Vechi",
      "startsAtUtc": "2026-08-15T16:00:00Z",
      "endsAtUtc": "2026-08-15T21:00:00Z",
      "region": {
        "code": "orhei",
        "name": "Orhei și Valea Răutului",
        "slug": "orhei-si-valea-rautului"
      },
      "ticketPriceMdl": 150,
      "image": "https://moldova.travel/media/events/3/cover.webp",
      "url": "https://moldova.travel/ro/events/3-opera-butuceni",
      "goUrl": "https://moldova.travel/go/ev/3/api"
    }
  ],
  "page": 1,
  "pageSize": 12,
  "totalCount": 5,
  "totalPages": 1,
  "lang": "ro"
}

GET/api/v1/events/{id}

One event

The event's full description, venue and GPS location, dates (UTC — display in Europe/Chisinau), photos and organising partner.

Parameters · 2
id
The item's stable numeric id — the id field of a list item. Slugs are decorative and may change; ids do not.
Example: 12
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en

Example request

curl \
  "https://moldova.travel/api/v1/events/3?lang=en"
Example response
{
  "id": 3,
  "slug": "opera-butuceni",
  "lang": "en",
  "title": "Opera Butuceni",
  "description": "An open-air opera festival staged in the Orheiul Vechi landscape. Bring a blanket; the performance starts at sunset.",
  "descriptionMarkdown": "",
  "venue": "Butuceni, Orheiul Vechi",
  "location": {
    "latitude": 47.305,
    "longitude": 28.965
  },
  "startsAtUtc": "2026-08-15T16:00:00Z",
  "endsAtUtc": "2026-08-15T21:00:00Z",
  "region": {
    "code": "orhei",
    "name": "Orhei and the Răut valley",
    "slug": "orhei-and-the-raut-valley"
  },
  "ticketPriceMdl": 150,
  "partner": {
    "id": 4,
    "name": "Orheiul Vechi Cultural Reserve"
  },
  "isCancelled": false,
  "images": [
    "https://moldova.travel/media/events/3/cover.webp"
  ],
  "url": "https://moldova.travel/en/events/3-opera-butuceni",
  "goUrl": "https://moldova.travel/go/ev/3/api",
  "lastModifiedUtc": "2026-06-01T08:00:00Z"
}

GET/api/v1/packages

List published tour packages

Packages that tour operators have published and whose company an ANTRIM administrator has approved, newest first.

Parameters · 3
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en
page
1-based page number, default 1. A page past the last one is a 404 with errorCode EXPERIENCE_NOT_FOUND, EVENT_NOT_FOUND or PACKAGE_NOT_FOUND.
Example: 2
pageSize
Items per page, 1 to 48. Default: the site's own catalog page size.
Example: 12

Example request

curl \
  "https://moldova.travel/api/v1/packages?lang=en"
Example response
{
  "items": [
    {
      "id": 1,
      "slug": "three-days-of-wine-and-monasteries",
      "lang": "en",
      "title": "Three days of wine and monasteries",
      "summary": "Cricova, Orheiul Vechi and two family wineries, with a driver-guide.",
      "partner": {
        "id": 4,
        "name": "Moldova Discovery Tours"
      },
      "price": {
        "amount": 7610,
        "currency": "MDL",
        "indicative": true
      },
      "publishedAtUtc": "2026-04-20T12:00:00Z",
      "url": "https://moldova.travel/en/packages/1-three-days-of-wine-and-monasteries",
      "goUrl": "https://moldova.travel/go/p/4/api/package"
    }
  ],
  "page": 1,
  "pageSize": 12,
  "totalCount": 9,
  "totalPages": 1,
  "lang": "en"
}

GET/api/v1/packages/{id}

One tour package

The package as the operator approved it: full description, indicative price, the operator's name and the tracked goUrl to reach them.

Parameters · 2
id
The item's stable numeric id — the id field of a list item. Slugs are decorative and may change; ids do not.
Example: 12
lang
ISO 639-1 code of a published language: ro or en. Default ro. Any other code — including a language the platform models but has not published — is a 400 naming the published set, never a fallback.
Example: en

Example request

curl \
  "https://moldova.travel/api/v1/packages/1?lang=en"
Example response
{
  "id": 1,
  "slug": "three-days-of-wine-and-monasteries",
  "lang": "en",
  "title": "Three days of wine and monasteries",
  "description": "Day 1: Cricova cellars and Chișinău old town. Day 2: Orheiul Vechi, Curchi monastery and a village lunch. Day 3: two family wineries in the Codru hills. Price per person, two sharing, transport and tastings included.",
  "descriptionMarkdown": "",
  "partner": {
    "id": 4,
    "name": "Moldova Discovery Tours"
  },
  "price": {
    "amount": 7610,
    "currency": "MDL",
    "indicative": true
  },
  "publishedAtUtc": "2026-04-20T12:00:00Z",
  "url": "https://moldova.travel/en/packages/1-three-days-of-wine-and-monasteries",
  "goUrl": "https://moldova.travel/go/p/4/api/package",
  "lastModifiedUtc": "2026-04-20T12:00:00Z",
  "stops": [
    {
      "name": "Chișinău — old centre",
      "location": {
        "latitude": 47.0245,
        "longitude": 28.8323
      },
      "url": null
    },
    {
      "name": "Cricova",
      "location": {
        "latitude": 47.1363,
        "longitude": 28.8578
      },
      "url": "https://moldova.travel/en/experiences/12-cricova"
    },
    {
      "name": "Orheiul Vechi",
      "location": {
        "latitude": 47.3015,
        "longitude": 28.9807
      },
      "url": null
    }
  ],
  "plan": null
}

Errors

400 for a bad request (an unpublished language, an unknown filter token, a page out of range), 404 for an item or page that does not exist, 429 when the rate limit is exceeded. The body is always a problem+json object with an errorCode.

Example: unknown filter token
{
  "title": "Invalid request",
  "status": 400,
  "detail": "One or more fields failed validation.",
  "instance": "/api/v1/experiences",
  "errorCode": "VALIDATION_FAILED",
  "errors": [
    {
      "field": "category",
      "message": "Unknown category token. Use the `category` values items carry, e.g. wine, gastronomy, rural-tourism."
    }
  ]
}
Example: missing item
{
  "title": "Not found",
  "status": 404,
  "detail": "No approved experience has id 999.",
  "instance": "/api/v1/experiences/999",
  "errorCode": "EXPERIENCE_NOT_FOUND"
}

Terms of use

Content is published by ANTRIM and its partners. You may display and redistribute the data with attribution to moldova.travel, keeping goUrl unchanged as the link to the partner and prices marked as indicative. The API is provided as is, with no availability guarantee.

For AI assistants

If you use ChatGPT or Claude you do not need the API: connect the MCP server and ask for a route.