# CheckCreate

[[Source]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/CreateCheck.cpp)

Create an on-ledger [check](/docs/concepts/payment-types/checks), which is a deferred payment that can be cashed by its intended destination. The sender of this transaction is the sender of the check.

Checks
## Example  JSON


```json
{
  "TransactionType": "CheckCreate",
  "Account": "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo",
  "Destination": "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy",
  "SendMax": "100000000",
  "Expiration": 570113521,
  "InvoiceID": "6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B",
  "DestinationTag": 1,
  "Fee": "12"
}
```

##  Fields

In addition to the [common fields](/docs/references/protocol/transactions/common-fields),  transactions use the following fields:

| Field | JSON Type | [Internal Type](/docs/references/protocol/binary-format) | Description |
|  --- | --- | --- | --- |
| `Destination` | String | AccountID | The unique address of the [account](/docs/concepts/accounts) that can cash the Check. |
| `SendMax` | [Currency Amount](/docs/references/protocol/data-types/basic-data-types#specifying-currency-amounts) | Amount | Maximum amount of source currency the Check is allowed to debit the sender, including [transfer fees](/docs/concepts/tokens/fungible-tokens/transfer-fees) on non-XRP currencies. The Check can only credit the destination with the same currency (from the same issuer, for non-XRP currencies). For non-XRP amounts, the nested field names MUST be lower-case. |
| `DestinationTag` | Number | UInt32 | *(Optional)* Arbitrary tag that identifies the reason for the Check, or a hosted recipient to pay. |
| `Expiration` | Number | UInt32 | *(Optional)* Time after which the Check is no longer valid, in [seconds since the Ripple Epoch](/docs/references/protocol/data-types/basic-data-types#specifying-time). |
| `InvoiceID` | String | UInt256 | *(Optional)* Arbitrary 256-bit hash representing a specific reason or identifier for this Check. |


## Error Cases

Besides errors that can occur for all transactions,  transactions can result in the following [transaction result codes](/docs/references/protocol/transactions/transaction-results):

| Error Code | Description |
|  --- | --- |
| `tecNO_PERMISSION` | The `Destination` account is blocking incoming Checks.  |
| `temREDUNDANT` | The `Destination` is the sender of the transaction. |
| `tecNO_DST` | The `Destination` [account](/docs/concepts/accounts) does not exist in the ledger. |
| `tecDST_TAG_NEEDED` | The `Destination` account has the `RequireDest` flag enabled but the transaction does not include a `DestinationTag` field. |
| `tecFROZEN` | `SendMax` specifies a token which is [frozen](/docs/concepts/tokens/fungible-tokens/freezes). |
| `tecEXPIRED` | The `Expiration` of the transaction is in the past. |
| `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [owner reserve](/docs/concepts/accounts/reserves#owner-reserves) after adding the Check. |
| `tecDIR_FULL` | Either the sender or the destination of the Check cannot own more objects in the ledger.This error is effectively impossible to receive if  is enabled. |


## See Also

- [Check entry](/docs/references/protocol/ledger-data/ledger-entry-types/check)