> ## 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.

# Ops and Customer Service

> Unblock a stalled customer from the dashboard: read what is outstanding, share a verification link, upload a replacement document, and start enhanced due diligence.

Onboarding a customer is rarely just an API call. Documents get rejected, a customer stalls halfway through verification, compliance asks for source of wealth. Those are support and operations problems, not engineering problems.

The dashboard is built for that. Your support and operations team can see exactly where a customer is stuck, and fix it themselves: share a fresh verification link, upload a replacement document, start enhanced due diligence. No ticket to your engineers, no deploy, no API call.

Everything below is also available programmatically. See [API parity](#api-parity) for the endpoint behind each action.

## Where to work: the Compliance page

[Compliance](/partner-dashboard#compliance) is the queue. Its tabs tell you what kind of problem you have, and clicking any row opens a side panel titled **Compliance Review**, which is where the work happens.

The panel carries the whole picture for one customer:

| Panel section                | What you get                                                                                                                                                     |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Help your customer**       | A ready-to-send message for what is outstanding, with a copy button. On the **EDD** tab it becomes one message per document being asked for.                     |
| **Requirements (beta)**      | Every outstanding item, grouped, with the reject reason on the ones that failed and whether the item is retryable.                                               |
| **Compliance questionnaire** | What the customer submitted: occupation, employment status, source of funds, monthly income, expected monthly volume, intended use. Absent until they submit it. |
| **Identification Details**   | Status, residence country, an **Enhanced due diligence** row, and the customer and identification IDs.                                                           |

Sections only render when there is something to show, so a customer who has not submitted a questionnaire has no questionnaire card.

The action buttons at the bottom of the panel are the same in every tab, which is why the workflow below barely changes between cases.

## Help a customer finish onboarding

<Steps>
  <Step title="Find them">
    Open **Compliance** and start on the **Incomplete** tab. These customers started but have not submitted everything, so there is nothing for compliance to review yet.

    <Accordion title="Screenshot: the Incomplete tab">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-1-finish-onboarding/01-incomplete-tab.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=88371712a76d6f868d54ac54f6d949e3" alt="Compliance page on the Incomplete tab, listing two customers with ID, name, email and created date" width="1600" height="1000" data-path="images/clips/compliance-help-1-finish-onboarding/01-incomplete-tab.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="See what is missing">
    Click the row. Read **Requirements (beta)** in the panel: it names each outstanding item rather than just saying the customer is incomplete.

    <Accordion title="Screenshot: outstanding requirements in the panel">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-1-finish-onboarding/02-outstanding-requirements.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=9e4c31b2cc6e42e58347cfcf665e219c" alt="Compliance Review panel showing Requirements with proof of residence and KYC questionnaire marked Missing and an identity document marked Pending Review" width="1600" height="1000" data-path="images/clips/compliance-help-1-finish-onboarding/02-outstanding-requirements.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Send them a link">
    Click **KYC & Terms link**. This opens the **Generate onboarding link** dialog, and confirming mints a link covering verification and terms signing and copies it to your clipboard, so you can paste it into whatever channel you already use with that customer.

    Tick **Email the link to the customer** in the dialog if you would rather MoonPay Enterprise send it to them directly. The link is copied either way, so you can do both.

    <Accordion title="Screenshot: the Generate onboarding link dialog">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-1-finish-onboarding/03-generate-onboarding-link.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=e65680620980a8305e9f6493db57cf45" alt="Generate onboarding link dialog with a checkbox to email the link to the customer, and Cancel and Generate link buttons" width="1600" height="1000" data-path="images/clips/compliance-help-1-finish-onboarding/03-generate-onboarding-link.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Reuse it later">
    Once a link exists, the button becomes **Copy KYC & Terms link** and copies the existing one instead of minting a new one. Chasing the same customer twice does not invalidate the link you already sent.

    <Accordion title="Screenshot: the button in copy mode">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-1-finish-onboarding/04-link-copied.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=c9217c7aeae3c0d83463bbf17cdd2b6b" alt="The same panel after minting, with the footer button now reading Copy KYC and Terms link" width="1600" height="1000" data-path="images/clips/compliance-help-1-finish-onboarding/04-link-copied.png" />
      </Frame>
    </Accordion>
  </Step>
</Steps>

## Help a customer whose documents were rejected

<Steps>
  <Step title="Find them">
    Open the **Change Requested** tab. Compliance reviewed these customers and rejected one or more items.

    <Accordion title="Screenshot: the Change Requested tab">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-2-rejected-documents/01-change-requested-tab.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=48ebedd7c376a5a74ae8896c4aee24fb" alt="Compliance page on the Change Requested tab with one customer listed" width="1600" height="1000" data-path="images/clips/compliance-help-2-rejected-documents/01-change-requested-tab.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Read the reason">
    Click the row. The rejected item in **Requirements (beta)** carries its reject reason, for example that screenshots are not accepted and the original photo or scan is needed. Pass that reason on rather than asking the customer to guess.

    <Accordion title="Screenshot: the reject reason on the requirement">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-2-rejected-documents/02-reject-reason.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=92560455be979f99d7b174fab565f6f4" alt="Compliance Review panel with a company documents requirement marked Rejected and Retryable, showing the reject reason that screenshots are not accepted" width="1600" height="1000" data-path="images/clips/compliance-help-2-rejected-documents/02-reject-reason.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Fix it, one of two ways">
    If the item is retryable, send the customer back through with **Copy KYC & Terms link**.

    Or resolve it for them: **Upload documents** in the top right of the Requirements section takes replacement copies directly. It lists the documents that were actually rejected, each with its own review comment and an issuing country, and accepts JPEG, PNG, PDF, WebP, GIF, TIFF, HEIC or HEIF up to 10 MiB. Useful when the customer has already emailed you the document and you would rather not send them round the loop again.

    <Accordion title="Screenshot: the Upload replacement documents dialog">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-2-rejected-documents/03-upload-replacement-documents.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=25a899f781cc1a9fad6d98881d38fecf" alt="Upload replacement documents dialog listing a certificate of incorporation and a shareholder registry, each with its review comment, a file picker and an issuing country" width="1600" height="1000" data-path="images/clips/compliance-help-2-rejected-documents/03-upload-replacement-documents.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Start over if it is terminal">
    If the item is not retryable, **Create new KYC** starts a fresh verification instead. The new identification becomes the customer's active KYC and they start again from the beginning; earlier identifications stay in the history.

    <Accordion title="Screenshot: the Create a new KYC confirmation">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-2-rejected-documents/04-create-new-kyc.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=732f16fa18088df2436bd9077c643a93" alt="Create a new KYC confirmation dialog explaining that the customer must complete verification again from the beginning" width="1600" height="1000" data-path="images/clips/compliance-help-2-rejected-documents/04-create-new-kyc.png" />
      </Frame>
    </Accordion>
  </Step>
</Steps>

<Note>
  **Upload documents** appears only when the outstanding item is a retryable document requirement, and only for team members whose role carries the `UploadIdentificationDocument` permission. If you cannot see the button, either the blocking item is not a document or your role does not allow it. The section is labelled beta.
</Note>

## Help a customer through EDD

Enhanced due diligence means MoonPay Enterprise needs more than standard verification before approving a customer, typically evidence of where their money comes from.

<Steps>
  <Step title="Find them">
    Open the **EDD** tab. Treat it as highest priority: these customers cannot be approved until the extra checks clear.

    <Accordion title="Screenshot: the EDD tab">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-3-edd-queue/01-edd-tab.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=824bdbfcccf89f5703ccb53e682fb7bb" alt="Compliance page on the EDD tab, listing two customers who need enhanced checks before approval" width="1600" height="1000" data-path="images/clips/compliance-help-3-edd-queue/01-edd-tab.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Confirm what is being asked">
    Click the row. **Identification Details** shows a **With EDD** badge on the identification, and the panel's **Help your customer** guidance names what to collect:

    * **Source of wealth**: documents showing where their funds come from
    * **Proof of address**: a recent document showing their name and address

    <Accordion title="Screenshot: the panel for an EDD customer">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-3-edd-queue/02-edd-review-panel.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=bb64c5d12cf04fad473c5d189306a0f8" alt="Compliance Review panel with Help your customer listing proof of address and source of wealth, and an Enhanced due diligence row badged With EDD" width="1600" height="1000" data-path="images/clips/compliance-help-3-edd-queue/02-edd-review-panel.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Guide them through it">
    Expand either guidance item to get a message written for the customer, listing the documents that are accepted and the rules they have to meet, with a copy button next to it. Send that alongside the **KYC & Terms link** button, which takes them into the EDD flow. If they have already emailed you the document, **Upload documents** submits it for them instead.

    <Accordion title="Screenshot: the source of wealth message">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-3-edd-queue/03-source-of-wealth-message.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=0545062618cfe796b344e5812533a36d" alt="The source of wealth guidance expanded into a copyable message listing accepted documents such as payslips, portfolio statements and sale contracts" width="1600" height="1000" data-path="images/clips/compliance-help-3-edd-queue/03-source-of-wealth-message.png" />
      </Frame>
    </Accordion>
  </Step>

  <Step title="Escalate a standard customer into EDD">
    For a customer not yet in EDD, **Trigger EDD** starts the enhanced process. It does not appear for customers already in EDD, because there is nothing to start.

    <Accordion title="Screenshot: the Trigger EDD confirmation">
      <Frame quality="high">
        <img src="https://mintcdn.com/moonpayiron/Gbn4IyeRPgl9crck/images/clips/compliance-help-4-trigger-edd/01-trigger-edd.png?fit=max&auto=format&n=Gbn4IyeRPgl9crck&q=85&s=74308a5a36c9e9778b9743a38546bb8f" alt="Trigger Enhanced Due Diligence confirmation dialog, opened from a standard customer's panel" width="1600" height="1000" data-path="images/clips/compliance-help-4-trigger-edd/01-trigger-edd.png" />
      </Frame>
    </Accordion>
  </Step>
</Steps>

<Note>
  For individuals this is **source of wealth**. `source_of_funds` appears as a questionnaire field name and in business verification, but the evidence being requested of a person is source of wealth.
</Note>

## API parity

Nothing here is dashboard-only guesswork. Each action maps to an endpoint, so you can automate the same workflow once you know which cases are common for your customers.

| In the panel                                  | Endpoint                                                                                                         |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| See what is outstanding                       | `GET /api/customers/{id}/requirements`                                                                           |
| Status, step status, reject comment, EDD flag | `GET /api/identifications/{id}`                                                                                  |
| Mint a verification link to share             | `POST /api/customers/{id}/identifications/v2` with `{ "type": "Link" }`. The response carries the `url` to send. |
| Start EDD                                     | The same call with `"with_edd": true`                                                                            |
| Read the submitted questionnaire              | `GET /api/identifications/{id}/compliance-questionnaire`                                                         |
| Create new KYC                                | `POST /api/customers/{id}/identifications/v2`                                                                    |
| Archive an identification                     | `POST /api/identifications/{id}/archive`                                                                         |
| Terms signing state                           | `GET /api/customers/{id}/required-signings` and `GET /api/customers/{id}/signings`                               |

<Info>
  Two panel actions have no public endpoint today: **Upload documents**, and the combined onboarding link that covers verification and terms signing in one URL. Programmatically, mint a verification link with `identifications/v2` and drive signings through the signings endpoints. Everything else in the table is a direct equivalent.
</Info>

See [Onboarding](/onboarding) for the full API flow, and [Webhooks](/webhooks) to get told when a customer's status changes instead of watching this page.
