Guides
Limits and usage
What counts as an operation, your monthly allowance, and what happens at the limit.
Each month, your plan includes a number of operations: the changes we make to passes for you. Reads are always free.
What counts
| Request | Operations |
|---|---|
| Create a pass | 1 |
| Update a pass, when something changes | 1 |
| Update a pass with the same content | 0 |
| Send a notification | 1 |
| Send a broadcast | 1 a pass |
| Update a template's passes, on save or later | 1 a pass |
| Spreadsheet import (dashboard) | 1 a pass made or changed |
| Revoke, delete, read, list, export, templates, images | 0 |
A pass that's installed on many phones still costs one operation an update: delivering it to every device is included.
Your allowance
The allowance belongs to your organization, and all its workspaces share it. It resets on the 1st of each month, UTC.
| Plan | Operations a month | At the allowance |
|---|---|---|
| Free | 1,000 | Further operations are refused until the 1st |
| Starter | 100,000 | Further operations are refused until the 1st |
| Growth | 1,000,000 | Operations carry on, billed as extra |
| Enterprise | 10,000,000 | Operations carry on, billed as extra |
An operation the allowance doesn't cover is refused with 429 usage_limit_exceeded, and nothing is changed. A broadcast or a template update is checked before it starts: if all its passes won't fit, it's refused as a whole (broadcast_over_allowance, template_update_over_allowance), rather than reaching some holders and not others.
A workspace's own limit
An organization's owners and admins can give a workspace its own monthly limit, such as for a brand, department, client or project, out of the shared allowance. Past it, that workspace's operations are refused with workspace_limit_reached, whatever the plan.
In an organization with more than one workspace, a workspace's API key and its people are told only that workspace's usage and limit, never the organization's plan or what's left of its allowance. If the shared allowance is what stops something, the answer says so without the figures, and remaining is null.
Test passes
Passes signed with our test credentials have their own limit: 1,000 operations a month, shared by your organization's workspaces, on every plan. They also count towards your allowance. Past it, operations on test passes are refused with platform_usage_limit; passes on your own credentials carry on.
Check your usage
Get usage answers with this month's count, the allowance and when it resets:
curl "https://api.walletpassapi.com/v1/usage" \
-H "Authorization: Bearer $WALLET_API_KEY"const res = await fetch("https://api.walletpassapi.com/v1/usage", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.WALLET_API_KEY}`,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://api.walletpassapi.com/v1/usage",
headers={"Authorization": f"Bearer {os.environ['WALLET_API_KEY']}"},
)
data = res.json()<?php
$ch = curl_init("https://api.walletpassapi.com/v1/usage");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("WALLET_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);We also email your organization's owner and admins when it reaches 80% and 100% of its allowance, and a workspace's owners too when it reaches 80% and 100% of its own limit. The organization's Usage tab shows each workspace's share.
Requests per minute
Apart from operations, one API key can send about 600 requests a minute. Past that, requests are refused with 429 rate_limited and a Retry-After header: wait that many seconds, then carry on. To do a lot at once, such as notify thousands of passes, send one broadcast rather than a request for each.