API Reference
Complete REST API reference for the Pictograph Developer API.
The Pictograph API is organized around REST. It has predictable resource-oriented URLs, accepts JSON request bodies, returns JSON responses, and uses standard HTTP response codes and authentication.
Base URL
https://api.pictograph.io/api/v1/developer All API requests should be made to this base URL. Endpoints are appended to this path.
API Architecture
The API follows a hierarchical resource structure:
Organization
├── Datasets (projects)
│ ├── Images
│ │ └── Annotations
│ └── Exports
└── API Keys - Organization: Your workspace containing all datasets and resources
- Datasets: Collections of images for annotation (called "projects" in the app)
- Images: Individual images within a dataset
- Annotations: Labels attached to images (bboxes, polygons, etc.)
- Exports: Downloadable ZIP archives of annotated datasets
Authentication
Include your API key in the X-API-Key header with every request.
See Authentication for details.
Endpoints
| Resource | Description |
|---|---|
| Datasets | List, get, and download datasets |
| Images | Upload, download, and manage images |
| Annotations | Create, read, update, and delete annotations |
| Exports | Create and download dataset exports |
Response Format
All responses are JSON. Successful responses return the requested data:
{
"id": "dataset-uuid",
"name": "My Dataset",
"image_count": 150,
...
} Error responses include an error code and message:
{
"error": "not_found",
"message": "Dataset not found"
} HTTP Status Codes
| Status | Meaning |
|---|---|
200 | Success |
201 | Resource created |
400 | Bad request - check your parameters |
401 | Unauthorized - invalid API key |
403 | Forbidden - insufficient permissions |
404 | Resource not found |
429 | Rate limit exceeded |
500 | Server error |
Pagination
List endpoints support pagination with limit and offset parameters:
/datasets/?limit=50&offset=100 | Parameter | Default | Max | Description |
|---|---|---|---|
limit | 100 | 1000 | Number of items to return |
offset | 0 | - | Number of items to skip |
Pagination Example
// Request: GET /datasets/?limit=2&offset=0
[
{
"id": "a1b2c3d4-...",
"name": "Training Dataset",
"image_count": 1250,
"completed_image_count": 1100
},
{
"id": "e5f6g7h8-...",
"name": "Validation Dataset",
"image_count": 320,
"completed_image_count": 320
}
] Rate Limit Headers
All responses include headers to help you track your rate limit usage:
| Header | Description |
|---|---|
X-RateLimit-Limit | Your maximum requests per hour |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Retry-After | Seconds to wait (only on 429 responses) |
# Example response headers
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4987
X-RateLimit-Reset: 1706140800 See Rate Limits for detailed information about quotas by plan.