> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oimo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Oimo developer docs

> Read reviewed AI and cloud prices with an API key and receive signed webhooks when prices or terms of service change.

Oimo records the published prices and terms of service of AI and cloud providers. Connect your systems in two ways:

* [Webhooks](/webhooks): a signed `POST` to your endpoint when a price, a resource or a terms document changes.
* [The price history API](/price-history): `GET /v1/prices/history` with a read-only API key returns every reviewed price, pinned to an instant you choose.

The base URL is `https://oimo.com`. All requests and deliveries use HTTPS and JSON.

## Quickstart

From sign-up to a verified webhook and a first API call in five steps.

### 1. Sign in

Open [https://oimo.com](https://oimo.com) and choose **Sign in**. If you have no account yet, create one on the sign-in page.

### 2. Create a workspace

Webhooks, API keys and teammates belong to a workspace. Choose **Manage workspaces**, then **Create workspace**. You become its admin; invite teammates under **Members & invitations**.

### 3. Create a webhook

1. Open **Connect → Webhooks** and choose **New webhook**.
2. Enter a name and your endpoint URL (it must be `https://`).
3. Tick the events you want (start with **Price changes**) and the providers, or **All providers**.
4. Choose **Create webhook**. The signing secret (`whsec_…`) is shown when the webhook is created: store it with your receiver. You can reveal it again from the webhook's **Settings** with **Reveal signing secret**.
5. Open the webhook's **Settings** and choose **Send test event**. A signed `webhook.test` event goes out with the next delivery run (within 5 minutes). Its attempts appear under **Deliveries**.

Your receiver must [verify the signature](/webhooks/verify) and answer with a `2xx` status within 5 seconds. A minimal Node.js receiver:

```bash theme={null}
npm install express standardwebhooks
```

```javascript receiver.mjs theme={null}
import express from "express";
import { Webhook } from "standardwebhooks";

const webhook = new Webhook(process.env.OIMO_WEBHOOK_SECRET);
const app = express();

app.post("/hooks/oimo", express.raw({ type: "application/json", limit: "5mb" }), (req, res) => {
  let event;
  try {
    event = webhook.verify(req.body, req.headers);
  } catch {
    return res.status(400).send("invalid signature");
  }
  console.log(event.type, event.id);
  res.sendStatus(204);
});

app.listen(3000);
```

### 4. Create an API key

Open **Connect → API keys**, name the key after the system that will use it and choose **Create key**. The key is shown once. Keys can read; they cannot change anything.

### 5. Read price history

```bash theme={null}
export OIMO_API_KEY='<your key>'
curl -s "https://oimo.com/v1/prices/history?providers=openai&limit=5" \
  -H "Authorization: Bearer $OIMO_API_KEY"
```

The answer names the `asOf` instant it was read at. Store it with anything you compute from the prices: the same `asOf` always returns the same rows. See [Price history API](/price-history).

## Concepts

* **Workspace**: Your organization. Webhooks, API keys and members belong to one workspace. One account can belong to several and switch between them.
* **Roles**: **Admins** and **members** create and change webhooks and API keys and can reveal or rotate signing secrets. Only admins invite people, change roles and remove members. Every workspace keeps at least one admin.
* **Provider**: A company that sells AI or cloud services, named by a slug such as `openai` or `aws`. `GET /v1/providers` lists them.
* **Resource**: What a provider sells and prices: a model, a GPU type, a service. Named the way the provider names it (`gpt-5`), and where known also by a canonical id (`openai/gpt-5`).
* **Price line**: One price of a resource: a `dimension` (input tokens, output tokens, GPU hours, …), a `unit`, a `currency` and a `pricingTier`.
* **Alias group**: One resource under each provider's own name for it, for example the same model sold by its maker, by AWS and by Azure. Webhooks and the price history API can follow a group instead of naming each provider's resource.
* **Reviewed price**: Only published prices are served: new prices pass automatic checks, and some are held for a person to approve. Prices that are pending or rejected never appear in the API or in webhooks.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.