# Working with GraphQL

It's the same API we use internally for developing our applications, most notably our own dashboard. We follow a [Relay style](https://relay.dev/) of schema.

If you're new to GraphQL, Apollo has [resources for beginners](https://blog.apollographql.com/the-basics-of-graphql-in-5-links-9e1dc4cac055). [The official documentation](https://graphql.org/) is another good starting point.

## Prerequisite

{% content-ref url="../getting-started/acquire-your-api-key" %}
[acquire-your-api-key](https://docs.bloodbath.io/getting-started/acquire-your-api-key)
{% endcontent-ref %}

## Endpoint

Bloodbath's GraphQL endpoint is:

```
https://api.bloodbath.io/graphql
```

It supports introspection so you can query the whole schema.

## Authorization

To start querying the endpoint, you must add the API key to your `authorization` headers.

```
{
  "headers": {
    "authorization": "Bearer <Your API key>"
  }
}
```

### Check your access

Once you have the headers in place you can ping the GraphQL API

```
query ping {
  ping {
    receivedAt
  }
}
```

It should respond with something like

```
{
  "data": {
    "ping": {
      "receivedAt": "2021-05-23T20:45:44.409594Z"
    }
  }
}
```

## Examples

### List events

```
query listEvents {
  listEvents(first: 5) {
    pageInfo {
      startCursor
    }
    edges {
      node {
      id
      eventId
      method
      lockedAt
      }
    }
  }
}
```

{% hint style="info" %}
You'll notice that a difference between id and eventId; we have a **Relay style schema.** It means we have to map a node id and the event id has to be put on the side.
{% endhint %}

### Find an event

```
query findEvent{
  findEvent(
    id: "f6596250-044b-4070-a256-31f0977ea4f3"
  ) {
    eventId
    scheduledFor
  }
}
```
