# Construction

Moov is your single vendor for payment process efficiency, faster cash access, and simplified compliance.

This guide focuses on the quickest and easiest way to get started with the features of Moov we think you'll find most useful for the construction industry. Verify bank accounts instantly, facilitate multi-party payouts with Moov wallets, and send instant transfers with push to card and RTP payments.

Moov offers a variety of integration options to get started. Use [Drops](/moovjs/drops/) or the [Dashboard](https://dashboard.moov.io/signin) UIs for a low to no-code solution, or choose the [API](/api/) or one of many [SDKs](/sdks/) for more complex integrations.

For the purposes of this guide, we'll provide Dashboard and API examples.

## [Verify bank accounts instantly](#verify-bank-accounts-instantly)

After you've [onboarded](/guides/dashboard/accounts/onboarding-links/) contractors, you can [link bank accounts](/guides/dashboard/settings/payment-methods/).

Verifying linked bank accounts reduces fraud. You can initiate micro-deposit verification to confirm ownership of accounts. Banks that support instant verification will verify micro-deposits in a single session, in real time, via RTP. If a bank doesn't support instant verification, same-day ACH is used as a fallback.

[Get IDs](#tab-548167239-0-0) [Initiate instant micro-deposits](#tab-548167239-0-1)

The easiest way to find a contractor's account ID and bank account ID is in the Dashboard. Search for an account and click on it to open their profile. The account ID can be found under **Business details** and the bank account ID can be found by clicking on the linked bank account under **Payment methods**.

![Account ID in the Dashboard](../../guides/shared-images/account-overview-id.png)

You can also retrieve a [list](/api/moov-accounts/accounts/list/) of accounts and their IDs with the API.

```zsh
curl -X GET "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}"
```

Once you have an account ID, you can retrieve a [list](/api/sources/bank-accounts/list/) of bank account IDs with the API.

```zsh
curl -X GET "https://api.moov.io/accounts/{accountID}/bank-accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

Use the IDs you've retrieved for an account to initiate [instant micro deposit verification](/api/sources/bank-accounts/initiate-bank-account-verification/) through the API.

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/bank-accounts/{bankAccountID}/verify" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

If the bank supports instant verification, the response will show `instant` as the verification method. If instant verification is not supported, the verification method will be `ach`.

```zsh
{
  "status": "new",
  "verificationMethod": "instant"
}
```

Read more on bank account verification in our documentation:

[Bank accounts](/guides/sources/bank-accounts/) [Instant verification](/guides/sources/bank-accounts/verification/instant-micro-deposit/)

## [Facilitate multi-party payments](#facilitate-multi-party-payments)

With Moov wallets, you can facilitate complex money movement scenarios such as multi-party payouts where a contractor is paying out subcontractors. The wallet ledger tracks every debit and credit, automatically correlating transactions to the original payment method.

Transfers between wallets are instant - send funds instantly from your wallet to a contractor's wallet so they can make timely payouts to their subcontractors.

[Dashboard](#tab-927381465-0-0) [cURL](#tab-927381465-0-1)

To create a wallet to wallet transfer in the Dashboard, click the **New transfer** button, select **Payout** and enter the source wallet and destination wallet.

![Transfer detail view in Moov Dashboard](../../guides/shared-images/transfers-view.png)

To create a wallet to wallet transfer with the [API](/api/money-movement/transfers/create/), send the source wallet and destination wallet in the request.

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "X-Idempotency-Key: UUID" \
  -H "X-Wait-For: rail-response" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "amount": {
      "value": 100000,
      "currency": "USD"
    },
    "source": {
      "paymentMethodID": "your-wallet-ID"
    },
    "destination": {
      "paymentMethodID": "contractor-wallet-ID"
    },
    "description": "Optional transaction description."
  }'\
```

[Wallets](/guides/money-movement/wallets/) [Send funds](/guides/money-movement/send-payments/send-funds/)

## [Set up transfer groups](#set-up-transfer-groups)

Transfer groups provide a way to associate multiple transfers together by a shared ID of the parent transfer. Transfer groups make the final beneficiary in a chain of transfers aware of incoming funds before they land in their account.

This also gives you more control over the flow of funds, making reporting and preserving the context of the original transfer easier.

[Get transfer ID](#tab-376892451-0-0) [Create a transfer](#tab-376892451-0-1)

You'll need to retrieve the ID of what you want to be the parent transfer before you can create a transfer group. The easiest way to do this is in the Dashboard. Search for the transfer and click on it to open the transfer page. The transfer ID is listed at the top and you can copy it to your clipboard.

![Transfer ID in the Dashboard](../../guides/shared-images/account-overview-id.png)

You an also retrieve a [list of transfers](/api/money-movement/transfers/list/) with the API which will return the `transferID`.

```zsh
curl -X GET "https://api.moov.io/accounts/{accountID}/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

To create a transfer group, provide a `transferID` as the source when [creating a transfer](/api/money-movement/transfers/create/) with the API.

```
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
```

```json
{
"amount": {
  "value": 100,
  "currency": "USD"
},
"source": {
  "paymentMethodID": "transferID"
},
"destination": {
  "paymentMethodID": "string"
},
"description": "Optional transaction description."
}
```

Read more about transfer groups in our documentation:

[Transfer groups](/guides/money-movement/transfer-groups/)

## [Send instant payments](#send-instant-payments)

Eligible linked bank accounts and cards have access to instant [RTP](/guides/money-movement/send-payments/instant-payments/) and [push to card](/guides/money-movement/send-payments/push-to-card/) payments respectively.

![Standard RTP funds flow diagram](./images/instant-funds-flow-light.png)

### [Check eligibility](#check-eligibility)

Before you create a transfer, you can check if the bank account or card linked to a contractor's account is eligible for instant RTP or push to card payments.

[Push to card](#tab-976485321-1-0) [Instant bank credit](#tab-976485321-1-1)

Use the cards `GET` [endpoint](/api/sources/cards/get/) to check if a card is eligible for push to card. You can find the account ID and card ID in the Dashboard using the same methods [described above](#verify-bank-accounts-instantly) in the Get IDs tab.

```zsh
curl -X GET "https://api.moov.io/accounts/{accountID}/cards" \
  -H 'Authorization: Bearer {token}' \
```

In the response, the `domesticPushToCard` field will describe the push to card timing that is available for the card (if supported):

| Timing          | Description                                                                                                                                                       |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `fast-funds`    | Funds will be available to the destination within 30 minutes or less of the authorization.                                                                        |
| `standard`      | Fast funds is not supported on this card. Transfer will follow standard card settlement [timing](/guides/money-movement/accept-payments/card-acceptance/timing/). |
| `not-supported` | This card is ineligible for push-to-card payments. Contact your issuer for more details.                                                                          |
| `unknown`       | Eligibility has not been checked or is unknown.                                                                                                                   |

A push transfer can be created when the source is a pre-funded Moov wallet and the destination is a recipient with a linked card and the `transfers` [capability](/guides/accounts/capabilities/).

When a bank account is linked, Moov checks its eligibility to receive payments on the RTP network (FedNow support coming soon) and creates the `instant-bank-credit` payment method automatically.

To use instant bank credit, accounts must have the `send-funds.instant-bank` and `wallet.balance` [capabilities](/guides/accounts/capabilities/) enabled.

Read more about instant payments in our documentation:

[Push to card](/guides/money-movement/send-payments/push-to-card/) [RTP](/guides/money-movement/send-payments/instant-payments/)

## [Set metadata](#set-metadata)

You can store free-form metadata on transfers, such as invoice numbers or correlation IDs. You can use this metadata to reconcile and correlate payments in your system. In addition to setting metadata when creating a transfer, you can also update metadata after a transfer has initiated or completed.

[Dashboard](#tab-362185947-0-0) [cURL](#tab-362185947-0-1)

When creating a transfer in the Dashboard, open the **Advanced settings** to enter metadata.

![Metadata](../../guides/shared-images/metadata.png)

When creating a transfer in the API, enter the metadata you want in your request.

```zsh
...
"metadata": {
  "property1": "string",
  "property2": "string"
},
...
```

Read more about metadata in our API documentation:

[Update metadata](/api/money-movement/transfers/patch/)

## [Other resources](#other-resources)

[Test mode](/guides/get-started/test-mode/) [Dashboard](/guides/dashboard/) [Webhooks](/guides/webhooks/) [API](/api/) [SDKs](/sdks/)
