Read responses (GET /suppliers, GET /suppliers/{supplier_id}) return custom_fields keyed by the field's display label — the same label you see in the Mercura admin UI — rather than the internal column id. Columns with no active definition are omitted, and on a label collision the column defined first (by display order, then creation time) wins. On the write path (POST /suppliers) send custom_fields keyed by the internal column id; only reads are label-keyed.