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

# Partner Quickstart

> Build your first verification workflow.

A verification follows five steps:

1. Create or reuse a user.
2. Order a verification.
3. Start a session when the user needs to connect an account.
4. Listen for verification status changes.
5. Retrieve the completed report.

This Quickstart uses a payroll `voie` verification as the example. The same lifecycle applies to the other [verification types](/partners/overview#verification-types).

## Before you begin

* Use the Sandbox API credentials for your partner integration.
* Use the Sandbox base URL: `https://api-sandbox.argyle.com/partners/v2`.
* Send API requests from your backend using [HTTP basic authentication](/verifications/platform-partners#authentication).
* Set up [partner webhook handling](/verifications/platform-partners#webhooks), then subscribe to the [`verifications.updated`](/api-reference/partners-webhooks/updated) webhook before testing the complete workflow.

<a id="create-a-user" />

## Create or reuse a user

Your Argyle Customer Success Manager will provide a `client` ID for each customer. Include it when creating the user so their records are associated with the correct customer. The `client` identifies the organization, not the person sharing information.

If the person already has an Argyle user for the same customer, reuse that user ID across payroll, banking, and document workflows. Otherwise, [create a user](/api-reference/partners-verifications/create-a-user) and store the returned ID with your internal record.

Before adding another product, [update the existing user](/api-reference/partners-verifications/update-a-user) with any missing details required by that product. Use the same user ID when ordering the verification.

Required user details depend on the verification type:

| Field          | Payroll      | Banking                                    | Doc VOI      |
| -------------- | ------------ | ------------------------------------------ | ------------ |
| `first_name`   | Required     | Required                                   | Required     |
| `last_name`    | Required     | Required                                   | Required     |
| `ssn`          | Not required | Required if `birth_date` is not provided   | Required     |
| `birth_date`   | Not required | Required if `ssn` is not provided          | Not required |
| `address`      | Not required | Required                                   | Not required |
| `email`        | Not required | Required if `phone_number` is not provided | Not required |
| `phone_number` | Not required | Required if `email` is not provided        | Not required |

```json theme={}
{
  "client": "39096494-45c8-4fd8-9454-3d1cb2d62db7",
  "external_metadata": {
    "suppress_verification": true
  },
  "first_name": "Jane",
  "last_name": "Doe",
  "ssn": "000-00-0000",
  "email": "jane@example.com",
  "phone_number": "+15555555555",
  "address": {
    "city": "New York",
    "line1": "123 Main St",
    "line2": null,
    "state": "NY",
    "country": "US",
    "postal_code": "10001"
  },
  "birth_date": {
    "year": 1990,
    "month": 1,
    "day": 13
  }
}
```

Store the returned user `id`. The user ID is required when ordering the verification.

<Note>
  Set `external_metadata.suppress_verification` to `true` to prevent an automatic payroll verification when creating the user. Then explicitly order the verification you need.
</Note>

## Order a verification

Use [`POST /partners/v2/verifications`](/api-reference/partners-verifications/order-a-verification). Set `report.type` to the required report type.

```jsonc theme={}
{
  "user": "018051aa-f7a9-a0db-2f38-6cfa325e9d69",
  "configuration": {
    "notified_recipients": [
      "john.doe@mortgage.com"
    ]
  },
  "report": {
    "type": "voie"
  },
  "loan": {      // Optional
    "number": "1234",
    "borrower_id": "ABC789",
    "application_id": "2121313",
    "officer_email": "john.doe@mortgage.com"
  },
  "billing": {      // Optional
    "cost_center": "5"
  }
}
```

Store the returned verification `id`. Use the type-specific guides for additional request fields and examples:

* [Payroll](/partners/verification-types/payroll)
* [Banking](/partners/verification-types/banking)
* [Doc VOI](/partners/verification-types/document-voi)

## Create a session

Payroll and banking verifications require a session when the user needs to connect an account. Doc VOI uses [document uploads](/partners/verification-types/document-voi#upload-documents) instead.

The verification must be active. An active verification is not completed or cancelled.

### Embedded session

Use [`POST /partners/v2/sessions`](/api-reference/partners-verifications/create-a-session) with the verification ID. Session links expire after one hour. Create another session for the same active verification when a new link is required.

The session request depends on whether the user is connecting a payroll or financial account.

<AccordionGroup>
  <Accordion title="Payroll request: POST /partners/v2/sessions">
    ```json theme={}
    {
      "verification": "43a2c6c3-1e63-91e5-88e3-f9ab2dcc489b",
      "configuration": {
        "redirect_url": "https://your-application.com/return",
        "flow_id": "12ABCD3E",
        "language": "EN",
        "mobile_app": true
      }
    }
    ```
  </Accordion>

  <Accordion title="Banking request: POST /partners/v2/sessions">
    ```json theme={}
    {
      "verification": "43a2c6c3-1e63-91e5-88e3-f9ab2dcc489b",
      "configuration": {
        "experience": "97f1eccb-241d-4052-8409-fab2dcc489b",
        "single_use_url": false,
        "redirect_url": "https://your-application.com/return"
      }
    }
    ```
  </Accordion>

  <Accordion title="Payroll response">
    ```json theme={}
    {
      "verification": "43a2c6c3-1e63-91e5-88e3-f9ab2dcc489b",
      "configuration": {
        "experience": null,
        "single_use_url": false,
        "redirect_url": "https://your-application.com/return",
        "flow_id": "12ABCD3E",
        "language": "EN",
        "mobile_app": true
      },
      "link": "https://connect.argyle.com/?...",
      "data_source": "payroll"
    }
    ```
  </Accordion>

  <Accordion title="Banking response">
    ```json theme={}
    {
      "verification": "43a2c6c3-1e63-91e5-88e3-f9ab2dcc489b",
      "configuration": {
        "experience": "97f1eccb-241d-4052-8409-fab2dcc489b",
        "single_use_url": false,
        "redirect_url": "https://your-application.com/return"
      },
      "link": "https://connect2.finicity.com?...",
      "data_source": "banking"
    }
    ```
  </Accordion>
</AccordionGroup>

See the [Create a Session endpoint](/api-reference/partners-verifications/create-a-session) for every available request field.

### Invites

To send the user an email, text message, or both, create an invite session with [`POST /partners/v2/sessions`](/api-reference/partners-verifications/create-a-session) and set `type` to `invite`. The user must have at least one active payroll or banking verification.

```json theme={}
{
  "user": "018051aa-f7a9-a0db-2f38-6cfa325e9d69",
  "type": "invite",
  "configuration": {
    "email": "jane.doe@example.com",
    "phone_number": "+15555555555"
  }
}
```

One invite can include one or more active payroll or banking verifications for the same user. Invite links expire after 180 days or when revoked.

<Note>
  For wholesale mortgage implementations, the default wholesale flow is selected when the user has `external_metadata.broker` and `configuration.flow_id` is omitted. A provided `flow_id` takes precedence.
</Note>

## Launch an embedded session

Use the returned session `link` according to the verification's data source.

### Payroll

* Pass `link` as `connectUrl` when initializing the [Web SDK](/link/initialization/web#initialize-with-connecturl) or [Mobile SDKs](/link/initialization/mobile-sdks).
* For Hosted Link, open the URL in a browser context. Hosted Link does not provide Link callbacks.

### Banking

* Pass `link` as `connectURL` when launching the banking SDK.
* Use SDK callbacks for immediate frontend handling and the `verifications.updated` webhook for backend lifecycle tracking.
* See [Banking Verifications](/partners/verification-types/banking#choose-a-session-type) for the SDK example and hosted-session requirements.

## Track status and retrieve the report

Listen for the [`verifications.updated`](/api-reference/partners-webhooks/updated) webhook. When `status.code` is `completed` or `completed_with_errors`, retrieve the report from `report.file_url` or `report.json_url`.

Continue with [Verification Statuses](/partners/verification-statuses).
