> For the complete documentation index, see [llms.txt](https://docs.hyperswitch.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/bitpay.md).

# Bitpay

Accept cryptocurrency payments through Bitpay.

Bitpay provides a cryptocurrency checkout route with automatic capture. Payment webhooks can move an invoice through processing, success, or failure outcomes. Review the refund caveat below before enabling this connector.

### Status and capabilities

**Integration status:** sandbox

**Category:** alternative payment method

**Webhook flows:** payments

| Payment method | Type   | Mandates      | Refunds   | Capture methods | Countries | Currencies |
| -------------- | ------ | ------------- | --------- | --------------- | --------- | ---------- |
| crypto         | Crypto | not supported | supported | automatic       | 30        | 8          |

The feature matrix declares refunds, but the refund execute request returns `NotImplemented`. Do not rely on refunds until [the declaration gap is resolved](https://github.com/juspay/hyperswitch/issues/14296).

### Authentication

Supply **API Key**, the label shown in the Hyperswitch control center. Bitpay carries it as a `token` value rather than an authorization header: the authorize request serializes it into the request body as `token`, and payment sync appends it to the URL as `?token=...`. The [`build_headers()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay.rs#L83-L107) override sends only the content type and `X-Accept-Version: 2.0.0`, and never calls [`get_auth_header()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay.rs#L126-L137), so no `Authorization` header is sent. See the body field in [`BitpayPaymentsRequest`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs#L53) and the sync URL in [`get_url()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay.rs#L296-L305). [`BitpayAuthType::try_from()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs#L67-L80) maps the dashboard field.

Because the key travels in a query string on sync, it can reach proxy and server logs that would not record a header. Treat it as you would any other secret in a URL.

### Before you start

1. Sign in to the [Hyperswitch control center](https://app.hyperswitch.io/).
2. Enter **API Key** during connector activation.
3. Leave **Source verification key** blank. Bitpay uses the default no-op verification algorithm, so a value here adds no signature verification. See the webhook warning below before you rely on callbacks at all.

To connect Bitpay to your Hyperswitch account, follow [Activate a connector on Hyperswitch](/integrations/connectors-integrations/activate-connector-on-hyperswitch.md), then return here for Bitpay-specific behavior.

### Webhooks

{% hint style="warning" %}
**Bitpay callbacks are not authenticated. Do not treat one as proof of payment.** The connector verifies no signature: the default [`get_webhook_source_verification_algorithm()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_interfaces/src/webhooks.rs#L194-L200) selects `NoAlgorithm`, whose [`verify_signature()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/common_utils/src/crypto.rs#L177-L185) always returns true, so every callback that reaches the endpoint is accepted. Anyone who can reach it can post `invoice_confirmed` or `invoice_completed` and drive a payment to succeeded.

Confirm with payment sync before you release goods or mark an order paid, and treat the callback only as a signal to go and check.
{% endhint %}

The events below are what the connector does with a callback once it accepts it.

The connector handles 8 event wire values.

| Wire value                 | Effect                       |
| -------------------------- | ---------------------------- |
| `invoice_paidInFull`       | Payment is processing        |
| `invoice_confirmed`        | Payment succeeds             |
| `invoice_completed`        | Payment succeeds             |
| `invoice_expired`          | No payment update is applied |
| `invoice_failedToConfirm`  | No payment update is applied |
| `invoice_declined`         | Payment fails                |
| `invoice_refundComplete`   | No payment update is applied |
| `invoice_manuallyNotified` | No payment update is applied |

Any other event value uses the unknown fallback and applies no payment update. The 8 wire values and fallback come from [`WebhookEventType`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs#L306-L325); their effects come from [`get_webhook_event_type()`](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay.rs#L399-L420).

### Source reference

Authentication and webhook behavior on this page follows [Bitpay connector source](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay.rs) and [Bitpay transformers](https://github.com/juspay/hyperswitch/blob/9e5dd70d1cb4011bbcca3114862406008a0b61f8/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.hyperswitch.io/integrations/connectors-integrations/payment-processor-capabilities/available-connectors/bitpay.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
