') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - DYanis/salaryapi-examples: Official Salary API examples for salary benchmarks and gross-to-net calculations · GitHub
Skip to content

Repository files navigation

SalaryAPI.com full logo

SalaryAPI integration examples

Official, runnable examples for salary benchmarks and gross-to-net salary calculations with SalaryAPI.

The repository uses only standard runtime features. The JavaScript and Python examples need no third-party packages.

Available endpoints

Use caseEndpointDocumentation
Salary benchmarksPOST /api/v1/salary-benchmarksSalary benchmark API
Gross-to-net calculationPOST /api/v1/net-salaryNet salary API

The complete machine-readable contract is available in the OpenAPI 3.1 specification.

You can also explore the requests in the public SalaryAPI Postman collection.

Requirements

  • A SalaryAPI account with API access or an active API trial
  • A SalaryAPI key from the developer dashboard
  • One of: cURL, Node.js 18 or newer, or Python 3.10 or newer

See the current SalaryAPI plans for access and usage limits.

Set your API key

Keep the key outside the source code. Never commit it to Git.

macOS or Linux:

export SALARYAPI_KEY="replace_with_your_api_key"

PowerShell:

$env:SALARYAPI_KEY="replace_with_your_api_key"

Run the examples

JavaScript

node examples/javascript/salary-benchmark.mjs
node examples/javascript/net-salary.mjs

Python

python examples/python/salary_benchmark.py
python examples/python/net_salary.py

cURL

sh examples/curl/salary-benchmark.sh
sh examples/curl/net-salary.sh

Each example prints the JSON response and exits with a nonzero status when the request fails.

Verify the examples

The check validates JavaScript syntax and confirms that the public OpenAPI contract still contains the endpoints and required fields used here.

npm run check

Python and shell syntax can be checked with:

python -m py_compile examples/python/_client.py examples/python/salary_benchmark.py examples/python/net_salary.py
bash -n examples/curl/salary-benchmark.sh examples/curl/net-salary.sh

Security

  • Read the API key from SALARYAPI_KEY
  • Do not put a real key in .env.example, source files, issues, or logs
  • Rotate a key from the SalaryAPI developer dashboard if it is exposed
  • Use the API from a trusted backend when an application would otherwise expose the key to a browser or mobile client

License

The examples are available under the MIT License.

About

Official Salary API examples for salary benchmarks and gross-to-net calculations

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages