{"openapi":"3.1.0","info":{"title":"Timecode API","version":"1.0.0","description":"Convert SMPTE timecode for video, film and broadcast. Turn a timecode (HH:MM:SS:FF) into an absolute frame number or into real-time seconds, and turn a frame count back into a timecode — at 23.976, 24, 25, 29.97, 30, 50, 59.94 or 60 fps. Crucially it handles drop-frame correctly: at 29.97 and 59.94 fps it drops the right frame numbers each minute (notated with a semicolon, 01:00:00;00) so an hour of timecode lines up with an hour of real time, and it computes real seconds with the exact fractional rate (30000/1001). Perfect for NLE and editing tools, subtitle and caption timing, playout and broadcast automation, and media asset management. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. Distinct from date/time, duration and relative-time tools.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/timecode-api","description":"oanor gateway"}],"tags":[{"name":"Timecode"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/from-frames":{"get":{"operationId":"get_v1_from_frames","tags":["Timecode"],"summary":"Frame number to timecode","description":"","parameters":[{"name":"frames","in":"query","required":true,"description":"Frame count","schema":{"type":"string"},"example":"107892"},{"name":"fps","in":"query","required":true,"description":"23.976|24|25|29.97|30|50|59.94|60","schema":{"type":"string"},"example":"29.97"},{"name":"drop","in":"query","required":false,"description":"true/false (auto for 29.97/59.94)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"fps":"29.97","frames":107892,"timecode":"01:00:00;00","drop_frame":true},"meta":{"timestamp":"2026-06-02T16:51:45.150Z","request_id":"41e2ef93-ff15-44c7-8f9f-64d2c9957b24"},"status":"ok","message":"Frames to timecode","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/to-frames":{"get":{"operationId":"get_v1_to_frames","tags":["Timecode"],"summary":"Timecode to frame number","description":"","parameters":[{"name":"timecode","in":"query","required":true,"description":"HH:MM:SS:FF (;FF for drop-frame)","schema":{"type":"string"},"example":"01:00:00;00"},{"name":"fps","in":"query","required":true,"description":"23.976|24|25|29.97|30|50|59.94|60","schema":{"type":"string"},"example":"29.97"},{"name":"drop","in":"query","required":false,"description":"true/false (auto for 29.97/59.94)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"fps":"29.97","frames":107892,"timecode":"01:00:00;00","drop_frame":true},"meta":{"timestamp":"2026-06-02T16:51:45.253Z","request_id":"668a4ecd-2df8-40fb-b5aa-8ced8b763222"},"status":"ok","message":"Timecode to frames","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/to-seconds":{"get":{"operationId":"get_v1_to_seconds","tags":["Timecode"],"summary":"Timecode to real-time seconds","description":"","parameters":[{"name":"timecode","in":"query","required":true,"description":"HH:MM:SS:FF","schema":{"type":"string"},"example":"01:00:00;00"},{"name":"fps","in":"query","required":true,"description":"23.976|24|25|29.97|30|50|59.94|60","schema":{"type":"string"},"example":"29.97"},{"name":"drop","in":"query","required":false,"description":"true/false (auto for 29.97/59.94)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"fps":"29.97","frames":107892,"seconds":3599.9964,"timecode":"01:00:00;00","drop_frame":true},"meta":{"timestamp":"2026-06-02T16:51:45.357Z","request_id":"1febe9b0-789c-4c40-984b-f5635dd5adf7"},"status":"ok","message":"Timecode to seconds","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Timecode API","notes":"Drop-frame (notated with ; before the frames) only applies to 29.97 and 59.94 fps and is the broadcast default there; pass drop=false for non-drop. Real seconds use the exact rate (e.g. 30000/1001).","version":"v1","endpoints":[{"path":"/v1/to-frames","params":{"fps":"23.976|24|25|29.97|30|50|59.94|60","drop":"true/false (auto for 29.97/59.94)","timecode":"HH:MM:SS:FF (required)"},"returns":"total frame number"},{"path":"/v1/from-frames","params":{"fps":"frame rate (required)","drop":"true/false","frames":"integer (required)"},"returns":"the timecode string"},{"path":"/v1/to-seconds","params":{"fps":"frame rate (required)","timecode":"HH:MM:SS:FF (required)"},"returns":"real-time seconds"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Convert SMPTE timecode to and from frame counts and real-time seconds, with correct drop-frame handling for 29.97 and 59.94 fps. Pure local, no key."},"meta":{"timestamp":"2026-06-02T16:51:45.463Z","request_id":"c683852f-9d29-4007-a75a-a9b0bc8ed3aa"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":860,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":160,"monthly_call_quota":7100,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2000,"monthly_call_quota":130000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5600,"monthly_call_quota":670000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/timecode-api"}