---
page_source: https://juspay.io/in/docs/payv3/web/base-integration/implement-payv3-forms
page_title: 3. Implement Payv3 Forms
---


## 3. Implement Payv3 Forms



This is the part you can build with your web framework, or by hand in HTML - whatever way you're used to building forms on the web.[Build Forms based on payment methods](https://docs.juspay.in/payv3/web/base-integration/implement-payv3-forms#1.1.-Build-Forms-based-on-payment-methods.)[.](#forms-based-on-pm)[Handling Callbacks of Form Events](https://docs.juspay.in/payv3/web/base-integration/implement-payv3-forms#1.2.-Handling-Callbacks-of-Form-Events)


### 1.1. Build Forms based on payment methods.



Use the payment forms mentioned below according to the payment method

> **Warning**
> All these forms should have the same class name for common styling and different id's for identification.




### Step 1.1. For Cards


Insert the Cards payv3 form in your HTML for a new card transaction. Click on Copy Code to get the form that has to be used.📬 **Optional: Billing Address (AVS) Fields** 

In order to capture additional fields for **Address Verification (AVS)** , you can include the `<input>` fields shown under the Div class “avs_fields“ in your form.When AVS is required:

* Juspay will notify your frontend via the cardBIN API response. (Key to consume: collect_avs_info)
* You must then display the additional HTML `<input>` fields for AVS with the exact class names so they are picked up by Juspay’s JS at the time of form submission.

> **Warning**
> You need to write the <div> elements for card_number, name_on_card, card_exp_month, card_exp_year and security_code fields. There is no need to write input elements here, since we will be inserting our iframe elements inside this div which will have the input element. You need to assign a unique class name for each div as given in the above example.⚠️ **Important for AVS fields addition** 
> 
> These are plain HTML input fields (not iframe-based) and should be placed directly in your form. Use the exact class names mentioned above — if these fields are passed during form submission, they will be consumed when AVS is applicable.
> 
> **Note:** **** Using**** `txn_id` in the Request (**Requires Merchant Enablement** )
> 
> If you want to pass your own `txn_id` in the request, please be aware of the following:
> 
> * **This feature requires explicit enablement** .Contact your Juspay POC to have it activated. It can be configured either as:
>   
>   * A **static setup** , or
>   * An **order-wise (dynamic)**  configuration—based on your requirement.
> * **Once enabled** , Juspay will use the merchant-generated `txn_id` as Juspay’s **Transaction ID** , instead of generating one internally.This same ID will also be forwarded to downstream payment gateways.
> * The `txn_id`**must be unique for every transaction attempt**  to ensure accurate tracking and reconciliation across your system, Juspay, and the gateway.
> * You must **generate a fresh** `txn_id` before every form submission.Reusing the same `txn_id` for multiple attempts is not allowed.
> * **Until the feature is enabled** , Juspay will continue generating its own Transaction IDs, even if `txn_id` is passed in the request.
> * **After the feature is enabled** , any transaction request that **does not include a** `txn_id` will be **declined** .




#### 🛠️ How to Populate “`billing_address_country_code_iso"`



In addition to the visible AVS address fields, you have to also pass ISO country code via the hidden field `billing_address_country_code_iso`. This value is **not entered by the end user** , but must be populated dynamically using the mapping table provided below.

To populate this field:

1. Let the end user select their country (e.g., via a dropdown on your payment form).
2. Use the country code mapping table (at the bottom of this page) to look up the corresponding **ISO Alpha-2 country code.**
3. Set the ISO code into the hidden input field using JavaScript:





#### Code Snippets: -

#### HTML Code Snippet:

```html
<form class="juspay_inline_form" id="payment_form_1">
    <input type="hidden" class="merchant_id" value="guest"/>
    <input type="hidden" class="order_id" value="guest_order"/>
    <input type="hidden" class="txn_id" value="your_transaction_id"/>
    <div class="card_number_div"></div>
    <div class="name_on_card_div"></div>
    <div class="card_exp_month_div"></div> - <div class="card_exp_year_div"></div>
    <div class="security_code_div"></div>
    <input type="checkbox"  class="juspay_locker_save"> Save card information
    <input type="hidden" class="redirect" value="true"/>

    <div class="avs_fields" style="display: none;">
        <input type="text" class="billing_address_line1" placeholder="House No" />
        <input type="text" class="billing_address_line2" placeholder="Street" />
        <input type="text" class="billing_address_city" placeholder="City" />
        <input type="text" class="billing_address_state" placeholder="State" />
        <input type="text" class="billing_address_postal_code" placeholder="Postal Code" />
        <input type="text" class="billing_address_country" placeholder="Country" />
        <input type="text" class="billing_first_name" placeholder="First Name" />
        <input type="text" class="billing_last_name" placeholder="Last Name" />
        <input type="hidden" class="billing_address_country_code_iso" />
    </div>
    
<!-- For mandates transaction 
     <input type="radio" class="should_create_mandate" value="true" name="should_create_mandate" checked="checked"> Yes
     <input type="radio" class="should_create_mandate" value="false" name="should_create_mandate"> No -->
<!-- For EMI transaction 
    <input type="hidden" class="is_emi" value="true"/>
    <input type="hidden" class="emi_bank" value="JP_HDFC" />
    <input type="hidden" class="emi_tenure" value="3"/>
    <input type="hidden" class="emi_type" value="STANDARD_EMI" /> 
    <!--For No-cost and low-cost EMI Offers -->
    <input type="hidden" class="offers" value="F36GH-THBIM, F36GH-DTH"/> -->
    <button type="submit" id="common_pay_btn">Make Payment</button>
</form>
```



### Step 1.1. For Saved Cards


Step 1: Call List Stored Cards APICall the List Stored Cards API and fetch the card_token and card_isin values from the API response. Checkout the [List Stored Cards API](/payv3/web/base-integration/list-storedcard-api)to know in detail. Step 2: Insert the Saved Cards payv3 form in your HTML.Click on Copy Code to get the form that has to be used.

> **Warning**
> You need to write the <div> elements for card_number, name_on_card, card_exp_month, card_exp_year and security_code fields. There is no need to write input elements here, since we will be inserting our iframe elements inside this div which will have the input element. You need to assign a unique class name for each div as given in the above example.





#### Code Snippets: -

#### HTML Code Snippet:

```html
<form class="juspay_inline_form" id="payment_form2">
    <input type="hidden" class="merchant_id" value="guest"/>
    <input type="hidden" class="order_id" value="guest_order2"/>
    <input type="hidden" class="card_token"/>
    <input type="hidden" class="card_isin"/>
    <div class="security_code_div"></div>
    <input type="hidden" class="redirect" value="true"/>
    <!-- For EMI transaction
    <input type="hidden" class="is_emi" value="true"/>
    <input type="hidden" class="emi_bank" value="JP_HDFC" />
    <input type="hidden" class="emi_tenure" value="3"/>
    <input type="hidden" class="emi_type" value="STANDARD_EMI" />
    <!--For No-cost and low-cost EMI Offers -->
    <input type="hidden" class="offers" value="F36GH-THBIM, F36GH-DTH"/> -->
    <button type="submit" class="make_payment">Pay</button>
</form>
```



### Step 1.1. For Netbanking


Insert the Netbanking form in your HTML. Use the Payment Method API response to fetch the active Payment Methods and Payment Method Type.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<form class="juspay_inline_form" id="payment_form">
    <input type="hidden" class="merchant_id" value="guest"/>
    <input type="hidden" class="order_id" value="guest_order_101"/>
    <input type="hidden" class="payment_method_type" value="NB"/>
    <select class="payment_method">
        <option value="NB_ALLB" label="Allahabad Bank">Allahabad Bank</option>
        <option value="NB_ANDHRA" label="Andhra Bank">Andhra Bank</option>
        <option>...</option>
        <!-- More banks -->
        <option value="NB_YESB" label="YES Bank">YES Bank</option>
    </select>
    <button type="submit" class="make_payment">Pay</button>
    <input type="hidden" class="redirect" value="true"/>
</form>
```



### Step 1.1. For UPI Collect


Insert the UPI Collect form in your HTML. Use the Payment Method API response to fetch the active Payment Methods and Payment Method Type.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<form class="juspay_inline_form" id="payment_form">
    <input type="hidden" class="merchant_id" value="guest"/>
    <input type="hidden" class="order_id" value="guest_order_101"/>
    <input type="text" class="upi_vpa" value=""/>
    <input type="hidden" class="payment_method_type" value="UPI"/>
    <input type="hidden" class="payment_method" value="UPI"/>
    <input type="hidden" class="txn_type" value="UPI_COLLECT"/>
    <button type="submit" class="make_payment">Pay</button>
    <input type="hidden" class="redirect" value="true"/>
</form>
```



### Step 1.1. For Wallets


Insert the Wallets form in your HTML. Use the Payment Method API response to fetch the active Payment Methods and Payment Method Type.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<form class="juspay_inline_form" id="payment_form">
    <input type="hidden" class="merchant_id" value="guest"/>
    <input type="hidden" class="order_id" value="guest_order_101"/>
    <input type="hidden" class="payment_method_type" value="WALLET"/>
    <select class="payment_method">
        <option value="FREECHARGE" label="Freecharge Wallet">Freecharge Wallet</option>
        <option>...</option>
        <!-- More wallets -->
        <option value="SBIBUDDY" label="SBI Buddy">SBI Buddy</option>
    </select>
    <button type="submit" class="make_payment">Pay</button>
    <input type="hidden" class="redirect" value="true"/>
</form>
```



### Step 1.1. EMI


Click on Copy Code to get the form that has to be used.**NOTE:**  You will have to call the[EMI Plans API](https://docs.juspay.in/payv3/web/base-integration/emi-plans-api) to fetch and display EMI Plans on your checkout screen. You will pass the value of EMI related parameters in the form as per the EMI plan selected by the user on your checkout screen before submitting the form.



> **Note**
> You can add input type ‘offers’ if you are using Juspay’s offer Module. [Click here](https://docs.juspay.in/add-ons/docs/offers-dashboard/subscription-models-for-offers) to know more about Juspay’s offer Module.




### 1.2. Handling Callbacks of Form Events



Pay-v3.js listens to the form submit event and transports the card information safely to process it for payment. This is accomplished by the following snippet.

> **Warning**
> Before using the `Juspay.Setup()` function, ensure that the form or payment form has been rendered. The `Juspay.Setup()` function should be called only after the form has been fully rendered to ensure proper functionality.




### Step 1.1. Cards


Click on Copy Code to get the form that has to be used.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<script type="text/javascript">
    var juspay_form = Juspay.Setup({
        payment_form: "#payment_form",
        success_handler: function (status) {},
        error_handler: function (
          error_code,
          error_message,
          bank_error_code,
          bank_error_message,
          gateway_id
        ) {},
        card_encoding_key: ":card_encoding_key",
        card_encoding_version: "YYYY-MM-DD",
        card_bin_info_min_digits: 6,
     
      /* Fingerprint will work only if customer_id and client_auth_token are present in set-up as shown below */
      customer: {
        customer_id: "cst_mfdepvmfhs3j1mcq",
        client_auth_token: "tkn_91b9b3cbab9542bf9367ef6d6350b7e4",
      },
      iframe_elements: {
          card_number: {
              /* Class name of the <div> which will hold the iframe element for card number. */
              container: ".card_number_div",
              attributes: {
                  /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                  placeholder: "4111 1111 1111 1111"
              }
          },
          name_on_card: {
              /* Class name of the <div> which will hold the iframe element for card holder name. */
              container: ".name_on_card_div",
              attributes: {
                  /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                  placeholder: "Cardholder Name"
              }
          },
          card_exp_month: {
              /* Class name of the <div> which will hold the iframe element for card expiry month. */
              container: ".card_exp_month_div",
              attributes: {
                  /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                  placeholder: "MM"
              }
          },
          card_exp_year: {
              /* Class name of the <div> which will hold the iframe element for card expiry year. */
              container: ".card_exp_year_div",
              attributes: {
                  /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                  placeholder: "YY"
              }
          },
          security_code: {
              /* Class name of the <div> which will hold the iframe element for card security code. */
              container: ".security_code_div",
              attributes: {
                  /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                  placeholder: "123"
              }
          }
      },

      /* Set `auto_tab_enabled` flag to true if you want to enable auto-switching between fields when the user types the valid data (recommended but optional). 
       * It will have the following order:`card_exp_month` -> `card_exp_year` ->`security_code`. */
      auto_tab_enabled : true,

      /* Set `auto_tab_from_card_number` to either `card_exp_month` or `name_on_card` based on which field is rendered after card_number (recommended but optional).
       * Note 1: Please set `auto_tab_enabled` to `true` as shown above to enable this functionality. */
      auto_tab_from_card_number : "card_exp_month",

      styles: {
          /* Add common styling for all input fields here */
          "input": {
          },
          /* Add the styling for card number input field here */
          ".card_number": {
              "line-height": "10px",
              "font-size": "16px"
          },
          /* Add the styling for card holder name input field here */
          ".name_on_card": {
              "line-height": "20px",
              "font-size": "16px",
          },
          /* Add the styling for card expiry month input field here */
          ".card_exp_month": {
              "line-height": "30px",
              "font-size": "16px",
              "width": "60px"
          },
          /* Add the styling for card expiry year input field here */
          ".card_exp_year": {
              "line-height": "40px",
              "font-size": "16px",
              "width": "60px"
          },
          /* Add the styling for card security code input field here */
          ".security_code": {
              "line-height": "50px",
              "font-size": "16px",
              "width": "60px"
          },
          /* Add the styling to be added to input fields in focus state */
          ":focus": {
          }
      },

      /* This function will be called with an event object as a parameter in two cases:
       * 1. When some event occurs on the input field inside the iframe element.
       * 2. The user clicks on the submit button and the values in some of the input fields are invalid. (In the second case, we will send the event object with the state of the first invalid field in the checkout form.)
       
       * This event object will contain the state of the input field. You should use this event object to show validation messages in your checkout form. */

      iframe_element_callback: function(event) {
      /* The event information will be available in the event object */
      }
  })

</script>
```



### Step 1.1. Saved Cards


Click on Copy Code to get the form that has to be used.**Instruction for CVV-less Card payments.** When setting up the payment form using **Juspay.Setup** : Do not include the "`security_code`" field in the configuration.This will prevent Pay-V3 from showing the CVV input during payment and will not make any validation checks for CVV. For saved cards that support CVV-less transactions, the payment will be completed seamlessly without requiring CVV input.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<script type="text/javascript">
    var juspay_form = Juspay.Setup({
       payment_form: "#payment_form",
       success_handler: function(status) {},
       error_handler: function(error_code, error_message, bank_error_code, bank_error_message, gateway_id) {},
       iframe_elements: {
           security_code: {
               /* Class name of the <div> which will hold the iframe element for card security code. */
               container: ".security_code_div",
               
            attributes: {
                   /* Field Attributes, which you want to set for the <input> field inside the iframe element. */
                   placeholder: "xxx"
               }
           }
       },
       styles: {
           /* Add the styling for card security code input field here */
           ".security_code": {
               "line-height": "50px",
               "font-size": "16px",
               "width": "60px"
           },
           /* Add the styling to be added to input fields in focus state */
           ":focus": {
           }
       },
       /* 
        * This function will be called with an event object as parameter in two cases:
        * 1. When some event occurs on the security_code field inside iframe element.
        * 2. The user clicks on the submit button and the values in some of the input fields are invalid. (In second case, we will send the event object with state of the first invalid field in checkout form, which is security_code here.)
        
        * This event object will contain the state of the input field. You should use this event object to show validation messages in your checkout form. */

       iframe_element_callback: function(event) {
            /* The event information will be available in the event object 
            
            *  1. event.target_element - (security_code) 
            *  2. event.valid - (true/false) 
            *  3. event.empty - (true/false) 
            *  4. event.card_brand  */
       }
   })
</script>
```



### Step 1.1. Netbanking, Wallets and UPI Collect


Click on Copy Code to get the form that has to be used.



#### Code Snippets: -

#### HTML Code Snippet:

```html
<script type="text/javascript">
    var juspay_form = Juspay.Setup({
        payment_form: "#payment_form",
        success_handler: function(status) {},
        error_handler: function(error_code, error_message, bank_error_code, bank_error_message, gateway_id) {},
    })
 </script>
```



### Step 1.1. Optional: CardBins Retry Configuration


PayV3 supports optional CardBins retry handling to improve resilience during temporary network interruptions while the user is entering card details.

When enabled, PayV3 automatically re-triggers the CardBins lookup when network connectivity is restored. This helps recover card metadata such as card brand, issuer, tokenization support, and related card capabilities without requiring the user to re-enter the card number.

Add the following optional configuration fields in Juspay.Setup():

`cardbins_retry_enabled: true,``cardbins_manual_retry: true,`


#### **Supported Configuration** 




| Key | Type | Default | Description |
|---|---|---|---|
| cardbins_retry_enabled | Boolean | false | Enables automatic CardBins retry when the browser comes back online after a network interruption. |
| cardbins_manual_retry | Boolean | false | Enables manual CardBins retry support within PayV3. |



#### **When to Use** 



Enable this feature if you want PayV3 to recover CardBins data in cases such as:

* temporary network loss during card number entry
* intermittent connectivity on mobile web
* delayed CardBins fetch after network restoration


#### **Notes** 



* These fields are optional.
* If not enabled, PayV3 continues with the standard CardBins behavior.
* This feature improves recovery of card metadata lookup and does not change the base PayV3 form integration flow.



#### Code Snippets: -

#### HTML Code Snippet:

```html
{"success":false,"message":"No Data found for the given path"}
```


1.3 Card Form Validation 

> **Note**
> Juspay JS will validate the card elements. Merchants are only expected to handle the validation events.




| Events | Values | Description |
|---|---|---|
| event.target_element	 | card_number/ name_on_card/ card_exp_month/ card_exp_year/ security_code | Name of the field which generated this event |
| event.type | focus/ blur/ keyup/ change | This field explains the event type which triggered the event callback |
| event.valid	 | true/ false | This field explains whether the value inside the input field of target_element is valid or not |
| event.empty | true/ false | This field explains whether the input field of target_element is empty or not |
| event.card_brand | MASTERCARD/ VISA/ MAESTRO/ AMEX/ DINERS/ DISCOVER/ JCB/ RUPAY | Card brand value of the card number (Available only when target_element is card_number) |
| event.card_isin |  | Card bin value of the card number (Available only when target_element is card_number) |
| event.card_type | DEBIT/ CREDIT | Card type identifier of the card number (Available only when target_element is card_number) |
| event.card_sub_type |  | Only available for >= 9 digit card bin requests) |
| event.partially_valid |  | This field explains whether the user is typing the card number correctly (Available only when target_element is card_number) |
| event.expiry_valid |  | This field explains whether the combination of month or year is valid or not. There may be a case when the input year is the current year and the input month is any month before the current month, then you will get valid=true for both month and year separately, but together they are not valid. To keep such cases in mind, you need to validate whether expiry_valid is true or not. (Available only when target_element is either card_exp_month or card_exp_year) |
| event.mandate_support | true/ false | This field explains whether the card number entered is eligible for the mandate transaction |
| event.bank |  | (Only available for >= 9 digit card bin requests) |
| event.tokenize_support |  | This field provides tokenize support response for a particular card bin |



#### **Country Code ISO Mapping Table.** 




| Country code (ISO 3166-2) | Country Name |
|---|---|
| AD | Andorra |
| AE | United Arab Emirates |
| AF | Afghanistan |
| AG | Antigua and Barbuda |
| AI | Anguilla |
| AL | Albania |
| AM | Armenia |
| AO | Angola |
| AQ | Antarctica |
| AR | Argentina |
| AS | American Samoa |
| AT | Austria |
| AU | Australia |
| AW | Aruba |
| AX | Åland Islands |
| AZ | Azerbaijan |
| BA | Bosnia and Herzegovina |
| BB | Barbados |
| BD | Bangladesh |
| BE | Belgium |
| BF | Burkina Faso |
| BG | Bulgaria |
| BH | Bahrain |
| BI | Burundi |
| BJ | Benin |
| BL | Saint Barthélemy |
| BM | Bermuda |
| BN | Brunei Darussalam |
| BO | Bolivia, Plurinational State of |
| BQ | Bonaire, Sint Eustatius and Saba |
| BR | Brazil |
| BS | Bahamas |
| BT | Bhutan |
| BV | Bouvet Island |
| BW | Botswana |
| BY | Belarus |
| BZ | Belize |
| CA | Canada |
| CC | Cocos (Keeling) Islands |
| CD | Congo, Democratic Republic of the |
| CF | Central African Republic |
| CG | Congo |
| CH | Switzerland |
| CI | Côte d'Ivoire |
| CK | Cook Islands |
| CL | Chile |
| CM | Cameroon |
| CN | China |
| CO | Colombia |
| CR | Costa Rica |
| CU | Cuba |
| CV | Cabo Verde |
| CW | Curaçao |
| CX | Christmas Island |
| CY | Cyprus |
| CZ | Czechia |
| DE | Germany |
| DJ | Djibouti |
| DK | Denmark |
| DM | Dominica |
| DO | Dominican Republic |
| DZ | Algeria |
| EC | Ecuador |
| EE | Estonia |
| EG | Egypt |
| EH | Western Sahara |
| ER | Eritrea |
| ES | Spain |
| ET | Ethiopia |
| FI | Finland |
| FJ | Fiji |
| FK | Falkland Islands (Malvinas) |
| FM | Micronesia, Federated States of |
| FO | Faroe Islands |
| FR | France |
| GA | Gabon |
| GB | United Kingdom of Great Britain and Northern Ireland |
| GD | Grenada |
| GE | Georgia |
| GF | French Guiana |
| GG | Guernsey |
| GH | Ghana |
| GI | Gibraltar |
| GL | Greenland |
| GM | Gambia |
| GN | Guinea |
| GP | Guadeloupe |
| GQ | Equatorial Guinea |
| GR | Greece |
| GS | South Georgia and the South Sandwich Islands |
| GT | Guatemala |
| GU | Guam |
| GW | Guinea-Bissau |
| GY | Guyana |
| HK | Hong Kong |
| HM | Heard Island and McDonald Islands |
| HN | Honduras |
| HR | Croatia |
| HT | Haiti |
| HU | Hungary |
| ID | Indonesia |
| IE | Ireland |
| IL | Israel |
| IM | Isle of Man |
| IN | India |
| IO | British Indian Ocean Territory |
| IQ | Iraq |
| IR | Iran, Islamic Republic of |
| IS | Iceland |
| IT | Italy |
| JE | Jersey |
| JM | Jamaica |
| JO | Jordan |
| JP | Japan |
| KE | Kenya |
| KG | Kyrgyzstan |
| KH | Cambodia |
| KI | Kiribati |
| KM | Comoros |
| KN | Saint Kitts and Nevis |
| KP | Korea, Democratic People's Republic of |
| KR | Korea, Republic of |
| KW | Kuwait |
| KY | Cayman Islands |
| KZ | Kazakhstan |
| LA | Lao People's Democratic Republic |
| LB | Lebanon |
| LC | Saint Lucia |
| LI | Liechtenstein |
| LK | Sri Lanka |
| LR | Liberia |
| LS | Lesotho |
| LT | Lithuania |
| LU | Luxembourg |
| LV | Latvia |
| LY | Libya |
| MA | Morocco |
| MC | Monaco |
| MD | Moldova, Republic of |
| ME | Montenegro |
| MF | Saint Martin (French part) |
| MG | Madagascar |
| MH | Marshall Islands |
| MK | North Macedonia |
| ML | Mali |
| MM | Myanmar |
| MN | Mongolia |
| MO | Macao |
| MP | Northern Mariana Islands |
| MQ | Martinique |
| MR | Mauritania |
| MS | Montserrat |
| MT | Malta |
| MU | Mauritius |
| MV | Maldives |
| MW | Malawi |
| MX | Mexico |
| MY | Malaysia |
| MZ | Mozambique |
| NA | Namibia |
| NC | New Caledonia |
| NE | Niger |
| NF | Norfolk Island |
| NG | Nigeria |
| NI | Nicaragua |
| NL | Netherlands, Kingdom of the |
| NO | Norway |
| NP | Nepal |
| NR | Nauru |
| NU | Niue |
| NZ | New Zealand |
| OM | Oman |
| PA | Panama |
| PE | Peru |
| PF | French Polynesia |
| PG | Papua New Guinea |
| PH | Philippines |
| PK | Pakistan |
| PL | Poland |
| PM | Saint Pierre and Miquelon |
| PN | Pitcairn |
| PR | Puerto Rico |
| PS | Palestine, State of |
| PT | Portugal |
| PW | Palau |
| PY | Paraguay |
| QA | Qatar |
| RE | Réunion |
| RO | Romania |
| RS | Serbia |
| RU | Russian Federation |
| RW | Rwanda |
| SA | Saudi Arabia |
| SB | Solomon Islands |
| SC | Seychelles |
| SD | Sudan |
| SE | Sweden |
| SG | Singapore |
| SH | Saint Helena, Ascension and Tristan da Cunha |
| SI | Slovenia |
| SJ | Svalbard and Jan Mayen |
| SK | Slovakia |
| SL | Sierra Leone |
| SM | San Marino |
| SN | Senegal |
| SO | Somalia |
| SR | Suriname |
| SS | South Sudan |
| ST | Sao Tome and Principe |
| SV | El Salvador |
| SX | Sint Maarten (Dutch part) |
| SY | Syrian Arab Republic |
| SZ | Eswatini |
| TC | Turks and Caicos Islands |
| TD | Chad |
| TF | French Southern Territories |
| TG | Togo |
| TH | Thailand |
| TJ | Tajikistan |
| TK | Tokelau |
| TL | Timor-Leste |
| TM | Turkmenistan |
| TN | Tunisia |
| TO | Tonga |
| TR | Türkiye |
| TT | Trinidad and Tobago |
| TV | Tuvalu |
| TW | Taiwan, Province of China[note 1] |
| TZ | Tanzania, United Republic of |
| UA | Ukraine |
| UG | Uganda |
| UM | United States Minor Outlying Islands |
| US | United States of America |
| UY | Uruguay |
| UZ | Uzbekistan |
| VA | Holy See |
| VC | Saint Vincent and the Grenadines |
| VE | Venezuela, Bolivarian Republic of |
| VG | Virgin Islands (British) |
| VI | Virgin Islands (U.S.) |
| VN | Viet Nam |
| VU | Vanuatu |
| WF | Wallis and Futuna |
| WS | Samoa |
| YE | Yemen |
| YT | Mayotte |
| ZA | South Africa |
| ZM | Zambia |
| ZW | Zimbabwe |
