> ## Documentation Index
> Fetch the complete documentation index at: https://dev.enterprise.moonpay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Outsourcing

> Provide identification data on your customers directly to MoonPay Enterprise's API instead of using our verification providers.

This requires an outsourcing agreement with MoonPay Enterprise.

## Outsourcing Agreement

To use the Outsourcing API Endpoint, a signed **KYC/KYB Data Sharing Agreement** must be in place between your organization and MoonPay Enterprise. This agreement is a prerequisite for submitting customer identification data directly via the API.

### Why is the agreement required?

MoonPay Enterprise operates under strict anti-money laundering (AML) and counter-terrorist financing (CTF) regulations across multiple jurisdictions. The Outsourcing Agreement establishes a formal legal framework that:

* **Defines data collection standards** — Specifies the identity documents, customer information, and verification methods your organization must use when collecting KYC/KYB data on MoonPay Enterprise's behalf.
* **Ensures regulatory compliance** — Confirms that both parties maintain the necessary licenses, authorizations, and internal controls required by applicable laws.
* **Sets data quality and security requirements** — Establishes obligations around accuracy, completeness, authenticity, and secure transmission of customer data via the API Endpoint.
* **Governs data protection** — Ensures customer data is handled in compliance with applicable data protection laws, with each party acting as an independent data controller.
* **Enables independent verification** — Clarifies that MoonPay Enterprise conducts its own verification and risk assessment on all received data. The agreement does not exempt MoonPay Enterprise from its own compliance obligations.

### Key considerations

* **Timing matters:** Only customer data collected after the agreement is executed is fully compliant for MoonPay Enterprise's onboarding process. Data collected before the agreement may require supplementary verification. See the [Data Collection Timeline](#data-collection-timeline) below for details.
* **Approved identity verification providers:** Your identity verification provider(s) must be proposed to and approved by MoonPay Enterprise before data sharing begins.
* **Data Completion Loop:** a non-US KYB submission missing documents is created as `Pending` with a resume `url` that collects the missing items; a US submission is rejected with `400` instead and must be resubmitted (see [Incomplete Submissions](/kyb#incomplete-submissions)). If MoonPay Enterprise finds gaps later during review, you will be notified to collect and resubmit the data via the API.

To initiate the Outsourcing Agreement process, contact the MoonPay Enterprise team at [developers@iron.xyz](mailto:developers@iron.xyz).

## Onboarding Lifecycle

### Optimizing Customer Identification

Leverage existing customer identity data to streamline onboarding. In optimal scenarios, this eliminates the need for redirects or third-party verification flows.

### Regulatory Framework and Data Usage

The outsourcing agreement establishes a framework for sharing customer identification data with MoonPay Enterprise for KYC/KYB purposes. However, data collected prior to the agreement falls outside its scope. Regulatory requirements mandate that we independently verify critical identification elements through our authorized KYC providers.

### Data Collection Timeline

Example: Outsourcing agreement executed at 13:00 (UTC) on January 1, 2026:

| Data Type          | Collection Time           | Status                                                    |
| ------------------ | ------------------------- | --------------------------------------------------------- |
| **Post-Agreement** | After 13:00, Jan 1, 2025  | Fully compliant for MoonPay Enterprise's approval process |
| **Pre-Agreement**  | Before 13:00, Jan 1, 2025 | Requires supplementary verification                       |

## Technical Details

### Onboarding via API

The process mirrors the [standard onboarding flow](/onboarding), with one exception: when creating an Identification, a body must be provided.

<Note>
  Present and sign the terms and conditions before submitting identification data. Ask your customer for their country, fetch the terms via `GET /api/terms-and-conditions?country={ISO3}`, and record acceptance via `POST /api/customers/{id}/signings`. The terms contain the data sharing agreement, so they must be signed before MoonPay Enterprise collects KYC data. See [Terms and Conditions](/onboarding#terms-and-conditions).
</Note>

The request body uses a `type` discriminator at the top level: set it to `"Person"` for KYC or `"Business"` for KYB. For Person, all other fields are siblings of `type`. For Business, company fields nest under `company_data`, with `phone`, `ip_address`, and `questionnaire` alongside it.

#### KYC

<CodeGroup>
  ```bash theme={null}
  curl --request POST \
       --header 'accept: application/json; charset=utf-8' \
       --header 'Idempotency-Key: <unique-request-id>' \
       --header 'x-api-key: <your-api-key>' \
       --url 'https://api.sandbox.iron.xyz/api/customers/<customer_id>/identifications/v2' \
       --data-raw '{
         "type": "Person",
         "first_name": "John",
         "last_name": "Smith",
         "full_name": "John Smith",
         "date_of_birth": "1990-01-01",
         "email_address": "[email protected]",
         "phone_number": "+12125551234",
         "sharing_consent": true,
         "consent_collected_at": "2025-04-01T15:38:21.775210Z",
         "intended_use": "PurchaseDigitalAssets",
         "address": {
           "street_1": "123 Main St",
           "street_2": "Apt 1",
           "city": "Anytown",
           "state": "CA",
           "zip_code": "12345",
           "country": "US"
         },
         "identity": {
           "identity_country_code": "US",
           "identity_number": "123456789",
           "identity_document_type": "Passport",
           "identity_document_front": "<base64-encoded-image>",
           "identity_document_back": "<base64-encoded-image>",
           "selfie": "<base64-encoded-image>",
           "selfie_collected_at": "2025-04-03T13:11:02.263587Z",
           "ip_address": "203.0.113.42",
           "nationality": "US"
         },
         "kyc_questionnaire": {
           "employment_status": "Employed",
           "yearly_gross_income": "From40001To50000",
           "source_of_wealth": "Salary",
           "expected_monthly_transaction_count": "Between5And10",
           "expected_monthly_transaction_volume": "MoreThan500LessThan2000"
         },
         "tax_identification_number": "123-45-6789",
         "documents": [
           {
             "name": "proof_of_address.pdf",
             "file": "<base64-encoded-document>",
             "type": "ProofOfAddress"
           }
         ]
       }'
  ```
</CodeGroup>

<Warning>
  **US citizens and residents must include `tax_identification_number`.** Provide the customer's Social Security Number (SSN) or Individual Taxpayer Identification Number (ITIN). A US person submitted without it fails with `400` and the message `Tax identification number is required for US residents`.
</Warning>

<Note>
  `tax_identification_number` is a separate top-level field from `identity.identity_number`. Put the number from the ID document (passport or license) in `identity.identity_number`, and the SSN or ITIN in `tax_identification_number`. Set `identity.identity_country_code` to the customer's country (`US` for US persons) so the requirement is applied. Dashes are allowed: `123-45-6789` and `123456789` are equivalent.
</Note>

#### KYB

<CodeGroup>
  ```bash theme={null}
  curl --request POST \
       --header 'accept: application/json; charset=utf-8' \
       --header 'Idempotency-Key: <unique-request-id>' \
       --header 'x-api-key: <your-api-key>' \
       --url 'https://api.sandbox.iron.xyz/api/customers/<customer_id>/identifications/v2' \
       --data-raw '{
         "type": "Business",
         "phone": "+12125559876",
         "ip_address": "203.0.113.42",
         "company_data": {
           "company_info": {
             "company_name": "Acme Corp",
             "registration_number": "7086953",
             "country": "US",
             "incorporation_date": "2021-01-15",
             "legal_address": "123 Commerce St, Suite 100, Anytown, CA 12345",
             "postal_address": "PO Box 456, Anytown, CA 12345",
             "address": {
               "street_1": "123 Commerce St",
               "street_2": "Suite 100",
               "city": "Anytown",
               "state": "CA",
               "zip_code": "12345",
               "country": "US"
             },
             "email": "info@acmecorp.com",
             "tax_identification_number": "12-3456789",
             "website": "https://www.acmecorp.com",
             "company_type": "LimitedLiabilityCompany"
           },
           "beneficiaries": [
             {
               "roles": ["UltimateBeneficialOwner", "Director"],
               "share_percentage": "50.00",
               "beneficiary_info": {
                 "type": "Person",
                 "first_name": "John",
                 "last_name": "Smith",
                 "date_of_birth": "1990-01-01",
                 "email_address": "john@acmecorp.com",
                 "phone_number": "+12125551234",
                 "tax_identification_number": "123-45-6789",
                 "tax_jurisdiction_country_code": "US",
                 "birth_place": {
                   "place": "Anytown",
                   "state": "CA",
                   "country": "US"
                 },
                 "address": {
                   "street_1": "456 Elm St",
                   "city": "Anytown",
                   "state": "CA",
                   "zip_code": "12345",
                   "country": "US"
                 },
                 "identity": {
                   "identity_country_code": "US",
                   "identity_document_type": "DriverLicense",
                   "identity_document_front": "<base64-encoded-image>",
                   "identity_document_back": "<base64-encoded-image>",
                   "selfie": "<base64-encoded-image>",
                   "selfie_collected_at": "2026-07-01T12:00:00Z",
                   "nationality": "US"
                 }
               }
             }
           ],
           "documents": [
             {
               "type": "IncorporationCert",
               "country": "US",
               "file": "<base64-encoded-document>"
             },
             {
               "type": "IncorporationArticles",
               "country": "US",
               "file": "<base64-encoded-document>"
             }
           ]
         },
         "questionnaire": {
           "type": "Generic",
           "planned_activities": {
             "purpose_and_intended_use": "ReceivingBusinessIncome",
             "estimated_monthly_volume": "FiftyToOneHundredThousand",
             "estimated_monthly_transactions": "TenToTwentyFive",
             "sends_funds_on_customer_behalf": false
           },
           "source_of_funds": {
             "source_of_funds": "BusinessRevenue",
             "source_of_funds_description": "Revenue from enterprise analytics subscriptions",
             "customer_funds_handling_details": "Receives payments into its own account only; does not hold or transmit customer funds"
           },
           "business_details": {
             "industry_type": "InformationTechnologyAndSoftware",
             "business_model_description": "SaaS platform providing analytics tools to enterprise clients",
             "main_business_countries": ["US", "GB"],
             "has_licenses_or_registrations": true,
             "requires_aml_program": false,
             "estimated_annual_revenue": "From1MTo10M"
           }
         }
       }'
  ```
</CodeGroup>

##### Sole proprietor variants

For sole proprietorships, set `company_type` to `"SoleProprietorship"` and `questionnaire.type` to `"SoleProp"`. The proprietor is submitted as a single beneficiary with the `UltimateBeneficialOwner` role at 100% share. See [Sole Proprietor Onboarding](/kyb#sole-proprietor-onboarding) for the full data breakdown.

<AccordionGroup>
  <Accordion title="US sole proprietor">
    ```json theme={null}
    {
      "type": "Business",
      "phone": "+12175550100",
      "ip_address": "203.0.113.42",
      "company_data": {
        "company_info": {
          "company_name": "Jane's Consulting",
          "alternative_names": null,
          "registration_number": "DBA-12345678",
          "country": "US",
          "incorporation_date": "2020-01-15",
          "legal_address": "123 Main St, Springfield, IL 62701",
          "postal_address": "123 Main St, Springfield, IL 62701",
          "address": {
            "street_1": "123 Main St",
            "street_2": null,
            "city": "Springfield",
            "state": "IL",
            "zip_code": "62701",
            "country": "US"
          },
          "email": "jane@janesconsulting.com",
          "tax_identification_number": "12-3456789",
          "website": "https://janesconsulting.com",
          "company_type": "SoleProprietorship"
        },
        "beneficiaries": [
          {
            "roles": ["UltimateBeneficialOwner"],
            "share_percentage": 100,
            "beneficiary_info": {
              "type": "Person",
              "first_name": "Jane",
              "middle_name": null,
              "last_name": "Doe",
              "date_of_birth": "1985-06-15",
              "tax_identification_number": "123-45-6789",
              "address": {
                "street_1": "123 Main St",
                "street_2": null,
                "city": "Springfield",
                "state": "IL",
                "zip_code": "62701",
                "country": "US"
              },
              "email_address": "jane@janesconsulting.com",
              "phone_number": "+12175550100",
              "tax_jurisdiction_country_code": "US",
              "birth_place": { "place": "Chicago", "state": "IL", "country": "US" },
              "identity": {
                "identity_country_code": "US",
                "identity_number": null,
                "identity_document_type": "Passport",
                "identity_document_front": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAFklEQVR42mP4z8BAEmIY1TCqYfhqAACQ+f8B8u7oVwAAAABJRU5ErkJggg==",
                "identity_document_back": null,
                "nationality": "US"
              }
            }
          }
        ],
        "documents": [
          {
            "type": "IncorporationCert",
            "country": "US",
            "file": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAFklEQVR42mP4f+A0SYhhVMOohuGrAQDBXYofzKX3pgAAAABJRU5ErkJggg=="
          }
        ]
      },
      "questionnaire": {
        "type": "SoleProp",
        "planned_activities": {
          "purpose_and_intended_use": "ReceivingBusinessIncome",
          "estimated_monthly_volume": "TenToTwentyFiveThousand",
          "estimated_monthly_transactions": "LessThanTen"
        },
        "source_of_funds": { "source_of_funds": "BusinessRevenue" },
        "business_details": {
          "industry_type": "LegalAndProfessionalServices",
          "business_model_description": "Independent consulting services for small businesses",
          "main_business_countries": ["US"],
          "estimated_annual_revenue": "Under100K"
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Non-US sole proprietor (UK)">
    ```json theme={null}
    {
      "type": "Business",
      "phone": "+442071234567",
      "ip_address": "203.0.113.42",
      "company_data": {
        "company_info": {
          "company_name": "Jane's Consulting Ltd",
          "alternative_names": null,
          "registration_number": "SC123456",
          "country": "GB",
          "incorporation_date": "2020-01-15",
          "legal_address": "10 Downing Street, London, SW1A 2AA",
          "postal_address": "10 Downing Street, London, SW1A 2AA",
          "address": {
            "street_1": "10 Downing Street",
            "street_2": null,
            "city": "London",
            "state": "London",
            "zip_code": "SW1A 2AA",
            "country": "GB"
          },
          "email": "jane@janesconsulting.co.uk",
          "tax_identification_number": "GB123456789",
          "website": "https://janesconsulting.co.uk",
          "company_type": "SoleProprietorship"
        },
        "beneficiaries": [
          {
            "roles": ["UltimateBeneficialOwner"],
            "share_percentage": 100,
            "beneficiary_info": {
              "type": "Person",
              "first_name": "Jane",
              "middle_name": null,
              "last_name": "Doe",
              "date_of_birth": "1985-06-15",
              "tax_identification_number": "GB987654321",
              "address": {
                "street_1": "10 Downing Street",
                "street_2": null,
                "city": "London",
                "state": null,
                "zip_code": "SW1A 2AA",
                "country": "GB"
              },
              "email_address": "jane@janesconsulting.co.uk",
              "phone_number": "+442071234567",
              "tax_jurisdiction_country_code": "GB",
              "birth_place": { "place": "Manchester", "state": "England", "country": "GB" },
              "identity": {
                "identity_country_code": "GB",
                "identity_number": null,
                "identity_document_type": "Passport",
                "identity_document_front": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAFklEQVR42mP4z8BAEmIY1TCqYfhqAACQ+f8B8u7oVwAAAABJRU5ErkJggg==",
                "identity_document_back": null,
                "nationality": "GB"
              },
              "proof_of_address": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAFUlEQVR42mNgYPhPIhrVMKph2GoAAJLb/wHQPqPSAAAAAElFTkSuQmCC"
            }
          }
        ],
        "documents": [
          {
            "type": "IncorporationCert",
            "country": "GB",
            "file": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAFklEQVR42mP4f+A0SYhhVMOohuGrAQDBXYofzKX3pgAAAABJRU5ErkJggg=="
          }
        ]
      },
      "questionnaire": {
        "type": "SoleProp",
        "planned_activities": {
          "purpose_and_intended_use": "ReceivingBusinessIncome",
          "estimated_monthly_volume": "TenToTwentyFiveThousand",
          "estimated_monthly_transactions": "LessThanTen"
        },
        "source_of_funds": { "source_of_funds": "BusinessRevenue" },
        "business_details": {
          "industry_type": "LegalAndProfessionalServices",
          "business_model_description": "Independent consulting services for small businesses",
          "main_business_countries": ["GB"],
          "estimated_annual_revenue": "Under100K"
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

See the createCustomerIdentification endpoint for more details on each parameter.

## Triggering EDD

To proactively trigger Enhanced Due Diligence for a customer (e.g. high-volume or high-risk jurisdiction), include the `edd_questionnaire` object in your Person params. This initializes the identification with the full EDD flow, including Source of Wealth proof collection. The upload field is named `source_of_funds_proof` for legacy reasons: it carries the Source of Wealth document. See [Source of Wealth](/source-of-wealth) for accepted documents.

<CodeGroup>
  ```json theme={null}
  {
    "type": "Person",
    "first_name": "John",
    "last_name": "Smith",
    "full_name": "John Smith",
    "edd_questionnaire": {
      "occupation": "FinancialServices",
      "approximate_net_worth": "Between100001And300000",
      "source_of_funds_proof": "<base64-encoded-document>"
    }
  }
  ```
</CodeGroup>

| Field                   | Values                                                                                                                                                     |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `occupation`            | `Agriculture`, `ArtsAndEntertainment`, `Construction`, `Education`, `FinancialServices`, `InformationAndTechnology`, `Retail`, `RealEstate`, `Other`       |
| `approximate_net_worth` | `UpTo25000`, `Between25001And50000`, `Between50001And100000`, `Between100001And300000`, `Between300001And500000`, `Between500001And1000000`, `Over1000001` |
| `source_of_funds_proof` | Base64-encoded Source of Wealth proof (jpg, png, pdf, doc, docx, xls, xlsx, odt, ods, txt). Max 10 MB.                                                     |

When `edd_questionnaire` is provided, `with_edd` is set to `true` on the identification response. See [Tracking EDD Status](/onboarding#tracking-edd-status) for how to interpret the identification status with EDD.

<Note>
  EDD is only available for individual customers (KYC). Business customers (KYB) are not supported.
</Note>
