Issue:
[FEATURE] Flowbird Archipel connector

### Feature Description

Initial contribution from Flowbird. 


### Possible Implementation

Implementation of the Archipel connector.

### Have you spent some time checking if this feature request has been raised before?

- [x] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [x] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!

Resolution:
<think>
PR Context:
- Title: feat(connector): Archipel connector
- Merged: 2025-05-16T09:54:08Z
- Files changed: 30 files
- Commits: 27 commits

Implementation approach:
[Flowbird Archipel connector implementation](https://www.flowbird.group/smartcity/us/wp-content/uploads/2019/11/Brochure-PAYMENT-ACCEPTANCE-EN-4-pages.pdf)
Closes #7899 

Co-authored-by: Guillaume Bague <guillaume.bague@flowbird.group>

</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(connector): Archipel connector (#7851)
Co-authored-by: Michal Czernecki <michal.czerencki@flowb
Files to modify:


**crates/common_enums/src/connector_enums.rs**
  Modify existing code

**crates/connector_configs/src/common_config.rs**
  Modify existing code

**crates/connector_configs/src/connector.rs**
  Modify existing code

**crates/hyperswitch_connectors/src/connectors.rs**
  Add:
    - mod: pub::archipel

**crates/hyperswitch_connectors/src/connectors/archipel.rs**
  Add:
    - function: pub::new
    - function: private::build_env_specific_endpoint
    - function: private::build_headers
    - function: private::id
    - function: private::get_currency_unit
    - function: private::get_auth_header
    - function: private::common_get_content_type
    - function: private::base_url
    - function: private::build_error_response
    - function: private::validate_connector_against_payment_request
    - function: private::validate_mandate_payment
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_headers
    - function: private::get_content_type
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - function: private::get_webhook_object_reference_id
    - function: private::get_webhook_event_type
    - function: private::get_webhook_resource_object
    - struct: pub::Archipel
    - impl: impl Archipel
    - impl: impl api::PaymentAuthorize for Archipel
    - impl: impl api::PaymentSync for Archipel
    - impl: impl api::PaymentVoid for Archipel
    - impl: impl api::PaymentCapture for Archipel
    - impl: impl api::MandateSetup for Archipel
    - impl: impl api::ConnectorAccessToken for Archipel
    - impl: impl api::PaymentToken for Archipel
    - impl: impl api::PaymentSession for Archipel
    - impl: impl api::Refund for Archipel
    - impl: impl api::RefundExecute for Archipel
    - impl: impl api::RefundSync for Archipel
    - impl: impl api::Payment for Archipel
    - impl: impl api::PaymentIncrementalAuthorization for Archipel
    - impl: impl api::ConnectorSpecifications for Archipel
    - impl: impl ConnectorCommonExt<Flow, Request, Response> for Archipel
    - impl: impl ConnectorCommon for Archipel
    - impl: impl ConnectorValidation for Archipel
    - impl: impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<
        IncrementalAuthorization,
        PaymentsIncrementalAuthorizationData,
        PaymentsResponseData,
    > for Archipel
    - impl: impl ConnectorIntegration<PSync, PaymentsSyncData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<Capture, PaymentsCaptureData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<SetupMandate, SetupMandateRequestData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<Execute, RefundsData, RefundsResponseData> for Archipel
    - impl: impl ConnectorIntegration<RSync, RefundsData, RefundsResponseData> for Archipel
    - impl: impl ConnectorIntegration<PaymentMethodToken, PaymentMethodTokenizationData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<Session, PaymentsSessionData, PaymentsResponseData> for Archipel
    - impl: impl ConnectorIntegration<AccessTokenAuth, AccessTokenRequestData, AccessToken> for Archipel
    - impl: impl ConnectorIntegration<Void, PaymentsCancelData, PaymentsResponseData> for Archipel
    - impl: impl IncomingWebhook for Archipel
    - mod: pub::transformers

**crates/hyperswitch_connectors/src/connectors/archipel/transformers.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: private::try_from
    - function: private::try_from
    - function: private::from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::from
    - function: private::from
    - function: private::try_from
    - function: private::new
    - function: private::from
    - function: private::default
    - function: private::new
    - function: private::from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::from
    - function: private::try_from
    - function: private::from
    - function: private::from
    - function: private::try_from
    - function: private::from
    - function: private::from
    - function: private::try_from
    - function: private::try_from
    - function: private::try_from
    - function: private::from
    - struct: pub::ArchipelTenantId
    - struct: pub::ArchipelRouterData
    - struct: pub::ArchipelAuthType
    - struct: pub::ArchipelConfigData
    - struct: pub::ArchipelOrderRequest
    - struct: pub::CardExpiryDate
    - struct: pub::Archipel3DS
    - struct: pub::ArchipelCardHolder
    - struct: pub::ArchipelBillingAddress
    - struct: pub::ArchipelCredentialIndicator
    - struct: pub::TokenizedCardData
    - struct: pub::ArchipelTokenizedCard
    - struct: pub::ArchipelCard
    - struct: pub::ArchipelWalletInformation
    - struct: pub::ArchipelPaymentInformation
    - struct: pub::ArchipelWalletAuthorizationRequest
    - struct: pub::ArchipelCardAuthorizationRequest
    - struct: private::ArchipelFlowStatus
    - struct: pub::ArchipelOrderResponse
    - struct: pub::ArchipelErrorMessage
    - struct: private::ArchipelErrorMessageWithHttpCode
    - struct: pub::ArchipelTransactionMetadata
    - struct: pub::ArchipelPaymentsResponse
    - struct: pub::ArchipelCaptureRequest
    - struct: pub::ArchipelCaptureOrderRequest
    - struct: pub::ArchipelPaymentsCancelRequest
    - struct: pub::ArchipelIncrementalAuthorizationRequest
    - struct: pub::ArchipelRefundOrder
    - struct: pub::ArchipelRefundRequest
    - struct: pub::ArchipelRefundOrderResponse
    - struct: pub::ArchipelRefundResponse
    - enum: pub::ArchipelPaymentInitiator
    - enum: pub::ArchipelWalletProvider
    - enum: pub::ArchipelPaymentCertainty
    - enum: pub::ApplicationSelectionIndicator
    - enum: pub::ArchipelCredentialIndicatorStatus
    - enum: pub::ArchipelCardScheme
    - enum: pub::ArchipelPaymentStatus
    - enum: pub::ArchipelPaymentFlow
    - enum: pub::ArchipelRefundStatus
    - impl: impl From<String> for ArchipelTenantId
    - impl: impl From<(MinorUnit, ArchipelTenantId, T)> for ArchipelRouterData<T>
    - impl: impl TryFrom<&ConnectorAuthType> for ArchipelAuthType
    - impl: impl TryFrom<&Option<pii::SecretSerdeValue>> for ArchipelConfigData
    - impl: impl From<AuthenticationData> for Archipel3DS
    - impl: impl TryFrom<Option<ArchipelBillingAddress>> for ArchipelCardHolder
    - impl: impl TryFrom<&AddressDetails> for ArchipelBillingAddress
    - impl: impl TryFrom<(&WalletData, &Option<PaymentMethodToken>)> for TokenizedCardData
    - impl: impl TryFrom<(Option<Secret<String>>, &Card)> for ArchipelCard
    - impl: impl TryFrom<(
        Option<Secret<String>>,
        &hyperswitch_domain_models::payment_method_data::CardDetailsForNetworkTransactionId,
    )> for ArchipelCard
    - impl: impl From<&str> for ArchipelCardScheme
    - impl: impl From<Option<CardIssuer>> for ArchipelCardScheme
    - impl: impl TryFrom<(AttemptStatus, CaptureMethod)> for ArchipelPaymentFlow
    - impl: impl ArchipelFlowStatus
    - impl: impl From<ArchipelFlowStatus> for AttemptStatus
    - impl: impl Default for ArchipelErrorMessage
    - impl: impl ArchipelErrorMessageWithHttpCode
    - impl: impl From<&ArchipelPaymentsResponse> for ArchipelTransactionMetadata
    - impl: impl TryFrom<(MinorUnit, &PaymentsAuthorizeRouterData)> for ArchipelPaymentInformation
    - impl: impl TryFrom<ArchipelRouterData<&PaymentsAuthorizeRouterData>> for ArchipelCardAuthorizationRequest
    - impl: impl TryFrom<ArchipelRouterData<&PaymentsAuthorizeRouterData>> for ArchipelWalletAuthorizationRequest
    - impl: impl TryFrom<
        ResponseRouterData<
            F,
            ArchipelPaymentsResponse,
            PaymentsAuthorizeData,
            PaymentsResponseData,
        >,
    > for RouterData<F, PaymentsAuthorizeData, PaymentsResponseData>
    - impl: impl TryFrom<ResponseRouterData<F, ArchipelPaymentsResponse, PaymentsSyncData, PaymentsResponseData>> for RouterData<F, PaymentsSyncData, PaymentsResponseData>
    - impl: impl From<ArchipelRouterData<&PaymentsCaptureRouterData>> for ArchipelCaptureRequest
    - impl: impl TryFrom<
        ResponseRouterData<F, ArchipelPaymentsResponse, PaymentsCaptureData, PaymentsResponseData>,
    > for RouterData<F, PaymentsCaptureData, PaymentsResponseData>
    - impl: impl TryFrom<ArchipelRouterData<&SetupMandateRouterData>> for ArchipelCardAuthorizationRequest
    - impl: impl TryFrom<
        ResponseRouterData<
            F,
            ArchipelPaymentsResponse,
            SetupMandateRequestData,
            PaymentsResponseData,
        >,
    > for RouterData<F, SetupMandateRequestData, PaymentsResponseData>
    - impl: impl From<ArchipelRouterData<&PaymentsCancelRouterData>> for ArchipelPaymentsCancelRequest
    - impl: impl TryFrom<
        ResponseRouterData<F, ArchipelPaymentsResponse, PaymentsCancelData, PaymentsResponseData>,
    > for RouterData<F, PaymentsCancelData, PaymentsResponseData>
    - impl: impl From<ArchipelPaymentStatus> for AuthorizationStatus
    - impl: impl From<ArchipelRouterData<&PaymentsIncrementalAuthorizationRouterData>> for ArchipelIncrementalAuthorizationRequest
    - impl: impl TryFrom<
        ResponseRouterData<
            F,
            ArchipelPaymentsResponse,
            PaymentsIncrementalAuthorizationData,
            PaymentsResponseData,
        >,
    > for RouterData<F, PaymentsIncrementalAuthorizationData, PaymentsResponseData>
    - impl: impl From<ArchipelRouterData<&RefundsRouterData<F>>> for ArchipelRefundRequest
    - impl: impl From<ArchipelPaymentStatus> for RefundStatus
    - impl: impl TryFrom<ArchipelRefundResponse> for RefundsResponseData
    - impl: impl TryFrom<RefundsResponseRouterData<Execute, ArchipelRefundResponse>> for RefundsRouterData<Execute>
    - impl: impl TryFrom<RefundsResponseRouterData<RSync, ArchipelRefundResponse>> for RefundsRouterData<RSync>
    - impl: impl From<ArchipelErrorMessageWithHttpCode> for ErrorResponse

**crates/hyperswitch_connectors/src/default_implementations.rs**
  Modify existing code

**crates/hyperswitch_connectors/src/utils.rs**
  Add:
    - function: private::get_two_digit_expiry_year

**crates/hyperswitch_domain_models/src/configs.rs**
  Modify existing code

**crates/router/src/connector.rs**
  Modify existing code

**crates/router/src/core/admin.rs**
  Modify existing code

**crates/router/src/types/api.rs**
  Modify existing code

**crates/router/src/types/transformers.rs**
  Modify existing code

**crates/test_utils/src/connector_auth.rs**
  Add:
    - struct: pub::NoKey