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

# Cancelar cargo

> Endpoint para cancelar un cargo en el sistema de OnePay.

Cancela un cargo que se encuentre en estado `created` o `processing`. Al cancelar, el cargo cambia a estado `failed` con el motivo `CANCELLED_BY_MERCHANT`.

<Warning>
  Solo se pueden cancelar cargos en estado **creado** (`created`) o **procesando** (`processing`). Si el cargo ya fue pagado, reembolsado o falló, no podrá ser cancelado.
</Warning>

<ParamField path="charge_id" type="string" required placeholder="9e02966f-2ddf-4ee7-a391-5b5b7653e232">
  ID del cargo a cancelar. [Crear cargo](/client/charges/create).
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.onepay.la/v1/charges/9e02966f-2ddf-4ee7-a391-5b5b7653e232/cancel \
    -X POST \
    -H "Authorization: Bearer sk_test_xxx"
  ```

  ```javascript JavaScript theme={null}
  const chargeId = '9e02966f-2ddf-4ee7-a391-5b5b7653e232';

  const response = await fetch(`https://api.onepay.la/v1/charges/${chargeId}/cancel`, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sk_test_xxx'
    }
  });

  const data = await response.json();
  console.log(data);
  ```

  ```python Python theme={null}
  import requests

  charge_id = "9e02966f-2ddf-4ee7-a391-5b5b7653e232"
  url = f"https://api.onepay.la/v1/charges/{charge_id}/cancel"
  headers = {
      "Authorization": "Bearer sk_test_xxx"
  }

  response = requests.post(url, headers=headers)
  data = response.json()
  print(data)
  ```

  ```php PHP theme={null}
  <?php
  $chargeId = "9e02966f-2ddf-4ee7-a391-5b5b7653e232";
  $ch = curl_init();

  curl_setopt_array($ch, [
      CURLOPT_URL => "https://api.onepay.la/v1/charges/{$chargeId}/cancel",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          "Authorization: Bearer sk_test_xxx"
      ]
  ]);

  $response = curl_exec($ch);
  $data = json_decode($response, true);

  print_r($data);

  curl_close($ch);
  ?>
  ```
</RequestExample>

### Respuesta

<ResponseField name="id" type="string">
  ID único del cargo cancelado.
</ResponseField>

<ResponseField name="status" type="string">
  Estado del cargo después de la cancelación. Siempre será `failed`.
</ResponseField>

<ResponseField name="remarks" type="array">
  Lista de observaciones del cargo. Incluirá `CANCELLED_BY_MERCHANT`.
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "9e02966f-2ddf-4ee7-a391-5b5b7653e232",
    "status": "failed",
    "remarks": ["CANCELLED_BY_MERCHANT"]
  }
  ```

  ```json 403 theme={null}
  {
    "message": "Forbidden"
  }
  ```

  ```json 422 theme={null}
  // charge_not_cancellable
  {
    "message": "El cargo no se puede cancelar, solo cargos en estado creado o procesando pueden ser cancelados",
    "code": 10808,
    "code_name": "charge_not_cancellable"
  }
  ```
</ResponseExample>
