The official Workato custom connector for Timix.AI —
time tracking & billing for services businesses. It talks to the public Timix Integration API
(https://api.timix.ai/api/integration/v1) and lets Workato recipes:
- Trigger when new records appear in Timix (customers, projects, time entries, invoices).
- Create records in Timix (customers, projects, tasks, subtasks, time entries).
Timix.AI's hierarchy is Customer → Project → Task → SubTask → Time Entry, and all time is logged at the SubTask level.
- API-key auth. You provide a Timix Integration API key; the connector sends it as
Authorization: Bearer <key>. - Base URL.
https://api.timix.ai/api/integration/v1. - Connection test & label. On connect, the connector calls
GET /me. The organization name becomes the connection label. If the organization's plan does not include API access, the connector shows a clear message that Professional+ is required.
All triggers are poll-based and deduplicated by record id. Timix list endpoints return results
newest-created first; the connector stores a createdAfter cursor in the trigger closure so each poll
only fetches records created since the last one. Each trigger also offers an optional Created after
input to control the starting point on the first poll.
| Trigger | Endpoint | Notes |
|---|---|---|
| New customer | GET /customers |
id, name, country, currency, contactEmail, timestamps |
| New project | GET /projects |
id, name, parentId/customerId, status, allowedBillingTypes, timestamps |
| New time entry | GET /time-reports |
id, subTaskId, reporterId, start, end, duration, hours, date, billingType, status, text; optional Work date from/to filter |
| New invoice | GET /invoices |
id, number, status, totalAmount, currency, customerId; optional Date from/to filter. Uses the CRUDResponse { data: [...] } envelope and pageNumber paging (not { items } / page). |
The organization is bound to the API key server-side, so no org id is ever sent.
| Action | Endpoint | Required inputs | Optional inputs |
|---|---|---|---|
| Create customer | POST /customers |
name | description, country, currency, contactEmail |
| Create project | POST /projects |
name, parentId (customer id) | description, billingType (TM / Fix / OVH) — sent to the API as the allowedBillingTypes string array |
| Create task | POST /tasks |
name, parentId (project id) | description |
| Create subtask | POST /subtasks |
name, parentId (task id) | description |
| Log time | POST /time-reports |
subTaskId, start, end | text |
- In the Timix.AI web app, go to Settings → API Keys.
- Create / copy a key — new keys start with
tmx_(olderbbl_keys still work).- API access requires a Professional+ plan. On a lower plan,
GET /mereturnshasApiAccess: falseand the connection test surfaces an upgrade message.
- API access requires a Professional+ plan. On a lower plan,
- In Workato, add a Timix connection and paste your key.
- Click Connect. On success the connection is labeled with your organization name.
Keep API keys secret — treat them like passwords. Rotate them in Settings → API Keys if exposed.
This is a standalone Workato SDK connector (connector.rb). Import it into your own Workato account
with either the UI or the SDK CLI.
- Sign in to Workato → Tools → Connector SDK → Create connector (or Community connectors → Build a connector).
- Choose to start from code, then paste the contents of
connector.rbinto the editor. - Save, then use the Test tab to add a connection (Timix API key) and run the actions/triggers.
- When ready, Release a version and (optionally) submit it for the Workato community/marketplace.
# 1. Install the gem (Ruby 2.7+).
gem install workato-connector-sdk
# 2. From this repo, set your Workato API token.
export WORKATO_API_TOKEN=... # from Workato → Account → API tokens
# 3. Validate locally.
workato exec test --connector connector.rb # runs the `test:` lambda
# 4. Push to your Workato workspace.
workato push --connector connector.rb --title "Timix"- Use a
settings.yaml(git-ignored) to hold your API key for localworkato execruns. - See the Workato SDK CLI docs for
workato push,workato exec, and RSpec testing.
- Rate limit. Timix enforces a per-key fixed 60-second window
(120/min Free–Starter, 300/min Professional, 1000/min Business). On limit it returns HTTP 429
with a
Retry-Afterheader (seconds). The connector's globalafter_error_responsehook surfaces a clear "rate limit exceeded — retry after N seconds" message. To auto-retry, enable request-level retry on the recipe step, or add a small delay/retry in the recipe. - Entitlement. Unentitled calls return HTTP 403 with
error.code = "entitlement_required"; the connector surfaces "API access requires a Professional+ plan." - Errors. Non-2xx responses come back as
{ error: { code, message, details? } }with real HTTP status codes (422 validation, 401, 403, 404, 409, 429, 500). The connector surfaces the realerror.message(and code) instead of a generic failure, so users see the actual reason.
This connector uses polling triggers only. There are no real-time / instant (webhook) triggers in this version yet — real-time triggers are a planned enhancement. Practical implications:
- New-record triggers fire on Workato's poll interval (e.g. every few minutes), not instantly.
- Triggers dedupe by record id, so a record is only delivered once even across overlapping polls.
- Base URL:
https://api.timix.ai/api/integration/v1. - Auth:
Authorization: Bearer <key>(also acceptsX-Api-Key). - Test / label:
GET /me→{ organizationId, organizationName, userId, apiKeyId, plan, hasApiAccess }. - Pagination:
?page=<1-based>&pageSize=<n ≤200, default 50>→{ items, totalCount, page, pageSize, hasMore }(alsoX-Total-Countheader). Stable-sorted newest-first. - Polling filter:
?createdAfter=<ISO-8601 UTC>(newest-created first). Also?updatedAfter=<ISO>for new-or-updated, and?from=&to=on/time-reports(work date) and/invoices.
Learn more at timix.ai · Integrations · hello@timix.ai