API Reference · v1

Kontiki Capital Public API

Open, read-only JSON access to South Pacific Stock Exchange market data — share prices, company fundamentals, price history, the order book, the KSPX Index and dividends — plus Kontiki Capital insights and Fiji news headlines. No API key, no sign-up.

Base URL
https://kontiki.com.fj/api/v1
Authentication
None — just send a GET request
Format
JSON · CORS enabled for any origin
Machine-readable spec
https://kontiki.com.fj/api/v1/openapi.json

Quick start

Get today's share price for Kontiki Finance (KFL) in any language:

cURL
curl "https://kontiki.com.fj/api/v1/quotes/KFL"
JavaScript
const res = await fetch("https://kontiki.com.fj/api/v1/quotes/KFL");
const { data } = await res.json();
console.log(`${data.ticker}: FJ$${data.price} (${data.changePct}%)`);
Python
import requests

data = requests.get("https://kontiki.com.fj/api/v1/quotes/KFL", timeout=10).json()["data"]
print(f"{data['ticker']}: FJ${data['price']} ({data['changePct']}%)")

Using an AI agent or bot? Give it the OpenAPI spec at https://kontiki.com.fj/api/v1/openapi.json or the index at https://kontiki.com.fj/api/v1, which list every endpoint with a ready-to-run example.

Responses & errors

Every successful response wraps its payload in data, with context (generation time, source, record count, disclaimer) in meta. Errors use a standard HTTP status and a stable machine-readable code. Prices are in Fiji dollars (FJD); dates are Fiji-local YYYY-MM-DD; timestamps are ISO 8601.

Success
{
  "data": { … },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z",
    "source": "South Pacific Stock Exchange",
    "disclaimer": "…"
  }
}
Error
{
  "error": {
    "status": 404,
    "code": "unknown_ticker",
    "message": "\"XYZ\" is not an SPX-listed company."
  }
}
StatusCodeMeaning
200—Success.
400invalid_date · invalid_category · invalid_topicA query parameter is malformed.
404unknown_ticker · not_foundThe ticker or insight does not exist.
429rate_limitedToo many requests — slow down and retry after a minute.
503unavailableA data source is temporarily unreachable — retry shortly.

Rate limits & caching

  • 60 requests per minute per IP, per endpoint. Exceeding it returns HTTP 429.
  • Responses are cached at the edge; each endpoint lists how fresh its data is. Live share prices update about once a minute during the SPX sessions (10:30–11:30 and 14:30–15:30 Fiji time, weekdays).
  • Need higher limits, bulk history or a commercial licence? Contact the team.
  • Data is for informational purposes only and is not investment advice. Sourced from the South Pacific Stock Exchange (SPX) and Kontiki Capital.

Market data

GET/api/v1/quotes

Share prices for all SPX companies

Latest price for every company listed on the South Pacific Stock Exchange. If a stock has traded today (Fiji time), `price` is today's last traded price, `tradedToday` is true, and `volume`, `high` and `low` describe today's trading. Otherwise `price` is the last close, `volume` is 0 and `high`/`low` are null. `change` and `changePct` are measured against `previousClose`. Pass `ticker` to filter to one or more companies.

ParameterInTypeDescription
tickerquerystringOptional comma-separated tickers to filter by.
Request
curl "https://kontiki.com.fj/api/v1/quotes?ticker=KFL,FTV"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": [
    {
      "ticker": "KFL",
      "company": "Kontiki Finance Ltd",
      "sector": "Financial Services",
      "price": 1.25,
      "previousClose": 1.23,
      "change": 0.02,
      "changePct": 1.63,
      "volume": 4200,
      "high": 1.25,
      "low": 1.23,
      "tradedToday": true,
      "currency": "FJD",
      "asAt": "2026-09-30",
      "url": "https://kontiki.com.fj/markets/kfl"
    }
  ],
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/quotes/{ticker}

One company: price, fundamentals & recent trades

Everything about a single listed company: the latest quote, fundamentals (EPS, P/E, dividend yield, market cap, share of total SPX market cap) and its ten most recent trades.

ParameterInTypeDescription
ticker*pathstringSPX ticker symbol, case-insensitive (e.g. KFL, FTV, ATH). List them with /api/v1/companies.
Request
curl "https://kontiki.com.fj/api/v1/quotes/KFL"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": {
    "ticker": "KFL",
    "company": "Kontiki Finance Ltd",
    "sector": "Financial Services",
    "price": 1.25,
    "previousClose": 1.23,
    "change": 0.02,
    "changePct": 1.63,
    "volume": 4200,
    "high": 1.25,
    "low": 1.23,
    "tradedToday": true,
    "currency": "FJD",
    "asAt": "2026-09-30",
    "url": "https://kontiki.com.fj/markets/kfl",
    "fundamentals": {
      "asAt": "2026-09-29",
      "epsCents": 9.8,
      "peRatio": 12.76,
      "dividendYieldPct": 4.8,
      "marketCapFjd": 38500000,
      "pctOfMarketCap": 0.9
    },
    "recentTrades": [
      {
        "date": "2026-09-29",
        "price": 1.23,
        "quantity": 1500,
        "change": 0.01,
        "direction": "up"
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/companies

Every listed company with fundamentals

The full SPX board — ticker, name, sector, latest price and fundamentals — sorted by market capitalisation, largest first. Use it to discover valid tickers.

No parameters.

Request
curl "https://kontiki.com.fj/api/v1/companies"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": [
    {
      "ticker": "KFL",
      "company": "Kontiki Finance Ltd",
      "sector": "Financial Services",
      "price": 1.25,
      "previousClose": 1.23,
      "change": 0.02,
      "changePct": 1.63,
      "volume": 4200,
      "high": 1.25,
      "low": 1.23,
      "tradedToday": true,
      "currency": "FJD",
      "asAt": "2026-09-30",
      "url": "https://kontiki.com.fj/markets/kfl",
      "fundamentals": {
        "asAt": "2026-09-29",
        "epsCents": 9.8,
        "peRatio": 12.76,
        "dividendYieldPct": 4.8,
        "marketCapFjd": 38500000,
        "pctOfMarketCap": 0.9
      }
    }
  ],
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/history/{ticker}

Daily price history for a company

Daily closing prices (with open/high/low/volume where held) for one company, oldest first. Bound the range with `from` and `to`.

ParameterInTypeDescription
ticker*pathstringSPX ticker symbol, case-insensitive (e.g. KFL, FTV, ATH). List them with /api/v1/companies.
fromquerystringStart date, inclusive (YYYY-MM-DD).
toquerystringEnd date, inclusive (YYYY-MM-DD).
Request
curl "https://kontiki.com.fj/api/v1/history/KFL?from=2026-09-01"
Try it live

Cached for ≈10 minutes.

Response (abridged)
{
  "data": {
    "ticker": "KFL",
    "currency": "FJD",
    "series": [
      {
        "date": "2026-09-01",
        "close": 1.2,
        "open": 1.2,
        "high": 1.21,
        "low": 1.2,
        "volume": 800
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/market/status

Is the market open?

Whether the SPX is open, pre-market or closed right now — aware of weekends and Fiji public holidays — plus the current session and when the next one opens. The SPX trades 10:30–11:30 and 14:30–15:30 Fiji time (UTC+12) on weekdays.

No parameters.

Request
curl "https://kontiki.com.fj/api/v1/market/status"
Try it live

Cached for ≈15 seconds.

Response (abridged)
{
  "data": {
    "status": "open",
    "timezone": "Pacific/Fiji",
    "fijiDate": "2026-09-30",
    "fijiTime": "10:45",
    "isTradingDay": true,
    "holiday": null,
    "currentSession": {
      "session": "Morning",
      "date": "2026-09-30",
      "opensAt": "2026-09-30T10:30:00+12:00",
      "closesAt": "2026-09-30T11:30:00+12:00"
    },
    "nextSession": {
      "session": "Afternoon",
      "date": "2026-09-30",
      "opensAt": "2026-09-30T14:30:00+12:00",
      "closesAt": "2026-09-30T15:30:00+12:00"
    },
    "sessions": [
      {
        "name": "Morning",
        "open": "10:30",
        "close": "11:30"
      },
      {
        "name": "Afternoon",
        "open": "14:30",
        "close": "15:30"
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/market/today

Today's trading summary

The latest trading session: stocks traded, total volume and turnover (FJD), advancers/decliners/unchanged, the biggest movers, the most active stocks and the morning/afternoon session split. On a weekend or holiday it reports the most recent session, with `isToday: false`.

No parameters.

Request
curl "https://kontiki.com.fj/api/v1/market/today"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": {
    "date": "2026-09-30",
    "isToday": true,
    "updatedAt": "2026-09-30T03:45:12.000Z",
    "sessions": {
      "morning": {
        "trades": 6,
        "volume": 12500,
        "turnover": 31250.5
      },
      "afternoon": {
        "trades": 0,
        "volume": 0,
        "turnover": 0
      }
    },
    "stocksTraded": 5,
    "totalVolume": 12500,
    "totalTurnover": 31250.5,
    "advancers": 2,
    "decliners": 1,
    "unchanged": 2,
    "ksbParticipation": 3,
    "movers": [
      {
        "stock_code": "FTV",
        "price": 0.5,
        "change_value": 0.02,
        "change_direction": "up"
      }
    ],
    "mostActive": [
      {
        "stock_code": "KFL",
        "quantity": 4200,
        "price": 1.25
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/market/orders

Order book (unexecuted orders)

Resting buy and sell orders on the SPX per company, with best bid/offer, depth levels and spread. Live during trading; outside trading hours the final book from the last session is returned with `stale: true` and `capturedAt`.

ParameterInTypeDescription
tickerquerystringOptional comma-separated tickers to filter by.
Request
curl "https://kontiki.com.fj/api/v1/market/orders?ticker=KFL"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": {
    "stale": false,
    "capturedAt": null,
    "marketStatus": "open",
    "updatedAt": "2026-09-30T22:50:00.000Z",
    "orders": [
      {
        "code": "KFL",
        "company": "Kontiki Finance Ltd",
        "sector": "Financial Services",
        "buy": {
          "bestPrice": 1.23,
          "totalQuantity": 5000,
          "totalOrders": 2,
          "levels": [
            {
              "price": 1.23,
              "quantity": 5000,
              "orders": 2
            }
          ]
        },
        "sell": {
          "bestPrice": 1.27,
          "totalQuantity": 2000,
          "totalOrders": 1,
          "levels": [
            {
              "price": 1.27,
              "quantity": 2000,
              "orders": 1
            }
          ]
        },
        "spread": 0.04
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}

Index & dividends

GET/api/v1/index/kspx

KSPX Index level & history

The Kontiki South Pacific Stock Exchange Index (rebased to 100 on 4 January 2000): the latest value with daily, weekly and year-to-date change, the all-time high and low, and the daily series — downsampled to at most `points` values.

ParameterInTypeDescription
fromquerystringStart date for the series (YYYY-MM-DD). Default: full history.
pointsqueryintegerMaximum number of series points (a hard cap), 10–10000. Default 500.
Request
curl "https://kontiki.com.fj/api/v1/index/kspx?from=2026-01-01&points=100"
Try it live

Cached for ≈10 minutes.

Response (abridged)
{
  "data": {
    "name": "KSPX Index",
    "base": {
      "value": 100,
      "date": "2000-01-04"
    },
    "latest": {
      "date": "2026-09-29",
      "value": 412.37,
      "dailyChangePct": 0.12,
      "weeklyChangePct": 0.4,
      "ytdChangePct": 6.1
    },
    "high": {
      "date": "2026-09-29",
      "value": 412.37
    },
    "low": {
      "date": "2000-06-12",
      "value": 91.3
    },
    "series": [
      {
        "date": "2026-01-02",
        "value": 388.6
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/dividends

Dividend yields & upcoming payments

The dividend-yield leaderboard for every SPX stock (highest first, with P/E, EPS and market cap) and the calendar of declared dividends and interest payments whose ex-date or payment date is still to come.

No parameters.

Request
curl "https://kontiki.com.fj/api/v1/dividends"
Try it live

Cached for ≈10 minutes.

Response (abridged)
{
  "data": {
    "yields": [
      {
        "ticker": "KFL",
        "company": "Kontiki Finance Ltd",
        "dividendYieldPct": 4.8,
        "peRatio": 12.76,
        "epsCents": 9.8,
        "marketCapFjd": 38500000,
        "asAt": "2026-09-29"
      }
    ],
    "upcoming": [
      {
        "ticker": "FTV",
        "company": "Fiji Television Ltd",
        "type": "dividend",
        "amount": 0.05,
        "interimOrFinal": "final",
        "exBenefitDate": "2026-10-12",
        "paymentDate": "2026-10-30"
      }
    ]
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}

Insights & news

GET/api/v1/insights

Kontiki Capital insights

Published research, market updates, commentary, reports and announcements from Kontiki Capital, newest first. Returns summaries — fetch an article by `slug` for its full body.

ParameterInTypeDescription
limitqueryintegerHow many to return, 1–50. Default 20.
categoryquerystringOptional category filter.
bulletin | report | market-update | announcement | research | regulatory | fund-update | commentary
Request
curl "https://kontiki.com.fj/api/v1/insights?limit=5"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": [
    {
      "slug": "spx-weekly-wrap",
      "title": "SPX weekly wrap",
      "summary": "Turnover rose on the back of block trades in banking stocks…",
      "category": "market-update",
      "author": "Kontiki Capital",
      "tags": [
        "SPX",
        "weekly"
      ],
      "coverImageUrl": null,
      "documentUrl": null,
      "publishedAt": "2026-09-26T05:00:00.000Z",
      "updatedAt": "2026-09-26T05:00:00.000Z",
      "url": "https://kontiki.com.fj/insights/spx-weekly-wrap"
    }
  ],
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/insights/{slug}

One insight, full text

A single published insight including its full body as Markdown (`bodyMarkdown`).

ParameterInTypeDescription
slug*pathstringThe insight's slug, from /api/v1/insights.
Request
curl "https://kontiki.com.fj/api/v1/insights/spx-weekly-wrap"
Try it live

Cached for ≈1 minute.

Response (abridged)
{
  "data": {
    "slug": "spx-weekly-wrap",
    "title": "SPX weekly wrap",
    "bodyMarkdown": "## Highlights\n\nTurnover rose…",
    "…": "same fields as the list"
  },
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}
GET/api/v1/news

Fiji news headlines

The News page feed: the latest headlines from Fiji newsrooms (FBC News, Fiji Government, Fiji Sun, The Fiji Times, fijivillage), newest first. Headline, link and timestamp only — every link goes to the publisher. `topic=warwick` returns coverage of the Warwick Hotel Group SPX listing.

ParameterInTypeDescription
topicquerystring`all` (default) or `warwick`.
all | warwick
limitqueryintegerHow many headlines, 1–40. Default 12.
Request
curl "https://kontiki.com.fj/api/v1/news?limit=10"
Try it live

Cached for ≈10 minutes.

Response (abridged)
{
  "data": [
    {
      "source": "FBC News",
      "title": "Headline text",
      "url": "https://www.fbcnews.com.fj/news/…",
      "publishedAt": "2026-09-30T02:10:00.000Z",
      "dateOnly": false
    }
  ],
  "meta": {
    "apiVersion": "v1",
    "generatedAt": "2026-09-30T00:00:00.000Z"
  }
}

Meta

GET/api/v1/openapi.json

OpenAPI 3.1 specification

The machine-readable specification of this API. Point an AI agent, Postman, or an OpenAPI code generator at it to get every endpoint and parameter.

No parameters.

Request
curl "https://kontiki.com.fj/api/v1/openapi.json"
Try it live

Cached for ≈1 hour.

Response (abridged)
{
  "openapi": "3.1.0",
  "info": {
    "title": "Kontiki Capital Public API",
    "version": "1.0.0"
  },
  "…": "…"
}