한국어

개발자용 API · 위젯

세계 시간·QR 코드·투표·계산기를 내 사이트나 프로그램에서 쓸 수 있게 열어 둔 API 와 위젯이에요. 가입이나 키 없이 무료로 써요.

아래 시계가 script 위젯이에요(서울·런던·뉴욕)

공통 규칙

세계 시간 API

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

지금 시각을 시간대마다 줘요. tz 에 IANA 시간대 이름을 쉼표로 10개까지 넣어요. 없으면 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 는 그 시각에 서머타임인지예요. abbr 는 시간대 약자이고, 약자가 없는 곳은 +04 같은 꼴로 와요. 이 답은 캐시하지 않아요.

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

세계 시간 쪽에서 만든 공유 링크(/t/<코드>)의 모임 시각이에요. 시작·끝(UTC)·길이(분)·제목·도시와 그 도시 시각만 줘요. 고치는 링크의 비밀값 같은 것은 주지 않아요.

{"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"}

계산기 API

우리 계산기 쪽과 같은 식, 같은 끝수 처리로 셈해요. 돈은 글자(예: "10000", "10.50")로 와서 끝자리가 틀어지지 않아요. dec=0 이면 원 단위, dec=2 면 소수 두 자리예요(기본 0).

GET /api/v1/calc/vat

부가세 나누기·더하기예요.

값뜻
total부가세가 들어 있는 합계(이것을 넣으면 공급가와 세액으로 나눔)
net부가세 전 공급가(이것을 넣으면 세액을 더함)
rate세율 % · 기본 10
round원(센트) 아래 끝수 · floor(버림, 기본) · round(반올림) · ceil(올림)
dec0 또는 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

단위 변환이에요. cat 을 빼면 두 단위가 들어 있는 묶음을 찾아요.

묶음(cat)단위
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 는 평(400/121 m²), don 은 돈(3.75 g)이에요. result 는 반올림하지 않은 수라서 보여 줄 때 알맞게 줄여 주세요.

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

판매가·매입가·배송비·기타(other)·수수료율(fee %)·부가세율(vat %, 비우면 안 뺌)로 정산금액과 마진을 구해요.

{"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

원하는 마진율(margin %)·수수료율(fee %)·즉시할인율(discount %)로 판매가를 거꾸로 구해요. step 은 올림 단위(1·10·100 최소 단위)예요.

{"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 는 y 의 x%, op=what 은 x 가 y 의 몇 %, op=change 는 from 에서 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}

투표 결과 API

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

만든 사람이 '누구나 바로 보기'로 둔 투표, 또는 마감된 투표의 결과만 줘요. 그 밖의 투표는 404 예요. 질문·보기·표 수·%만 있고 누가 투표했는지는 없어요. 10초 캐시예요.

{"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 코드 API

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

QR 그림을 바로 줘요. <img src> 에 그대로 넣어도 돼요. /api/v1/qr/svg 는 같은 값으로 SVG 를 줘요. 하루 동안 캐시해요.

값뜻
d넣을 글(UTF-8 · 1000자까지 · 주소에 넣을 때는 URL 인코딩)
s한 변 픽셀 64~1024 · 기본 300 · 칸 수보다 작으면 칸 수에 맞춰 커짐
ec오류 정정 단계 L·M·Q·H · 기본 M
m둘레 여백 칸 수 0~8 · 기본 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">

글에 막히는 낱말이 있거나 길면 POST 로 보내요. 응답 머리 X-QR-Version 에 QR 판 번호가 와요.

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>

움직이는 QR(/q/<코드>)의 날마다 찍힌 수예요. 그 QR 의 관리 비밀값을 X-Edit-Key 머리에 넣어야 해요. 관리 링크 /qr/edit#코드.비밀값 에서 점 뒤가 비밀값이에요. 비밀값을 브라우저 스크립트에 넣지 마세요(이 API 는 다른 사이트 브라우저에서 부르는 것을 열어 두지 않았어요).

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."}

위젯 넣기

코드는 세계 시간·계산기·투표 관리 쪽의 '내 사이트에 넣기' 상자에서 골라 만들고 복사할 수 있어요.

세계 시간 · 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>
속성뜻
data-tzIANA 시간대를 쉼표로 10개까지 · 이름을 바꾸려면 Asia/Seoul|본사 처럼 | 뒤에
data-langko · en
data-themelight · dark
data-seconds1 이면 초까지

스크립트를 붙인 바로 그 자리에 시계가 그려져요. Shadow DOM 안에 그려서 내 사이트 CSS 와 섞이지 않고, 한 쪽에 여러 개 넣어도 돼요. 시각은 보는 사람 기기의 시계와 브라우저 시간대 규칙으로 셈해요.

세계 시간 · 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>

설정은 # 뒤에 적어요. # 뒤는 서버로 가지 않아서 보안 규칙에 걸리지 않아요.

계산기 · iframe

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

넣을 수 있는 계산기: vat, percent, length, weight, temperature, area, volume, speed, data, fuel · lang=ko|en · theme=light|dark

투표 · iframe

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

iframe 안에서 바로 투표해요. 한 표를 가리는 쿠키를 브라우저가 다른 사이트 안에서 막으면 '새 창에서 투표하기' 단추가 대신 나와요. 브라우저가 쿠키를 사이트마다 나눠 두기 때문에, 같은 사람이 우리 투표 쪽과 다른 사이트의 iframe 에서 따로 한 표씩 낼 수 있어요.

블로그·사이트별 안내

아래 곳들에 우리가 직접 넣어 본 적은 아직 없어요. 서비스에 따라 script 나 iframe 을 지우는 곳이 있으니, 하나가 안 되면 다른 코드를 써 보세요.

자주 묻는 것

API 키가 있어야 하나요?

아니요. 키 없이 무료로 써요. IP 하나에 1분 60번까지 부를 수 있어요.

403 오류가 나요.

주소의 ? 뒤에 localhost, SQL 낱말, javascript: 같은 글이 있으면 서버 보안 규칙이 막아요. QR API 는 글을 POST(JSON 몸통)로 보내 주세요.

네이버 블로그에도 시계 위젯을 넣을 수 있나요?

아직 확인하지 못했어요. 네이버 블로그가 우리 script 나 iframe 코드를 받는지 모르는 상태예요.