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

# Agregar dirección de tarjeta virtual

Guarda una dirección de facturación para la emisión de una tarjeta virtual en la cuenta del solicitante. La dirección se guarda como una dirección de usuario `BILLING` y luego se puede pasar a `createVirtualCard` como `userAddressId`.

Cuando se proporciona `authUserId`, la dirección se guarda para el usuario subyacente de ese usuario autorizado y permanece asociada a la cuenta del solicitante. El `authUserId` debe ser una asignación de usuario autorizado ACTIVA y no propietaria en la cuenta del solicitante.

Si ya existe una dirección de facturación idéntica para el titular objetivo de la tarjeta en la cuenta del solicitante, se devuelve la dirección existente en lugar de crear un duplicado. La coincidencia se realiza en los campos de dirección, cuenta, usuario objetivo y tipo `BILLING`.

<Info>
  **Requisitos previos:** un token Bearer con el alcance `CREATE_VIRTUALCARD`.
</Info>

<Note>
  **La dirección de facturación debe ser verificable**

  Esta mutación almacena la dirección de facturación. Debe ser una dirección **de EE. UU.** real y entregable (`US`, `USA` o `United States`) con ciudad, estado y código ZIP correctos, y **no se aceptan apartados postales (PO boxes)**. La verificación de USPS/Smarty se ejecuta cuando se crea una tarjeta virtual: una dirección que no se puede verificar allí hace que la creación de la tarjeta falle con `VC-0025`. Consulta [Requisitos de formato de direcciones](/concepts/address-formatting-requirements) para ver todas las reglas de los campos y ejemplos.
</Note>

```graphql theme={null}
mutation AddVirtualCardAddress($input: AddVirtualCardAddressInput!) {
  addVirtualCardAddress(input: $input) {
    userAddressId
    streetAddressLine1
    streetAddressLine2
    country
    city
    state
    postalCode
  }
}
```

## Parámetros

| Parámetro                               | Tipo                            | Requerido | Descripción                                                                                                                                |
| --------------------------------------- | ------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| input                                   | AddVirtualCardAddressInput!     | Sí        | Objeto contenedor para la solicitud de dirección de facturación.                                                                           |
| input.billingAddress                    | VirtualCardBillingAddressInput! | Sí        | Dirección de facturación para guardar para la emisión de la tarjeta virtual.                                                               |
| input.billingAddress.streetAddressLine1 | String!                         | Sí        | Dirección. El emisor no acepta apartados postales (PO boxes).                                                                              |
| input.billingAddress.streetAddressLine2 | String                          | No        | Línea opcional de apartamento, suite o dirección secundaria. Los valores vacíos se guardan como `null`; los valores no vacíos se recortan. |
| input.billingAddress.country            | String!                         | Sí        | Nombre del país. Actualmente, el emisor de la tarjeta solo admite direcciones de Estados Unidos.                                           |
| input.billingAddress.city               | String!                         | Sí        | Ciudad. Se guarda en mayúsculas.                                                                                                           |
| input.billingAddress.state              | String!                         | Sí        | Nombre del estado o código estatal de EE. UU. de dos letras. Se guarda en mayúsculas.                                                      |
| input.billingAddress.postalCode         | String!                         | Sí        | Código ZIP de EE. UU. de 5 dígitos. Se guarda en mayúsculas.                                                                               |
| input.authUserId                        | UUID                            | No        | ID de usuario autorizado (ID de asignación de rol UAC). Cuando se proporciona, la dirección se guarda para ese tarjetahabiente autorizado. |

## Respuesta

```json theme={null}
{
  "data": {
    "addVirtualCardAddress": {
      "userAddressId": "1f6b2c3d-4e5f-4a67-9a10-2b3c4d5e6f70",
      "streetAddressLine1": "123 Main St",
      "streetAddressLine2": "Apt 5",
      "country": "United States",
      "city": "NEW YORK",
      "state": "NY",
      "postalCode": "10001"
    }
  }
}
```

## Campos de la respuesta

| Campo                | Tipo   | Descripción                                                                                             |
| -------------------- | ------ | ------------------------------------------------------------------------------------------------------- |
| `userAddressId`      | UUID   | ID de la dirección de facturación guardada. Pasa este valor como `userAddressId` a `createVirtualCard`. |
| `streetAddressLine1` | String | Línea 1 de la dirección.                                                                                |
| `streetAddressLine2` | String | Línea 2 de la dirección, o `null` cuando no se proporciona.                                             |
| `country`            | String | Nombre del país.                                                                                        |
| `city`               | String | Ciudad guardada en la dirección.                                                                        |
| `state`              | String | Estado guardado en la dirección.                                                                        |
| `postalCode`         | String | Código postal guardado en la dirección.                                                                 |

## Ejemplos de solicitudes

Guardar una dirección de facturación para el solicitante:

```bash theme={null}
curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your_access_token>" \
  -d '{
  "query": "mutation AddVirtualCardAddress($input: AddVirtualCardAddressInput!) { addVirtualCardAddress(input: $input) { userAddressId streetAddressLine1 streetAddressLine2 country city state postalCode } }",
  "variables": {
    "input": {
      "billingAddress": {
        "streetAddressLine1": "123 Main St",
        "streetAddressLine2": "Apt 5",
        "country": "United States",
        "city": "New York",
        "state": "NY",
        "postalCode": "10001"
      }
    }
  }
}'
```

Guardar una dirección de facturación para un usuario autorizado:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <your_access_token>" \
    -d '{
    "query": "mutation AddVirtualCardAddress($input: AddVirtualCardAddressInput!) { addVirtualCardAddress(input: $input) { userAddressId streetAddressLine1 streetAddressLine2 country city state postalCode } }",
    "variables": {
      "input": {
        "authUserId": "8b2c1e0a-7d4f-4a9b-9c2d-1f3e4a5b6c7d",
        "billingAddress": {
          "streetAddressLine1": "456 Market St",
          "streetAddressLine2": "Suite 200",
          "country": "United States",
          "city": "San Francisco",
          "state": "CA",
          "postalCode": "94105"
        }
      }
    }
  }'
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch('https://transactional-graph.staging.fluzapp.com/api/v1/graphql', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${accessToken}`,
    },
    body: JSON.stringify({
      query: `
        mutation AddVirtualCardAddress(
          $input: AddVirtualCardAddressInput!
        ) {
          addVirtualCardAddress(input: $input) {
            userAddressId
            streetAddressLine1
            streetAddressLine2
            country
            city
            state
            postalCode
          }
        }
      `,
      variables: {
        input: {
          authUserId: '8b2c1e0a-7d4f-4a9b-9c2d-1f3e4a5b6c7d',
          billingAddress: {
            streetAddressLine1: '456 Market St',
            streetAddressLine2: 'Suite 200',
            country: 'United States',
            city: 'San Francisco',
            state: 'CA',
            postalCode: '94105',
          },
        },
      },
    }),
  });

  const data = await response.json();
  console.log('Virtual card address saved:', data.data.addVirtualCardAddress);
  ```
</CodeGroup>

## Códigos de error

| Código      | Mensaje                                                                                                  | Descripción                                                                                                    |
| ----------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `ARG-0001`  | Invalid arguments received                                                                               | Falta un campo obligatorio de la dirección, un valor está vacío o `authUserId` no es un UUID válido.           |
| `AUTH-0008` | Invalid user access                                                                                      | El token Bearer no pudo resolverse a un solicitante. Verifica que el token sea válido.                         |
| `AUTH-0031` | The requested scopes must be granted by the user first.                                                  | Al token le falta el alcance `CREATE_VIRTUALCARD` requerido para guardar direcciones de tarjetas virtuales.    |
| `AUTH-0034` | No authorized user found with this id on the caller's account.                                           | El `authUserId` no existe en la cuenta del solicitante, no está ACTIVO o se refiere a una asignación de OWNER. |
| `VC-0001`   | Please try another payment method. If you continue experiencing issues, please contact our support team. | Se produjo una falla general al guardar la dirección de facturación. Intenta nuevamente o contacta al soporte. |

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Crear una tarjeta virtual" icon="credit-card" href="/features/create-card">
    Pasa el `userAddressId` devuelto a `createVirtualCard`.
  </Card>

  <Card title="Configurar el PIN de la tarjeta virtual" icon="key-round" href="/set-virtual-card-pin">
    Requerido antes de poder usar la tarjeta para transacciones presenciales o que soliciten PIN.
  </Card>
</CardGroup>
