<?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: nassim haddad</title>
    <description>The latest articles on DEV Community by nassim haddad (@nassim_haddad_4fdd304a846).</description>
    <link>https://dev.to/nassim_haddad_4fdd304a846</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%2F1503210%2F7b8fb890-8dbe-4850-bbd9-e1f33c80b6f7.jpg</url>
      <title>DEV Community: nassim haddad</title>
      <link>https://dev.to/nassim_haddad_4fdd304a846</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nassim_haddad_4fdd304a846"/>
    <language>en</language>
    <item>
      <title>I built a company-verification API for the Gulf Market</title>
      <dc:creator>nassim haddad</dc:creator>
      <pubDate>Tue, 15 Sep 2026 10:24:09 +0000</pubDate>
      <link>https://dev.to/nassim_haddad_4fdd304a846/i-built-a-company-verification-api-for-the-gulf-the-market-stripe-and-opencorporates-ignore-1hj4</link>
      <guid>https://dev.to/nassim_haddad_4fdd304a846/i-built-a-company-verification-api-for-the-gulf-the-market-stripe-and-opencorporates-ignore-1hj4</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;Every global company-data API stops at Europe.&lt;/p&gt;

&lt;p&gt;Stripe's data products, OpenCorporates, the big aggregators — none of them cover Saudi Arabia, UAE, Kuwait, Qatar, Bahrain, Oman, or Lebanon. The data exists, but it's scattered across seven government portals, most of them Arabic-only, some permission-only. For a developer, "verify this Gulf company" means manually hunting through portals and PDFs.&lt;/p&gt;

&lt;p&gt;So I built the thing that should have existed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;One endpoint:&lt;/p&gt;

&lt;p&gt;POST /api/v1/verify-company&lt;br&gt;
{ "country": "SA", "trn": "310000000000000", "name": "Acme Trading LLC" }&lt;/p&gt;

&lt;p&gt;returns:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "country": "SA",&lt;br&gt;
  "trn_format_valid": true,&lt;br&gt;
  "verdict": "likely",&lt;br&gt;
  "risk_tags": [],&lt;br&gt;
  "checks": {&lt;br&gt;
    "registry_live": "not_queried_no_feed",&lt;br&gt;
    "sanctions_match": "not_queried_no_feed"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;It validates TRN/VAT format against each country's rules (Saudi 15 digits starting 3, UAE 15 starting 1, Kuwait/Bahrain 9, Qatar 10, Oman 8, Lebanon 5-8), surfaces risk heuristics from the name (offshore, generic-shell, newly-registered), and does it all through one deterministic contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design decisions I'm actually proud of
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Copy-once API keys
&lt;/h3&gt;

&lt;p&gt;The raw key is shown to the user exactly once. From then on we store only:&lt;/p&gt;

&lt;p&gt;SHA-256(key + pepper)   and   a display prefix like "lb_test_..."&lt;/p&gt;

&lt;p&gt;Not the key itself. So a leaked key reveals nothing about the customer, and a lost key can never be recovered — you revoke it and mint a new one. This is the pattern Stripe and OpenAI use, and it's the whole game: the real key exists in exactly one place, the customer's clipboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Honest status codes
&lt;/h3&gt;

&lt;p&gt;400  malformed request&lt;br&gt;
401  missing / invalid / revoked key&lt;br&gt;
403  email not confirmed yet&lt;br&gt;
409  email already has a verified key&lt;br&gt;
429  quota, rate limit, or too many signups from this IP&lt;/p&gt;

&lt;p&gt;Each one means a real thing. No vague 500s. If you're a developer integrating this, the error tells you exactly what to fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A gatekeeper that actually gates
&lt;/h3&gt;

&lt;p&gt;Every call goes through a middleware that checks the key hash, enforces a per-key quota (500 calls on the founder tier), a per-key rate limit (60 req/min, derived from the usage log so it holds across serverless instances), and traces every request with an x-request-id.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Anti-abuse signup
&lt;/h3&gt;

&lt;p&gt;Email double opt-in (keys return 403 until confirmed), disposable-domain blocking, and per-IP caps. A squatted email can always be reclaimed by its real owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision I want feedback on most: honest scope
&lt;/h2&gt;

&lt;p&gt;This is the part I'd genuinely like the community to weigh in on.&lt;/p&gt;

&lt;p&gt;Today the API validates TRN/VAT format and returns risk heuristics. It does not query live government registries or sanctions lists. Every response carries this flag:&lt;/p&gt;

&lt;p&gt;{ "registry_live": "not_queried_no_feed" }&lt;/p&gt;

&lt;p&gt;I chose to ship a tool that tells you exactly what it cannot verify rather than one that silently fakes "registered" — because if someone builds a compliance decision on a fabricated verdict, that's on the tool.&lt;/p&gt;

&lt;p&gt;The hard part is next: live registry verification. The Gulf data providers (CRIF / D&amp;amp;B Gulf, Kyckr) quote enterprise pricing (around 0.24 USD per lookup). At a consumer API price that wipes the margin out. So I'm stuck on the classic data-moat pricing problem — and I'd love to hear how other dev-tool builders have solved licensing expensive registry data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it at:&lt;a href="https://mena-biz-api-nassims-projects-08916750.vercel.app/**_" rel="noopener noreferrer"&gt;https://mena-biz-api-nassims-projects-08916750.vercel.app/**_&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7fveumg13wgoikectud7.jpg" alt=" " width="720" height="895"&gt;
_**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;About 60 seconds: enter your email, click the sign-in link, create a key, then run curl:&lt;/p&gt;

&lt;p&gt;KEY="lb_test_"&lt;br&gt;
HDR="x-api-key"&lt;br&gt;
curl -X POST &lt;a href="https://mena-biz-api-nassims-projects-08916750.vercel.app/api/v1/verify-company" rel="noopener noreferrer"&gt;https://mena-biz-api-nassims-projects-08916750.vercel.app/api/v1/verify-company&lt;/a&gt; \&lt;br&gt;
  -H "$HDR: $KEY" \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{"country":"SA","trn":"310000000000000","name":"Acme Trading LLC"}'&lt;/p&gt;

&lt;p&gt;Founder offer: 500 free calls for the first 50 signups, no credit card.&lt;/p&gt;

&lt;p&gt;Site: &lt;a href="https://mena-biz-api-nassims-projects-08916750.vercel.app/" rel="noopener noreferrer"&gt;https://mena-biz-api-nassims-projects-08916750.vercel.app/&lt;/a&gt;&lt;br&gt;
If you work with Gulf companies, KYC, or vendor onboarding — what data would you actually pay for? I'd genuinely like to know.&lt;/p&gt;

&lt;p&gt;This is build-in-public. I'll follow up with the live-registry pricing saga and whatever the community tells me.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>api</category>
      <category>security</category>
      <category>discuss</category>
    </item>
    <item>
      <title>pico 8 game missing flag game by nassim hadadd</title>
      <dc:creator>nassim haddad</dc:creator>
      <pubDate>Sat, 18 May 2024 06:05:39 +0000</pubDate>
      <link>https://dev.to/nassim_haddad_4fdd304a846/pico-8-game-missing-flag-game-by-nassim-hadadd-4ekj</link>
      <guid>https://dev.to/nassim_haddad_4fdd304a846/pico-8-game-missing-flag-game-by-nassim-hadadd-4ekj</guid>
      <description>&lt;p&gt;hello and welcome to my 2nd post but this time related to my pico 8 game,this game was created on october 2023 and took about 1 week of development,compatible with all devices.the link of the game with full description will be provided in this post (&lt;a href="https://www.lexaloffle.com/bbs/?tid=54568" rel="noopener noreferrer"&gt;https://www.lexaloffle.com/bbs/?tid=54568&lt;/a&gt;) this is the game link,&lt;br&gt;
if you like my game please consider donating by copying this link to your browser(coindrop.to/nassim-98)&lt;br&gt;
thanks with all respect happy coding to you all stay tuned for more awesome projects.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>lua</category>
      <category>pico8</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
