docs/production/gif-picker-integrations.md
This page documents the server-level configuration required to enable GIPHY or Tenor integrations to add GIFs in your message on a self-hosted Zulip server.
:::{note} If API keys are configured for multiple integrations, Zulip will prioritize Tenor, followed by KLIPY, and then GIPHY. :::
To enable the GIPHY integration, you need to get a beta or production API key from GIPHY.
Create a GIPHY API key by clicking “Create an App” on the Developer Dashboard.
Choose SDK as product type and click Next Step.
Enter a name and a description for your app and click on Create New App. The hostname for your Zulip server is a fine name.
You will receive a rate-limited beta API key, which may be sufficient for smaller Zulip servers.
(optional) If the beta API key rate limit is too low for your organization, apply for a production API key by following the instructions provided by GIPHY when you receive your beta API key. Note that when submitting a screenshot to request a production API key, GIPHY expects the screenshot to show the full page (including the URL).
You can then configure your Zulip server to use GIPHY API as follows:
In /etc/zulip/settings.py, enter your GIPHY API key as
GIPHY_API_KEY = "<Your API key from GIPHY>".
GIPHY API keys are not secrets -- GIPHY expects every browser or
other client connecting to your Zulip server will receive a copy --
which is why they are configured in settings.py and not
zulip-secrets.conf.
Restart the Zulip server with
/home/zulip/deployments/current/scripts/restart-server.
Congratulations! You've configured the GIPHY integration for your Zulip server. Your users can now use the integration as described in the help center article. (A browser reload may be required).
To enable the Tenor GIF integration, you will need to create a production API key from Tenor.
Navigate to the Google Cloud Console and either sign in with an existing Google account or create a new one.
Choose an existing Google Cloud project where you want to enable the Tenor API, or create a new project if necessary.
In the Google Cloud Console, search for "Tenor API" in the search bar.
Select the Tenor API from the results and click "Enable" to activate it for your project.
After enabling the API, go to the "Credentials" section within your project.
Click "Create credentials" and choose "API Key" from the dropdown menu.
While configuring the API key, you can optionally restrict it to only call the Tenor API.
Store the newly generated API key.
You can then configure your Zulip server to use the Tenor API as follows:
In /etc/zulip/settings.py, enter your Tenor API key as
TENOR_API_KEY = "<Your API key from the Google Cloud Console>".
Just like GIPHY API keys, Tenor API keys are not secrets -- Tenor expects
every browser or other client connecting to your Zulip server will
receive a copy -- which is why they are configured in settings.py and not
zulip-secrets.conf.
Restart the Zulip server with
/home/zulip/deployments/current/scripts/restart-server.
Congratulations! You've configured the Tenor integration for your Zulip server. Your users can now use the integration as described in the help center article. (A browser reload may be required).
To enable the KLIPY GIF integration, you will need to create a test or production API key from KLIPY.
On the KLIPY Developer page, navigate to the API Keys section
Select Add Platform and enter the details of your Zulip server.
In the Create API Key modal, enter the relevant details and select Create.
You will receive a rate-limited test API key, which may be sufficient for smaller Zulip servers.
(optional) If the test API key rate limit is too low for your Zulip server, you can click on the three-dot button on the right and select Request Production. Enter the necessary details and select Apply.
Store the newly generated API key.
You can then configure your Zulip server to use the KLIPY API as follows:
In /etc/zulip/settings.py, enter your KLIPY API key as
KLIPY_API_KEY = "<Your API key>".
Just like GIPHY API keys, KLIPY API keys are not secrets -- KLIPY expects
every browser or other client connecting to your Zulip server will
receive a copy -- which is why they are configured in settings.py and not
zulip-secrets.conf.
Restart the Zulip server with
/home/zulip/deployments/current/scripts/restart-server.
Congratulations! You've configured the KLIPY integration for your Zulip server. Your users can now use the integration as described in the help center article. (A browser reload may be required).