Update the service catalog in bulk
For administrators, engineering managers 6 min read
Set tier, lifecycle, system, tags, links, owners and any other catalog field on many services at once, from one file.
Before you begin
- Services already in ELOS, from your connected source control.
- A service account whose role has Edit service catalog (and Manage people to assign owners).
Catalog as code is the best home for fields engineers own. For fields that belong to someone else, such as cost centres, compliance tags or the owner after a reorganisation, update many services at once through the API.
Describe the changes
Write one line per service in a JSON Lines file. service is the service's name in ELOS; owner is optional, the exact name of a person in ELOS; every other key is a catalog field. Download the example file.
{"service":"payments-api","tier":"tier-1","lifecycle":"production","system":"Payments Platform","owner":"Priya Raman"}
{"service":"ledger","tier":"tier-1","consumesApis":["payments.v1"],"links":[{"kind":"runbook","label":"Runbook","url":"https://wiki.example.com/ledger"}]}
{"service":"web-storefront","tier":"tier-2","language":"TypeScript","frameworks":["nextjs"]}Run it
- Download update-catalog.sh. It needs
bash,curlandjq. - Set
ELOS_APIandELOS_KEY, then run it withDRY_RUN=1to see what would change. - Run it for real. It finds each service by name, applies the fields, assigns the owner, and prints a summary.
export ELOS_API=https://<your ELOS API address>
export ELOS_KEY=esk.… # a service account key, never a person's credentials
DRY_RUN=1 ./update-catalog.sh services.jsonl # preview
./update-catalog.sh services.jsonlFields you can set
description, tier, lifecycle, system, domain, language, frameworks, tags, notes, metadata, links, team, onCall, escalation, contacts, dataClassification, compliance, cost, tools, providesApis, consumesApis, knowledge and slos. Fields ELOS observes itself, such as health and deployments, can't be set and are ignored. While PagerDuty is connected, onCall and escalation come from it and an update that sets them is refused.
One service at a time
The script is a loop over one call. Send only the fields you want to change; everything else stays as it is.
curl -sS -X PUT "$ELOS_API/v1/services/$SERVICE_ID/catalog" \
-H "Authorization: Bearer $ELOS_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: catalog-payments-api-2026-09" \
--data '{"tier":"tier-1","lifecycle":"production","tags":["payments","pci"],
"metadata":{"cost-center":"CC-4020"}}'What's next
- Onboard people in bulk: Bring in members from your identity provider, and register a whole cohort of joiners from an HR export with their journeys and day-one access.