English

APIs & widgets for developers

APIs and widgets that let you use our world clock, QR codes, polls and calculators on your own site or in your own program. They are free and need no sign-up or key.

The clock below is the script widget (Seoul, London, New York)

Common rules

World clock API

GET /api/v1/time/now?tz=Asia/Seoul,Europe/London

Gives the current time in each time zone. Put up to 10 IANA time zone names in tz, separated by commas. Without tz you get UTC.

curl "https://appdogu.com/api/v1/time/now?tz=Asia/Seoul,Europe/London"
{"ok":true,"unix":1793769006,"utc":"2026-11-04T05:10:06Z","zones":[
 {"tz":"Asia/Seoul","iso":"2026-11-04T14:10:06+09:00","utc":"2026-11-04T05:10:06Z","offset":"+09:00","offset_sec":32400,"dst":false,"abbr":"KST"},
 {"tz":"Europe/London","iso":"2026-11-04T05:10:06+00:00","utc":"2026-11-04T05:10:06Z","offset":"+00:00","offset_sec":0,"dst":false,"abbr":"GMT"}]}

dst tells you whether daylight saving time is on at that moment. abbr is the zone abbreviation; zones without one come back like +04. This answer is not cached.

GET /api/v1/time/meet/<code>

The meeting time behind a share link made on our world clock page (/t/<code>). You get the start and end (UTC), length in minutes, title, and each city with its local time. Nothing like the edit key is included.

{"ok":true,"code":"Ab3xY","title":"Weekly call","start":"2026-11-10T01:00:00Z","start_unix":1794358800,"end":"2026-11-10T02:00:00Z","duration_min":60,
 "cities":[{"id":"seoul","name":{"en":"Seoul","ko":"서울"},"country":"KR","tz":"Asia/Seoul","start":"2026-11-10T10:00:00+09:00","end":"2026-11-10T11:00:00+09:00"}],
 "url":"https://appdogu.com/t/Ab3xY"}

Calculator API

These use the same formulas and rounding as our calculator pages. Money comes back as text (for example "10000" or "10.50") so no digits are lost. dec=0 means whole units such as won, dec=2 means two decimal places (default 0).

GET /api/v1/calc/vat

Splits VAT out of a total, or adds it to a net price.

ParameterMeaning
totalTotal with VAT included (splits it into net and VAT)
netNet price before VAT (adds VAT on top)
rateVAT rate in % · default 10
roundRounding of the last unit · floor (default) · round · ceil
dec0 or 2
GET https://appdogu.com/api/v1/calc/vat?total=11000
{"ok":true,"mode":"total","rate":10.0,"round":"floor","dec":0,"net":"10000","vat":"1000","total":"11000"}

GET /api/v1/calc/convert?from=km&to=mi&v=10

Unit conversion. Leave out cat and we find the group that holds both units.

Group (cat)Units
lengthmm cm m km in ft yd mi nmi
weightmg g kg t oz lb st don
temperatureC F K
areamm2 cm2 m2 km2 a ha in2 ft2 yd2 ac mi2 py
volumeml L m3 usgal ukgal usqt uspt uscup usfloz ukfloz tbsp tsp
speedms kmh mph kn fts
databit B kbit Mbit Gbit KB MB GB TB PB KiB MiB GiB TiB PiB
fuelkml l100 mpgus mpguk
GET https://appdogu.com/api/v1/calc/convert?from=km&to=mi&v=10
{"ok":true,"cat":"length","from":"km","to":"mi","v":10.0,"result":6.2137119223733395}

py is the Korean pyeong (400/121 m²) and don is 3.75 g. result is not rounded, so round it yourself for display.

GET /api/v1/calc/margin?price=20000&cost=10000&ship=3000&fee=10

From price, cost, shipping (ship), other costs, fee % and VAT % (leave vat out to skip it) you get the payout and margin.

{"ok":true,"dec":0,"fee":"2000","payout":"18000","vat_owed":"0","margin":"5000","margin_rate":25.0}

GET /api/v1/calc/price?cost=10000&margin=20&fee=10

Works back to a selling price from target margin %, fee % and instant discount %. step is the round-up unit (1, 10 or 100 of the smallest unit).

{"ok":true,"dec":0,"price":"14286","discount":"0","customer_pays":"14286","fee":"1429","vat_owed":"0","margin":"2857","margin_rate":19.9986}

GET /api/v1/calc/percent?op=of&x=15&y=200

op=of is x% of y, op=what is what percent x is of y, and op=change is the percent change from "from" to "to".

GET https://appdogu.com/api/v1/calc/percent?op=of&x=15&y=200        → {"ok":true,"op":"of","result":30.0}
GET https://appdogu.com/api/v1/calc/percent?op=change&from=80&to=100 → {"ok":true,"op":"change","result":25.0,"diff":20.0}

Poll results API

GET /api/v1/poll/results/<code>

Only for polls whose maker chose "everyone can see results", or polls that have closed. Other polls return 404. You get the question, options, vote counts and percentages, and nothing about who voted. Cached for 10 seconds.

{"ok":true,"code":"zvfb8","question":"Lunch?","multi":false,"closed":false,"close_at":null,"voters":12,
 "options":[{"text":"Noodles","votes":7,"pct":58},{"text":"Rice","votes":5,"pct":42}],"url":"https://appdogu.com/p/zvfb8"}

QR code API

GET /api/v1/qr/png?d=<text>&s=300&ec=M&m=4

Returns the QR image directly, so you can use it in <img src>. /api/v1/qr/svg takes the same values and returns SVG. Cached for one day.

ParameterMeaning
dText to encode (UTF-8, up to 1000 characters, URL-encoded in the address)
sImage size in pixels, 64 to 1024, default 300. If it is smaller than the number of modules, it grows to fit
ecError correction level L, M, Q or H, default M
mQuiet zone in modules, 0 to 8, default 4
<img src="https://appdogu.com/api/v1/qr/png?d=https%3A%2F%2Fexample.com&s=240" width="240" height="240" alt="QR code">

If your text has blocked words or is long, use POST. The X-QR-Version response header tells you the QR version used.

curl -X POST "https://appdogu.com/api/v1/qr/png" -H "Content-Type: application/json" \
  -d '{"d":"WIFI:T:WPA;S:MyCafe;P:secret;;","s":400,"ec":"Q"}' -o qr.png

GET /api/v1/qr/stats/<code>

Daily scan counts for a dynamic QR code (/q/<code>). Put that code's management key in the X-Edit-Key header. In your management link /qr/edit#code.key, the part after the dot is the key. Keep the key out of browser scripts (this API is not open to browser calls from other sites).

curl -H "X-Edit-Key: <key>" "https://appdogu.com/api/v1/qr/stats/Ab3xY"
{"ok":true,"code":"Ab3xY","total":42,"days":[{"date":"2026-11-04","scans":5,"korea":4}],"note":"Last 90 days, Korea time. Bots are not counted."}

Widgets

You can pick options and copy ready-made code from the "Add to your site" box on the world clock, calculator and poll management pages.

World clock · script

<script src="https://appdogu.com/embed/clock.js" data-tz="Asia/Seoul,Europe/London" data-lang="ko" data-theme="light" data-seconds="1" async></script>
AttributeMeaning
data-tzUp to 10 IANA time zones, comma-separated. To rename one, add it after |, like Asia/Seoul|Head office
data-langko · en
data-themelight · dark
data-seconds1 shows seconds

The clock appears right where you paste the script. It draws inside a Shadow DOM, so it does not mix with your site's CSS, and you can put several on one page. The time comes from the visitor's device clock and the browser's time zone rules.

World clock · iframe

<iframe src="https://appdogu.com/embed/clock#tz=Asia/Seoul,Europe/London&lang=ko&theme=dark&seconds=1" width="100%" height="130" loading="lazy" title="World clock" style="border:0"></iframe>

Settings go after #. That part never reaches the server, so it cannot trip the security rules.

Calculator · iframe

<iframe src="https://appdogu.com/embed/calc/vat?lang=ko" width="100%" height="330" loading="lazy" title="VAT calculator" style="border:0"></iframe>

Calculators you can embed: vat, percent, length, weight, temperature, area, volume, speed, data, fuel · lang=ko|en · theme=light|dark

Poll · iframe

<iframe src="https://appdogu.com/embed/poll/<code>" width="100%" height="380" loading="lazy" title="Poll" style="border:0"></iframe>

People vote right inside the iframe. If the browser blocks the cookie we use for one vote per browser inside other sites, a "Vote in a new window" button shows instead. Browsers keep cookies separate per site, so the same person could vote once on our poll page and once in an iframe on another site.

Blogs and site builders

We have not tried these ourselves yet. Some services remove script or iframe code, so if one does not work, try the other.

Questions people ask

Do I need an API key?

No. These APIs are free and need no key. Each IP address can make up to 60 calls a minute.

Why do I get a 403 error?

Our server blocks some text after the ? in an address, such as localhost, SQL words or javascript:. For the QR API, send the text with POST in a JSON body instead.

Does the clock widget work on Naver Blog?

We have not checked yet, so we do not know whether Naver Blog accepts our script or iframe code.