<?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: Chizurum Egwunwankwo</title>
    <description>The latest articles on DEV Community by Chizurum Egwunwankwo (@chizurum).</description>
    <link>https://dev.to/chizurum</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%2F3321752%2Fa98ed08a-1f90-4544-8a8e-c8cb285b67d8.png</url>
      <title>DEV Community: Chizurum Egwunwankwo</title>
      <link>https://dev.to/chizurum</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chizurum"/>
    <language>en</language>
    <item>
      <title>Building an Automated POS Settlement Monitor with Interswitch Transaction Search</title>
      <dc:creator>Chizurum Egwunwankwo</dc:creator>
      <pubDate>Tue, 30 Jun 2026 17:04:50 +0000</pubDate>
      <link>https://dev.to/interswitchdevcommunity/building-an-automated-pos-settlement-monitor-with-interswitch-transaction-search-2c4k</link>
      <guid>https://dev.to/interswitchdevcommunity/building-an-automated-pos-settlement-monitor-with-interswitch-transaction-search-2c4k</guid>
      <description>&lt;p&gt;If you run a business with POS terminals - a retail chain, a string of agent locations, a payments business with terminals in the field, you know the evening ritual. Transactions came in all day. Now you need to know which ones actually settled, which are still pending, and whether the money that hit your account matches what your terminals reported. &lt;/p&gt;

&lt;p&gt;This guide does that. We'll build an automated settlement monitor using the &lt;a href="https://docs.interswitchgroup.com/docs/transaction-search" rel="noopener noreferrer"&gt;Interswitch Transaction Search API&lt;/a&gt;; one that takes your terminals, finds the day's transactions, and tells you exactly what settled and what didn't. &lt;/p&gt;

&lt;h2&gt;
  
  
  On Coverage
&lt;/h2&gt;

&lt;p&gt;Before we write a line of code, you need to know what Transaction Search actually covers, because building on the wrong assumption wastes your time.&lt;br&gt;
Per Interswitch's transaction coverage, here's what's fully supported today:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transaction Type&lt;/th&gt;
&lt;th&gt;Transaction&lt;/th&gt;
&lt;th&gt;Settlement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purchase (POS &amp;amp; Web)&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transfer (ATM &amp;amp; POS)&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cash Withdrawal&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agency Banking&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quickteller Transfers&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two types we'll build on - POS Purchase and POS Transfer - have full transaction and settlement coverage. That's deliberate. It means every reconciliation lookup in this guide returns complete data.&lt;/p&gt;

&lt;p&gt;One thing to note: &lt;a href="https://interswitchgroup.com/ipg" rel="noopener noreferrer"&gt;Interswitch Payment Gateway (IPG&lt;/a&gt;) purchases are not currently covered by Transaction Search. If you're verifying IPG web checkout payments, that's a different flow. Transaction Search is built for transactions that flow through the switch: POS, ATM, cash withdrawal, transfers. &lt;/p&gt;
&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;A settlement monitor that does three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authenticates&lt;/strong&gt; against Interswitch Passport for an access token&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Searches&lt;/strong&gt; each terminal's transactions for a given day&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pulls&lt;/strong&gt; full settlement details for each transaction and flags anything not yet settled&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end you'll have a function you can drop into a cron job that runs every evening and emails you a settlement report.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1 - Setup Your Project
&lt;/h2&gt;

&lt;p&gt;Get your credentials first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create an account on the &lt;a href="https://developer.interswitchgroup.com/" rel="noopener noreferrer"&gt;Interswitch Developer Console&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up a Project and select Transaction Search from the available APIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A test Client ID and Secret Key are generated for you&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Step 2 - Authentication
&lt;/h2&gt;

&lt;p&gt;Every Transaction Search call needs a Bearer token, obtained by exchanging your Client ID and Secret against the Interswitch Passport endpoint. Tokens are short-lived - cache and refresh rather than requesting one per call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;
&lt;span class="c1"&gt;// auth.js&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;getAccessToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&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;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&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="nx"&gt;clientId&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="nx"&gt;secret&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="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;base64&lt;/span&gt;&lt;span class="dl"&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;response&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://passport-sandbox.interswitchng.com/passport/oauth/token &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;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;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Basic &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;credentials&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="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/x-www-form-urlencoded&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;grant_type=client_credentials&amp;amp;scope=profile&lt;/span&gt;&lt;span class="dl"&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;access_token&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3 - Find A Terminal's Transaction
&lt;/h2&gt;

&lt;p&gt;This is where the POS case study comes alive. Quick Search lets you find transactions by terminal_id, exactly the field you have for every one of your POS devices. Combine it with a date and you get every transaction that terminal processed that day.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;terminal_id&lt;/td&gt;
&lt;td&gt;Identifies a terminal belonging to a merchant&lt;/td&gt;
&lt;td&gt;8 chars — you have this for every device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;merchant_code&lt;/td&gt;
&lt;td&gt;Uniquely identifies a registered merchant&lt;/td&gt;
&lt;td&gt;12 chars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stan&lt;/td&gt;
&lt;td&gt;Transaction number from the terminal&lt;/td&gt;
&lt;td&gt;6 digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rrn&lt;/td&gt;
&lt;td&gt;Retrieval Reference Number&lt;/td&gt;
&lt;td&gt;12 digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;masked_pan&lt;/td&gt;
&lt;td&gt;Card number (first 6 + last 4 visible)&lt;/td&gt;
&lt;td&gt;16–19 digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;start_date&lt;/td&gt;
&lt;td&gt;Transaction date (YYYY-MM-DD)&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transaction_amount&lt;/td&gt;
&lt;td&gt;Amount in lower denomination (₦20 → 2000)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two rules that catch everyone: start_date is compulsory, and transaction_amount is in the lower denomination, ₦200 is 20000, not 200.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;
&lt;span class="c1"&gt;// findTerminalTransactions.js&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;searchByTerminal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;date&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;response&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://switch-online-gateway-service.k9.isw.la/switch-online-gateway-service/api/v1/gateway/quick-search?page_size=20&amp;amp;page_number=1&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;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;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ClientId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;clientId&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="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;terminal_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;          &lt;span class="c1"&gt;// required&lt;/span&gt;
            &lt;span class="p"&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;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful search returns a 202 with a data array. Each item carries the field that matters most — the transaction_id:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"responseMessage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Transactions Received Successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"responseCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"202"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dataSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"retrieval_reference_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"696843517287"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"merchant_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2057LA200002957"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"masked_pan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"519911******3279"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"terminal_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20573ZLY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"stan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"373758"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"transaction_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-10-09"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"transaction_amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;210000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"transaction_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"958804c0-77fb-11ee-a39f-f7013f7f10c0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"acquirer_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ZIB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"issuer_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GTB"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Handling a full day of transactions
&lt;/h2&gt;

&lt;p&gt;A busy terminal does more than 20 transactions a day, and search caps at 20 per page (page_size can't exceed 20 - try and you get a 400). Use the cursor to page through. Leave it blank on the first call; the response gives you a cursor and a hasMorePages flag. Keep passing the cursor until hasMorePages is false.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&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;getAllTerminalTransactions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;hasMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hasMore&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://switch-online-gateway-service.k9.isw.la/switch-online-gateway-service/api/v1/gateway/quick-search?page_size=20&amp;amp;page_number=1&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;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;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ClientId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;clientId&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="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;terminal_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;start_date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="p"&gt;})&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;page&lt;/span&gt; &lt;span class="o"&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;json&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="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;hasMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasMorePages&lt;/span&gt;&lt;span class="p"&gt;;&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;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4 - Pull Settlement Details
&lt;/h2&gt;

&lt;p&gt;Search tells you a transaction happened. To know whether the money settled, take the transaction_id and call Get Transaction Details.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;
&lt;span class="c1"&gt;// getDetails.js&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;getTransactionDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;transactionId&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;response&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://switch-online-gateway-service.k9.isw.la/switch-online-gateway-service/api/v1/gateway/transaction?transaction_id=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transactionId&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;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;client_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;clientId&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="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response breaks into four blocks. For settlement reconciliation, the first two are what you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"globalOutputData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PURCHASE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"210000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"transactionDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-10-09T17:47:35.240"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"transactionStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"COMPLETED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"settlementDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-10-10"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"settlementStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SETTLED"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"transactionData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"terminalId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20573ZLY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"stan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"373758"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"rrn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"696843517287"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"responseCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"responseMessage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Approved or completed successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"merchantCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2057LA200002957"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"settlementData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"settlementBreakdownList"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;breakdown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;party&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"settlementDataAvailable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The globalOutputData block answers the two questions your reconciliation is really asking: transaction status (did the payment complete?) and settlement status (did the money move?).&lt;/p&gt;




&lt;h2&gt;
  
  
  The Insight That Saves You: Transaction Status and Settlement Status Are Different
&lt;/h2&gt;

&lt;p&gt;This is the single most important thing in this guide.&lt;/p&gt;

&lt;p&gt;A POS transaction can be COMPLETED but PENDING SETTLEMENT. The customer's card was charged, the purchase succeeded, your terminal printed "approved" but the money has not yet landed in your settlement account. &lt;/p&gt;

&lt;p&gt;These are two independent facts.&lt;/p&gt;

&lt;p&gt;The most common reconciliation mistake is treating "transaction succeeded" as "money received." They are not the same, and the gap between them is exactly what you're monitoring for. A transaction stuck in PENDING SETTLEMENT for longer than expected is the thing you want flagged.&lt;/p&gt;

&lt;p&gt;The statuses you'll see:&lt;em&gt;PENDING, COMPLETED, REVERSED Settlement status: SETTLED, PENDING SETTLEMENT, NO SETTLEMENT, UNSUPPORTED&lt;/em&gt;&lt;br&gt;
And within the transaction data, the response code maps cleanly: 00 is approved, 09 (or none) is pending, anything else (91, 06, 51...) is a failure.&lt;/p&gt;


&lt;h2&gt;
  
  
  Putting It Together: The Settlement Monitor
&lt;/h2&gt;

&lt;p&gt;Here's the whole thing: give it your terminals and a date, get back a clean settlement report flagging anything that hasn't settled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;javascript&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;runSettlementMonitor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;terminalIds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;date&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;token&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;getAccessToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&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;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;settled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="na"&gt;pending&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="na"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="na"&gt;notFound&lt;/span&gt;&lt;span class="p"&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;for &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;terminalId&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;terminalIds&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;transactions&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;getAllTerminalTransactions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;date&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;transactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;notFound&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;for &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;txn&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;transactions&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;details&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;getTransactionDetails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;txn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transaction_id&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;record&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;globalOutputData&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;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;terminalId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;transactionStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transactionStatus&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;settlementStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settlementStatus&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;settlementDate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settlementDate&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="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settlementStatus&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SETTLED&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="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transactionStatus&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;COMPLETED&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="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pending&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// completed but not yet settled — watch these&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&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;return&lt;/span&gt; &lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Run it every evening for all your terminals&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;report&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;runSettlementMonitor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&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="s2"&gt;20573ZLY&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="s2"&gt;20577C9O&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="s2"&gt;2TEP5C7W&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="s2"&gt;2023-10-09&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Settled: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;settled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Pending settlement (watch these): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pending&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Failed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;report&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drop that into a cron job, pipe the output into an email or a Slack webhook, and you've automated reconciliation. The pending bucket is one to watch, those are completed transactions whose money hasn't landed yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  When A Transaction Isn't Found
&lt;/h2&gt;

&lt;p&gt;Interswitch is explicit that Transaction Search hasn't reached 100% coverage. If a POS transaction you know exists doesn't come back, treat the 404 as "not found in search" rather than "doesn't exist," and reconfirm through the &lt;a href="https://help.interswitchng.com" rel="noopener noreferrer"&gt;Interswitch Help Desk&lt;/a&gt;. Build that into your notFound handling rather than letting it break the run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;We took three API calls: &lt;strong&gt;&lt;em&gt;authenticate, search by terminal, get settlement details&lt;/em&gt;&lt;/strong&gt;, and turned them into an automated settlement monitor for a POS business. &lt;/p&gt;

&lt;p&gt;The key isn't any single call. It's the insight that transaction status and settlement status are different questions, and that the gap between them is exactly what reconciliation is about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/transaction-search-getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/transaction-search-overview" rel="noopener noreferrer"&gt;Transaction Search Overview
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/transaction-set-coverage" rel="noopener noreferrer"&gt;Transaction Set Coverage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/quick-search" rel="noopener noreferrer"&gt;Quick Search Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/get-transaction-details" rel="noopener noreferrer"&gt;Get Transaction Details&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.interswitchgroup.com/docs/swol-response-codes" rel="noopener noreferrer"&gt;Response Codes &amp;amp; Statuses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Running POS terminals and building reconciliation tooling?&lt;a href="https://join.slack.com/t/iswdevelopercommunity/shared_invite/zt-3tef2a52s-0mI470Fh7hJ_R8O9wfHHIw" rel="noopener noreferrer"&gt; Join our community&lt;/a&gt; on Slack and share what you're building.&lt;/p&gt;

</description>
      <category>transactionsearchapi</category>
      <category>interswitchapi</category>
      <category>payment</category>
      <category>api</category>
    </item>
    <item>
      <title>A Guide To Using The Interswitch API Marketplace</title>
      <dc:creator>Chizurum Egwunwankwo</dc:creator>
      <pubDate>Wed, 18 Feb 2026 08:40:20 +0000</pubDate>
      <link>https://dev.to/chizurum/a-guide-to-using-the-interswitch-api-marketplace-m9n</link>
      <guid>https://dev.to/chizurum/a-guide-to-using-the-interswitch-api-marketplace-m9n</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frj9ump8kp6ri4is1qsnj.jpg" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2Frj9ump8kp6ri4is1qsnj.jpg" alt="Interswitch API Marketplace" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two weeks ago, we invited developers from the Interswitch developer community to a build night. The goal was to show - not just tell - the capabilities of our API Marketplace and how it makes discovery and consumption easier. In 3 hours, we had 5 completed projects.&lt;/p&gt;

&lt;p&gt;This isn't just about the event - it's about the purpose of the marketplace: making API discovery easier and integrations seamless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Marketplaces Matter: Solving Discovery and Fragmentation
&lt;/h2&gt;

&lt;p&gt;Marketplaces solve more than just the discovery problem. They're the solution to fragmentation.&lt;/p&gt;

&lt;p&gt;Think about the traditional developer experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple API providers for different services&lt;/li&gt;
&lt;li&gt;Separate accounts and credentials for each&lt;/li&gt;
&lt;li&gt;Different authentication schemes&lt;/li&gt;
&lt;li&gt;Scattered documentation&lt;/li&gt;
&lt;li&gt;No centralized billing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://developer.interswitchgroup.com/marketplace" rel="noopener noreferrer"&gt;Interswitch API Marketplace&lt;/a&gt; changes this.&lt;/p&gt;

&lt;p&gt;It's a one-stop shop that brings all the APIs you need into one central place. You no longer have to juggle different providers, create multiple accounts, or manage separate credentials for different APIs needed to build one product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Benefits:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Centralized Discovery: Browse all available APIs in one place&lt;/li&gt;
&lt;li&gt;Unified Authentication: One OAuth 2.0 scheme for all APIs&lt;/li&gt;
&lt;li&gt;Single Sign-Up: One account, one dashboard, one wallet&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  APIs On The Marketplace
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ebahsiqebbgrdrzr9nt.jpg" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2F2ebahsiqebbgrdrzr9nt.jpg" alt="An overview of some APIs on Interswitch API Marketplace" width="800" height="370"&gt;&lt;/a&gt;&lt;br&gt;
The Interswitch API Marketplace currently hosts 20+ APIs across 3 categories, with more coming soon.&lt;/p&gt;

&lt;p&gt;Here's what's available, what each does, and what you can build with it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Identity &amp;amp; Verification APIs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=6811cca7bec04a536b85d705" rel="noopener noreferrer"&gt;Bank Account Verification API:&lt;/a&gt; For authenticating bank details and verifying account ownership.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=682476229450991869456e42" rel="noopener noreferrer"&gt;BVN Full Details API&lt;/a&gt;: Verification and validation of a Bank Verification Number (BVN) in real-time with complete customer information.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=67bd44165da0515b2a390d05" rel="noopener noreferrer"&gt;BVN Boolean Match API:&lt;/a&gt; Verify the existence and validity of a BVN in real-time (returns true/false without full details).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=67bd419c5da0515b2a390d04" rel="noopener noreferrer"&gt;NIN API&lt;/a&gt;: Verification API that confirms and verifies a person's National Identity Number.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=682477329450991869456e43" rel="noopener noreferrer"&gt;NIN Full Details API&lt;/a&gt;: Authentication and confirmation of a NIN in real-time with complete personal information.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=682475189450991869456e41" rel="noopener noreferrer"&gt;Physical Address API&lt;/a&gt;: Validates and verifies customer-provided addresses by checking them against authoritative databases.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=67bd488f5da0515b2a390d06" rel="noopener noreferrer"&gt;TIN API&lt;/a&gt;: Tax-focused API that authenticates Tax Identification Numbers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=6811cd7bbec04a536b85d706" rel="noopener noreferrer"&gt;Domestic AML Search API&lt;/a&gt;: Helps businesses screen individuals against local anti-money laundering watchlists.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=6811c71abec04a536b85d704" rel="noopener noreferrer"&gt;Driver's License Verification API&lt;/a&gt;: A verification API that confirms and verifies a person's Driver's License Number with the full details.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=693a043100ccc0c1ec66ea41" rel="noopener noreferrer"&gt;Driver's License Boolean Match API&lt;/a&gt;: Verify the existence and validity of a person's Driver's License Number in real-time (returns true/false without full details).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=682479fa9450991869456e46" rel="noopener noreferrer"&gt;Facial Comparison API&lt;/a&gt;: The Facial Comparison API provides a secure and efficient way for businesses to verify a person's identity by comparing the similarity between two different images.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=68ad2486971fcd6d60a87794" rel="noopener noreferrer"&gt;International Passport Lookup API&lt;/a&gt;: Enables businesses verify the validity of an individual's international passport details.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=68ad23ae971fcd6d60a87793" rel="noopener noreferrer"&gt;Credit History API&lt;/a&gt;: Enables businesses to retrieve comprehensive credit reports of individuals directly from Nigeria's leading credit bureau.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=682479569450991869456e45" rel="noopener noreferrer"&gt;Global Search AML API&lt;/a&gt;: Helps businesses screen individuals against international anti-money laundering watchlists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. Transaction &amp;amp; Payment APIs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=6968b0c6a0d6e140ab9bfe24" rel="noopener noreferrer"&gt;Bills Payment API&lt;/a&gt;:Offers the capability to integrate features cable TV subscriptions, utility bills, government services, airtime/data, and more into your application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Security &amp;amp; Business APIs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=6824787f9450991869456e44" rel="noopener noreferrer"&gt;Generate SafeToken API&lt;/a&gt;: The SafeToken OTP API provides secure multi-factor authentication and transaction verification for your application.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.interswitchgroup.com/marketplace/api/detail?id=68ad1daa971fcd6d60a87791" rel="noopener noreferrer"&gt;CAC API&lt;/a&gt;: Leverages the Corporate Affairs Commission (CAC) database to enable businesses to retrieve detailed information about a business or company registered with CAC including the company directors, shareholders and secretary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And &lt;a href="https://developer.interswitchgroup.com/marketplace/apis" rel="noopener noreferrer"&gt;many others&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next, I'll take you through the developer tools we have on the marketplace to make integration hassle-free. &lt;/p&gt;
&lt;h2&gt;
  
  
  Developer Tools
&lt;/h2&gt;

&lt;p&gt;We prioritized developer experience to make integration simple, easy, and seamless. Here are the tools available for developers on the marketplace - &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Postman Collection (Test Before You&amp;nbsp;Code):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not ready to code yet? Explore what APIs return before integrating.&lt;/p&gt;

&lt;p&gt;Our pre-built Postman collection includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All API endpoints pre-configured&lt;/li&gt;
&lt;li&gt;Example requests for common use cases&lt;/li&gt;
&lt;li&gt;Environment variables template&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit any API page in the marketplace&lt;/li&gt;
&lt;li&gt;Click "Test on Postman"&lt;/li&gt;
&lt;li&gt;Import collection to Postman&lt;/li&gt;
&lt;li&gt;Add your API keys to environment variables&lt;/li&gt;
&lt;li&gt;Click "Send" to make test calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for: Understanding API behavior, debugging issues, prototyping before coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Sandbox Environment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every API has a separate sandbox for testing:&lt;/li&gt;
&lt;li&gt;Unlimited requests (no charges)&lt;/li&gt;
&lt;li&gt;Test data provided (test BVNs, NINs, account numbers)&lt;/li&gt;
&lt;li&gt;Separate keys from production (can't accidentally process real transactions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the test data provided include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BVN Full Details: 11111111111&lt;/li&gt;
&lt;li&gt;NIN Full Details: 11111111111&lt;/li&gt;
&lt;li&gt;Drivers License: AAA00000AA00&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Documentation (Your integration guide):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1q5gpq7tz17f0uvbeey.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2Fg1q5gpq7tz17f0uvbeey.png" alt="visit the marketplace, choose your preferred API and click on ''endpoints'' to access documentation + credentials you need" width="800" height="640"&gt;&lt;/a&gt;&lt;br&gt;
Our documentation contains guides, code snippets you can easily copy and troubleshooting guides to make integration seamless. It contains search functionality so you can find what you need fast.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To get the documentation for any API of your choice -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit the marketplace&lt;/li&gt;
&lt;li&gt;Select the API of your choice&lt;/li&gt;
&lt;li&gt;On the menu, click on ''Endpoint''. You'll find all you need for integration - code snippets, success response, error response, Postman credentials, etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation for all APIs on the marketplace can be found &lt;a href="https://developer.interswitchgroup.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Developer Support (Humans Who Actually&amp;nbsp;Help):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you get stuck while building, we've provided these support channels to help get you unblocked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://join.slack.com/t/iswdevelopercommunity/shared_invite/zt-3mq7pguom-XL~xDaGeDOvLt~tBD10tUg" rel="noopener noreferrer"&gt;Slack Community&lt;/a&gt;: (7k+ developers): Real-time help from our support engineers and other developers in our community. The average response time is 5minsand you can join the community using this link.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Office Hours: If you prefer to speak with our developers directly, our monthly live sessions were created for this purpose. You can ask anything, debug live, learn best practices. Become a part of the community to know the timeline for each month and book a meeting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sections below explains how to get started - from account creation to going live.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started: From Sign-Up to First API Call in 15&amp;nbsp;Minutes
&lt;/h2&gt;

&lt;p&gt;Let's walk through the process of getting started from creating an account, a project, getting API credentials, making your first call and viewing logs.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;STEP 1: Create Your&amp;nbsp;Account&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlj8cjp11peaxggaxk4j.jpg" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2Fvlj8cjp11peaxggaxk4j.jpg" alt="Use [this url](https://developer.interswitchgroup.com/auth/account/register) to create an account - enter email address, first &amp;amp; last name, a chosen password, read through the privacy policy and check box then, click on ''create account''." width="771" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="https://developer.interswitchgroup.com/marketplace" rel="noopener noreferrer"&gt;https://developer.interswitchgroup.com/marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click "Sign Up" (top right)&lt;/li&gt;
&lt;li&gt;Enter email address, first name, last name, and password&lt;/li&gt;
&lt;li&gt;Accept privacy policy &amp;amp; terms and conditions&lt;/li&gt;
&lt;li&gt;Click "Create Account"&lt;/li&gt;
&lt;li&gt;Check your email for verification link&lt;/li&gt;
&lt;li&gt;Click the verification link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And, you're in.&lt;/p&gt;

&lt;p&gt;The next step will be to create your first project.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;STEP 2: Create Your First&amp;nbsp;Project&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Think of a project as a container for the APIs you want to use.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After logging in, click "Create Project"&lt;/li&gt;
&lt;li&gt;Select "New Project" and fill in:
A. Project Name: e.g., "My Identity Verification App"
B. Description: e.g., "Testing BVN verification for KYC"&lt;/li&gt;
&lt;li&gt;Select APIs: Choose the APIs you need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62mhpgnaawdh9ld9s1i1.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2F62mhpgnaawdh9ld9s1i1.png" alt="Step 1 -3: Create a new project, fill in the name and description for project then add 1 or more APIs for the project." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click "Create Project"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjj78dwmt5vvzrl3vzdy.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2Fsjj78dwmt5vvzrl3vzdy.png" alt="And then…create your project!" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The system generates test credentials (Client ID and Client Secret) for your project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;STEP 3: Get Your API Credentials&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F793r0p7dnxpc4zm6zsyy.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2F793r0p7dnxpc4zm6zsyy.png" alt="Getting your credentials - select the ''test keys'' tab to get your ID + secret keys" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on your newly created project&lt;/li&gt;
&lt;li&gt;Navigate to "Test Keys" tab&lt;/li&gt;
&lt;li&gt;You'll see:
Client ID: IKIA8574C7FB56… (example)
Client Secret: ••••••••• (click "Show" to reveal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ CRITICAL SECURITY RULE:&lt;br&gt;
Never commit API keys to GitHub. Always use environment variables.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;STEP 4: Make Your First API Call (10&amp;nbsp;minutes)&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Let's make a real API call. I'll show you using cURL&lt;/p&gt;

&lt;p&gt;Using cURL (Quick&amp;nbsp;Test)&lt;br&gt;
&lt;em&gt;Step I: Get an access token&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Base64 encode your credentials
CREDENTIALS=$(echo -n "YOUR_CLIENT_ID:YOUR_CLIENT_SECRET" | base64)

# Get access token
curl -X POST https://sandbox.interswitchng.com/passport/oauth/token \
  -H "Authorization: Basic $CREDENTIALS" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5...",
  "token_type": "bearer",
  "expires_in": 43199,
  "scope": "profile"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Step II: Make an API call (example: BVN verification)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Replace YOUR_ACCESS_TOKEN with the token from step 1
curl -X POST https://sandbox.interswitchng.com/api/v1/identity/bvn \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "bvn": "22222222226"
  }'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;STEP 5: View API Call Logs (Monitor Your&amp;nbsp;Usage)&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
After making API calls, track them in your dashboard. Here's how:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the marketplace&lt;/li&gt;
&lt;li&gt;Navigate to "Reports" section&lt;/li&gt;
&lt;li&gt;View:
A. Request: What you sent to the API
B. Response: What the API returned
C. HTTP Status: 200 (success), 400 (client error), 500 (server error)
D. Timestamp: When the call was made
E. API Endpoint: Which API you called&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can filter by:&lt;br&gt;
A. Date range&lt;br&gt;
B. API endpoint&lt;br&gt;
C. Response status (success/failure)&lt;/p&gt;

&lt;p&gt;You can download reports for reconciliation or debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens Next: From Sandbox to Production
&lt;/h2&gt;

&lt;p&gt;You've made your first API call. Here's the path from testing to production:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Phase 1: Build &amp;amp; Test (Sandbox)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrate API into your application&lt;/li&gt;
&lt;li&gt;Test all scenarios (success, failure, edge cases)&lt;/li&gt;
&lt;li&gt;Test with multiple data points&lt;/li&gt;
&lt;li&gt;Deploy to staging environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Phase 2: Request to Go&amp;nbsp;Live&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
When you're ready for production:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedry1faf0bio49mbdgca.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2Fedry1faf0bio49mbdgca.png" alt="Go live: Navigate to your selected project, click on the API you want to go live with, toggle from ''test'' to ''go live'', view required onboarding docs, submit and get production keys upon approval." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on your project in the dashboard&lt;/li&gt;
&lt;li&gt;Select the API you want to go live with&lt;/li&gt;
&lt;li&gt;Click "Go Live" button&lt;/li&gt;
&lt;li&gt;System displays business onboarding requirements&lt;/li&gt;
&lt;li&gt;Submit all required documents&lt;/li&gt;
&lt;li&gt;Compliance reviews your request (usually within 1–3 business days)&lt;/li&gt;
&lt;li&gt;Production keys issued upon approval by our Compliance team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Fund Your Wallet (For Production)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you've tested in sandbox and you're ready to go live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to "Wallet" section&lt;/li&gt;
&lt;li&gt;You'll see an account number assigned to you&lt;/li&gt;
&lt;li&gt;Transfer funds from your bank app to this account number&lt;/li&gt;
&lt;li&gt;Refresh the wallet page → Balance updates automatically&lt;/li&gt;
&lt;li&gt;API calls deduct from this balance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transaction tracking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Credits: Wallet funding, failed call reversals&lt;/li&gt;
&lt;li&gt;Debits: Successful API consumption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Phase 3: Production Launch&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Switch from sandbox keys to production keys in your&amp;nbsp;.env:&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Update these values
&lt;/h1&gt;

&lt;p&gt;ISW_PRODUCTION URL= use &lt;a href="https://api-marketplace-routing.k8.isw.la/marketplace-routing" rel="noopener noreferrer"&gt;this production url&lt;/a&gt;&lt;br&gt;
ISW_CLIENT_ID=production_client_id_here&lt;br&gt;
ISW_CLIENT_SECRET=production_client_secret_here&lt;/p&gt;

&lt;p&gt;After switching to production - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your application will process real transactions.&lt;/li&gt;
&lt;li&gt;Monitor usage in dashboard&lt;/li&gt;
&lt;li&gt;Fund wallet to avoid service interruption&lt;/li&gt;
&lt;li&gt;Set up monitoring and alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start&amp;nbsp;Building
&lt;/h2&gt;

&lt;p&gt;If you're ready to start experimenting with the APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create your free account:[&lt;a href="https://developer.interswitchgroup.com/marketplace" rel="noopener noreferrer"&gt;https://developer.interswitchgroup.com/marketplace&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Read the full documentation:([&lt;a href="https://developer.interswitchgroup.com/" rel="noopener noreferrer"&gt;https://developer.interswitchgroup.com/&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're building a fintech product, onboarding users, or automating verification flows — the marketplace is designed to help you ship faster with fewer moving parts.&lt;/p&gt;

&lt;p&gt;Happy Building!&lt;/p&gt;

</description>
      <category>apimarketplace</category>
      <category>interswitchapimarketplace</category>
      <category>marketplacefordevelopers</category>
    </item>
    <item>
      <title>How Interswitch Payment Gateway Works</title>
      <dc:creator>Chizurum Egwunwankwo</dc:creator>
      <pubDate>Tue, 16 Sep 2025 13:29:25 +0000</pubDate>
      <link>https://dev.to/chizurum/how-interswitch-payment-gateway-works-2p97</link>
      <guid>https://dev.to/chizurum/how-interswitch-payment-gateway-works-2p97</guid>
      <description>&lt;p&gt;Interswitch’s Payment Gateway (IPG)]offers a unified, end-to-end solution for both online and in-store transactions designed to meet the needs of technically savvy developers as well as non-technical business owners / merchants. Irrespective of who you are - a fintech founder building a custom checkout flow or a merchant looking for a simple, easy-to-use plug and play, IPG delivers reliability, security and flexibility.&lt;/p&gt;

&lt;p&gt;Throughout this blog post, we’ll refer to Interswitch payment gateway as simply, IPG.&lt;/p&gt;

&lt;p&gt;Two Approaches To Integrating With Interswitch Payment Gateway&lt;br&gt;
There are 2 main ways to integrating with IPG; &lt;strong&gt;&lt;em&gt;online payments and in-store payments&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Let’s explore these options&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Online payments:&lt;/strong&gt;&lt;br&gt;
This method of integration into IPG is easy for both developers who are technically savvy and non-developers who simply want plug and play. Developers and Merchants have the options of taking the technical path for online payments (card APIs &amp;amp; hosted fields) and the non-technical options (web checkout &amp;amp; technical fields).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Technical Integration Options For Online Payments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- Card APIs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Direct RESTful APIs let you control every aspect of the payment flow. A PCI-DSS (Payment Card Industry Data Security Standard) certification and PSSP (Payment Solution Service Provider License) is needed, but with this integration method, you have — complete control over UI &amp;amp; UX and a faster processing time.&lt;br&gt;
This method is best for businesses with in-house technical teams who need full control&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- Hosted Fields:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
This is a customizable payment form elements that live within a website while maintaining security. This type of integration offers benefits such as customization options (colors, typography, borders and responsiveness) and secure integration (PCI compliance without burden). This is best for businesses that want brand consistency while maintaining PCI compliance without redirecting customers off-site.&lt;/p&gt;

&lt;p&gt;It is important to note that both card APIs and hosted fields require technical expertise but offer different levels of control and PCI compliance requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Non-technical Integration Options For Online Payments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- Web Checkout:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
This is a ready-to-use payment page hosted by Interswitch. This option requires no technical expertise; just configure your branding, and you’re ready to accept payments in minutes. Interswitch handles all PCI compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- Hosted Fields:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Customizable form elements that live within your website while maintaining security. Key benefits include — full Customization (match your website’s design seamlessly), secure Integration (PCI compliance without technical burden) and seamless UX (your customer stays on your website throughout).&lt;/p&gt;

&lt;p&gt;Note that the web checkout and hosted field options both require minimal technical knowledge and can be set up quickly through the &lt;a href="https://business.quickteller.com/" rel="noopener noreferrer"&gt;Interswitch merchant portal&lt;/a&gt; or with simple embed codes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Instore Payments:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A. For Technically Savvy Users:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- POS Purchase APIs:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Integrate directly with payment processing for real-time, customizable in-store transactions. This method requires PCI DSS compliance, a PSSP license, and technical expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- Android POS SDK:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Use ready-made components for card-present transactions, lifecycle management, and error handling.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefits:&lt;/em&gt; Full UX control, custom integrations, enterprise-grade security, and optimized performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. For Non-Technical Users:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;- POS Terminals:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Plug-and-play devices pre-installed with Interswitch software. Benefits include: no technical setup, automated settlement, instant reporting and lifetime maintenance.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;IPG Supported Payment Methods&lt;/strong&gt;&lt;br&gt;
Interswitch Payment Gateway offers comprehensive online and offline payment options. These include card payments, pay with transfer, USSD and digital wallets. &lt;/p&gt;

&lt;p&gt;Key benefits of using these payment available through IPG include but are not limited to pan African coverage, enhanced security, a unified integration process and a robust, consolidated reporting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IPG-supported payment options and benefits.&lt;/strong&gt;&lt;br&gt;
Beyond the robust online and offline payment methods, Interswitch also offers POS devices for in-store payment hardware solutions. Benefits include, 24/7 technical support, multi-currency support, remote updates and devices are PCI PTS certified.&lt;/p&gt;

&lt;p&gt;There are also in person payment solutions for businesses with IT resources and technically-savvy personnel as well as in person solutions for non-technical users.&lt;/p&gt;

&lt;p&gt;Requirements for the POS purchase APIs are PCI DSS compliance, a PSSP license and tech expertise. The documentation for the Android POS SDK can be accessed on the &lt;a href="https://business.quickteller.com/" rel="noopener noreferrer"&gt;quickteller business website&lt;/a&gt;. These devices offers these benefits to businesses — complete UX control, custom integration paths, enterprise-grade security and optimized performance.&lt;/p&gt;

&lt;p&gt;To get started with POS terminals simply signup, request for POS, choose the devices you need, receive your terminal and begin to use it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. In-person Payment Solutions (For Non-Technical Users)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Non-technical users can maximize Interswitch’s ready-to-use POS terminals with pre-installed Interswitch software. For this in-person payment option, no technical setup or integration is required. Merchants also get automatic settlement (funds in your account the next day) and transaction reports, instant reporting (so they can track sales in real time), fraud protection and a lifetime maintenance (both hardware and software support).&lt;/p&gt;

&lt;p&gt;Beyond this, onboarding is super easy! To get started, contact our sales team then select your preferred terminal model, go on to complete your merchant application and receive configured terminal within days.&lt;/p&gt;

&lt;p&gt;Payment types accepted for this option are credit and debit cards, mobile wallets, QR payments, contactless and apply pay.&lt;/p&gt;

&lt;p&gt;The terminal options for the in-person payment solutions include - countertop (fixed -location terminals), mobile POS (wireless connectivity), smart POS (android-based system) and integrated (POS + cash register).&lt;/p&gt;




&lt;p&gt;In the next blog post, I’ll take a deep dive into IPG advanced features like split settlements, recurring billing, and analytics, as well as the resources for merchants and developers.&lt;/p&gt;

&lt;p&gt;Get started with Interswitch Payment Gateway, &lt;a href="https://business.quickteller.com/signup" rel="noopener noreferrer"&gt;here.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>paymentgateway</category>
      <category>interswitch</category>
      <category>payment</category>
    </item>
  </channel>
</rss>
