v1.0.0
API reference
The developer REST API behind the console and CLI.
Base URL: https://api.times.et/api/v1/developers. Send Authorization: Bearer <token> with a session token or a personal access token (tdk_ prefix). Requests act on the organization in the token, or on X-Developer-Org when the token covers several.
Responses use this envelope:
{
"internalCode": "OK",
"statusCode": 200,
"status": "success",
"message": "OK",
"data": {},
"pagination": { "page": 1, "pageSize": 20, "total": 42 }
}AIPs
| Method | Path | Permission |
|---|---|---|
GET | /aips | aips:read |
POST | /aips | aips:write |
GET | /aips/{slug} | aips:read |
PATCH | /aips/{slug}/listing | aips:write |
GET | /aips/{slug}/versions | aips:read |
POST | /aips/{slug}/versions | aips:write |
POST | /aips/{slug}/versions/{version}/bundle-upload-url | aips:write |
POST | /aips/{slug}/versions/{version}/submit | aips:submit |
POST | /aips/{slug}/versions/{version}/withdraw | aips:submit |
Stats and money
| Method | Path | Permission |
|---|---|---|
GET | /stats/overview | stats:read |
GET | /aips/{slug}/stats | stats:read |
GET | /earnings | earnings:read |
GET | /balance | earnings:read |
GET | /payout-accounts | earnings:read |
POST | /payout-accounts | payouts:write |
GET | /withdrawals | earnings:read |
POST | /withdrawals | payouts:write |
Uploading a bundle
# 1. Create the draft version with the manifest
curl -X POST "$API/aips/invoice-reminders/versions" \
-H "Authorization: Bearer $TIMES_TOKEN" \
-H 'Content-Type: application/json' \
-d @times.aip.json
# 2. Get a presigned upload URL
curl -X POST "$API/aips/invoice-reminders/versions/1.0.0/bundle-upload-url" \
-H "Authorization: Bearer $TIMES_TOKEN"
# 3. PUT the zip to the returned url, then submit
curl -X PUT "$UPLOAD_URL" -H 'Content-Type: application/zip' --data-binary @bundle.zipErrors
| Status | internalCode | Meaning |
|---|---|---|
| 400 | VALIDATION_FAILED | The body or manifest is invalid. data.errors lists fields. |
| 401 | UNAUTHORIZED | Missing or expired token. |
| 403 | FORBIDDEN | Your role lacks the permission. |
| 404 | NOT_FOUND | Unknown slug or version. |
| 409 | CONFLICT | Slug taken, or version already exists. |
| 429 | RATE_LIMITED | Slow down. See Retry-After. |



