Skip to content
SanShivaSHELL ELOS Docs
Browse the documentation

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.

services.jsonljsonl
{"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

  1. Download update-catalog.sh. It needs bash, curl and jq.
  2. Set ELOS_API and ELOS_KEY, then run it with DRY_RUN=1 to see what would change.
  3. Run it for real. It finds each service by name, applies the fields, assigns the owner, and prints a summary.
Run the updateshell
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.jsonl

Fields 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.

Update one serviceshell
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.