{"openapi":"3.1.0","info":{"title":"Easing API","version":"1.0.0","description":"Evaluate animation easing and timing functions. The sample endpoint computes any of the 31 standard Penner easings — easeInOutCubic, easeOutBounce, easeInOutElastic, easeInBack, easeOutExpo, easeInOutSine and the rest — the four CSS keywords (ease, ease-in, ease-out, ease-in-out), or your own CSS cubic-bezier(x1,y1,x2,y2) timing function, solved exactly with Newton-Raphson. Ask for a single progress value t, or pass steps=N to get a ready-made table of {t, value} points for building keyframes, sprite timelines, scroll animations and interpolation lookup tables. The list endpoint returns every supported easing name with the cubic-bezier for the CSS keywords. Eased values may overshoot below 0 or above 1 for back, elastic and bounce, exactly as designers expect. Ideal for motion design, game and UI animation, CSS and canvas/WebGL tooling, charting and data-viz transitions, and anywhere you need a precise timing curve without pulling in a library. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This computes the curve values; to convert colours or build gradients use the colour and gradient APIs.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/easing-api","description":"oanor gateway"}],"tags":[{"name":"Easing"},{"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/list":{"get":{"operationId":"get_v1_list","tags":["Easing"],"summary":"List easings","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"css":[{"name":"ease","bezier":[0.25,0.1,0.25,1]},{"name":"ease-in","bezier":[0.42,0,1,1]},{"name":"ease-out","bezier":[0,0,0.58,1]},{"name":"ease-in-out","bezier":[0.42,0,0.58,1]}],"count":35,"usage":"Pass ?easing=<name> or ?bezier=x1,y1,x2,y2 to /v1/sample, with ?t=0..1 or ?steps=N.","penner":["linear","easeInSine","easeOutSine","easeInOutSine","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","easeInElastic","easeOutElastic","easeInOutElastic","easeInBounce","easeOutBounce","easeInOutBounce"]},"meta":{"timestamp":"2026-06-03T09:25:05.897Z","request_id":"75fbea51-4cec-459a-8f21-02c93c01a2d6"},"status":"ok","message":"List easings","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/sample":{"get":{"operationId":"get_v1_sample","tags":["Easing"],"summary":"Sample an easing","description":"","parameters":[{"name":"easing","in":"query","required":false,"description":"Named easing (default linear) — see /v1/list","schema":{"type":"string"},"example":"easeOutBounce"},{"name":"bezier","in":"query","required":false,"description":"Custom cubic-bezier x1,y1,x2,y2 (overrides easing)","schema":{"type":"string"}},{"name":"t","in":"query","required":false,"description":"Single progress 0..1","schema":{"type":"string"},"example":"0.5"},{"name":"steps","in":"query","required":false,"description":"Sample over N steps (returns N+1 points)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"t":0.5,"type":"penner","value":0.765625,"easing":"easeOutBounce"},"meta":{"timestamp":"2026-06-03T09:25:06.001Z","request_id":"5e642b7a-4af7-4620-abb2-7db59c343c0b"},"status":"ok","message":"Sample an easing","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":"Easing API","notes":"Progress t and CSS-bezier x are clamped to 0..1; eased values may overshoot below 0 or above 1 for back/elastic/bounce. cubic-bezier x1,x2 must be within 0..1 (CSS rule). Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/sample","params":{"t":"single progress 0..1","steps":"sample over N steps instead of a single t (returns N+1 points)","bezier":"custom cubic-bezier as x1,y1,x2,y2 (overrides easing)","easing":"named easing (default linear) — see /v1/list"},"returns":"the eased value, or a table of {t,value} samples"},{"path":"/v1/list","params":[],"returns":"all supported named easings (CSS keywords + Penner)"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Evaluate animation easing and timing functions. Sample any of the 31 standard Penner easings (easeInOutCubic, easeOutBounce, easeInOutElastic, easeInBack…), the four CSS keywords (ease, ease-in, ease-out, ease-in-out), or your own CSS cubic-bezier(x1,y1,x2,y2) — at a single progress t, or as a ready-made table over N steps for building keyframes and lookup tables. Pure local maths, no key."},"meta":{"timestamp":"2026-06-03T09:25:06.104Z","request_id":"15161590-908a-4e10-911c-ac826db0e7aa"},"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":1835,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":335,"monthly_call_quota":11350,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2325,"monthly_call_quota":164500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6125,"monthly_call_quota":865000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/easing-api"}