TIMESDevelopers
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

MethodPathPermission
GET/aipsaips:read
POST/aipsaips:write
GET/aips/{slug}aips:read
PATCH/aips/{slug}/listingaips:write
GET/aips/{slug}/versionsaips:read
POST/aips/{slug}/versionsaips:write
POST/aips/{slug}/versions/{version}/bundle-upload-urlaips:write
POST/aips/{slug}/versions/{version}/submitaips:submit
POST/aips/{slug}/versions/{version}/withdrawaips:submit

Stats and money

MethodPathPermission
GET/stats/overviewstats:read
GET/aips/{slug}/statsstats:read
GET/earningsearnings:read
GET/balanceearnings:read
GET/payout-accountsearnings:read
POST/payout-accountspayouts:write
GET/withdrawalsearnings:read
POST/withdrawalspayouts: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.zip

Errors

StatusinternalCodeMeaning
400VALIDATION_FAILEDThe body or manifest is invalid. data.errors lists fields.
401UNAUTHORIZEDMissing or expired token.
403FORBIDDENYour role lacks the permission.
404NOT_FOUNDUnknown slug or version.
409CONFLICTSlug taken, or version already exists.
429RATE_LIMITEDSlow down. See Retry-After.