API Manager Level Settings - WSO2 Open Banking 1.4.0 (2023)

Timeout settings for an API call

The following diagram shows the communication/network paths that occur when an API is called. Timeout settings for each network call are explained below.
API Manager Level Settings - WSO2 Open Banking 1.4.0 (1)

  • key validation
    Key validation takes place via a Servlet HTTP call and the connection timeout can be configured by changing the following configuration details in/repository/conf/axis2/axis2_client.xmlfile. All timeout values ​​are in milliseconds.

    6000060000< /transporteRemetente>

    If Key Manager caching is enabled, calls between API Gateway and Key Manager are cached. As a result, the Key Manager is not called for every API call.

  • API Gateway Client Call + API Gateway Call Backend
    For backend communication, API Manager uses the PassThrough transport. This is configured in/repository/conf/passthru-http.propertiesfile. For more information, seeConfiguring passthru-http.propertiesin the EI documentation.

    Note that the default value forhttp.socket.timeoutdiffers between WSO2 products. In WSO2 API-M, the default value forhttp.socket.timeoutit is 180000ms.

General APIM level recommendations

Some general APIM level recommendations are listed below:

Improvement Areaperformance recommendations
API Gateway Nodes

Increase the allocated memory by modifying the/bin/wso2server. shfile with the following configuration:

  • -Xms2048m -Xmx2048m -XX:MaxPermSize=1024m

Set the following in_HOME>/repository/conf/axis2/axis2_client.xmlfile:

  • The following Axis2 client settings are only applicable when web services key validation (WS key validation) is enabled.
  • The default values ​​mentioned are the values ​​identified at the time of API-M release. However, if you want high concurrency then use the values ​​mentioned below:
1000 30000

The above settings are only applicable when WS key validation is enabled.

Transporte NHTTP do API Gateway

Recommended values ​​for the</repository/conf/nhttp.propertiesfile are provided below. Note that the values ​​commented out in this file are the default values ​​that will apply if you don't change anything.

Property Descriptions:

snd_t_coreTransport sender worker pool initial thread count
snd_t_maxMaximum transport sender worker pool thread count
snd_io_threadsSender-side I/O workers, which must equal the number of CPU cores. I/O reactors typically employ a small number of dispatch threads (often just one) to dispatch notifications of I/O events to a larger number (often up to several thousand) of I/O sessions or connections. Generally, one dispatch thread is maintained per CPU core.
snd_alive_secSender-side keepalive seconds
snd_qlenSender queue length, which is infinite by default

Recommended values:

  • HTTP sender thread pool parameters
    • snd_t_core=200
    • snd_t_max=250
    • snd_alive_sec=5
    • snd_qlen=-1
    • snd_io_threads=16
  • HTTP Listener thread pool parameters
    • lst_t_core=200
    • lst_t_max=250
    • lst_alive_sec=5
    • lst_qlen=-1
    • lst_io_threads=16
  • timeout parameters
    • http.socket.timeout.receiver: The recommended socket timeout for the listener is 180,000ms.

    • http.socket.timeout.sender: The recommended socket timeout for the sender is 180,000 ms.

PassThrough transportof API Gateway

Recommended values ​​for the_HOME>/repository/conf/passthru-http.propertiesfile are provided below. Note that the values ​​commented out in this file are the default values ​​that will apply if you don't change anything.

Property Descriptions


Sets uptime for extra threads in the worker pool
worker_pool_queue_lengthDefines the length of the queue that is used to store executable tasks to be executed by the pool of workers
io_threads_per_reactorSets the number of IO dispatcher threads used per reactor


Sets the maximum number of connections per host port
worker_pool_queue_lengthDetermines the length of the queue used by the PassThrough transport thread pool to store pending jobs.
http.connection.timeoutDefines a maximum amount of time to establish a connection with the remote host. Ohttp.connection.timeoutit's athttp.socket.timeout, explained below, are two different configuration settings used to handle connection timeout and read timeout for sockets respectively.
http.socket.timeoutSets the time to wait for data after connection establishment, which refers to the maximum idle time between two data packets.

recommended values

  • worker_thread_keepalive_sec:The default value is 60s. This must be less than the socket timeout.

  • worker_pool_queue_length:Set to -1 to use an unlimited queue. If a linked queue is used and the queue is filled to capacity, any further attempts to submit tasks will fail, causing some messages to be dropped by Synapse. The thread pool starts queuing jobs when all existing threads are busy and the pool has reached the maximum number of threads. Therefore, the recommended queue length is -1.

  • io_threads_per_reactor:The value is based on the number of processor cores in the system. (Runtime.getRuntime().availableProcessors())

  • http.max.connection.per.host.port :The default value is 32767, which works for most systems, but you can adjust it based on your operating system (for example, Linux supports 65K connections).

  • worker_pool_size_core: 400
  • worker_pool_size_max: 500
  • io_buffer_size: 16384
  • http.socket.timeout: 180000
Make the number of threads equal to the number of processor cores.
timeout settings

API Gateway routes your client's requests to an appropriate endpoint. The most common reason for your client to get a timeout is when the Gateway's timeout is greater than the client's timeout values. You can resolve this by increasing the timeout on the client side or decreasing it on the API Gateway side.

Here are some parameters, inin addition to the timeout parameters discussed in previous sections.


Defines the maximum time that a callback waits on the Gateway for a response from the backend. If no response is received within that time, the Gateway discards the message and clears the callback. This is a global level parameter that affects all endpoints configured on the Gateway.

The global timeout is defined in the/repository/conf/synapse.propertiesfile. The recommended value is 120000 ms.

Endpoint level timeout

You can set per-endpoint timeouts for different backend services, along with the action to take in case of timeouts.

The example below sets the endpoint to 50 seconds (50,000ms) and runs the fault handler in case of a timeout.

 50000 failure

Alternatively, you can also set this via the editor's UI by following the steps below:

  1. Log in to the Publisher API (https://:9443/publisher). Select your API and clickEdit API.
  2. click noImplementtab and click the gear icon next to the terminal you want to reconfigure.
  3. NoAdvanced Settingsdialog box appears, increase the duration by modifying the default property set to 30000 ms.

    Note that when the terminal is suspended, the default action here is set to invoke the fault sequence.

    API Manager Level Settings - WSO2 Open Banking 1.4.0 (2)

  4. CliqueTo saveand republish the API.

Ohttp.socket.timeoutThe parameter needs to be adjusted based on the terminal-level timeout so that its value is equal to or greater than the highest terminal-level timeout.

if yourThe API is marked as the default version, it has a different template (without the version number) that comes with a predefined timeout for the endpoint. This timeout does not change with changes you make to the API by editing the Advanced Endpoint Configuration. So if this predefined timeout (60 seconds) is less than the actual API timeout, it triggers the timeout before the actual configured API timeout.

To overcome this, update thedefault_api_template.xmlresiding in the_HOME>/ repository/resources/api_templatesdirectory by removing the default API terminal timeout setting. Then APIs marked as the default version also trigger timeout when the actual API timeout is reached.

Follow the steps below to update thedefault_api_template.xmlto remove the terminal configuration for the default APIs.

If you are using a distributed (clustered) configuration, follow these steps on the Publisher node, as it is the API Publisher that creates the API definition and sends it to the Gateway.

  1. open the/repository/resources/api_templates/default_api_template.xmlfile and remove the following configuration:

    60000failure1,00< retryDelay>0
  2. Add the following configuration to the same location ondefault_api_template.xmlfile.

    By adding this setting, you ensure that APIs marked as the default version never time out or are suspended using the endpoint setting defined in the API's synapse file.

  3. Go to API Publisher and republish the default API by clicking onsave and publish.

key manager nodes

Set the maximum MySQL connections:

mysql> shows variables like "max_connections"; max_connections was 151 set to global max_connections = 250;

Set the open file limit to 200,000 by editing the/etc/sysctl.conffile:

sudo sysctl -p

Set the following in_HOME>/repository/conf/tomcat/catalina-server.xmlfile.

If you use WSO2 Identity Server (WSO2 IS) as the Key Manager, the root location of the above path and the subsequent path need to change from_HOME>for_HOME>.

maxThreads="750" minSpareThreads="150" disableUploadTimeout="false" enableLookups="false" connectionUploadTimeout="120000" maxKeepAliveRequests="600" acceptCount="600"

Define the following connection pool elements in_HOME>/repository/conf/datasources/master-datasources.xmlfile. Time values ​​are defined in milliseconds.

5060000trueSELECT 130000

Note that you set theelement forTRUEand provide a validating query (e.g. in Oracle,SELECT 1 FROM DOUBLE), which is run to update any stale connections in the connection pool. Set a suitable value for theelement, which defaults to 30000 milliseconds. It determines the amount of time after which the next iteration of the validation query will run on a specific connection. Avoids excessive validations and ensures better performance.

Registry indexing settings

The record indexing process only needs to be performed on the API Publisher and API Store nodes. To disable the execution of the indexing process on the other nodes (Gateways and Key Managers), you need to set theelement for false no_HOME>/repository/conf/registry.xmlfile of the relevant nodes.

Registry cache based settings

When registry caching is enabled, it requires a unique ID to cache resources. The getConnectionId method is called in the last mentioned order of situation to retrieve the username of the connection. For some database vendors, thegetConnectionIdThe method makes a database call to fetch the last mentioned information. This database call is a huge overhead because thegetConnectionIdis often called. Therefore, it is recommended to avoid these database calls to improve performance.

  • You needget the latest product updatesfor your product, use the following instructions in the current version of WSO2 API-M. This feature is available as a product update onFebruary 20, 2020on.

    Note that you can only deploy updates to a production environment if you have a valid subscription with WSO2.Read more aboutWSO2 Updates.

Follow the instructions below to avoid these database calls and improve performance when caching the record.

  1. Add the following JVM parameter in_HOME>/bin/wso2server.sh(for Linux/Mac OS) or_HOME>/bin/wso2server.bat(for Windows OS) based on your OS and save the file.

  2. Restart the WSO2 API Manager server.

Accelerate data and settings related to Analytics

This section describes the parameters you need to configure to tune the performance of API-M Analytics and Throttling when it is affected by high load, network traffic, etc. You need to adjust these parameters based on your deployment environment.

Tuning the data broker parameters

The following parameters must be configured in theANALYTICS_HOME>/repository/conf/data-bridge/data-agent-config.xmlfile. Note that there are two subsections in this file, namedEconomyeBinary.

  Thrift...  Binary...

The Thrift section is related to Analytics and the Binary section is related to Throttling. The same set of parameters mentioned below can be found in both sections. Parameter descriptions and recommendations are for Analytics performance tuning, but the same recommendations are relevant for tuning related to throttling data in the Binary section. Note that the section for Thrift is only relevant if Analytics is enabled.

ParameterDescriptionStandard valueFit recommendation
QueueSizeThe number of messages that can be stored in WSO2 API-M at a given time before being published to Analytics Server.32768

This value should be increased when Analytics Server is busy due to request overload or if there is high network traffic. This avoids the generation of the queuecomplete, leaving messageerror.

When the Analytics server is not very busy and when network traffic is relatively low, the queue size can be reduced to avoid excessive memory consumption.

The number specified for this parameter must be a power of 2.

batch sizeWSO2 API-M statistical data sent to Analytics Server to be published to Analytics Dashboard is batched. This parameter specifies the number of requests to include in a batch.200This value must be proportionally adjusted to the volume of requests sent from WSO2 API-M to Analytics Server. This value should be reduced if you want to reduce the Analytics Server system overhead. This value should be increased if the WSO2 API-M is generating a lot of statistics and if theQueueSizecannot be increased without causing excessive memory consumption.
CorePoolSizeThe number of threads allocated to publish WSO2 API-M statistical data to Analytics Server via Thrift at the time WSO2 API-M starts. This value increases when the yield of generated statistics increases. However, the number of threads will not exceed the number specified for theMaxPoolSizeparameter.1The number of available CPU cores must be taken into account when specifying this value. Increasing the core pool size can improve the throughput of statistical data published to the Analytics Dashboard, but latency will also increase due to context switching.
MaxPoolSizeThe maximum number of threads that should be allocated at any one time to publish WSO2 API-M statistical data to Analytics Server.1The number of available CPU cores must be taken into account when specifying this value. Increasing the maximum core pool size can improve the throughput of statistical data published in the Analytics dashboard as more threads can be spawned to handle a larger number of events. However, latency will also increase as a larger number of threads would cause context switching more frequently.
MaxTransportPoolSizeThe maximum number of transport threads that must be allocated at any one time to publish WSO2 API-M statistical data to Analytics Server.250

This value should be increased when there is an increase in throughput of events handled by WSO2 API-M Analytics.

the value oftcpMaxWorkerThreadsparameter inANALYTICS_HOME>/conf/worker/deployement.yamlshould change based on the value specified for this parameter and the number of data editors publishing statistics. for example, when the value for this parameter is250and the number of data publishers is 7, the value for thetcpMaxWorkerThreadsparameter must be1750(i.e. 7*250). This is because you need to ensure that there are enough receiver threads to handle the number of messages published by the data publishers.


dataReceivers: - # Data receiver configuration dataReceiver: # Data receiver type # THIS IS A REQUIRED FIELD TYPE: Thrift # Data receiver properties: tcpPort: '7611' sslPort: '7711' tcpMaxWorkerThreads: '1750' sslMaxWorkerThreads : '1750'
SecureMaxTransportPoolSizeThe maximum number of secure transport threads that must be allocated at any one time to publish WSO2 API-M statistical data to Analytics Server.250

This value should be increased when there is an increase in throughput of events handled by WSO2 API-M Analytics.

the value ofsslMaxWorkerThreadsparameter inANALYTICS_HOME>/conf/worker/deployement.yamlshould change based on the value specified for this parameter and the number of data editors publishing statistics. for example, when the value for this parameter is250and the number of data publishers is 7, the value for thesslMaxWorkerThreadsparameter must be1750(i.e. 7*250). This is because you need to ensure that there are enough receiver threads to handle the number of messages published by the data publishers.


dataReceivers: - # Data receiver configuration dataReceiver: # Data receiver type # THIS IS A REQUIRED FIELD TYPE: Thrift # Data receiver properties: tcpPort: '7611' sslPort: '7711' tcpMaxWorkerThreads: '1750' sslMaxWorkerThreads : '1750'


How to use WSO2 API Manager? ›

  1. Click Create New API and then click Design a new REST API.
  2. Click Create & Publish. This will publish your first API on the Developer Portal as well as deploy it on the API Gateway. You now have an OAuth2. 0 secured REST API that is ready to be consumed.

How to add API to WSO2 API Manager? ›

Create a REST API
  1. Go to CREATE API and Click Design a New REST API.
  2. Click CREATE or CREATE & PUBLISH to create the API. The overview page of the newly created API appears.
  3. Configure the API design configurations. ...
  4. Configure the runtime configurations. ...
  5. Configure the resources. ...
  6. Optionally, view the API definition.

How do I access WSO2? ›

Enter the http://localhost:9443/dashboard URL on a web browser to access WSO2 Dashboard.

How do I make an application active in API manager? ›

Configuring API Manager

You can login to AnyPoint Platform and navigate to API Manager => Manage API from Exchange and select your RAML. Select Managing type as Basic Endpoint ad check on “Check this box if you are managing this API in Mule 4 or above“. Click Save.

How to deploy API in API Manager? ›

Click Deploy Application and click Open in Browser to grab the URL of your published API and integration from Runtime Manager. This will open the application deployment window where you can select the environment you'll be publishing to (same as prior steps), set the runtime version, resource allocation, etc.

What is the default URL for WSO2 API manager? ›

The default URL of WSO2 API Manager Developer Portal is https://<HostName>:9443/devportal .

How do I check my WSO2 status? ›

Status Check via SOAP API

WSO2 includes a considerable list of admin services. The list is viewable when starting the server with the OSGI console enabled using ./wso2server.sh –DosgiConsole , and issuing the command osgi> listAdminServices in the console.

What does WSO2 stand for? ›

WSO2 was started during the web services era a little more than 8 years ago and the name refers to Web Services oxygenated.

What is the default login for WSO2? ›

WSO2 IoT Server has the admin user created by default. This user is also known as the super administrator as it has all the permissions assigned to it. The default username and password of this user is admin .

What is API configuration setting? ›

The configuration API provides a central place for modules to store configuration data. This data can be simple configuration like your site name, or more complex information managed with configuration entities, such as views and content types.

Where is API settings? ›

Use the Settings tab in the Auth0 Dashboard at Dashboard > Applications > APIs to configure registered APIs that you can consume from your authorized applications. To configure an API's settings, click ... next to an API in the list and select Settings or click the API name.

What are API settings? ›

The Application Programming Interface (API) settings allow the System Administrator to monitor the new companies, contracts, and projects that users enter in the Contracts system, as well as any updates they make to the Company, Contract, and Project Profiles.

What is the difference between API Manager and Runtime manager? ›

API manager will be used to govern or manage the API lifecycle and it will enable API authentication or authorization for client to connect APIs securely. Runtime Manager will peer the API Manager via API Proxy or API Auto Discovery.

What types of alerts can be configured from the API Manager *? ›

The platform supports three types of alerts: API alerts, contracts alerts, and runtime alerts.

What types of alerts can be configured from the API Manager? ›

Application alerts and events
Alert NameAlert Type
Approve Application API Access RequestGovernance
Application API Access ApprovedGovernance
Remove Application API AccessGovernance
Enable Application API AccessGovernance
6 more rows

How do I publish an API in WSO2? ›

Create and Publish an API
  1. Sign in to WSO2 API Cloud and the API Publisher web application will open automatically.
  2. Close the interactive tutorial that starts automatically if you are a first-time user, and then click ADD NEW API.
  3. Select Design a New REST API and click Start Creating.

How do I control API access? ›

Restricting API access with API keys
  1. Grant permission to enable the API.
  2. Create a separate Google Cloud project for each caller.
  3. Create an API key for each caller.
  4. Create one API key for all callers.

How does API Manager work? ›

An API management platform is a tool used to access, distribute, control, and analyze APIs used by developers in an enterprise setting. API management platforms benefit organizations by centralizing control over their API integrations while ensuring they continuously meet high performance and security standards.

How do I enable permissions in API? ›

Create a name for the permission set, and select your org's user license then click Save. Go to the System section and select System Permissions, then click Edit. Select API Enabled and click Save.

How do I enable API and services? ›

Follow these steps to enable the API:
  1. In the Google Cloud Console, go to the Projects page. ...
  2. Enable the Android Performance Parameters API on the project you selected. ...
  3. Select the Credentials tab on the left.
  4. If the project does not have an existing API key, click CREATE CREDENTIALS and select API Key. ...
  5. Copy the API key.
Mar 15, 2022

How do I deploy my API? ›

Deploy a REST API to a stage
  1. In the APIs navigation pane, choose the API you want to deploy.
  2. In the Resources navigation pane, choose Actions.
  3. From the Actions drop-down menu, choose Deploy API.
  4. In the Deploy API dialog, choose an entry from the Deployment stage dropdown list.

What is API gateway in WSO2? ›

WSO2 API Gateway is the. WSO2 API Gateway which is powered by WSO2 EI provides a runtime, backend component (an API proxy) for API calls. It secures, protects, manages, and scales API calls by intercepting API requests and applying policies such as throttling and security using handlers and managing API statistics.

What is the default URL for REST API? ›

The default URL to access the messaging REST API is: https://localhost:9443/ibmmq/rest/v1/messaging . If the host or port is changed from the default, or if HTTP is enabled, you can determine the URL by using the dspmqweb command.

How do I change my default port in WSO2? ›

There are two ways to set an offset to a port:
  1. Pass the port offset to the server during startup. The following command starts the server with the default port incremented by 3 :./wso2server.sh -DportOffset=3.
  2. Set the Ports section of <PRODUCT_HOME>/repository/conf/carbon. xml as follows: <Offset>3</Offset>
Jun 6, 2016

What is the default credentials for WSO2 API manager? ›

( default path is https://localhost:9943/carbon). Login with the admin credentials (default is admin/admin).

What is WSO2 API manager? ›

WSO2 API Manager is a complete solution for designing and publishing APIs, creating and managing a developer community, and for scalably routing API traffic.

Where is WSO2 installed? ›

Access the HOME directory
OSHome Directory
Mac OS/Library/WSO2/APIManager/3.2.0
WindowsC:\Program Files\WSO2\APIManager\3.2.0

What is 900908 from WSO2 API Manager? ›

Resource forbidden

Is WSO2 open source or not? ›

At WSO2, we provide free open source software – which can be used and improved by anyone – together with valuable business services that help customers save time at a reasonable cost.

Which database support WSO2? ›

WSO2 supports the most common DBMS such as MySQL, MS SQL Server, Oracle, H2, DB2, Derby. Go to WSO2 API Manager 3.0. 0 - Product Compatibility. If you use any of the following WSO2 Identity Server versions with MySQL version 5.7.

How do I get my WSO2 user token? ›

Sign in to WSO2 API Store. Click the Applications menu and open the application for which you want to generate an access token. Click the Production Keys tab and click Generate Keys to create an application access token. You can use this token to invoke all APIs that you subscribe to using the same application.

How do I change my WSO2 admin password? ›

Login with the admin credentials (default is admin / admin), Go to the Configure Tab and select Users and Roles. After that, select Change My password. You enter the current password and the new password to change it.

How do I reset my WSO2 admin password? ›

Access the WSO2 Identity Server dashboard using the following link: https://localhost:<port_number>/dashboard . Click Forgot Password. Enter the user's username, select Recover with Email, and then click Submit.

How to use APIs to pull data? ›

Now, we will use Acho as an example to demonstrate how to connect to your API with no coding.
  1. Configure the API endpoint. An API endpoint can be complex. ...
  2. Create an API resource. ...
  3. Store data into a database. ...
  4. Transform the API data. ...
  5. Export the data to an application. ...
  6. Check and maintain the pipeline.
Apr 26, 2023

How do I start Apim? ›

How to Create an API
  1. Determine Your Requirements. First, you'll need to determine your API requirements. ...
  2. Design Your API. Next, you'll need to consider API design. ...
  3. Develop Your API. Now, it's time to start developing your API product. ...
  4. Test Your API. ...
  5. Publish/Deploy Your API. ...
  6. Monitor Your API.
Feb 7, 2023

What is the best API manager? ›

Top 10 API Management Tools
  • IBM API Connect.
  • Postman.
  • IBM Cloud Pak for Integration.
  • Workato.
  • Stoplight.
  • WSO2 API Manager.
  • SwaggerHub.
  • Kong API Gateway.
5 days ago

What is the difference between API manager and API gateway? ›

While API Gateways and API management can be used interchangeably, strictly speaking an API gateway refers to the individual proxy server, while API management refers to the overall solution of managing APIs in production which includes a set of API gateways acting in a cluster, an administrative UI, and may even ...

Why do I need an API manager? ›

An API management system allows developers to store documentation in a portal where developers inside and outside the organization can access it. This centralized repository allows engineers to quickly implement the proper methods to call the API and know what response to expect, smoothing the onboarding process.

Do APIs push or pull data? ›

Learn more about APIs. An API is useful for pulling specific information from another program. If you know how to read the documentation and write the requests, you can get lots of great data back.

Can APIs push and pull data? ›

Many companies use both pull and push approaches in their APIs and have endpoints to receive full lists of user's tasks, items, etc; as well as offering push services to notify other applications of updates.

Can you push data through an API? ›

Abstract. The Push API enables sending of a push message to a web application via a push service. An application server can send a push message at any time, even when a web application or user agent is inactive. The push service ensures reliable and efficient delivery to the user agent.

Is APIM an API gateway? ›

API Management (APIM) is a way to create consistent and modern API gateways for existing back-end services. APIM system consists of following components, The API gateway is the endpoint that: Accepts API calls and routes them to your backends.

How do I access API endpoint? ›

Here are some short steps to find APIs to find their endpoints:
  1. Go to View -> Developer -> Developer Tools to open Chrome's Developer Tools. ...
  2. After that, select the XHR filter. ...
  3. After that, you'll need to devote some time to researching the specific request.
  4. Then, to view the data, go to the preview tab.

What is API for beginners? ›

What is an API for a beginner? An API key for beginners is a set of methods and functions that an app or program uses to communicate with another app or program. They are also known as "methods" in computer science. Users can use an API to obtain information from other programs, get data, and more.


Top Articles
Latest Posts
Article information

Author: Msgr. Benton Quitzon

Last Updated: 06/09/2023

Views: 6186

Rating: 4.2 / 5 (43 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Msgr. Benton Quitzon

Birthday: 2001-08-13

Address: 96487 Kris Cliff, Teresiafurt, WI 95201

Phone: +9418513585781

Job: Senior Designer

Hobby: Calligraphy, Rowing, Vacation, Geocaching, Web surfing, Electronics, Electronics

Introduction: My name is Msgr. Benton Quitzon, I am a comfortable, charming, thankful, happy, adventurous, handsome, precious person who loves writing and wants to share my knowledge and understanding with you.