Skip to content
    Back to Home

    Developer portal

    A public API, an OpenAPI spec and a CLI for Visit Dzaleka

    Everything on this page is free to use and needs no key. The read-only API serves live tour pricing, camp zones, meeting points, community events and blog content. Use it to answer questions about visiting Dzaleka, or to build a booking flow into your own product.

    Quickstart

    No signup, no key, no client library. Fetch current prices:

    curl https://visit.dzaleka.com/api/public/pricing

    Prices are integers in Malawi Kwacha (MWK). Read them live rather than caching a figure — rates are edited by administrators and change without notice.

    [
      { "groupSize": "individual",  "basePrice": 20000, "currency": "MWK" },
      { "groupSize": "small_group", "basePrice": 55000, "currency": "MWK" },
      { "groupSize": "large_group", "basePrice": 85000, "currency": "MWK" }
    ]

    Machine-readable files

    OpenAPI 3.1
    /openapi.json

    Every operation has a unique operationId, a description and a typed response schema, so it converts straight into LLM function-calling definitions.

    Agent instructions
    /llms.txt

    What this site is authoritative for, when an agent should reach for it, and the etiquette to pass on to visitors.

    Endpoint index
    /api

    A short JSON index of every public operation.

    API catalogue
    /.well-known/api-catalog

    RFC 9727 link set pointing at the spec and these docs.

    Command line

    Query the API without writing an integration:

    npx visit-dzaleka pricing
    npx visit-dzaleka zones
    npx visit-dzaleka events --upcoming
    npx visit-dzaleka verify DVS-2024-001
    npx visit-dzaleka pricing --json | jq '.[0].basePrice'

    Endpoints

    All operations are GET and require no authentication. Rate limit is 100 requests per minute per IP.

    Tours

    GET
    /api/public/pricing

    List current tour prices

    getTourPricing
    GET
    /api/public/special-offers

    List active public discounts

    listSpecialOffers
    GET
    /api/public/feeds/things-to-do

    Get the Google Things to Do product feed

    getThingsToDoFeed

    Places

    GET
    /api/public/zones

    List camp zones

    listZones
    GET
    /api/public/meeting-points

    List tour meeting points

    listMeetingPoints
    GET
    /api/public/points-of-interest

    List points of interest

    listPointsOfInterest
    GET
    /api/public/transport-partners

    List transport partners

    listTransportPartners

    Community

    GET
    /api/public/community-listings

    List community businesses and experiences

    listCommunityListings
    GET
    /api/public/community-listings/{id}

    Get one community listing

    getCommunityListing
    GET
    /api/community/events

    List community events

    listCommunityEvents
    GET
    /api/community/services

    List community services

    listCommunityServices
    GET
    /api/community/resources

    List community resources

    listCommunityResources
    GET
    /api/community/news

    List community news

    listCommunityNews
    GET
    /api/community/search

    Search community content

    searchCommunity

    Content

    GET
    /api/public/reviews

    List published visitor reviews

    listPublicReviews
    GET
    /api/blog

    List published blog posts

    listBlogPosts
    GET
    /api/blog/{slug}

    Get one blog post

    getBlogPost

    Bookings

    GET
    /api/public/bookings/verify/{reference}

    Verify a booking reference

    verifyBooking

    Errors

    Failures return JSON, never an HTML page. Branch on code, which is stable; treat message as human-facing.

    {
      "error": true,
      "code": "not_found",
      "message": "No API endpoint matches GET /api/nope.",
      "status": 404,
      "hint": "Fetch https://visit.dzaleka.com/openapi.json for available operations.",
      "requestId": "01M10T0C3P30ZRD86HME55NQEA",
      "documentation": "https://visit.dzaleka.com/developers"
    }

    Markdown content

    Every public page has a markdown representation. Ask for it with an Accept header — responses carry Vary: Accept, so caches keep the two variants apart.

    curl -H "Accept: text/markdown" https://visit.dzaleka.com/plan-your-trip

    Writing data

    Creating bookings, managing guides and pulling reports need an API key. There is no self-service signup: keys are issued to partner organisations individually, after a conversation about what you are building. Email bakari@mail.dzaleka.com to request access.

    curl https://visit.dzaleka.com/api/bookings \
      -H "Authorization: Bearer dvz_your_api_key_here"

    Questions about the API, or want a key? Email bakari@mail.dzaleka.com.