public static function create(
        Amount $amountInquired,
        Pointer $counterpartyAlias,
        string $description,
        bool $allowBunqme,
        int $monetaryAccountId = null,
        array $attachment = null,
        string $merchantReference = null,
        string $status = null,
        int $minimumAge = null,
        string $requireAddress = null,
        bool $wantTip = null,
        bool $allowAmountLower = null,
        bool $allowAmountHigher = null,
        string $redirectUrl = null,
        int $eventId = null,
        array $customHeaders = []
    ): BunqResponseInt {
        $apiClient = new ApiClient(static::getApiContext());
        $responseRaw = $apiClient->post(
            vsprintf(
                self::ENDPOINT_URL_CREATE,
                [static::determineUserId(), static::determineMonetaryAccountId($monetaryAccountId)]
            ),
            [
                self::FIELD_AMOUNT_INQUIRED => $amountInquired,
                self::FIELD_COUNTERPARTY_ALIAS => $counterpartyAlias,
                self::FIELD_DESCRIPTION => $description,
                self::FIELD_ATTACHMENT => $attachment,
                self::FIELD_MERCHANT_REFERENCE => $merchantReference,
                self::FIELD_STATUS => $status,
                self::FIELD_MINIMUM_AGE => $minimumAge,
                self::FIELD_REQUIRE_ADDRESS => $requireAddress,
                self::FIELD_WANT_TIP => $wantTip,
                self::FIELD_ALLOW_AMOUNT_LOWER => $allowAmountLower,
                self::FIELD_ALLOW_AMOUNT_HIGHER => $allowAmountHigher,
                self::FIELD_ALLOW_BUNQME => $allowBunqme,
                self::FIELD_REDIRECT_URL => $redirectUrl,
                self::FIELD_EVENT_ID => $eventId,
            ],
            $customHeaders
        );

        return BunqResponseInt::castFromBunqResponse(
            static::processForId($responseRaw)
        );
    }