<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RoviDev</title>
    <description>The latest articles on DEV Community by RoviDev (@rovidev).</description>
    <link>https://dev.to/rovidev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4016404%2Fb23e4ca9-f312-4789-b875-efb148ae3940.png</url>
      <title>DEV Community: RoviDev</title>
      <link>https://dev.to/rovidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rovidev"/>
    <language>en</language>
    <item>
      <title>I audited my own bounty radar: 86% of the "Algora bounties" I was tracking weren't real</title>
      <dc:creator>RoviDev</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:57:10 +0000</pubDate>
      <link>https://dev.to/rovidev/i-audited-my-own-bounty-radar-86-of-the-algora-bounties-i-was-tracking-werent-real-2plj</link>
      <guid>https://dev.to/rovidev/i-audited-my-own-bounty-radar-86-of-the-algora-bounties-i-was-tracking-werent-real-2plj</guid>
      <description>&lt;p&gt;I run a small radar that lists paid GitHub issues (Algora, Opire, IssueHunt, BountyHub, TaskBounty). Recently I audited my own feed and found it was wrong in an instructive way. Here is what I got wrong, and the check that fixes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistake: trusting text on the issue
&lt;/h2&gt;

&lt;p&gt;My scanner treated &lt;code&gt;"/bounty $700" in:body&lt;/code&gt; as proof of an Algora bounty. That query matches roughly &lt;strong&gt;67,000&lt;/strong&gt; open issues on GitHub. Of the 97 issues I had flagged as verified Algora bounties, &lt;strong&gt;83 (86%)&lt;/strong&gt; had no comment from the real Algora app. That was about &lt;strong&gt;$18,900&lt;/strong&gt; of money that didn't exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three patterns of fake
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Amounts typed by hand&lt;/strong&gt; on throwaway repos. Anyone can write &lt;code&gt;/bounty $700&lt;/code&gt; in an issue; no money is behind it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look-alike bots.&lt;/strong&gt; One bot posts "💎 $9400 bounty" in exactly Algora's format, but it isn't Algora's app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"AI only" farms.&lt;/strong&gt; Dozens of issues with labels like "AI only allowed - no humans", created by the same author, some even using the real bot.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The signal that works
&lt;/h2&gt;

&lt;p&gt;The real Algora app comments "💎 $X bounty" on the issue, from the account &lt;code&gt;algora-pbc&lt;/code&gt;. So this search returns the real set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commenter:algora-pbc state:open type:issue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Today that is about 33 open issues, not thousands. Parse the amount from that comment, not from the issue body.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else to check before you spend hours
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The issue is still open and unassigned.&lt;/li&gt;
&lt;li&gt;No merged PR already references it.&lt;/li&gt;
&lt;li&gt;The repo is active and not brand new.&lt;/li&gt;
&lt;li&gt;The thread isn't a swarm (dozens of competing attempts).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;My public numbers went from "104 bounties / $47k" to a handful of workable ones. It looks worse, but it's true, and it saves hours: a big number is not a verified number.&lt;/p&gt;

&lt;p&gt;I turned these checks into a free live board (numbers deliberately coarse): &lt;a href="https://bountyos.rovidev.com/en/github-bounty-board/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=antifraud" rel="noopener noreferrer"&gt;https://bountyos.rovidev.com/en/github-bounty-board/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=antifraud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More on spotting fakes: &lt;a href="https://bountyos.rovidev.com/en/blog/how-to-spot-fake-github-bounties/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=antifraud" rel="noopener noreferrer"&gt;https://bountyos.rovidev.com/en/blog/how-to-spot-fake-github-bounties/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=antifraud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What other cheap ground-truth signals do you use to avoid wasted effort? I'd like to hear them.&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Where is it cheaper to hire in LATAM? Mexico vs Colombia vs Brazil (employer cost API)</title>
      <dc:creator>RoviDev</dc:creator>
      <pubDate>Sun, 05 Jul 2026 20:08:23 +0000</pubDate>
      <link>https://dev.to/rovidev/undefinedwhere-is-it-cheaper-to-hire-in-latam-mexico-vs-colombia-vs-brazil-employer-cost-api-4mpb</link>
      <guid>https://dev.to/rovidev/undefinedwhere-is-it-cheaper-to-hire-in-latam-mexico-vs-colombia-vs-brazil-employer-cost-api-4mpb</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Gross salary is not what you pay. Employer contributions + statutory provisions (aguinaldo, 13th salary, vacation accruals) change the ranking. We built a &lt;a href="https://herramientas.rovidev.com/herramientas/comparar-costo-empleador-latam/" rel="noopener noreferrer"&gt;free comparison tool&lt;/a&gt; powered by our &lt;strong&gt;Employment Cost API v2.3&lt;/strong&gt; — same engine behind &lt;a href="https://rapidapi.com/rovidev95/api/latam-iberia-payroll" rel="noopener noreferrer"&gt;RapidAPI LATAM &amp;amp; Iberia Payroll&lt;/a&gt; (Basic plan &lt;strong&gt;$0&lt;/strong&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  The question every remote-hiring team asks
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Should we hire in Mexico, Colombia, or Brazil?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Payroll APIs usually answer &lt;strong&gt;gross → net&lt;/strong&gt; for the employee. Finance and EOR teams need &lt;strong&gt;&lt;code&gt;monthly_fully_loaded_cost&lt;/code&gt;&lt;/strong&gt; — what the &lt;em&gt;company&lt;/em&gt; actually spends per month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mid-tier snapshot (API v2.3)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;Loaded / month&lt;/th&gt;
&lt;th&gt;Multiplier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chile&lt;/td&gt;
&lt;td&gt;1,340,840 CLP&lt;/td&gt;
&lt;td&gt;1.12×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peru&lt;/td&gt;
&lt;td&gt;5,843 PEN&lt;/td&gt;
&lt;td&gt;1.30×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mexico&lt;/td&gt;
&lt;td&gt;67,868 MXN&lt;/td&gt;
&lt;td&gt;1.36×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Colombia&lt;/td&gt;
&lt;td&gt;11,080,267 COP&lt;/td&gt;
&lt;td&gt;1.39×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;td&gt;11,955 BRL&lt;/td&gt;
&lt;td&gt;1.49×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  One API call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.rovidev.com/v1/employment-cost/compare"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-RapidAPI-Key: YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"gross_monthly":50000,"countries":["mx","co","br","ar"],"include_statutory_provisions":true}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://herramientas.rovidev.com/herramientas/comparar-costo-empleador-latam/" rel="noopener noreferrer"&gt;Interactive ranking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://herramientas.rovidev.com/herramientas/api-costo-empleador-latam/" rel="noopener noreferrer"&gt;API landing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.rovidev.com/docs" rel="noopener noreferrer"&gt;Swagger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rapidapi.com/rovidev95/api/latam-iberia-payroll" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Estimates for HR/fintech planning — not legal or tax advice.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Built by &lt;a href="https://rovidev.com" rel="noopener noreferrer"&gt;RoviDev&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to calculate LATAM net salary via API (Node.js &amp; Python)</title>
      <dc:creator>RoviDev</dc:creator>
      <pubDate>Sun, 05 Jul 2026 16:04:48 +0000</pubDate>
      <link>https://dev.to/rovidev/how-to-calculate-latam-net-salary-via-api-nodejs-python-50id</link>
      <guid>https://dev.to/rovidev/how-to-calculate-latam-net-salary-via-api-nodejs-python-50id</guid>
      <description>&lt;p&gt;Remote hiring in Latin America sounds simple until you need &lt;strong&gt;consistent payroll math&lt;/strong&gt; across Mexico, Brazil, Colombia and a dozen more regimes. Spreadsheets break when you add reverse calculations ("guaranteed net") or employer total cost.&lt;/p&gt;

&lt;p&gt;We ship &lt;strong&gt;&lt;a href="https://api.rovidev.com/docs" rel="noopener noreferrer"&gt;LATAM &amp;amp; Iberia Salary Planning API v2&lt;/a&gt;&lt;/strong&gt; — same engine behind &lt;a href="https://herramientas.rovidev.com/herramientas/calculadoras-latam/" rel="noopener noreferrer"&gt;30+ free calculators&lt;/a&gt; on RoviDev. This post shows how to integrate it in &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;Python&lt;/strong&gt; via &lt;a href="https://rapidapi.com/rovidev95/api/latam-iberia-payroll" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; (Basic plan &lt;strong&gt;$0&lt;/strong&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /v1/countries&lt;/code&gt; — 20 countries + currency&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/payroll/{country}&lt;/code&gt; — Gross → net + deductions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/payroll/{country}/reverse&lt;/code&gt; — Target net → required gross&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/payroll/batch&lt;/code&gt; — Up to 50 rows per call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Countries include &lt;strong&gt;mx, br, ar, co, pe, cl, es, pt&lt;/strong&gt; and more. Response includes &lt;code&gt;employer_total_cost&lt;/code&gt; — critical for EOR and fintech budgeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Subscribe on RapidAPI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://rapidapi.com/rovidev95/api/latam-iberia-payroll" rel="noopener noreferrer"&gt;LATAM &amp;amp; Iberia Payroll on RapidAPI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Basic ($0)&lt;/strong&gt; and subscribe&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;X-RapidAPI-Key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use host &lt;code&gt;latam-iberia-payroll.p.rapidapi.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Node.js — gross to net
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;RAPIDAPI_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;grossToNet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;grossMonthly&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://api.rovidev.com/v1/payroll/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;latam-iberia-payroll.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;gross_monthly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;grossMonthly&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;pay_period&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;monthly&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;grossToNet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Python — reverse (net → gross)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;reverse_net&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;net_target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.rovidev.com/v1/payroll/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/reverse&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latam-iberia-payroll.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;net_monthly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;net_target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pay_period&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monthly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;reverse_net&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gross_monthly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Production tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backoff on 429&lt;/strong&gt; — respect RapidAPI quotas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disclaimer in UI&lt;/strong&gt; — planning estimates, not legal payroll advice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agents&lt;/strong&gt; → MCP server on &lt;a href="https://mcpize.com/mcp/latam-payroll-api" rel="noopener noreferrer"&gt;MCPize&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rapidapi.com/rovidev95/api/latam-iberia-payroll" rel="noopener noreferrer"&gt;RapidAPI — plan $0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://herramientas.rovidev.com/herramientas/guia/integrar-api-nomina-latam/" rel="noopener noreferrer"&gt;Integration guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built by &lt;a href="https://rovidev.com" rel="noopener noreferrer"&gt;RoviDev&lt;/a&gt;. Cross-posted from &lt;a href="https://rovidev.com/en/blog/latin-america-payroll-api-node-python/" rel="noopener noreferrer"&gt;rovidev.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
