---
title: "Watch your integration"
description: "Every call a key made, every webhook you sent, with the code and the timing."
url: "https://openemail.uk/features/api-observability"
---

Built on top

# Watch your integration call by call

Every call a key made, every webhook you sent, with the code and the timing.

[Open mail](https://openemail.uk/mail/inbox) [Get Started](https://openemail.uk/signup.md)[Every walkthrough](https://openemail.uk/features/in-practice.md)

API log

oe\_live\_ … 7f20 Rotated

GET /emails 200 61 ms

POST /emails 429 send\_quota\_exceeded

GET /contacts 200 44 ms

1284 calls logged for this key

Rotating gives a new secret. The scopes and every logged call stay.

How it works

## Running in three steps.

1. 01
   
   Issue a key
   
   Scope it, cap it with a role, and name which addresses it may send as.
2. 02
   
   Read the log
   
   Method, path, status, error code and duration, for each key.
3. 03
   
   Rotate or revoke
   
   Rotating keeps the scopes and the history. The old secret dies at once.

What it runs on

## The parts doing the work.

Nothing here is a separate product. Each one is a piece of the mailbox you already have.

REST API

A documented HTTP API with issuable, scopable, revocable keys.

/threads?query=invoice

{ "threads": 12 }

Same mailbox, whether a person or a program is holding it.

Webhooks

Tell your endpoint when mail arrives, instead of making you poll.

/threads?query=invoice

{ "threads": 12 }

Same mailbox, whether a person or a program is holding it.

Typed SDKs

A TypeScript client first, then the rest.

/threads?query=invoice

{ "threads": 12 }

Same mailbox, whether a person or a program is holding it.

Roles & permissions levels

A role says what somebody may do; an address grant says what they may do it to.

Sarah support@

Alex billing@

Nina careers@

read, or read and send as it, with nothing else visible

Nearby

## Other jobs for the same inbox.

An address per customer

Give every ticket, record or customer its own address, with nothing to create.

Ticket 8123 ticket-8123@ in.yourapp.com

Ticket 8124 ticket-8124@ in.yourapp.com

To ticket-8123@ in.yourapp.com

From ticket-8123@ in.yourapp.com Same address

Email into your app

Mail arriving at your domain reaches your server as a signed webhook, seconds later.

billing@in.yourapp.com Arrived

POST hooks.acme.dev/mail 200

type email.received

to billing@in.yourapp.com

Email inside your product

Send, read and organise mail from your own code with a typed client.

await openemail.emails.send({

from: 'receipts@acme.com',

})

id msg\_3e91c7

queued sent delivered

email.opened email.clicked

[Every walkthrough](https://openemail.uk/features/in-practice.md)
