🌐 Please help us test: API Column and Webhook action

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.

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:

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

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.

31 Likes

Wow here we go.

5 Likes

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:

{
    "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:

{
    "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:

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.

6 Likes

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

9 Likes

Count on me!!

1 Like

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

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.

13 Likes

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

3 Likes

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!

3 Likes

Ooohhh yeahhhh… Images from text.

10 Likes

@david your just showing off now :wink:

Super powerful :boom: next level wizardry amazing :star_struck:

1 Like

Me, 1 hour ago: :yawning_face:

Me, as of right now: :exploding_head:

4 Likes

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! :fire:

3 Likes

Game changer! This is incredible. :exploding_head:

Does anyone know any good articles on understanding API fundamentals?

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

4 Likes

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

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

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

1 Like

Ask Bob maybe :wink: He may have a 20-minute long video about this before the weekend :sweat_smile:

7 Likes

A client I’m working with wanted to implement stock information (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

3 Likes