EBS Investment Club

Open data

The club API

Two JSON endpoints: everything on our calendar, and every position the club holds. No key, no sign-up, and readable from any website. Use them for a student project, a dashboard or your own page.

Endpoints

Both are plain JSON over HTTPS. Send a GET request. Every response has a generated timestamp in UTC.

Events

Our calendar

Every event we have planned, with the past ones kept so you can show a history.

https://ebsic.ee/api/events.json
  • events[]One entry per event, earliest first.
  • start, endFull ISO timestamps with the Tallinn offset. end is null when we have not set one.
  • statusupcoming or past, worked out when the file is built.
  • dateConfirmedfalse while the date can still move.
  • nextThe id of the next event, so you can skip the filtering.
  • countsHow many events in total, upcoming and past.
Portfolio

What we hold

Every position, valued in euros, with what we paid and what it is worth now.

https://ebsic.ee/api/portfolio.json
  • holdings[]One entry per position, with name, ticker, ISIN and quantity.
  • valueEurWhat the position is worth today.
  • costEurWhat we paid, at the exchange rate on the day we bought.
  • profitEurvalueEur minus costEur.
  • totalsThe same three figures for the whole portfolio, plus returnPct.
  • groups[]Value and weight per kind of holding.
  • pricesWhere the prices came from and when. See the delay below.

Try it

Copy either line into a terminal.

curl https://ebsic.ee/api/events.json
curl https://ebsic.ee/api/portfolio.json

# the next event, with jq
curl -s https://ebsic.ee/api/events.json | jq '.events[] | select(.status=="upcoming")' | head -20

# from a browser, any site, no key
const r = await fetch("https://ebsic.ee/api/portfolio.json");
const p = await r.json();
console.log(p.totals.valueEur, p.totals.returnPct + "%");

Things to know

Prices are delayed

Exchange prices come from Boerse Frankfurt and run about 15 minutes behind the market. Good enough to follow along, not good enough to trade on.

How often it updates

Prices refresh every 15 minutes while European markets are open, on weekdays. The calendar updates when we add an event. Both files carry their own updated time, so check that rather than guessing.

Caching and fair use

Responses are cached for 10 minutes, so asking more often than that gains you nothing. There is no rate limit and no key. Please cache on your side too.

Euros throughout

Every money field is in euros. Dollar positions are converted at the European Central Bank rate, which the response reports under fx.

Fields can be added

We may add fields, so read the ones you need by name and ignore the rest. We will not rename or remove a field without changing the path.

Not investment advice

This is a student club showing its own holdings so members can learn. It is not a recommendation to buy anything.