Asamano API
Connect Asamano to your favorite chatbot or AI assistant — like a Telegram bot, ChatGPT, or Claude — and just ask: "Where are my Christmas lights?" or "Which box has the kids' winter clothes?". The API lets any app you trust read your boxes, so you can chat with your stuff, build little automations (e.g. a reminder when you haven't opened a box in a year), or hook Asamano into your smart home.
Authentication
All API requests require a valid API key passed as a Bearer token in the Authorization header. API keys are created by Customer Admins in Settings.
Key format
asamano_live_<random_string>Header usage
Authorization: Bearer asamano_live_...Create and manage API keys in Settings → API.
Base URL
https://api.asamano.comAll API endpoints are relative to this base URL.
Endpoints
/api/v1/boxes
Returns all boxes for the authenticated organization. Draft boxes are excluded.
Query Parameters
| Name | Type | Description |
|---|---|---|
| limit | integer | Default 20, max 100 |
| cursor | string | Pagination cursor from previous response |
| updated_since | ISO 8601 | Only return boxes updated after this timestamp |
| search | string | Search by title or description |
Example Request
curl "https://api.asamano.com/api/v1/boxes?limit=20" \
-H "Authorization: Bearer asamano_live_..."Example Response
{
"data": [
{
"id": "box_123",
"title": "Winter Clothes",
"description": "Jackets and gloves",
"qr_code": "QR-ABC-123",
"location": {
"building": "Home",
"room": "Storage",
"shelf": "Top shelf"
},
"tags": ["winter", "clothes"],
"image_count": 3,
"item_count": 12,
"category": "clothing",
"owner": "John Doe",
"created_at": "2026-04-01T10:00:00Z",
"updated_at": "2026-04-05T12:00:00Z"
}
],
"next_cursor": "cursor_abc123"
}Response Fields
| Field | Description |
|---|---|
| id | Unique box identifier |
| title | Box title |
| description | Box description |
| qr_code | QR code identifier |
| location | Nested location object (building, room, shelf) |
| tags | Array of tags |
| image_count | Number of attached images |
| item_count | Number of items inside this box |
| category | Box category |
| owner | Owner name |
| created_at | Creation timestamp (ISO 8601) |
| updated_at | Last update timestamp (ISO 8601) |
/api/v1/boxes/:id
Returns a single box with embedded items and images in one call.
/api/v1/items
Lists items across all boxes in your organization. AI-detected items reference source_image_id; manual items have it null.
/api/v1/images
Lists box images with signed URLs for three rendered versions. URLs expire after 1 hour — re-request rather than caching long-term.
Pagination
The API uses cursor-based pagination. Each response includes a next_cursor field. Pass it as the cursor parameter in your next request to fetch the next page.
- Make a request with an optional limit parameter
- Check the next_cursor field in the response
- Pass next_cursor as the cursor parameter in your next request
// Fetch all boxes using cursor pagination
let cursor = null;
let allBoxes = [];
do {
const url = new URL("https://api.asamano.com/api/v1/boxes");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, {
headers: { Authorization: "Bearer asamano_live_..." }
});
const json = await res.json();
allBoxes = allBoxes.concat(json.data);
cursor = json.next_cursor;
} while (cursor);Rate Limiting
API requests are rate-limited per calendar month based on your subscription plan.
| Plan | Monthly Limit |
|---|---|
| Free | 1,000 requests/month |
| Starter / Pro / Business | 50,000 requests/month |
Response Headers
X-RateLimit-Limit— Your monthly request quotaX-RateLimit-Remaining— Requests remaining this month
Error Handling
The API returns consistent error responses with a machine-readable error code and a human-readable message.
{
"error": "rate_limit_exceeded",
"message": "You have exceeded your monthly API request limit"
}| Error Code | HTTP Status | Description |
|---|---|---|
| missing_api_key | 401 | No API key provided |
| invalid_api_key | 401 | API key is invalid or revoked |
| organization_suspended | 403 | Organization account is suspended |
| rate_limit_exceeded | 429 | Monthly request limit exceeded |
| not_found | 404 | Resource not found |
| internal_error | 500 | Unexpected server error |
Code Examples
curl "https://api.asamano.com/api/v1/boxes?limit=20" \
-H "Authorization: Bearer asamano_live_..."OpenAPI Specification
Download the OpenAPI 3.0 specification to import into Postman, Insomnia, or your favorite API tool.
Download openapi.jsonReady to integrate?
Create a free account and get your API key in minutes.
