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, day change, volume and range for every company listed on the South Pacific Stock Exchange. Prices are live during trading sessions and otherwise the last close. 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,
      "change": 0.02,
      "changePct": 1.63,
      "volume": 4200,
      "high": 1.25,
      "low": 1.23,
      "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,
    "change": 0.02,
    "changePct": 1.63,
    "volume": 4200,
    "high": 1.25,
    "low": 1.23,
    "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,
      "change": 0.02,
      "changePct": 1.63,
      "volume": 4200,
      "high": 1.25,
      "low": 1.23,
      "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 series points, 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"
  },
  "…": "…"
}