Skip to main content

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.

ColumnRequired
Developer Name✓
Developer Email✓
Team Name✓
Group Name✓
Site Name✓
Unit NameOptional
Developer Git NameOptional
  • Empty cell or \N means 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.