API reference
Webhooks, queue, SeleMail, routing and push API
All APIs · SDKs · Continue with SeleID (OIDC) · SeleStorage · SeleBase · Webhooks, queue, SeleMail, routing and push · SeleAI · SeleDomains search
Coming soon Version 1.0.0. Webhooks signed with HMAC-SHA256 (header seleid-signature: t=<unix>,v1=<hex> over "<t>.<body>"), a durable job queue, email sending, inbound routing and push. Auth reuses the SeleStorage key table.
Base URL
https://api.seleid.dev Base URL.
Authentication and scopes
Bearer API key. Scopes: read, write, admin.
Rate limits and quotas
Monthly queue operations and mail sends by plan are hard stops (429 quota_exceeded, allowance_exceeded). Mail overage happens only if you set an overage limit.
Endpoints
GET /v1/webhooks/endpointsList webhook endpointsPOST /v1/webhooks/endpointsCreate a webhook endpointDELETE /v1/webhooks/endpoints/{id}Delete an endpointPOST /v1/webhooks/endpoints/{id}/rotateRotate the signing secretPOST /v1/eventsEmit an event to matching endpointsGET /v1/webhooks/deliveriesDelivery logPOST /v1/webhooks/deliveries/{id}/replayReplay a deliveryGET /v1/queue/deadList exhausted jobsPOST /v1/queue/dead/{id}/retryRetry an exhausted jobGET /v1/usageUsage this monthPOST /v1/mail/sendSend an emailPUT /v1/mail/overage-limitSet the overage limitGET /v1/mail/suppressionsList suppressed addressesDELETE /v1/mail/suppressions/{email}Remove a suppressionPOST /v1/mail/bouncesReport a bouncePOST /v1/routing/domainsAdd an Email Routing domainGET /v1/routing/rulesList routing rulesPOST /v1/routing/rulesAdd a routing ruleDELETE /v1/routing/rules/{id}Remove a routing rulePOST /v1/push/devicesRegister a device tokenDELETE /v1/push/devices/{id}Unregister a devicePOST /v1/push/sendSend a push to a user
GET /v1/webhooks/endpoints
List webhook endpoints. Scope: read.
Authentication: API key, scope or role read.
curl
curl -X GET "https://api.seleid.dev/v1/webhooks/endpoints" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/endpoints', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/webhooks/endpoints",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Endpoints. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/webhooks/endpoints
Create a webhook endpoint. Scope: admin. https and public URLs only; redirects are not followed; 10 s timeout. The signing secret is returned once.
Authentication: API key, scope or role admin.
curl
curl -X POST "https://api.seleid.dev/v1/webhooks/endpoints" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/sele","events":["order.created"]}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/endpoints', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"url": "https://example.com/hooks/sele",
"events": [
"order.created"
]
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/webhooks/endpoints",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"url": "https://example.com/hooks/sele",
"events": [
"order.created",
],
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
201 | Created. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
DELETE /v1/webhooks/endpoints/{id}
Delete an endpoint. Scope: admin.
Authentication: API key, scope or role admin.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Endpoint id. |
curl
curl -X DELETE "https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.delete(
"https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Deleted. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/webhooks/endpoints/{id}/rotate
Rotate the signing secret. Scope: admin.
Authentication: API key, scope or role admin.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Endpoint id. |
curl
curl -X POST "https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID/rotate" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID/rotate', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/webhooks/endpoints/YOUR_ID/rotate",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | New secret. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
404 | Not found. |
POST /v1/events
Emit an event to matching endpoints. Scope: write. Deliveries are queued and retried with backoff.
Authentication: API key, scope or role write.
curl
curl -X POST "https://api.seleid.dev/v1/events" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"order.created","data":{"id":"o_1"}}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/events', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"type": "order.created",
"data": {
"id": "o_1"
}
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/events",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"type": "order.created",
"data": {
"id": "o_1",
},
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
202 | Accepted. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
GET /v1/webhooks/deliveries
Delivery log. Scope: read.
Authentication: API key, scope or role read.
| Parameter | In | Required | Description |
|---|---|---|---|
endpoint | query | no | Filter by endpoint id. |
curl
curl -X GET "https://api.seleid.dev/v1/webhooks/deliveries" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/deliveries', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/webhooks/deliveries",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Deliveries. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/webhooks/deliveries/{id}/replay
Replay a delivery. Scope: write.
Authentication: API key, scope or role write.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Delivery id. |
curl
curl -X POST "https://api.seleid.dev/v1/webhooks/deliveries/YOUR_ID/replay" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/webhooks/deliveries/YOUR_ID/replay', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/webhooks/deliveries/YOUR_ID/replay",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
202 | Queued. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
404 | Not found. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
GET /v1/queue/dead
List exhausted jobs. Scope: admin.
Authentication: API key, scope or role admin.
curl
curl -X GET "https://api.seleid.dev/v1/queue/dead" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/queue/dead', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/queue/dead",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Jobs. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/queue/dead/{id}/retry
Retry an exhausted job. Scope: admin.
Authentication: API key, scope or role admin.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Job id. |
curl
curl -X POST "https://api.seleid.dev/v1/queue/dead/YOUR_ID/retry" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/queue/dead/YOUR_ID/retry', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/queue/dead/YOUR_ID/retry",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
202 | Queued. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
GET /v1/usage
Usage this month. Scope: read.
Authentication: API key, scope or role read.
curl
curl -X GET "https://api.seleid.dev/v1/usage" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/usage', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/usage",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Usage. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/mail/send
Send an email. Scope: write. Suppressed recipients are skipped. Overage only with an opt-in limit.
Authentication: API key, scope or role write.
curl
curl -X POST "https://api.seleid.dev/v1/mail/send" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"hello@yourdomain.com","to":"ada@example.com","subject":"Welcome","text":"Hi Ada"}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/mail/send', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"from": "hello@yourdomain.com",
"to": "ada@example.com",
"subject": "Welcome",
"text": "Hi Ada"
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/mail/send",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"from": "hello@yourdomain.com",
"to": "ada@example.com",
"subject": "Welcome",
"text": "Hi Ada",
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Result. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
503 | mail_unavailable. |
PUT /v1/mail/overage-limit
Set the overage limit. Scope: admin.
Authentication: API key, scope or role admin.
curl
curl -X PUT "https://api.seleid.dev/v1/mail/overage-limit" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/mail/overage-limit', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({}),
});
const data = await res.json();Python
import os, requests
res = requests.put(
"https://api.seleid.dev/v1/mail/overage-limit",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Set. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
GET /v1/mail/suppressions
List suppressed addresses. Scope: read.
Authentication: API key, scope or role read.
curl
curl -X GET "https://api.seleid.dev/v1/mail/suppressions" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/mail/suppressions', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/mail/suppressions",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Addresses. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
DELETE /v1/mail/suppressions/{email}
Remove a suppression. Scope: admin.
Authentication: API key, scope or role admin.
| Parameter | In | Required | Description |
|---|---|---|---|
email | path | yes | URL-encoded address. |
curl
curl -X DELETE "https://api.seleid.dev/v1/mail/suppressions/YOUR_EMAIL" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/mail/suppressions/YOUR_EMAIL', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.delete(
"https://api.seleid.dev/v1/mail/suppressions/YOUR_EMAIL",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Removed. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/mail/bounces
Report a bounce. Scope: admin. Hard bounces and complaints suppress the address.
Authentication: API key, scope or role admin.
curl
curl -X POST "https://api.seleid.dev/v1/mail/bounces" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/mail/bounces', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/mail/bounces",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
202 | Recorded. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/routing/domains
Add an Email Routing domain. Scope: admin.
Authentication: API key, scope or role admin.
curl
curl -X POST "https://api.seleid.dev/v1/routing/domains" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/routing/domains', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/routing/domains",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
201 | Added. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
409 | domain_taken. |
502 | routing_api_error. |
GET /v1/routing/rules
List routing rules. Scope: read.
Authentication: API key, scope or role read.
curl
curl -X GET "https://api.seleid.dev/v1/routing/rules" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/routing/rules', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.get(
"https://api.seleid.dev/v1/routing/rules",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Rules. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/routing/rules
Add a routing rule. Scope: admin. Action types: forward (verified destination), webhook (https URL) or code.
Authentication: API key, scope or role admin.
curl
curl -X POST "https://api.seleid.dev/v1/routing/rules" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"yourdomain.com","local":"support","action":{"type":"forward","to":"team@example.com"}}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/routing/rules', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"domain": "yourdomain.com",
"local": "support",
"action": {
"type": "forward",
"to": "team@example.com"
}
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/routing/rules",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"domain": "yourdomain.com",
"local": "support",
"action": {
"type": "forward",
"to": "team@example.com",
},
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
201 | Added. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
409 | address_taken. |
DELETE /v1/routing/rules/{id}
Remove a routing rule. Scope: admin.
Authentication: API key, scope or role admin.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Rule id. |
curl
curl -X DELETE "https://api.seleid.dev/v1/routing/rules/YOUR_ID" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/routing/rules/YOUR_ID', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.delete(
"https://api.seleid.dev/v1/routing/rules/YOUR_ID",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Removed. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/push/devices
Register a device token. Scope: write.
Authentication: API key, scope or role write.
curl
curl -X POST "https://api.seleid.dev/v1/push/devices" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"userId":"u1","platform":"android","token":"DEVICE_TOKEN"}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/push/devices', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"userId": "u1",
"platform": "android",
"token": "DEVICE_TOKEN"
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/push/devices",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"userId": "u1",
"platform": "android",
"token": "DEVICE_TOKEN",
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
201 | Registered. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
DELETE /v1/push/devices/{id}
Unregister a device. Scope: write.
Authentication: API key, scope or role write.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Device id. |
curl
curl -X DELETE "https://api.seleid.dev/v1/push/devices/YOUR_ID" \
-H "Authorization: Bearer $SELE_KEY"TypeScript
const res = await fetch('https://api.seleid.dev/v1/push/devices/YOUR_ID', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}` },
});
const data = await res.json();Python
import os, requests
res = requests.delete(
"https://api.seleid.dev/v1/push/devices/YOUR_ID",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Removed. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
POST /v1/push/send
Send a push to a user. Scope: write.
Authentication: API key, scope or role write.
curl
curl -X POST "https://api.seleid.dev/v1/push/send" \
-H "Authorization: Bearer $SELE_KEY" \
-H "Content-Type: application/json" \
-d '{"userId":"u1","title":"Hello","body":"You have a message"}'TypeScript
const res = await fetch('https://api.seleid.dev/v1/push/send', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.SELE_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"userId": "u1",
"title": "Hello",
"body": "You have a message"
}),
});
const data = await res.json();Python
import os, requests
res = requests.post(
"https://api.seleid.dev/v1/push/send",
headers={"Authorization": f"Bearer {os.environ['SELE_KEY']}"},
json={
"userId": "u1",
"title": "Hello",
"body": "You have a message",
}
)
print(res.status_code, res.text)
| Status | Meaning |
|---|---|
200 | Queued. |
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
Errors
| HTTP | Meaning |
|---|---|
400 | Invalid request. |
401 | Missing, invalid or revoked API key. |
403 | Key lacks the required scope, or the account is suspended. |
404 | Not found. |
413 | Payload too large. |
429 | Plan quota or rate limit reached. Hard stop, never an overage charge. |
The machine-readable OpenAPI 3.1 description for this API lives in the SeleID repository under docs/openapi/.