---
title: "Submit Partner KYC Verification"
method: POST
path: "/v2/accounts/{account_id}/partner_verification"
tags: ["Verification"]
---

# Submit Partner KYC Verification

`POST /v2/accounts/{account_id}/partner_verification`

## Request

- Base URL: `https://api.paymongo.com`
- URL: `https://api.paymongo.com/v2/accounts/{account_id}/partner_verification`
- Auth: HTTP basic

Submit pre-verified KYC screening results and document information from a partner platform. PayMongo verifies the screening data via the Verifications API and marks the account's identity verification as passed if validation succeeds.

The endpoint integrates with the Verifications API to validate the partner verification data. Document information and screening results are validated against PayMongo's compliance requirements.

This endpoint does not activate the account. After partner verification is submitted, you should populate additional person and business details via the Update Account endpoint, then activate the account separately.

Only the parent account can submit partner verification data for child accounts. The partner platform must be pre-approved and enabled by PayMongo for KYC Reliance.

## Path parameters

- `account_id` string, required

## Request body

- PartnerVerificationRequest
  - `risk_profile` RiskProfile, required
    - `screening_results` ScreeningResults, required
      - `un_sanctions` boolean, required: Whether customer appears on UN sanctions list
      - `ofac_sanctions` boolean, required: Whether customer appears on OFAC sanctions list
      - `pep_connected` boolean, required: Whether customer has Politically Exposed Person (PEP) connections
      - `adverse_news` boolean, required: Whether customer has adverse news or negative media
      - `foreign_owned` boolean, required: Whether customer is foreign-owned entity
    - `verification` VerificationInput, required
      - `source` string: Name of the partner platform that performed the verification (optional)
      - `partner_verification_id` string, required: Partner's internal verification ID
      - `verified_at` string, date-time, required: ISO 8601 datetime when verification was completed. Must not be in the future.
      - `next_verification_refresh_schedule` string, date-time, required: ISO 8601 datetime for the next scheduled KYC refresh date
      - `metadata` object: Optional metadata for audit trail
  - `documents` DocumentInput[], required: Array of identity documents for verification (exactly 1 selfie required, plus 1 primary ID or 2+ secondary IDs)
    - `type` 'alien_registration_card_ph' | 'articles_of_incorporation' | 'barangay_clearance_ph' | 'bir_certificate_of_registration' | 'by_laws' | 'driving_license_ph' | 'firearm_license_ph' | 'latest_gis' | 'national_id_ph' | 'nbi_clearance_ph' | 'other_passport' | 'pag_ibig_ph' | 'passport' | 'philhealth_ph' | 'police_clearance_ph' | 'postal_id_ph' | 'prc_id_ph' | 'sec_certificate' | 'sec_registration' | 'selfie' | 'sssid_ph' | 'tin_id' | 'umid_ph' | 'voter_id_ph', required: Type of document. **For selfie documents:** - Exactly 1 selfie document required per request - Only `front_image_url` is used; `id_number`, `back_image_url`, and `metadata` are ignored - Used for liveness check and face matching **For ID documents (KYC):** - `id_number` and `metadata` are required - Each document type must be unique (duplicates not allowed) - `back_image_url` required for: national_id_ph, driving_license_ph, alien_registration_card_ph, other_passport **For business documents (KYB - corporation/partnership):** - Used for business verification in partner verification - Optional: `id_number` and `metadata` - Only `front_image_url` required
    - `id_number` string: ID number or reference (not required for selfie)
    - `front_image_url` string, uri, required: HTTPS URL to front image (for ID documents) or selfie photo. Required for all document types.
    - `back_image_url` string, uri: HTTPS URL to back image of ID document (not used for selfie). Required for: national_id_ph, driving_license_ph, alien_registration_card_ph, other_passport. Optional for all other ID document types.
    - `metadata` object: Document metadata with OCR fields. Not required for selfie documents. For ID documents: at least 1 key-value pair required, with no empty values.
  - `person` PersonInput: Person information. All fields are optional for PATCH requests. Only include fields you want to update.
    - `first_name` string, nullable: User's first name
    - `last_name` string, nullable: User's last name
    - `middle_name` string, nullable: User's middle name (optional)
    - `mobile_number` string, nullable: Mobile number of the account holder. Must be a valid phone number starting with a country code followed by 4 to 15 digits (e.g., +639111111111)
    - `email_address` string, nullable: Email address of the account holder. Must be a unique email not associated with any existing PayMongo account
    - `date_of_birth` DateObject, nullable: Date represented as day, month, year
      - `day` integer, nullable: Day of month
      - `month` integer, nullable: Month (1-12)
      - `year` integer, nullable: Year. The account holder must be of legal age
    - `nationality` string, nullable: Nationality of the account holder. Represented by a 3-letter ISO code (e.g., PHL for the Philippines)
    - `nature_of_work` 'employed_locally' | 'retired' | 'pensioner' | 'ofw' | 'ofw_beneficiary' | 'student' | 'self_employed' | 'unemployed_spouse_income' | 'unemployed_other_income', nullable: Nature of work of the account holder
    - `place_of_birth` PlaceOfBirth, nullable: Place of birth
      - `city` string, nullable: City of birth
      - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
    - `source_of_funds` 'allowance' | 'commission' | 'donation' | 'other' | 'pension' | 'salary', nullable: Source of funds of the representative.
    - `source_of_funds_other` string, nullable: Required if source_of_funds is set to other. Accepts a string value stating the name of the representative's business.
    - `source_of_funds_salary` string, nullable: Required if source_of_funds is set to salary. Accepts a string value stating the name of the representative's employer.
    - `tin` string, nullable: Tax Identification Number (TIN) of the account holder
    - `address` Address
      - `line1` string, nullable: Street address line 1
      - `line2` string, nullable: Street address line 2
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
      - `postal_code` string, nullable: Postal or ZIP code
    - `permanent_address` Address
      - `line1` string, nullable: Street address line 1
      - `line2` string, nullable: Street address line 2
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
      - `postal_code` string, nullable: Postal or ZIP code
  - `business` PartnerVerificationBusinessInput
    - `address` BusinessAddress: Business address
      - `line1` string, nullable: Street address line 1
      - `line2` string, nullable: Street address line 2
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
      - `postal_code` string, nullable: Postal or ZIP code
    - `age` 'between_1_and_2_years' | 'between_2_and_5_years' | 'greater_than_5_years' | 'less_than_1_year', nullable: Age range of the business
    - `description` string, nullable: Description of the business (max 255 characters)
    - `email` string, required: Business email address (REQUIRED)
    - `estimated_monthly_volume` 'less_than_100K' | 'between_100K_and_300K' | 'between_300K_and_500K' | 'between_500K_and_1M' | 'between_1M_and_3M' | 'greater_than_3M', nullable: Estimated monthly transaction volume range in PHP
    - `category` 'automotive' | 'cash' | 'charity' | 'consulting' | 'donation' | 'education' | 'entertainment' | 'food_and_beverages' | 'gift' | 'groceries' | 'health' | 'hobbies' | 'online_shopping' | 'personal_services' | 'shopping' | 'sports' | 'transport' | 'travel' | 'utilities' | 'others', required: GrabPay business category (REQUIRED). Must be one of: automotive, cash, charity, consulting, donation, education, entertainment, food_and_beverages, gift, groceries, health, hobbies, online_shopping, personal_services, shopping, sports, transport, travel, utilities, others.
    - `industry` union, required: Business category - MCC (Merchant Category Code) (REQUIRED). Can be provided as string or number. See [MCC Reference](https://docs.paymongo.com/docs/account-settings-merchant-category-codes#mcc-reference).
      - string
      - number
    - `legal_name` string, nullable: Legal name of the business
    - `physical_store` boolean, nullable: Whether the business has a physical store
    - `registration_number` string, nullable: Business registration number (DTI, BIR, SEC, etc.)
    - `sector` string, required: Business sector - ICP sector code (REQUIRED). See [Sector Groups](https://docs.paymongo.com/docs/account-settings-merchant-category-codes#sector-groups).
    - `size` 'between_10_and_50' | 'between_51_and_250' | 'greater_than_250' | 'less_than_10', nullable: Business size (number of employees)
    - `support_email` string, required: Business support email address (REQUIRED)
    - `customer_service_number` string, required: Customer service phone number (REQUIRED). Must be a valid phone number with country code
    - `tin` string, nullable: Business Tax Identification Number
    - `trade_name` string, nullable: Trade name of the business
    - `type` 'corporation' | 'individual' | 'one_person_corporation' | 'partnership' | 'sole_proprietor', nullable: Business type (corporation, partnership, sole_proprietor, individual, one_person_corporation)
    - `website` string, required: Business website URL (REQUIRED). Must be a valid HTTPS URL
    - `website_under_construction` boolean, nullable: Whether the website is currently under construction (optional, defaults to false)
  - `ubos` UBOInput[]: Ultimate Beneficial Owners (REQUIRED for merchant accounts with min 1, not allowed for consumers)
    - `first_name` string, required: UBO first name (REQUIRED)
    - `last_name` string, required: UBO last name (REQUIRED)
    - `middle_name` string, nullable: UBO middle name (optional)
    - `date_of_birth` DateObject, nullable, required: Date represented as day, month, year
      - `day` integer, nullable: Day of month
      - `month` integer, nullable: Month (1-12)
      - `year` integer, nullable: Year. The account holder must be of legal age
    - `nationality` string, required: ISO 3166-1 alpha-3 country code (REQUIRED). Example: PHL
    - `ownership_percentage` number, required: UBO ownership percentage (REQUIRED, 0.01 to 100)
    - `phone_number` string, required: UBO phone number with country code (REQUIRED). Example: +639111111111
    - `email_address` string, required: UBO email address (REQUIRED)
    - `tax_id` string, required: UBO personal Tax Identification Number (REQUIRED)
    - `address` BusinessAddress, required: Business address
      - `line1` string, nullable: Street address line 1
      - `line2` string, nullable: Street address line 2
      - `city` string, nullable: City
      - `state` string, nullable: State or province
      - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
      - `postal_code` string, nullable: Postal or ZIP code

## Response `200`

Partner verification submitted successfully - identity marked as verified via KYC reliance

- PartnerVerificationResponse
  - `data` PartnerVerificationResponseData
    - `id` string: Account ID
    - `type` 'merchant' | 'consumer': Account type
    - `activation_status` string: Account activation status
    - `person` Person
      - `type` 'owner' | 'representative': Person type
      - `first_name` string, nullable: User's first name
      - `last_name` string, nullable: User's last name
      - `middle_name` string, nullable: User's middle name
      - `mobile_number` string, nullable: Mobile number of the account holder. Must be a valid phone number starting with a country code followed by 4 to 15 digits (e.g., +639111111111)
      - `email_address` string, nullable: Email address of the account holder. Must be a unique email not associated with any existing PayMongo account
      - `date_of_birth` DateObject, nullable: Date represented as day, month, year
        - `day` integer, nullable: Day of month
        - `month` integer, nullable: Month (1-12)
        - `year` integer, nullable: Year. The account holder must be of legal age
      - `nationality` string, nullable: Nationality of the account holder. Represented by a 3-letter ISO code (e.g., PHL for the Philippines)
      - `nature_of_work` 'employed_locally' | 'retired' | 'pensioner' | 'ofw' | 'ofw_beneficiary' | 'student' | 'self_employed' | 'unemployed_spouse_income' | 'unemployed_other_income', nullable: Nature of work of the account holder
      - `place_of_birth` PlaceOfBirth, nullable: Place of birth
        - `city` string, nullable: City of birth
        - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
      - `source_of_funds` 'allowance' | 'commission' | 'donation' | 'other' | 'pension' | 'salary', nullable: Source of funds of the representative.
      - `source_of_funds_other` string, nullable: Required if source_of_funds is set to other. Accepts a string value stating the name of the representative's business.
      - `source_of_funds_salary` string, nullable: Required if source_of_funds is set to salary. Accepts a string value stating the name of the representative's employer.
      - `tin` string, nullable: Tax Identification Number (TIN) of the account holder
      - `address` Address
        - `line1` string, nullable: Street address line 1
        - `line2` string, nullable: Street address line 2
        - `city` string, nullable: City
        - `state` string, nullable: State or province
        - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
        - `postal_code` string, nullable: Postal or ZIP code
      - `permanent_address` Address
        - `line1` string, nullable: Street address line 1
        - `line2` string, nullable: Street address line 2
        - `city` string, nullable: City
        - `state` string, nullable: State or province
        - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
        - `postal_code` string, nullable: Postal or ZIP code
      - `identity_verification_status` 'pending' | 'processing' | 'for_review' | 'passed' | 'passed_attestation_form' | 'passed_kyc_reliance' | 'failed': Identity verification status
    - `business` Business, nullable: Business information (merchant only)
      - `address` BusinessAddress: Business address
        - `line1` string, nullable: Street address line 1
        - `line2` string, nullable: Street address line 2
        - `city` string, nullable: City
        - `state` string, nullable: State or province
        - `country` string, nullable: Country code (ISO 3166-1 alpha-2)
        - `postal_code` string, nullable: Postal or ZIP code
      - `age` 'between_1_and_2_years' | 'between_2_and_5_years' | 'greater_than_5_years' | 'less_than_1_year', nullable: Age range of the business
      - `customer_service_number` string, nullable: Customer service contact number of the business. Must be a valid phone number starting with a country code followed by 4 to 15 digits (e.g., +639111111111)
      - `date_of_incorporation` DateObject, nullable: Date represented as day, month, year
        - `day` integer, nullable: Day of month
        - `month` integer, nullable: Month (1-12)
        - `year` integer, nullable: Year. The account holder must be of legal age
      - `description` string, nullable: Description of the business (max 255 characters)
      - `dti_registered_name` string, nullable: Registered name of the business with the Department of Trade and Industry (DTI)
      - `estimated_monthly_volume` 'less_than_100K' | 'between_100K_and_300K' | 'between_300K_and_500K' | 'between_500K_and_1M' | 'between_1M_and_3M' | 'greater_than_3M', nullable: Estimated monthly transaction volume range of the business in PHP. Required for account activation.
      - `handle` string, nullable: Unique handle or identifier for the business. Must be unique across all merchants. If left empty, automatically generated based on trade name
      - `industry` string, nullable: Merchant Category Code (MCC) for the business. See [MCC Reference](https://docs.paymongo.com/docs/account-settings-merchant-category-codes#sector-groups) for valid codes.
      - `legal_name` string, nullable: Legal name of the business. Follows specific rules depending on the business type
      - `physical_store` boolean, nullable: Whether the business has a physical store
      - `registration_number` string, nullable: Registration number of the business
      - `size` 'between_10_and_50' | 'between_51_and_250' | 'greater_than_250' | 'less_than_10', nullable: Size of the business in terms of number of employees
      - `tin` string, nullable: Business TIN
      - `trade_name` string, nullable: Trade name of the business. Must not consist solely of numbers, symbols, or spaces
      - `type` 'individual' | 'sole_proprietor' | 'partnership' | 'corporation', nullable: Registration type of the business
      - `website` string, nullable: Business website
    - `risk_profile` RiskProfileResponse
      - `screening_results` ScreeningResults
        - `un_sanctions` boolean, required: Whether customer appears on UN sanctions list
        - `ofac_sanctions` boolean, required: Whether customer appears on OFAC sanctions list
        - `pep_connected` boolean, required: Whether customer has Politically Exposed Person (PEP) connections
        - `adverse_news` boolean, required: Whether customer has adverse news or negative media
        - `foreign_owned` boolean, required: Whether customer is foreign-owned entity
    - `created_at` integer: Unix timestamp of account creation
    - `updated_at` integer: Unix timestamp of last update

## Other responses

- `400`: Bad request - invalid or missing required fields, or invalid file format
- `401`: Unauthorized - invalid or missing API key
- `403`: Forbidden - not authorized or partner not eligible for KYC reliance
- `404`: Account not found
- `409`: Conflict - account already verified
- `502`: Service unavailable - external service error

---

[API](https://skmtc.dev/paymongo/apis/accounts-api.md) - [All operations](https://skmtc.dev/paymongo/apis/accounts-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paymongo/apis/accounts-api/revisions/68d0b0b08710?raw)
