Atera API Patterns — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Atera API Patterns (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The Atera REST API (v3) provides access to all major entities in the RMM/PSA platform. This skill covers authentication, pagination, rate limiting, error handling, and performance optimization patterns.
Atera uses a simple API key authentication via the X-API-KEY header:
GET /api/v3/tickets
X-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: application/jsonRequired Headers:
| Header | Value | Description |
|---|---|---|
X-API-KEY | {your_api_key} | API key from Atera portal |
Content-Type | application/json | For POST/PUT requests |
Accept | application/json | Optional, for explicit format |
export ATERA_API_KEY="your-api-key-here"All API requests use the following base URL. Atera requires HTTPS; plain HTTP is rejected.
https://app.atera.com/api/v3Atera uses OData-style pagination with page and itemsInPage parameters:
GET /api/v3/tickets?page=1&itemsInPage=50
X-API-KEY: {api_key}Pagination Parameters:
| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
page | int | 1 | - | Page number (1-indexed) |
itemsInPage | int | 20 | 50 | Items per page |
{
"items": [...],
"totalItems": 2847,
"page": 1,
"itemsInPage": 50,
"totalPages": 57
}Response Fields:
| Field | Type | Description |
|---|---|---|
items | array | Array of entities |
totalItems | int | Total count across all pages |
page | int | Current page number |
itemsInPage | int | Items in current page |
totalPages | int | Total number of pages |
See references/examples.md for a working page-walking implementation.
Atera enforces a rate limit of 700 requests per minute per API key.
Atera may return rate limit information in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per window |
X-RateLimit-Remaining | Remaining requests |
X-RateLimit-Reset | Seconds until reset |
When rate limited (HTTP 429):
{
"Message": "Rate limit exceeded. Please wait before making more requests."
}See references/examples.md for exponential-backoff retry and a sliding-window throttler.
| Code | Meaning | Action |
|---|---|---|
| 200 | Success | Process response |
| 201 | Created | Entity created successfully |
| 400 | Bad Request | Check request format/values |
| 401 | Unauthorized | Verify API key |
| 403 | Forbidden | Check permissions |
| 404 | Not Found | Entity doesn't exist |
| 429 | Rate Limited | Implement backoff |
| 500 | Server Error | Retry with backoff |
{
"Message": "Error description here",
"ErrorCode": "SPECIFIC_ERROR_CODE"
}See references/examples.md for a request wrapper that maps these statuses to actionable errors.
Atera does not use PUT. Updates are a `POST` to the entity's ID URL — the same verb as create, distinguished only by whether the URL carries an ID:
POST /api/v3/tickets # create
POST /api/v3/tickets/54321 # update
DELETE /api/v3/tickets/54321 # deleteWrite responses return an ActionID alongside the entity ID rather than the full entity, so re-read the record if you need its post-write state.
See references/api.md for the complete endpoint catalog and full request/response shapes.
See references/examples.md for batching, caching, and parallel-fetch implementations.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.