To start utilizing our Open Payment API platform, first the business needs to be onboarded as a PayPay merchant. This process usually consists of information collection, manual verification, contract confirmation and credentials issuance.
After becoming a merchant on PayPay, the following items would be set up for the client:
This setup can be managed using our merchant panel or by getting in touch with a sales representative.
Access by users to the PayPay app and PayPay web screen from outside Japan is restricted. Please contact us for details.
Everything related to OPA API Authorization is described here.
PayPay OPA uses HTTP response status codes and OPA error codes to indicate the success or failure of requests. With this information, you can decide what error handling strategy to use. In general, PayPay OPA returns the following HTTP response status codes.
| Status | Code | Description |
|---|---|---|
| 200 | SUCCESS | Success |
| 202 | REQUEST_ACCEPTED | Request accepted |
| 400 | INVALID_REQUEST_PARAMS | The information provided by the request contains invalid data, e.g., unsupported currency. |
| 400 | MISSING_REQUEST_PARAMS | The set parameter is invalid. |
| 400 | INVALID_PARAMS | The set parameter is invalid. |
| 400 | CANCELED_USER | The user has canceled PayPay account. |
| 401 | UNAUTHORIZED | No valid api key and secret provided |
| 401 | OP_OUT_OF_SCOPE | The operation is not permitted. |
| 401 | INVALID_USER_AUTHORIZATION_ID | The specified user authorization ID is invalid. |
| 401 | EXPIRED_USER_AUTHORIZATION_ID | The user authorization ID expired |
| 401 | USER_STATE_IS_NOT_ACTIVE | The request cannot be accepted because the user status is inactive. |
| 429 | RATE_LIMIT | Too many requests |
| 500 | SERVICE_ERROR | A service error has occurred. |
| 500 | INTERNAL_SERVER_ERROR | This code means that something went wrong, but we don't know exactly if the transaction has happened or not. It should be treated as unknown payment status. |
| 503 | MAINTENANCE_MODE | Sorry, we are down for scheduled maintenance. |
Below error could occur if merchant requires user eKYC information but the user is not done KYC with EKYC.
| Status | Code | Description |
|---|---|---|
| 400 | KYC_NOT_COMPLETED | The user has not completed KYC. |
| 400 | NON_EKYC_USER | User KYC not happened with using EKYC. |
Below error could occur if the user is flagged due to certain risks.
| Status | Code | Description |
|---|---|---|
| 400 | UNACCEPTABLE_OP | The requested operation cannot be processed due to a current condition. For example, the user is suspicious. |
| 400 | KYC_UPDATE_REQUIRED | This user needs to update the KYC documents. |
| Status | Code | Description |
|---|---|---|
| 404 | SESSION_NOT_FOUND | The requested code ID is not found or it is already expired. |
| 400 | KYC_PASSPORT_NOT_COMPLETED | The user has not started or completed KYC passport process. |
In principle, all API responses include an X-REQUEST-ID in the response header (with some exceptions).
When contacting PayPay support, please provide this request ID.
Format: Alphanumeric characters and hyphens (maximum 64 characters)
Example:
OPA45F681001AEF4605B2A50939F611F4B8
Get the user's KYC information.
| userAuthorizationId required | string (UserAuthorizationId-2) <= 64 characters The PayPay user reference id returned by the user authorization flow |
| requiredKycType | string (RequiredKycType) The type of KYC information to include in the response, client must have the appropriate configuration to use this. If client does not have the correct configuration, it will return 401 Response and OP_OUT_OF_SCOPE error. Possible values: If not passed or left blank, request will return the latest KYC information that the client has the correct configuration for. |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "status": "COMPLETED",
- "kycAt": "2019-08-24T14:15:22Z",
- "type": "EKYC",
- "eKycDocument": "DRIVERS_LICENCE",
- "kycInfo": {
- "lastName": "string",
- "firstName": "string",
- "lastNameKana": "string",
- "firstNameKana": "string",
- "nationality": "string",
- "dateOfBirth": "string",
- "address": {
- "zipCode": "string",
- "countryCode": "string",
- "country": "string",
- "state": "string",
- "city": "string",
- "street1": "string",
- "street2": "string"
}, - "job": "string",
- "residenceType": "string",
- "expiryDate": "string"
}
}
}Get the user's KYC information for KYC Passport clients.
mini_app_kyc_passport scope is required in order to access this API.
| X-USER-AUTHORIZATION-ID required | string (UserAuthorizationId) <= 64 characters The PayPay user reference id returned by the user authorization flow |
{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "status": "COMPLETED",
- "kycAt": "2019-08-24T14:15:22Z",
- "type": "EKYC",
- "eKycDocument": "DRIVERS_LICENCE",
- "kycInfo": {
- "lastName": "string",
- "firstName": "string",
- "lastNameKana": "string",
- "firstNameKana": "string",
- "lastNameCommon": "string",
- "firstNameCommon": "string",
- "lastNameKanaCommon": "string",
- "firstNameKanaCommon": "string",
- "nationality": "string",
- "dateOfBirth": "string",
- "address": {
- "zipCode": "string",
- "countryCode": "string",
- "country": "string",
- "state": "string",
- "city": "string",
- "street1": "string",
- "street2": "string"
}, - "job": "string",
- "residenceType": "string",
- "expiryDate": "string"
}
}
}Create account linking QR code with KYC Passport flow.
For more details about account linking, please refer to this.
Timeout: 10s
| scopes required | Array of strings Scope of the user authorization.Please select only the required SCOPEs. |
| nonce required | string <= 255 characters Random generated string |
| redirectType | string Default: "WEB_LINK" Enum: "APP_DEEP_LINK" "WEB_LINK" Parameter to decide whether to redirect to merchant app or merchant web application |
| redirectUrl required | string <= 255 characters The callback endpoint provided by client. For |
| referenceId | string <= 255 characters The id used to identify the user in merchant system. It will be stored in the PayPay db for reconciliation purpose |
| phoneNumber | string The user mobile phone number. When you open the login screen with a browser, it will be set as the initial value of the phone number. |
| deviceId | string <= 255 characters This parameter is obsolete. |
| userAgent | string <= 255 characters The User agent of the web browser. When redirectType is |
object KYC data to be verified during account link | |
| accountLinkFlow | string Default: null Value: "KYC_PASSPORT" The flow of account link. |
object This field is required when |
{- "scopes": [
- "direct_debit",
- "get_balance"
], - "nonce": "string",
- "redirectType": "APP_DEEP_LINK",
- "redirectUrl": "string",
- "referenceId": "string",
- "phoneNumber": "string",
- "deviceId": "string",
- "userAgent": "string",
- "kycData": {
- "firstNameKana": "ジョン",
- "lastNameKana": "スズキ",
- "dateOfBirth": "string",
- "matchingType": "HALF_WIDTH_KANA"
}, - "accountLinkFlow": "KYC_PASSPORT",
- "kycPassport": {
- "isInitialKycPassport": false,
- "code": {
- "challenge": "string",
- "challengeMethod": "S256"
}
}
}{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "linkQRCodeURL": "string",
- "codeId": "string"
}
}Fetch KYC info of completed KYC Passport QR.
kyc_passport_qr scope is required in order to access this API.
| codeId required | string Code ID which was returned when creating KYC Passport QR code. |
| codeVerifier | string <= 64 characters The PKCE code verifier that was used when creating the KYC Passport QR code. |
| userAuthorizationId | string <= 64 characters The PayPay user reference id returned by the user authorization flow. |
{- "codeVerifier": "string",
- "userAuthorizationId": "string"
}{- "resultInfo": {
- "code": "string",
- "message": "string",
- "codeId": "string"
}, - "data": {
- "userAuthorizationId": "string",
- "kycStatus": "COMPLETED",
- "kycAt": "2019-08-24T14:15:22Z",
- "kycType": "EKYC",
- "eKycDocument": "DRIVERS_LICENCE",
- "kycInfo": {
- "lastName": "山田",
- "firstName": "太郎",
- "lastNameKana": "ヤマダ",
- "firstNameKana": "タロウ",
- "lastNameCommon": "ヤマダ",
- "firstNameCommon": "タロウ",
- "lastNameKanaCommon": "ヤマダ",
- "firstNameKanaCommon": "タロウ",
- "dateOfBirth": "20000111",
- "address": {
- "zipCode": "string",
- "countryCode": "string",
- "country": "string",
- "state": "string",
- "city": "string",
- "street1": "string",
- "street2": "string"
}, - "nationality": "string",
- "job": "string"
}, - "selfieImageUrl": "string"
}
}| Date of Documentation Update | Date of Release | Type of Change | Section | Updates |
|---|---|---|---|---|
| 2023.01.25 | released | Documentation Fix | Retrieve the user's KYC Information | Update the description of status in response data |
| 2024.06.04 | released | Documentation Fix | Retrieve the user's KYC Information | Update the description of eKycDocument in response data |
| 2025.03.18 | TBD | Feature | Retrieve the user's KYC Information | Add a new API to get KYC passport information |
| 2025.08.13 | TBD | Feature | KYC Passport Events | Add information about KYC passport events webhook |
| 2025.08.13 | TBD | Feature | KYC Passport Risk Events | Add information about KYC passport risk events webhook |
| 2025.11.28 | TBD | Feature | Retrieve the user's KYC Information | Add residenceType and expiryDate fields. Add new scope kyc_foreign_status |
| 2026.01.26 | TBD | Feature | Create Account Linking QR Code, Fetch KYC info of completed KYC Passport QR | Added the API to the documentation |
| 2026.02.10 | TBD | Documentation Fix | Fetch KYC info of completed KYC Passport QR | Update the description |
| 2026.02.24 | TBD | Feature | Webhooks, Recon File | Add new webhook / recon file notifications for KYC passport |
| 2026.02.17 | TBD | Feature | Common response code | Removed 404 OPA_CLIENT_NOT_FOUND. |
| 2026.03.09 | TBD | Feature | Webhooks, Recon File | Revised descriptions |
| 2026.03.27 | TBD | Feature | Fetch KYC info of completed KYC Passport QR | Add selfieImageUrl field |
| 2026.04.01 | TBD | Feature | Fetch KYC info of completed KYC Passport QR | Change HTTP method from GET to POST |
PayPay can send webhook events that notify your application at the time when event happens on your account. To receive the notification, the client needs to set up a webhook URL where we will use HTTP POST to send data to the client. Each notification event will have one notification_type field which can be used by clients to determine which event has happened.
When your application receives the notification via webhook, it should respond with a HTTP 200 OK status code.
Although not required, a response body with a short text description (like "OK") is recommended.
With the security concerns, it is highly recommended that clients whitelist PayPay IP address to receive notifications.
Please keep reading to learn for which events we currently send webhook notifications.
Each webhook notification type is delivered to a separate webhook URL. The URLs are configured during onboarding.
| Notification type | Webhook URL |
|---|---|
| KYC Events | Dedicated webhook URL for KYC events |
| KYC Passport Risk Events | Dedicated webhook URL for KYC passport risk events |
| Account Status Events | Dedicated webhook URL for account status events |
| Recon File Notifications | Dedicated webhook URL for recon file notifications (shared by all recon file types) |
This notification will be triggered when a user's KYC is updated. This notification is delivered to the dedicated webhook URL for KYC events.
| attribute | type | is_required? | description |
|---|---|---|---|
| notification_type | string | yes | Type of the notification. Possible values: kyc_passport.kyc_info.updated |
| notification_id | string | yes | The ID used to identify the notification |
| user_authorization_id | string | yes | PayPay user reference id which you should store in your db and use it in the api calls. Max length: 64 characters |
{
"notification_type": "kyc_passport.kyc_info.updated",
"notification_id": "evt_aXnbdeFt2Ke",
"user_authorization_id": "a85fe9e9-b4c9-45cf-a392-834c57d83af7"
}
This notification will be triggered when a user has been flagged for a certain risk. This notification is delivered to the dedicated webhook URL for KYC passport risk events.
| attribute | type | is_required? | description |
|---|---|---|---|
| notification_type | string | yes | Type of the notification. Possible values: kyc_passport.risk.update |
| notification_id | string | yes | The ID used to identify the notification |
| user_authorization_id | string | yes | PayPay user reference id which you should store in your db and use it in the api calls. Max length: 64 characters |
{
"notification_type": "kyc_passport.risk.update",
"notification_id": "evt_aXnbdeFt2Ke",
"user_authorization_id": "a85fe9e9-b4c9-45cf-a392-834c57d83af7"
}
This notification will be triggered when a user's account status is updated. This notification is delivered to the dedicated webhook URL for account status events.
| attribute | type | is_required? | description |
|---|---|---|---|
| notification_type | string | yes | Type of the notification. Possible values: kyc_passport.account_status.updated |
| notification_id | string | yes | The ID used to identify the notification |
| user_authorization_id | string | yes | PayPay user reference id which you should store in your db and use it in the api calls. Max length: 64 characters |
{
"notification_type": "kyc_passport.account_status.updated",
"notification_id": "evt_aXnbdeFt2Ke",
"user_authorization_id": "a85fe9e9-b4c9-45cf-a392-834c57d83af7"
}
This recon file contains a daily summary of users whose KYC information was updated. This corresponds to the real-time "KYC Events" webhook (kyc_passport.kyc_info.updated), delivered as a daily summary. PayPay generates this file by daily processing and delivers the notification via the Webhook URL for recon files.
| Category | Description | Note |
|---|---|---|
| File linkage method | Webhook | |
| Webhook URL | Webhook URL for recon files | Recon file notifications are sent to the webhook for recon files, which is separate from the event webhook URLs. |
| File Name | kyc_passport_<merchant_id>_<from>_<to>.csv | |
| File creation unit | merchant_id | |
| Processing cycle (JST) | Daily | userAuthorizationId of users whose KYC is updated from 00:00:00 to 23:59:59 will be listed in the file. |
| Notification time (JST) | Between 1:30 and 10:00 | |
| format | CSV | |
| File acquisition period | 2 hours | |
| File retention period | 1 week | If the recon file cannot be obtained due to a merchant failure, etc., PayPay will be able to resend the webhook. Please contact us if you would like to be notified again. |
| character code(Contents) | UTF-8 | |
| character code(file name) | UTF-8 | |
| newline code | CRLF |
| Key | Value from | Note |
|---|---|---|
| userAuthorizationId | userAuthorizationId | userAuthorizationId of a user whose KYC is updated during the processing cycle period. |
This notification is sent to the webhook for recon files when the recon file is generated. Download the file from the path included in the notification payload.
{
"notification_type":"file.created",
"notification_id": "<UUID>",
"fileType":"kyc_passport_sync_recon",
"path":"https://<server_path>/<filename>?parameters",
"requestedAt":"<epoch time>"
}
This recon file contains a daily summary of users who have been flagged for a certain risk. This corresponds to the real-time "KYC Passport Risk Events" webhook (kyc_passport.risk.update), delivered as a daily summary. For clients enabling the risk recon file setting, PayPay generates this file by daily processing and delivers the notification via the Webhook URL for recon files.
| Category | Description | Note |
|---|---|---|
| File linkage method | Webhook | |
| Webhook URL | Webhook URL for recon files | Recon file notifications are sent to the webhook for recon files, which is separate from the event webhook URLs. |
| File Name | kyc_passport_risk_<client_id>_<from>_<to>.csv | |
| File creation unit | client_id | |
| Processing cycle (JST) | Daily | userAuthorizationId of users who become flagged for a certain risk from 00:00:00 to 23:59:59 will be listed in the file. |
| Notification time (JST) | Between 1:30 and 10:00 | |
| format | CSV | |
| File acquisition period | 2 hours | |
| File retention period | 1 week | If the recon file cannot be obtained due to a merchant failure, etc., PayPay will be able to resend the webhook. Please contact us if you would like to be notified again. |
| character code(Contents) | UTF-8 | |
| character code(file name) | UTF-8 | |
| newline code | CRLF |
| Key | Value from | Note |
|---|---|---|
| userAuthorizationId | userAuthorizationId | userAuthorizationId of a user who becomes flagged for a certain risk during the processing cycle period. |
This notification is sent to the webhook for recon files when the recon file is generated. Download the file from the path included in the notification payload.
{
"notification_type":"file.created",
"notification_id": "<UUID>",
"fileType":"kyc_passport_risk_sync_recon",
"path":"https://<server_path>/<filename>?parameters",
"requestedAt":"<epoch time>"
}
This recon file contains a daily summary of users whose account status was updated. This corresponds to the real-time "Account Status Events" webhook (kyc_passport.account_status.updated), delivered as a daily summary. For clients enabling the account status recon file setting, PayPay generates this file by daily processing and delivers the notification via the Webhook URL for recon files.
| Category | Description | Note |
|---|---|---|
| File linkage method | Webhook | |
| Webhook URL | Webhook URL for recon files | Recon file notifications are sent to the webhook for recon files, which is separate from the event webhook URLs. |
| File Name | kyc_passport_account_status_<client_id>_<from>_<to>.csv | |
| File creation unit | client_id | |
| Processing cycle (JST) | Daily | userAuthorizationId of users whose account status is updated from 00:00:00 to 23:59:59 will be listed in the file. |
| Notification time (JST) | Between 1:30 and 10:00 | |
| format | CSV | |
| File acquisition period | 2 hours | |
| File retention period | 1 week | If the recon file cannot be obtained due to a merchant failure, etc., PayPay will be able to resend the webhook. Please contact us if you would like to be notified again. |
| character code(Contents) | UTF-8 | |
| character code(file name) | UTF-8 | |
| newline code | CRLF |
| Key | Value from | Note |
|---|---|---|
| userAuthorizationId | userAuthorizationId | userAuthorizationId of a user whose account status is updated during the processing cycle period. |
This notification is sent to the webhook for recon files when the recon file is generated. Download the file from the path included in the notification payload.
{
"notification_type":"file.created",
"notification_id": "<UUID>",
"fileType":"kyc_passport_account_status_sync_recon",
"path":"https://<server_path>/<filename>?parameters",
"requestedAt":"<epoch time>"
}