{"openapi":"3.1.0","info":{"title":"Percentage API","version":"1.0.0","description":"Everyday percentage maths as an API. Four clear operations: what is X% of a value (15% of 200 = 30); what percentage one number is of another (30 is 15% of 200); the percentage change between two numbers, with the direction and the raw difference (200 → 250 is a 25% increase); and applying a percentage increase or decrease to a value (200 + 15% = 230). Handy for discounts, tips and tax, growth and KPI deltas, progress bars, dashboards and quick spreadsheet-style sums — without writing a formula. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 5 endpoints. A focused calculator, distinct from a general math-expression engine.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/percentage-api","description":"oanor gateway"}],"tags":[{"name":"Percentage"},{"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/apply":{"get":{"operationId":"get_v1_apply","tags":["Percentage"],"summary":"Apply an increase/decrease","description":"","parameters":[{"name":"value","in":"query","required":true,"description":"The value","schema":{"type":"string"},"example":"200"},{"name":"percent","in":"query","required":true,"description":"The percentage","schema":{"type":"string"},"example":"15"},{"name":"direction","in":"query","required":false,"description":"increase|decrease (default increase)","schema":{"type":"string"},"example":"increase"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"delta":30,"value":200,"result":230,"percent":15,"direction":"increase"},"meta":{"timestamp":"2026-06-03T01:09:42.131Z","request_id":"4bf29065-3d32-41fa-9820-cc8b52d2b720"},"status":"ok","message":"Apply an increase/decrease","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/change":{"get":{"operationId":"get_v1_change","tags":["Percentage"],"summary":"Percentage change","description":"","parameters":[{"name":"from","in":"query","required":true,"description":"Original value","schema":{"type":"string"},"example":"200"},{"name":"to","in":"query","required":true,"description":"New value","schema":{"type":"string"},"example":"250"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"to":250,"from":200,"change":25,"direction":"increase","difference":50},"meta":{"timestamp":"2026-06-03T01:09:42.186Z","request_id":"9ea795ae-fd60-46b1-8af2-14eabd4a2fe3"},"status":"ok","message":"Percentage change","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/of":{"get":{"operationId":"get_v1_of","tags":["Percentage"],"summary":"X percent of a value","description":"","parameters":[{"name":"percent","in":"query","required":true,"description":"The percentage","schema":{"type":"string"},"example":"15"},{"name":"value","in":"query","required":true,"description":"The value","schema":{"type":"string"},"example":"200"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"value":200,"result":30,"percent":15},"meta":{"timestamp":"2026-06-03T01:09:42.254Z","request_id":"b23d3ed9-9ec0-45be-a01a-f3a4ffb6d662"},"status":"ok","message":"X percent of Y","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/what":{"get":{"operationId":"get_v1_what","tags":["Percentage"],"summary":"What percent X is of Y","description":"","parameters":[{"name":"part","in":"query","required":true,"description":"The part","schema":{"type":"string"},"example":"30"},{"name":"whole","in":"query","required":true,"description":"The whole","schema":{"type":"string"},"example":"200"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"part":30,"whole":200,"percent":15},"meta":{"timestamp":"2026-06-03T01:09:42.344Z","request_id":"afeae27c-b51e-4c57-b06c-22a4c1345698"},"status":"ok","message":"What percent is X of Y","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":"Percentage API","notes":"Percentage change is relative to the magnitude of `from`. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/of","params":{"value":"required","percent":"required"},"returns":"percent% of value (15% of 200 = 30)"},{"path":"/v1/what","params":{"part":"required","whole":"required"},"returns":"what percent part is of whole"},{"path":"/v1/change","params":{"to":"required","from":"required"},"returns":"percentage change + direction"},{"path":"/v1/apply","params":{"value":"required","percent":"required","direction":"increase|decrease"},"returns":"the value after the change"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Everyday percentage maths: what is X% of Y, what percentage one number is of another, the percentage change between two numbers, and applying a percentage increase or decrease to a value. Pure local, no key."},"meta":{"timestamp":"2026-06-03T01:09:42.423Z","request_id":"446436c5-b4c3-47ac-aeeb-318e1eeca1ae"},"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":1095,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":135,"monthly_call_quota":9350,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2125,"monthly_call_quota":144500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5925,"monthly_call_quota":765000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/percentage-api"}