# Venmo
> AVAILABILITY
Venmo is available for supported iOS and Android devices that allows for convenient mobile purchasing.
For more details on compatibility and availability, see our [Venmo support article](https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#availability).
## Getting started
If you don't already accept Venmo, you'll need to follow these steps to add a Venmo to your existing Braintree integration:
* Configure Venmo
* Integrate on your servers
### Configure Venmo
If you [qualify for accepting Venmo as a payment method](https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#availability), you can proceed to enable Venmo in your sandbox Control Panel. For more details on steps to enable Venmo in sandbox and production, see our [Venmo testing](https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#testing).
### Integrate on your servers
#### Vaulting the Venmo account
Your customer's Venmo account can be saved to your Vault using [vaultPaymentMethod](https://graphql.braintreepayments.com/reference/#Mutation--vaultPaymentMethod) mutation and reused for future transactions.
*Request body*
```
mutation VaultPaymentMethod($input: VaultPaymentMethodInput!){
vaultPaymentMethod(input: $input) {
paymentMethod {
id
details {
... on VenmoAccountDetails{
username
venmoUserId
}
}
customer {
id
firstName
lastName
}
}
}
}
```
*Inputs*
```
{
"input": {
"paymentMethodId": "fake-venmo-account-nonce",
"customerId": "Y3VzdG9tZXJfODc0OTA1MTYy"
}
}
```
*Response*
```
{
"data": {
"vaultPaymentMethod": {
"paymentMethod": {
"id": "cGF5bWVudG1ldGhvZF92ZW5tb18zZ2Q3Z3BxYg",
"details": {
"username": "venmojoe",
"venmoUserId": "1234567891234567891"
},
"customer": {
"id": "Y3VzdG9tZXJfODc0OTA1MTYy",
"firstName": "test first name",
"lastName": "test last name"
}
}
}
},
"extensions": {
"requestId": "8b26ea08-3ab9-490e-88c5-8ebd0d541415"
}
}
```
You can also save the customer's Venmo account to your Vault at the same time as your transaction by using [chargePaymentMethod](https://graphql.braintreepayments.com/reference/#Mutation--chargePaymentMethod) with *vaultPaymentMethodAfterTransacting*.
#### Deleting a Vaulted Payment Method
If a customer deletes a vaulted Venmo payment method on a merchant website or app, it will also delete the Venmo customer's merchant connection within their Venmo app on the Connected Businesses page. However, if your Venmo vault has duplicate payment methods for the same Venmo account, the merchant connection will not be deleted until the last payment method is deleted.
Keep in mind that a Venmo customer can also delete a merchant connection from within their Venmo app at any time. This will automatically remove the Venmo payment method from the merchant's vault.
#### Creating transactions
Creating a Venmo transaction is the same as creating any other transaction with a nonce. Be sure to pass the device data you collected on the client side when you create the transaction.
Using [chargePaymentMethod](https://graphql.braintreepayments.com/reference/#Mutation--chargePaymentMethod) mutation and supply just an amount and paymentMethodId (which is called payment method nonce on the client-side) you can create a Venmo transaction.
> NOTE
Device data is only required when creating transactions. It is not necessary on other calls, such as customer or payment method creation.
*Request body*
```
mutation ChargePaymentMethod($input: ChargePaymentMethodInput!) {
chargePaymentMethod(input: $input) {
transaction {
id
createdAt
status
amount {
value
currencyCode
}
merchantAccountId
paymentMethodSnapshot{
... on VenmoAccountDetails {
username
venmoUserId
}
}
processorResponse {
legacyCode
message
avsPostalCodeResponse
avsStreetAddressResponse
cvvResponse
}
}
}
}
```
*Inputs*
```
{
"input": {
"paymentMethodId": "fake-venmo-account-nonce",
"transaction": {
"amount": "1.00",
"riskData": {
"customerBrowser": "netscap_1.0",
"customerIp": "8.8.8.8",
"deviceData": "android_v15.0_z2"
}
}
}
}
```
*Response*
```
{
"data": {
"chargePaymentMethod": {
"transaction": {
"id": "dHJhbnNhY3Rpb25fZmtwZmVuYXQ",
"createdAt": "2022-10-11T16:54:27.000000Z",
"status": "SUBMITTED_FOR_SETTLEMENT",
"amount": {
"value": "1.00",
"currencyCode": "USD"
},
"merchantAccountId": "paypal",
"paymentMethodSnapshot": {
"username": "venmojoe",
"venmoUserId": "1234567891234567891"
},
"processorResponse": {
"legacyCode": "1000",
"message": "Approved",
"avsPostalCodeResponse": "NOT_PROVIDED",
"avsStreetAddressResponse": "NOT_PROVIDED",
"cvvResponse": "MATCHES"
}
}
}
},
"extensions": {
"requestId": "fecc61da-3956-4db9-96ae-47bcdd54a510"
}
}
```
#### Specifying the business profile
You will need to pass the *profile_id* associated with the Venmo business profile that you want to create the transaction for. This should be the same *profile_id* used when tokenizing the Venmo account on the client side.
*Request body*
```
mutation ChargeVenmoAccount($input: ChargeVenmoAccountInput!){
chargeVenmoAccount(input: $input) {
transaction {
id
amount {
value
currencyCode
}
paymentMethodSnapshot {
...on VenmoAccountDetails{
username
venmoUserId
}
}
}
}
}
}
```
*Inputs*
```
{
"input": {
"paymentMethodId": "fake-venmo-account-nonce",
"transaction": {
"amount": "10.00",
"riskData": {
"customerBrowser": "netscap_1.0",
"customerIp": "8.8.8.8",
"deviceData": "android_v15.0_z2"
},
"vaultPaymentMethodAfterTransacting": {
"when": "ALWAYS"
}
},
"options":{
"profileId": "1953896702662410263"
}
}
}
```
*Response*
```
{
"data": {
"chargeVenmoAccount": {
"transaction": {
"id": "dHJhbnNhY3Rpb25fNHNhejh2Mmo",
"amount": {
"value": "10.00",
"currencyCode": "USD"
},
"paymentMethodSnapshot": {
"username": "venmojoe",
"venmoUserId": "1234567891234567891"
}
}
}
},
"extensions": {
"requestId": "a850160a-af82-4022-a95f-11d91857325c"
}
}
```
>NOTE
If you do not specify the *profile_id*, the transaction will be associated with the default business profile.
### Settlement
#### Capturing multiple partial amounts against the same authorization
If you send physical goods to customers in multiple shipments, you can capture the total authorized amount across multiple partial settlements using [partialCaptureTransaction](https://graphql.braintreepayments.com/reference/#Mutation--partialCaptureTransaction).