# Manage virtual cards with controls test cases
source: https://developer.mastercard.com/business-payment-controls/documentation/testing/manage-virtual-cards-with-controls/index.md

### Test data: Register a virtual card {#test-data-register-a-virtual-card}

**POST**/virtual-card-accounts

#### Positive sample response {#positive-sample-response}

Success: Virtual card registered

HTTP code `2xx`

**Payload**

```json
{
  "accountGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "expiry": "2021-11",
  "billingCurrency": "825",
  "active": true,
  "createdDate": "2020-10-06T11:09:42.10+01:00",
  "lastUpdateDate": "2020-10-06T11:09:42.10+01:00",
  "applicationSource": "iccp",
  "fundingSourceGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "ownerGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "cvc": "123",
  "rules": {
    "accountControl": {
      "action": "APPROVE",
      "alias": "Account Service Rule",
      "cardLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "monthlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "dailyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "weeklyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "quarterlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "yearlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "countryCodes": ["001"],
      "merchantCategoryCodes": ["840"],
      "startDate": "2020-10-06T11:09:42.10+01:00",
      "endDate": "2021-10-06T11:09:42.10+01:00"
    },
    "inControlRules": [
      {
        "action": "APPROVE",
        "alias": "alias",
        "transactionLimits": [
          {
            "amount": 12,
            "negate": true
          }
        ],
        "geographies": [
          {
            "negate": true
          }
        ],
        "velocities": [
          {
            "maxTrans": 12,
            "cumulativeLimit": 1200,
            "period": "DAILY",
            "availableBalance": 1200,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "endDate": "2020-10-06T11:09:42.10+01:00",
            "negate": true
          }
        ],
        "validityPeriods": [
          {
            "from": "2020-10-06T11:09:42.10+01:00",
            "to": "2020-11-06T11:09:42.10+01:00",
            "strictPreAuthCheck": true,
            "negate": true
          }
        ],
        "amountRanges": [
          {
            "minAmount": 1000,
            "maxAmount": 10000,
            "strictPreAuthCheck": true,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "acceptorIds": [
          {
            "acceptorId": "123456789012345",
            "acquirerId": "3",
            "negate": true
          }
        ],
        "ageingVelocities": [
          {
            "authorizationHoldDays": 1234,
            "cumulativeLimit": 1000,
            "timeZone": "UTC-06:00",
            "availableBalance": 1000,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "curfews": [
          {
            "fromTime": "08:20",
            "toTime": "18:20",
            "timeZone": "UTC",
            "daysOfWeek": "SUNDAY",
            "negate": true
          }
        ],
        "timeOfDays": [
          {
            "times": [
              {
                "day": "SUNDAY",
                "fromTime": "08:21",
                "toTime": "21:00"
              }
            ],
            "timeZone": "UTC",
            "negate": true
          }
        ],
        "merchantCategoryCodes": [
          {
            "negate": true,
            "mccs": "[1234, 5678]"
          }
        ]
      }
    ]
  },
  "transactionTolerances": [
    {
      "currencyCode": "825",
      "cumulativeTolerancePercent": 1234,
      "txTolerancePercent": 1234,
      "cumulativeToleranceMin": 1234,
      "txTolerancePercentMin": 1234,
      "cumulativeToleranceMax": 1234,
      "txTolerancePercentMax": 1234
    }
  ],
  "unmaskedAccountNumber": true,
  "accountNumber": "123456789123456789"
}
```

#### Negative sample response {#negative-sample-response}

Fail: Alias required

HTTP code `4xx`

**Payload**

```json
{
  "Errors": [
    {
      "Error": [
        {
          "Source": "account-service",
          "ReasonCode": "field.required",
          "Recoverable": false,
          "Details": "rules.inControlRules[0].alias"
        }
      ]
    }
  ]
}
```

### Test data: Retrieve virtual card account details using search parameters {#test-data-retrieve-virtual-card-account-details-using-search-parameters}

**POST**/virtual-card-accounts/searches

#### Positive sample response {#positive-sample-response}

Success: Virtual card account details retrieved

HTTP code `2xx`

**Payload**

```json
{
  "accountGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "expiry": "2021-11",
  "billingCurrency": "825",
  "active": true,
  "createdDate": "2020-10-06T11:09:42.10+01:00",
  "lastUpdateDate": "2020-10-06T11:09:42.10+01:00",
  "applicationSource": "iccp",
  "fundingSourceGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "ownerGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "corpGuid": "CORP1234",
  "issuerGuid": "ISSUER1234",
  "unmaskedAccountNumber": true,
  "accountNumber": "123456789123456789"
}
```

#### Negative sample response {#negative-sample-response}

Fail: Issuer GUID required

HTTP code `4xx`

**Payload**

```json
{
  "Errors": [
    {
      "Error": [
        {
          "Source": "account-service",
          "ReasonCode": "resource.not.found",
          "Description": "Resource not found",
          "Recoverable": false,
          "Details": "guid"
        }
      ]
    }
  ]
}
```

### Test data: Retrieve virtual card account details by GUID {#test-data-retrieve-virtual-card-account-details-by-guid}

**GET**/virtual-card-accounts/{account_guid}

#### Positive sample response {#positive-sample-response-1}

Success: Virtual card account details retrieved

HTTP code `2xx`

**Payload**

```json
{
  "accountGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "expiry": "2021-11",
  "billingCurrency": "825",
  "active": true,
  "createdDate": "2020-10-06T11:09:42.10+01:00",
  "lastUpdateDate": "2020-10-06T11:09:42.10+01:00",
  "applicationSource": "iccp",
  "fundingSourceGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "ownerGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "cvc": "123",
  "rules": {
    "accountControl": {
      "action": "APPROVE",
      "alias": "Account Service Rule",
      "cardLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "monthlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "dailyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "weeklyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "quarterlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "yearlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "countryCodes": ["001"],
      "merchantCategoryCodes": ["840"],
      "startDate": "2020-10-06T11:09:42.10+01:00",
      "endDate": "2021-10-06T11:09:42.10+01:00"
    },
    "inControlRules": [
      {
        "action": "APPROVE",
        "alias": "alias",
        "transactionLimits": [
          {
            "amount": 12,
            "negate": true
          }
        ],
        "geographies": [
          {
            "negate": true
          }
        ],
        "velocities": [
          {
            "maxTrans": 12,
            "cumulativeLimit": 1200,
            "period": "DAILY",
            "availableBalance": 1200,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "endDate": "2020-10-06T11:09:42.10+01:00",
            "negate": true
          }
        ],
        "validityPeriods": [
          {
            "from": "2020-10-06T11:09:42.10+01:00",
            "to": "2020-11-06T11:09:42.10+01:00",
            "strictPreAuthCheck": true,
            "negate": true
          }
        ],
        "amountRanges": [
          {
            "minAmount": 1000,
            "maxAmount": 10000,
            "strictPreAuthCheck": true,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "acceptorIds": [
          {
            "acceptorId": "123456789012345",
            "acquirerId": "3",
            "negate": true
          }
        ],
        "ageingVelocities": [
          {
            "authorizationHoldDays": 1234,
            "cumulativeLimit": 1000,
            "timeZone": "UTC-06:00",
            "availableBalance": 1000,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "curfews": [
          {
            "fromTime": "08:20",
            "toTime": "18:20",
            "timeZone": "UTC",
            "daysOfWeek": "SUNDAY",
            "negate": true
          }
        ],
        "timeOfDays": [
          {
            "times": [
              {
                "day": "SUNDAY",
                "fromTime": "08:21",
                "toTime": "21:00"
              }
            ],
            "timeZone": "UTC",
            "negate": true
          }
        ],
        "merchantCategoryCodes": [
          {
            "negate": true,
            "mccs": "[1234, 5678]"
          }
        ]
      }
    ]
  },
  "transactionTolerances": [
    {
      "currencyCode": "825",
      "cumulativeTolerancePercent": 1234,
      "txTolerancePercent": 1234,
      "cumulativeToleranceMin": 1234,
      "txTolerancePercentMin": 1234,
      "cumulativeToleranceMax": 1234,
      "txTolerancePercentMax": 1234
    }
  ],
  "unmaskedAccountNumber": true,
  "accountNumber": "123456789123456789"
}
```

#### Negative sample response {#negative-sample-response-1}

Fail: Account GUID required

HTTP code `4xx`

**Payload**

```json
{
  "Errors": [
    {
      "Error": [
        {
          "Source": "account-service",
          "ReasonCode": "resource.not.found",
          "Description": "Resource not found",
          "Recoverable": false,
          "Details": "account guid"
        }
      ]
    }
  ]
}
```

### Test data: Update virtual card account {#test-data-update-virtual-card-account}

**PUT**/virtual-card-accounts/{account_guid}

#### Positive sample response {#positive-sample-response-2}

Success: Virtual card account updated

HTTP code `2xx`

**Payload**

```json
{
  "accountGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "expiry": "2021-11",
  "billingCurrency": "825",
  "active": true,
  "createdDate": "2020-10-06T11:09:42.10+01:00",
  "lastUpdateDate": "2020-10-06T11:09:42.10+01:00",
  "applicationSource": "iccp",
  "fundingSourceGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "ownerGuid": "SENTTY13379505AC33CDA796BCBE850EADAF625FAD6B071E8D100CB1ECBEA76AD402DE1519037869",
  "cvc": "123",
  "rules": {
    "accountControl": {
      "action": "APPROVE",
      "alias": "Account Service Rule",
      "cardLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "monthlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "dailyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "weeklyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "quarterlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "yearlyLimit": {
        "cardAmount": 500,
        "authorisationCount": 10
      },
      "countryCodes": ["001"],
      "merchantCategoryCodes": ["840"],
      "startDate": "2020-10-06T11:09:42.10+01:00",
      "endDate": "2021-10-06T11:09:42.10+01:00"
    },
    "inControlRules": [
      {
        "action": "APPROVE",
        "alias": "alias",
        "transactionLimits": [
          {
            "amount": 12,
            "negate": true
          }
        ],
        "geographies": [
          {
            "negate": true
          }
        ],
        "velocities": [
          {
            "maxTrans": 12,
            "cumulativeLimit": 1200,
            "period": "DAILY",
            "availableBalance": 1200,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "endDate": "2020-10-06T11:09:42.10+01:00",
            "negate": true
          }
        ],
        "validityPeriods": [
          {
            "from": "2020-10-06T11:09:42.10+01:00",
            "to": "2020-11-06T11:09:42.10+01:00",
            "strictPreAuthCheck": true,
            "negate": true
          }
        ],
        "amountRanges": [
          {
            "minAmount": 1000,
            "maxAmount": 10000,
            "strictPreAuthCheck": true,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "acceptorIds": [
          {
            "acceptorId": "123456789012345",
            "acquirerId": "3",
            "negate": true
          }
        ],
        "ageingVelocities": [
          {
            "authorizationHoldDays": 1234,
            "cumulativeLimit": 1000,
            "timeZone": "UTC-06:00",
            "availableBalance": 1000,
            "currencyType": "MERCHANT",
            "currencyCode": "825",
            "negate": true
          }
        ],
        "curfews": [
          {
            "fromTime": "08:20",
            "toTime": "18:20",
            "timeZone": "UTC",
            "daysOfWeek": "SUNDAY",
            "negate": true
          }
        ],
        "timeOfDays": [
          {
            "times": [
              {
                "day": "SUNDAY",
                "fromTime": "08:21",
                "toTime": "21:00"
              }
            ],
            "timeZone": "UTC",
            "negate": true
          }
        ],
        "merchantCategoryCodes": [
          {
            "negate": true,
            "mccs": "[1234, 5678]"
          }
        ]
      }
    ]
  },
  "transactionTolerances": [
    {
      "currencyCode": "825",
      "cumulativeTolerancePercent": 1234,
      "txTolerancePercent": 1234,
      "cumulativeToleranceMin": 1234,
      "txTolerancePercentMin": 1234,
      "cumulativeToleranceMax": 1234,
      "txTolerancePercentMax": 1234
    }
  ],
  "unmaskedAccountNumber": true,
  "accountNumber": "123456789123456789"
}
```

#### Negative sample response {#negative-sample-response-2}

Fail: Funding source GUID not found

HTTP code `4xx`

**Payload**

```json
{
  "Errors": [
    {
      "Error": [
        {
          "Source": "account-service",
          "ReasonCode": "resource.not.found",
          "Description": "Resource not found",
          "Recoverable": false,
          "Details": "funding source guid"
        }
      ]
    }
  ]
}
```

### Test data: Delete a virtual card account by account GUID {#test-data-delete-a-virtual-card-account-by-account-guid}

**DELETE**/virtual-card-accounts/{account_guid}

#### Positive sample response {#positive-sample-response-3}

Success: Virtual card deleted

HTTP code `204 No content`

#### Negative sample response {#negative-sample-response-3}

Fail: Account GUID not found

HTTP code `4xx`

**Payload**

```json
{
  "Errors": [
    {
      "Error": [
        {
          "Source": "account-service",
          "ReasonCode": "resource.not.found",
          "Description": "Resource not found",
          "Recoverable": false,
          "Details": "guid"
        }
      ]
    }
  ]
}
```

