Dynamic HR
Push your HR roster to Milestone automatically over our API — no manual uploads required. Run this from a cron job, CI pipeline, or any scheduled process on a machine with outbound HTTPS access.
Each run is two steps: mint a short-lived JWT using your client credentials, then POST the CSV file.
Prerequisites
Contact your Milestone account manager to receive:
- Client ID and Secret for your tenant
- Your Tenant ID
Step 1 — Mint a JWT
Run this before each upload. The JWT is short-lived, so mint a fresh one every run.
curl -sS -X POST "https://auth.mstone.ai/identity/resources/auth/v1/api-token" \
-H "Content-Type: application/json" \
-d '{"clientId":"<CLIENT_ID>","secret":"<SECRET>"}'
Copy the token from the response — you will use it in Step 2.
Step 2 — Upload the roster
curl -X POST "https://<your-tenant-id>.mstone.ai/api/v1/contributors/hr-roster" \
-H "X-API-KEY: <JWT>" \
-H "Authorization: Bearer <JWT>" \
-H "TENANT: <your-tenant-id>" \
-F "file=@hr-roster.csv"
A successful response confirms the row count and columns accepted. A clear error is returned if the file shape is off, so you know immediately whether the push landed.
CSV format
The file must be UTF-8, with a single header row and one row per developer. No merged cells or embedded line breaks.
| Column | Required |
|---|---|
| Developer Name | ✓ |
| Developer Email | ✓ |
| Team Name | ✓ |
| Group Name | ✓ |
| Site Name | ✓ |
| Unit Name | Optional |
| Developer Git Name | Optional |
- Empty cell or
\Nmeans no value. - Multiple Unit Names in one cell can be separated with
;. - Any extra columns you include are kept as custom contributor attributes.
- Max file size: 10 MB.