You can use Square APIs and SDKs to build applications that support and process in-person or online payments for sellers in Japan. Before you begin development, be sure to familiarize yourself with which payment methods are available in Japan and the pricing models for payments made with Square APIs and Square hardware.
If you have an existing POS system and want to connect to Square in-person payment solutions in Japan, you have two integration options:
- The Terminal API is compatible with Square Terminal devices. It connects directly to Square servers, making it available for almost any system, including Windows-based systems, web applications, or other platforms, because it connects directly to Square servers.
- The Point-of-Sale API works with Square Reader devices and operates via mobile devices only. It uses the Square mobile app for checkout, utilizing deep link functionality to switch between your app and Square.
- If your goal is to process itemized orders, the Terminal API is your only option.
- The Point-of-Sale API supports only custom amount-based transactions.
- If your external POS system manages itemized orders, syncing itemized sales with Square can allow you to:
- Print itemized receipts.
- Keep itemized transactions synchronized between systems.
When implementing in-person payment applications, you should process payments in-store with the Square Terminal or Square Reader devices. Staff must be present in the store or close enough to attend at any time when payment processing is required.
When integrating with Square in-person payment APIs, you'll need to choose between two integration approaches based on your business needs:
This approach is best for merchants who want to log itemized transactions in Square and want the Square Terminal or Square's compatible printers to print itemized receipts.
How it works:
- Use the Orders API to create orders with line items.
- Pass the Square order ID to the Terminal API to process payments and print itemized receipts.
- Use the Catalog API to sync products between your system and Square.
- Optionally, use Terminal Actions to programmatically print receipts as a separate operation.
Limitations:
- Formal receipts are not currently supported - only normal receipts can be printed.
This approach is ideal when you want Square Terminal to handle receipt printing, want to leverage Square's reporting and analytics capabilities, or need product-level sales tracking for your business.
Japanese merchants can accept several payment methods for in-person transactions, including credit cards, digital wallet payments (Apple Pay and Google Pay), gift cards, e-money, prepaid IC cards (such as SUICA and PASMO), and QR code payments (such as PayPay, Alipay, Rakuten Pay, and au PAY).
Important
To support e-money or PayPay payments, Japanese sellers must submit an application form to activate those payment methods. For more information, see:
| Feature | Terminal API | Point-of-Sale API | Mobile Payments SDK |
|---|---|---|---|
| Device Type | Square Terminal | Square Reader | Square Reader |
| Connection Method | Connection to Square server | Link to Square Point of Sale app | Direct SDK integration |
| Itemized Orders Support | ✅ Supported (with Orders API) | ❌ Not supported | |
| Custom Amount Support | ✅ Supported | ✅ Supported | |
| Accepted Payment Methods | credit card, e-money, QR, gift card | credit card, e-money, QR, gift card | |
| SDK/API Status in Japan | ✅ Available | ✅ Available | ❌ Not yet available |
| Documentation | Terminal API Overview | Point of Sale API Overview | Mobile Payments SDK Overview |
Square provides a Sandbox environment where you can test your in-person payment integrations before going live. However, there are important differences between Sandbox and production testing for physical devices.
You can test Terminal API integrations in the Sandbox without connecting to a physical Square Terminal. Square provides special test device IDs that simulate different checkout scenarios, including successful payments, canceled payments, and timeout scenarios. This allows you to develop and test your integration logic without needing physical hardware.
The Sandbox environment supports testing various payment methods specific to Japan, including:
- E-money (FELICA) payments - Test e-money/FeLiCa transactions using dedicated test device IDs
- QR code payments (PayPay) - Test PayPay QR code payments (note: the Sandbox location must be based in Japan)
Example Test Device IDs:
| Payment Method | Test Device ID | Notes |
|---|---|---|
| Credit Card (Successful) | 9fa747a2-25ff-48ee-b078-04381f7c828f | Checkout successfully completed with credit card. |
| E-money (FELICA) | 19a01fbd-3dcd-4d9f-a499-a641684af745 | eMoney/FeLiCa payment for the full amount is approved. |
| QR Code (PayPay) | cae0ee02-f83b-11ec-b939-0242ac120002 | PayPay QR code payment for the full amount is approved. Sandbox location must be based in Japan Note: In the sandbox environment, PayPay is the only QR code brand name that appears. |
For a complete list of test device IDs and their behaviors, see Terminal API Sandbox Testing.
Testing with an actual Square Terminal device is only supported in the production environment. The Sandbox environment does not support connections to physical Square Terminal devices. When testing with a physical device in production, you can use the minimum payment amount of 1 yen to minimize testing costs.
Use the following workflow for testing:
- Conduct initial development and testing in Sandbox using test device IDs.
- Perform final testing in production using a Square Terminal and small payment amounts (minimum 1 yen).
For more information, see Test Square APIs in the Sandbox.
For online payments in Japan, merchants can accept credit cards, debit cards, gift cards, and digital wallet payments (Apple Pay and Google Pay) when customers purchase through a web browser or mobile app.
You can build custom checkout forms using either the Web Payments SDK or In-App Payments SDK, and you can localize these forms from English to Japanese to provide a better customer experience.
- Use the Web Payments SDK for web applications or browser-based checkouts (desktop and mobile).
- Use the In-App Payments SDK for native mobile applications on iOS and Android.
Important
This is a critical requirement for all merchants operating in Japan. 3D Secure (3DS) authentication is mandatory for all online card payments in Japan. All merchants and integrations must comply with this regulation.
What does this mean for your integration?
- Depending on the card issuer, 3DS authentication may be required during card transactions.
- Use the Web Payments SDK or In-App SDK to implement the 3DS flow.
- Merchants cannot disable or opt out of 3DS in Japan.
In a Payment object, gift cards, credit cards, debit cards, and e-money (FELICA) payments are all recorded with a source_type of CARD. Detailed information is available through the card_details field. Terminal checkout objects also use the CheckoutOptionsPaymentType enum to denote whether the payment was made with a card, e-money, or QR.
To retrieve payment information, you can use the GetTerminalCheckout, RetrieveOrder, or GetPayment endpoints depending on your needs.
The card_details object includes a card_brand enum that helps you distinguish between different payment methods.
- Credit cards show the international brand name (such as
VISAorMastercard). - E-money payments show
FELICA(updated from the previous valueOTHER_BRAND).
{ "payment": { "id": "{PAYMENT_ID}", "created_at": "2023-10-13T21:14:29.577Z", "updated_at": "2023-10-13T21:14:30.504Z", "amount_money": { "amount": 5000, "currency": "JPY" }, "source_type": "CARD", "card_details": { "status": "CAPTURED", "card": { "card_brand": "FELICA" } } } }
{ "order": { "id": "{ORDER_ID}", "created_at": "2023-10-13T21:15:54.577Z", "updated_at": "2023-10-13T21:15:55.504Z", "tenders": [ { "id": "{PAYMENT_ID}", "location_id": "{LOCATION_ID}", "transaction_id": "{TRANSACTION_ID}", "created_at": "2023-10-13T21:15:54.577Z", "amount_money": { "amount": 5000, "currency": "JPY" }, "type": "CARD", "card_details": { "status": "CAPTURED", "card": { "card_brand": "FELICA", "last_4": "{LAST_FOUR}" }, "entry_method": "CONTACTLESS" } } ] } }
- Get a transaction ID from a completed checkout.
- Retrieve the corresponding Order object using the Orders API.
- Use the
tenders.idvalue to get a Payment object with GetPayment. The Payment object will returnCardPaymentDetails.Card.CardBrandwith the valueFELICA.
Terminal checkouts use payment_ids for payments, so you can use GetPayment directly to get payment information without needing to go through the Order object first.
For non-itemized sales, the item_type for orders created with e-money payments, are CUSTOM, because there's a custom amount for the payment. Itemized sales use the ITEM item type instead.
For more information, see Take E-Money Payments in Japan.
The wallet_details property in a Payments object supports several QR code brands, including:
PAYPAYALIPAYRAKUTEN_PAYAU_PAYD_BARAIMERPAYWECHAT_PAY. If a different brand is used that doesn't match these values, it is recorded asUNKNOWN.
Example Order object with a QR code payment:
{ "order": { "id": "{ORDER_ID}", "created_at": "2023-10-13T21:15:54.577Z", "updated_at": "2023-10-13T21:15:55.504Z", "tenders": [ { "id": "{PAYMENT_ID}", "location_id": "{LOCATION_ID}", "transaction_id": "{ORDER_ID}", "created_at": "2023-10-13T21:15:55.504Z", "note": "a custom note description", "amount_money": { "amount": 100, "currency": "JPY" }, "processing_fee_money": { "amount": 3, "currency": "JPY" }, "type": "WALLET" } ] } }
Note that the tenders object array in an order object doesn't have a value defined for wallet_details.
For implementation guides on accepting QR code payments, see
- Accept PayPay Payments in Japan for the Point of Sale API
- PayPay QR Code Payments for the Terminal API
- Take E-Money Payments in Japan.
Note
Data retention The Square Developer Console shows data for 1 year, but API logs are retained for only 28 days. You can view API logs in the Developer Console or API Explorer. Use the Square API Explorer and API Logs to capture historical data about payments and purchases.
When a request fails, Square API endpoints return a response with an errors field containing one or more Errors.
Error messages are always returned in English. You need to retrieve the error object as a JSON object and translate the error details for Japanese users. Your application should take appropriate action based on the
error.category,error.code, anderror.field(which indicates where the error occurred).Specific refund limitations for transportation cards. If a buyer uses a PASMO or SUICA transportation card for a payment, you encounter a
REFUND_DECLINEDerror. The seller cannot issue a refund for those payment cards.
Example refund decline error response:
{ "errors": [ { "code": "REFUND_DECLINED", "detail": "Payment could not be refunded", "category": "REFUND_ERROR" } ] }
Using CancelTerminalCheckout to cancel an e-money payment after getting an error on the Square Terminal is not supported.
If an error occurs on Square Terminal during an e-money payment, the checkout request has the IN_PROGRESS or PENDING state. In this situation, the buyer must manually cancel the checkout. To do so:
- Close the error message window
- Tap the navigation button back to the checkout screen
- Cancel the checkout manually.