# 🌐 Please help us test: API Column and Webhook action

**URL:** <https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920>\
**Category:** Ask for Help\
**Created:** [December 15, 2020, 10:30pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920 "2020-12-15T22:30:00Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mark](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mark/32/125_2.png) [@Mark](https://community.glideapps.com/u/Mark)\
**Post date:** [December 15, 2020, 10:30pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/1 "2020-12-15T22:30:00Z")

</div>

## The Insiders instance is only for testing. Don’t build production apps there. We might break or even delete them.

The **API Column** lets you get data from an external service directly into your app, without involving Google Sheets. You will have to implement the API endpoint.

The **Webhook Action** is an action that lets you call into a webhook. Among other things this lets you call Integromat from Glide.

**This is an experimental feature** which is still subject to change, but we wanted to get some of your feedback. You can check it out on our [insiders instance](https://staging.heyglide.com/).

My first use case for the API column is my personal app “Big Words”, which is a flash card vocabulary training app. To add new words to the app I didn’t want to have to type in the full definition of a word, but instead get the definition from an online dictionary:

![2020-12-15 15.29.41](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/b/7/b7339c2f2e87a8f47b079f9fd92de5aa2258e2d5.gif)

Here’s what the configuration of the column looks like:

 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/4/d/4dcf193e840ba3fb421c0e0b4e0c669c064af039.png)

I posted a comment below with information on how to implement an endpoint for the API column and the webhook. Note again that this is still preliminary and will most likely change.

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [December 15, 2020, 10:30pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/2 "2020-12-15T22:30:38Z")

</div>

Wow here we go.

---

<div class="post-metadata">

**Author:** ![Mark](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mark/32/125_2.png) [@Mark](https://community.glideapps.com/u/Mark)\
**Post date:** [December 15, 2020, 10:30pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/3 "2020-12-15T22:30:55Z")

</div>

# Updated: The Glide API

This is a quick reference on how to implement a Glide API endpoint. API endpoints are used for the API column and the webhook action.

## Implementing your endpoint

The endpoint must be HTTPS and support the `POST` method. Glide will send a JSON request body. The format of the body differs between the API column and the Webhook action.

## The API column

For the API column, the request body will contain the following fields:

- `hookKind` is the string `api-column`.
- `appID` is the calling app’s ID.
- `params` is an object containing one field per argument passed to the API column. Its format is described further down.

Here’s an example request body:

```auto
{
    "hookKind": "api-column",
    "appID": "wZWcgQbqV2pYGRas3qRH",
    "params": {
        "pokemon": {
            "type": "string",
            "value": "Bulbasaur"
        }
    }
}

```

The endpoint should produce a success status code with a JSON body of the same format as an argument (see below), like this:

```auto
{
    "type": "string",
    "value": "Known as the Seed Pokémon, Bulbasaur can survive for days solely on sunlight."
}

```

If the endpoint produces an error status code, Glide will ignore the error and the value for the column in that row in Glide will be empty. This might change in the future, for example by throttling or disabling endpoints that return too many errors.

### Caveats

- Glide doesn’t currently cache the results of API column endpoint calls, and there is no throttling mechanism from Glide’s side, so be careful about not overloading your server. For example, if you add an API column to a sheet with a thousand rows and then scroll around in the Data Editor, your server will receive hundreds of API calls in very short order. You probably also don’t want to do rollups over an API column.
- There’s no guarantee that the API column endpoint will be called at specific times. Right now Glide calls the endpoint right away whenever it needs the data from it, but we might introduce caching, throttling, or other measures.

## Webhook action

- `hookKind` is the string `app-action`.
- `appID` is the calling app’s ID.
- `idempotencyKey` is a unique string identifying the webhook request. Webhooks will be retried if they fail, but it is possible that webhooks will be called with the same invocation more than once in very rare circumstances. You may use the `idempotencyKey` to ensure you only service the request exactly once.
- `timestamp` is the approximate date/time when the action was triggered.
- `params` is an object containing one field per argument passed to the API column. Its format is described below.

Glide will try a webhook endpoint up to five times to improve delivery reliability. The response body is ignored, but HTTP status codes are respected. HTTP 2xx is treated as a success, HTTP 3xx is respected and followed, and all other statuses, including socket connection failures, are treated as failures and are eligible for retrying.

Retries occur on an exponential backoff schedule, but attempt timing is not precise. You may expect retries to follow this schedule with up to two additional minutes of delay:

| Failed attempts | Retry after |
| --- | --- |
| 1 | 2 minutes |
| 2 | 4 minutes |
| 3 | 8 minutes |
| 4 | 16 minutes |
| 5 | never |

## The `params` object

For both kinds of calls, Glide sends a `params` field, which is an object with one field per argument passed.

Each argument is an object with two fields:

- `type` is the type of the argument. It can be either `"string"`, `"number"`, `"boolean"`, or `"date-time"`.
- `value` is the value. If the `type` is `"string"`, this will be a string. For `"number"` it will be a number. For `"boolean"` a boolean. For `"date-time"` it will be a string encoding the date-time in simplified extended ISO format (ISO 8601).

Note that arguments might be missing if they are empty.

## Authentication

Glide will send a password in the `Authorization` header like this:

```auto
Authorization: Basic 56e7ccd3-655a-47fc-a905-5ad05a5f50cd

```

You can look up the expected password in the webhook configuration in Glide. Your endpoint should check whether the correct password is sent, to make sure that it was really called from Glide.

---

<div class="post-metadata">

**Author:** ![Robert\_Petitto](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/robert_petitto/32/25193_2.png) [@Robert\_Petitto](https://community.glideapps.com/u/Robert_Petitto)\
**Post date:** [December 15, 2020, 10:37pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/4 "2020-12-15T22:37:23Z")

</div>

Did you hear my jaw just hit the floor? Ohhhhhhh buddy let’s build us some fancy apps!

---

<div class="post-metadata">

**Author:** ![Lucas\_Pires](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/lucas_pires/32/64863_2.png) [@Lucas\_Pires](https://community.glideapps.com/u/Lucas_Pires)\
**Post date:** [December 15, 2020, 10:37pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/5 "2020-12-15T22:37:30Z")

</div>

Count on me!!

---

<div class="post-metadata">

**Author:** ![Rosewebstudio](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rosewebstudio/32/12261_2.png) [@Rosewebstudio](https://community.glideapps.com/u/Rosewebstudio)\
**Post date:** [December 15, 2020, 10:41pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/6 "2020-12-15T22:41:06Z")

</div>

Exciting development, that will keep me busy. Thanks @Mark

---

<div class="post-metadata">

**Author:** ![Robert\_Petitto](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/robert_petitto/32/25193_2.png) [@Robert\_Petitto](https://community.glideapps.com/u/Robert_Petitto)\
**Post date:** [December 15, 2020, 10:47pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/7 "2020-12-15T22:47:33Z")

</div>

I’ll be the first to admit that my API skills are next to none. This will be a nice way for me to learn the ropes! Hopefully we can do something like we did with the actions topic and have an API topic that will allow us to learn from each other.

---

<div class="post-metadata">

**Author:** ![V88](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/v88/32/90054_2.png) [@V88](https://community.glideapps.com/u/V88)\
**Post date:** [December 15, 2020, 10:47pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/8 "2020-12-15T22:47:39Z")

</div>

Wow. I wondered why @Mark has been so quiet.

---

<div class="post-metadata">

**Author:** ![Lisa](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Lisa](https://community.glideapps.com/u/Lisa)\
**Post date:** [December 15, 2020, 10:49pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/9 "2020-12-15T22:49:33Z")

</div>

I swear every time I’m working on a new app with a challenge here comes the Glide team with the exact solution I need. Super excited about the possibilities with this!

---

<div class="post-metadata">

**Author:** ![david](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/david/32/62831_2.png) [@david](https://community.glideapps.com/u/david)\
**Post date:** [December 15, 2020, 11:11pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/10 "2020-12-15T23:11:17Z")

</div>

Ooohhh yeahhhh… Images from text.

 ![2020-12-15 17.10.23](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/c/6/c698f0d1866d4665c68f7e0fa0fafd2428c32996.gif)

---

<div class="post-metadata">

**Author:** ![Rosewebstudio](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rosewebstudio/32/12261_2.png) [@Rosewebstudio](https://community.glideapps.com/u/Rosewebstudio)\
**Post date:** [December 15, 2020, 11:15pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/11 "2020-12-15T23:15:18Z")

</div>

@david your just showing off now 😉

Super powerful 💥 next level wizardry amazing 🤩

---

<div class="post-metadata">

**Author:** ![ehdubya](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/ehdubya/32/24087_2.png) [@ehdubya](https://community.glideapps.com/u/ehdubya)\
**Post date:** [December 15, 2020, 11:18pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/12 "2020-12-15T23:18:02Z")

</div>

Me, 1 hour ago: 🥱

Me, as of right now: 🤯

---

<div class="post-metadata">

**Author:** ![Lucas\_Pires](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/lucas_pires/32/64863_2.png) [@Lucas\_Pires](https://community.glideapps.com/u/Lucas_Pires)\
**Post date:** [December 15, 2020, 11:23pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/13 "2020-12-15T23:23:28Z")

</div>

I’m feeling so lost, because I have no idea how to set it up lol but as @Lisa said, every app I’ll create it’s a new challenge and also a sandbox where we can try and implement some new and powerful features like this one! Thanks you team! 🔥

---

<div class="post-metadata">

**Author:** ![Steven](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/steven/32/15309_2.png) [@Steven](https://community.glideapps.com/u/Steven)\
**Post date:** [December 15, 2020, 11:26pm UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/14 "2020-12-15T23:26:19Z")

</div>

Game changer! This is incredible. 🤯

Does anyone know any good articles on understanding API fundamentals?

---

<div class="post-metadata">

**Author:** ![erwblo](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/erwblo/32/75_2.png) [@erwblo](https://community.glideapps.com/u/erwblo)\
**Post date:** [December 16, 2020, 12:03am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/15 "2020-12-16T00:03:15Z")

</div>

Would love to have templates for this or the option to copy examples! To make it available for the masses (i mean me 😉 )

---

<div class="post-metadata">

**Author:** ![david](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/david/32/62831_2.png) [@david](https://community.glideapps.com/u/david)\
**Post date:** [December 16, 2020, 12:25am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/16 "2020-12-16T00:25:53Z")

</div>

@Lisa would love to hear more about how you’d use this.

---

<div class="post-metadata">

**Author:** ![SantiagoPerez](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/santiagoperez/32/16807_2.png) [@SantiagoPerez](https://community.glideapps.com/u/SantiagoPerez)\
**Post date:** [December 16, 2020, 12:31am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/17 "2020-12-16T00:31:49Z")

</div>

I think this is what I need for my weather app. Only problem I don’t know how to make the API work. 🤦🏿🤦🏿🤦🏿

---

<div class="post-metadata">

**Author:** ![SantiagoPerez](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/santiagoperez/32/16807_2.png) [@SantiagoPerez](https://community.glideapps.com/u/SantiagoPerez)\
**Post date:** [December 16, 2020, 12:35am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/18 "2020-12-16T00:35:55Z")

</div>

Does anyone have a tutorial on how to work with this???

---

<div class="post-metadata">

**Author:** ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)\
**Post date:** [December 16, 2020, 12:52am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/19 "2020-12-16T00:52:52Z")

</div>

Ask Bob maybe 😉 He may have a 20-minute long video about this before the weekend 😅

---

<div class="post-metadata">

**Author:** ![Lisa](https://avatars.discourse-cdn.com/v4/letter/l/f08c70/32.png) [@Lisa](https://community.glideapps.com/u/Lisa)\
**Post date:** [December 16, 2020, 1:15am UTC](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920/20 "2020-12-16T01:15:25Z")

</div>

A client I’m working with wanted to implement stock information ([https://finnhub.io/](https://finnhub.io/)), this is perfect for it!

I’m also curious if this could evolve into a solution for payment APIs

I stumbled on this list when I was wrecking my brain researching on how to get it done. Really useful in thinking about all the possibilities with this new feature

> **[A Curated Collection of Over 150 API’s to Build Great Products](https://benjamin-libor.medium.com/a-curated-collection-of-over-150-apis-to-build-great-products-fdcfa0f361bc)**
>
> Let’s talk about a few awesome API’s today.

[Next page](https://community.glideapps.com/t/please-help-us-test-api-column-and-webhook-action/19920.md?page=2)
