Appwrites Avatars Service
Tags: appwrite
Published: 2021-10-20 18:30:29

**So what is Avatars Service?**
Appwrite is a self-hosted solution that provides developers with a set of easy-to-use and integrate REST APIs to manage their core backend needs. One such API service provided by Appwrites is the Avatar service. The avatar service helps you to complete standard tasks related to images, icons and avatars.  

**Okay, that sounds like something I need to use very often, could you please explain the use cases further?**
Using the avatar service you can fetch country flags, browser icons, generate QR codes, get images from URL, get payment method logos, get favicon of any remote URL and so on...

Not only this, but this service also allows you to resize, crop and change the output image quality to get the best performance and visibility required in your project

<img style="width:100%" src="https://media3.giphy.com/media/FlWgXEtj5aM5G/giphy.gif?cid=ecf05e477zbua8kwkmih9mohuiekm317u8633xyslqgbwzsw&rid=giphy.gif&ct=g"></img>

**Hmm, Sounds cool! But can you please explain me how to use it in my project?**
Yeah sure I could explain it using some examples, do you want to learn using it for client based applications or using server side integrations?

**Well, TEACH ME BOTH!**

Okay so I’ll explain you a few examples in each scenario
Let’s start learning using it to build client based applications and websites. The first step is to setup appwrite web sdk, you can do it by following https://github.com/appwrite/sdk-for-web
I hope that you have read the page above. Anyways, I’ll start by initialising the sdk object using Appwrite server API endpoint and project id which can be found in your project settings page.

```
const sdk = new Appwrite();

sdk
    .setEndpoint('http://localhost/v1') // Your Appwrite Endpoint
    .setProject('455x34dfkj') // Your project ID;
```

Once we are done with this. We’ll begin with our first task. The task is to get the Credit Card icon for major banking providers.

**Request Type:** 

| GET | /v1/avatars/credit-cards/{code} |
| --- | ----------- |

The credit card endpoint returns us the icon of the credit card provider. 
An example request can be 
```
let result  = sdk.avatars.getCreditCard(‘visa’);
```
result will contain a resource url of a png image.

We can also use `width`, `height` and `quality` arguments
The required argument `code` is be a string with possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro

Whereas `width`, `height` and `quality` are optional integer arguments. The arguments `width` and `height` can contain an integer between 0 to 2000, default being 100. However, the argument quality can contain an integer between 0 to 100, default being 100.

###Let’s Try another task
This time we’ll get a **country flag** instead.

**Request Type:** 

| GET | /v1/avatars/flags/{code} |
| --- | --- |

This endpoint can be used to get different country flags. The argument receives a 2 letter country code. Just like in the previous example `width`, `height` and `quality` arguments can be used in this case aswell.
The required argument code is a string which denotes the country code in **ISO Alpha-2** country code format

An example request can be 
```
let result = sdk.avatars.getFlag(‘af’);
```
result contains resource URL containing image of flag in png format.

This **last task** we’ll be doing for the client integrated api requests will be to get QR code

**Request Type:**

|  GET | /v1/avatars/qr |
| --- | --- |

This request converts plain text to a QR code image. 
An example request can be 
```
let result = sdk.avatars.getQR(‘[TEXT]’)
```

result contains resource URL containing image of qr code in png
There are a variety of optional query parameters to change the size and style of resulting image.

These are `size`, `margin` and `download`. `size` and `margin` are integer type arguments accepting integers in range 0 to 1000 and  0 to 10 respectively. The default value of size parameter is 400 whereas for margin is it 1.

The parameter download accepts a Boolean type value, which returns image with `Content-Disposition: attachment` headers for the browser to start downloading it. ‘0’ should be passed for no header and ‘1’ otherwise. Default value is set to ‘0’

**PHEW! That was a lot, please tell me about Server integrated requests**

Sure, I’ll teach through a few examples how to send requests using Server Integrated with Python SDK. To learn how to using Appwrite python SDK check this out https://github.com/appwrite/sdk-for-python

I hope that you have read it already. Let’s start by initialising our sdk

```
from appwrite.client import Client
from appwrite.services.users import Users

client = Client()

(client
  .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
  .set_project('5df5acd0d48c2') # Your project ID
  .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
  .set_self_signed() # Use only on dev mode with a self-signed SSL cert
)
```

Initialize your SDK with Appwrite server API endpoint and project ID which can be found in the project settings page and the API secret key from project’s API keys section.
Make sure your API key is granted with access to the `avatars.read` permission scope
Once this is set, we’ll begin with our next task which is to get image from URL

**Request Type:**

| GET | /v1/avatars/image |
| --- | --- |

This endpoint can be used to fetch a remote image URL and crop it to the needed image size. This endpoint is especially useful in cases when you need to crop and display remote image in your app.

An example request can be:
```
avatars = Avatars(client)
result = avatars.get_image(‘https://example.com’)
```
result contains the image resource url

The required argument is `url`, which contains a string i.e. the Image URL which needs to be cropped

The other optional arguments which could be used are `width` and `height`, both integer type arguments which can be used to resize preview image width. They should contain integer between 0 to 2000

The other methods available are:
<li> Get Favicon: `/v1/avatars/favicon`
ExampleCode:
```
avatars = Avatars(client)

result = avatars.get_favicon('https://example.com')
```
</li>
<li>Get User Initials `/v1/avatars/initials` Example Code:
```
avatars = Avatars(client)

result = avatars.get_initials()
```
This contains `name`,`width`, `height`,`color`,`background` arguments which are all optional</li>

These were some examples which would help you understand how to use the appwrite avatars service using both client side and service side integrations. To know more you may read the documentation at https://appwrite.io/docs/client/avatars. Hope this would help you in understanding avatars service better