Errors, Limits & Types
Error handling, rate limits, and data type reference for the PortEden API.
Error Format
Simple errors:
{ "error": "Error message description" } Structured errors (403 access denied, some 400 validation errors):
{ "code": "ACCESS_DENIED", "message": "Token does not allow this operation" } Error Codes
| Code | HTTP Status | Description |
|---|---|---|
ACCESS_DENIED | 403 | Token permissions do not allow this operation |
TOKEN_DENIED | 403 | Token-level restriction prevents access |
TIMEFRAME_DENIED | 403 | Event falls outside the token's allowed timeframe |
NOT_FOUND | 404 | Generic resource not found |
EVENT_NOT_FOUND | 404 | Specific event not found |
CALENDAR_NOT_FOUND | 404 | Specific calendar not found |
HTTP Status Codes
| Status | Meaning |
|---|---|
| 200 | Success |
| 201 | Created (new resource) |
| 400 | Bad request — invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 402 | Payment required — operator limit exceeded |
| 403 | Forbidden — insufficient permissions |
| 404 | Not found |
| 429 | Too Many Requests — rate limit exceeded |
| 500 | Internal server error |
Authentication Errors
{ "error": "API authentication required", "message": "Missing Authorization header. Use: Authorization: Bearer <api_key>" } { "error": "API authentication failed", "message": "Invalid or expired API key" } Rate Limits
All rate limits are IP-based. When exceeded, the API returns 429 Too Many Requests.
Token Auth Endpoints
/api/auth/token
| Scope | Limit | Window |
|---|---|---|
| Global | 30 requests | 1 minute |
| Global | 100 requests | 1 hour |
| Login initiation | 10 requests | 1 minute |
| Login initiation | 30 requests | 1 hour |
| Login polling | 60 requests | 1 minute |
| Login polling | 300 requests | 1 hour |
| Key generation | 10 requests | 1 hour |
Calendar Access Endpoints
/api/access/calendar
| Scope | Limit | Window |
|---|---|---|
| Global | 100 requests | 1 minute |
| Global | 500 requests | 1 hour |
Data Types Reference
Quick Reference
| Type | Format | Example |
|---|---|---|
| UUID | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | 550e8400-e29b-41d4-a716-446655440000 |
| DateTime | ISO 8601 UTC | 2026-02-07T14:30:00Z |
| DateTimeOffset | ISO 8601 with offset | 2026-02-07T08:30:00-06:00 |
| API Key | Prefixed string | pe_k1_abc123def456... |
Enum Values Summary
Master Access Level
free_busy_onlyview_onlyview_filteredfull_accessEvent Visible Fields
titlelocationdescriptionattendeestimesstatuslabelsjoin_urlorganizerallAllowed Operations
respond_to_eventedit_titleedit_locationedit_descriptionedit_attendeesedit_timescreate_eventsdelete_eventsallAccess Rule Identifier Type
emaildomainallAccess Rule Level
blockfree_busy_onlyreadfullToken Avatar
generalopenclawclaudeopenaigeminiEvent Status
confirmedtentativecancelledAttendee Response
accepteddeclinedtentativeneedsAction