{
  "source": {
    "repository": "https://github.com/APIOpsCycles/apiops-cycles-method-data",
    "commit": "4418d7ccff492f591957f0e53fd9d476354041d7"
  },
  "locales": [
    "en",
    "fi",
    "fr",
    "de",
    "pt"
  ],
  "defaultLocale": "en",
  "generatedAt": "2026-07-24T13:03:14.377Z",
  "translations": {
    "fi": {
      "labels": {
        "stations": "Asemat",
        "why_it_matters": "Miksi tällä asemalla on merkitystä?",
        "outcomes": "Tulokset",
        "how_it_works": "Näin se toimii",
        "steps": "Vaiheet",
        "apply_in_work": "Tältä onnistuminen näyttää",
        "related_metrolines": "Sisältyy näihin metrolinjoihin",
        "entry_criteria_title": "Alkuehdot",
        "exit_criteria_title": "Hyvin tehty, kun",
        "cycles.title": "Syklinäkymät",
        "cycles.description": "Kohderyhmäkohtaiset näkymät APIOps Cycles -menetelmään.",
        "cycle.capability-productization-cycle.title": "Kyvykkyyden tuotteistamisen sykli",
        "cycle.capability-productization-cycle.description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa.",
        "cycle.capability-productization-cycle.purpose": "Tunnista ja tuotteista uudelleenkaytettavia digitaalisia kyvykkyyksia ennen API-, tapahtuma-, tiedosto-, virta-, datatuote-, tekoalya hyodyntava palvelu-, suora integraatio- tai hybriditoteutustavan valintaa.",
        "cycle.api-productization-cycle.title": "API-tuotteistamisen sykli",
        "cycle.api-productization-cycle.description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen.",
        "cycle.api-productization-cycle.purpose": "API-keskeinen menetelmäpolku tiimeille, jotka jo tietävät, että tarkoitettu toteutustapa on API-tuote.",
        "cycle.integration-productization-cycle.title": "Integraatiokyvykkyyden tuotteistamisen sykli",
        "cycle.integration-productization-cycle.description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa.",
        "cycle.integration-productization-cycle.purpose": "Ohjaa uudelleenkaytettavan integraatiokyvykkyyden suunnittelua ennen API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutustavan valintaa.",
        "cycle.station.capability-strategy": "Kyvykkyysstrategia",
        "cycle.station.consumer-requirements-onboarding": "Hyödyntäjien vaatimukset ja käyttöönotto",
        "cycle.station.architecture-platform-decisions": "Arkkitehtuuri ja alustaratkaisut",
        "cycle.station.solution-interface-design": "Ratkaisu- ja rajapintasuunnittelu",
        "cycle.station.delivery-operations": "Toimitus ja operointi",
        "cycle.station.quality-readiness-assurance": "Laadun ja valmiuden varmistus",
        "cycle.station.publishing-enablement": "Julkaisu ja kayttoonoton tuki",
        "cycle.station.monitoring-improvement": "Seuranta ja parantaminen",
        "cycle.station.api-product-strategy": "API-tuotestrategia",
        "cycle.station.api-consumer-experience": "API-hyödyntäjäkokemus",
        "cycle.station.api-platform-architecture": "API-alustan arkkitehtuuri",
        "cycle.station.api-design": "API-suunnittelu",
        "cycle.station.api-delivery": "API-toteutus",
        "cycle.station.api-audit": "API-auditointi",
        "cycle.station.api-publishing": "API-julkaisu",
        "cycle.station.monitoring-and-improving": "APIen seuranta ja parantaminen",
        "cycle.station.integration-capability-strategy": "Integraatiokyvykkyyden strategia",
        "cycle.station.integration-consumer-requirements-onboarding": "Integraation hyödyntäjien vaatimukset ja käyttöönotto",
        "cycle.station.integration-architecture-decision": "Integraatioarkkitehtuuri ja alustapaatokset",
        "cycle.station.integration-solution-design": "Integraation ratkaisusuunnittelu",
        "cycle.station.integration-delivery-operations": "Integraation toimitus ja operointi",
        "cycle.station.integration-readiness-assurance": "Integraation valmiuden varmistus",
        "cycle.station.capability-publishing": "Integraation julkaisu ja kayttoonoton tuki",
        "cycle.station.integration-monitoring-improvement": "Integraation seuranta ja parantaminen",
        "cycle.capability-productization-cycle.station.api-product-strategy.description": "Kuvaa liiketoimintatarve uudelleenkaytettavana kyvykkyytena, jolla on selkea arvo, hyodyntajat, omistajuus ja liiketoimintatavoitteet ennen toteutustavan valintaa.",
        "cycle.capability-productization-cycle.station.api-consumer-experience.description": "Kokoa hyödyntäjien vaatimukset, käyttöönoton tarpeet, rajoitteet, palveluodotukset ja tuottajan vastuut.",
        "cycle.capability-productization-cycle.station.api-platform-architecture.description": "Kayta vaatimuksia ja rajoitteita toteutustavan, arkkitehtuurimallin ja mahdollistavien alustakyvykkyyksien valintaan.",
        "cycle.capability-productization-cycle.station.api-design.description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli valitulle toteutustavalle.",
        "cycle.capability-productization-cycle.station.api-delivery.description": "Rakenna, testaa, julkaise ja operoi kyvykkyyttä valitulla toteutustavalla ja validoidulla rajapintasopimuksella.",
        "cycle.capability-productization-cycle.station.api-audit.description": "Validoi rajapintasopimus, kontrollit, dokumentaatio, tukimalli ja operatiivinen valmius ennen julkaisua.",
        "cycle.capability-productization-cycle.station.api-publishing.description": "Julkaise kyvykkyys, jotta hyodyntajat voivat loytaa sen, arvioida sen, pyytaa kayttooikeutta, suorittaa kayttoonoton, kayttaa sita ja saada tukea.",
        "cycle.capability-productization-cycle.station.monitoring-and-improving.description": "Seuraa kyvykkyyden tilaa, hyödyntäjien tuloksia, luotettavuutta, uudelleenkäyttöä ja parannusmahdollisuuksia.",
        "cycle.owner.business-owner": "Liiketoimintaomistaja",
        "cycle.owner.domain-expert": "Toimialan asiantuntija",
        "cycle.owner.capability-owner": "Kyvykkyyden omistaja",
        "cycle.owner.consumer-representative": "Hyödyntäjien edustaja",
        "cycle.owner.enterprise-architect": "Kokonaisarkkitehti",
        "cycle.owner.platform-owner": "Alustan omistaja",
        "cycle.owner.api-product-owner": "API-tuoteomistaja",
        "cycle.owner.api-platform-owner": "API-alustan omistaja",
        "cycle.owner.integration-architect": "Integraatioarkkitehti",
        "cycle.owner.solution-architect": "Ratkaisuarkkitehti",
        "cycle.api-productization-cycle.station.api-product-strategy.description": "Ennen kuin rakennat mitään, määrittele APIn arvo, hyödyntäjät ja liiketoiminnalliset tavoitteet heti alusta alkaen.",
        "cycle.api-productization-cycle.station.api-consumer-experience.description": "Varmistetaan, että API on löydettävissä, ymmärrettävissä ja käyttökelpoinen ennen käyttöönottoa ja sen jälkeen.",
        "cycle.api-productization-cycle.station.api-platform-architecture.description": "Varmistetaan skaalautuvuus, uudelleenkäyttö ja hallinta API- ja alustakomponenttien välillä.",
        "cycle.api-productization-cycle.station.api-design.description": "Luo API-suunnitelmia, jotka ovat johdonmukaisia, uudelleenkäytettäviä ja perustuvat liiketoiminnallisiin tavoitteisiin sekä yhteisiin standardeihin.",
        "cycle.api-productization-cycle.station.api-delivery.description": "Rakenna, testaa ja julkaise rajapintoja käyttämällä nykyaikaisia jakeluputkia ja parhaita teknisiä käytäntöjä.",
        "cycle.api-productization-cycle.station.api-audit.description": "Varmista, että APIt täyttävät liiketoiminta-, suunnittelu- ja toimintastandardit ennen julkaisua ja käyttöönottoa.",
        "cycle.api-productization-cycle.station.api-publishing.description": "Esittele APIt turvallisesti ja selkeästi oikealle yleisölle oikean dokumentaation ja prosessien avulla.",
        "cycle.api-productization-cycle.station.monitoring-and-improving.description": "Käytä mittareita ja palautetta API-suorituskyvyn seuraamiseen ja jatkuvan parantamisen edistämiseen.",
        "cycle.integration-productization-cycle.station.api-product-strategy.description": "Kuvaa uudelleenkaytettava integraatiokyvykkyys, liiketoimintatarve, omistajuus ja odotettu uudelleenkaytto ennen toteutustavan valintaa.",
        "cycle.integration-productization-cycle.station.api-consumer-experience.description": "Kokoa integraation hyödyntäjät, tuottajan vastuut, käyttöönoton tarpeet, palveluodotukset ja operatiiviset rajoitteet.",
        "cycle.integration-productization-cycle.station.api-platform-architecture.description": "Valitse integraatioarkkitehtuuri, toteutustapa ja alustakyvykkyydet huomioiden rajoitteet ja hallintamalli.",
        "cycle.integration-productization-cycle.station.api-design.description": "Suunnittele rajapintasopimus, skeemat, tietosisallot ja vuorovaikutusmallit valitulle integraatiotavalle.",
        "cycle.integration-productization-cycle.station.api-delivery.description": "Rakenna, testaa, automatisoi, julkaise ja operoi integraatiokyvykkyyttä sen valitulla toteutustavalla ja validoidulla rajapintasopimuksella.",
        "cycle.integration-productization-cycle.station.api-audit.description": "Varmista integraation valmius, hallintamalli, laatu, tietoturva, vaatimustenmukaisuus ja operatiivinen näyttö ennen julkaisua.",
        "cycle.integration-productization-cycle.station.api-publishing.description": "Julkaise integraatiokyvykkyys, jotta tiimit voivat loytaa sen, arvioida sen, pyytaa kayttooikeutta, suorittaa kayttoonoton, kayttaa sita uudelleen ja saada tukea.",
        "cycle.integration-productization-cycle.station.monitoring-and-improving.description": "Seuraa integraation luotettavuutta, uudelleenkäyttöä, häiriöitä, suorituskykyä, hyödyntäjien tuloksia ja parannustarpeita.",
        "cycle.automation-cycle.title": "Automaatiosykli",
        "cycle.automation-cycle.description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen.",
        "cycle.automation-cycle.purpose": "Tuotteista automaatiomahdollisuuksia hallituiksi työnkuluiksi, joilla on selkeät käyttäjät, alustat, kontrollit, toimituspolut, käyttöönoton tuki ja seuranta.",
        "cycle.audience.automation-owners": "Automaation omistajat",
        "cycle.audience.process-owners": "Prosessinomistajat",
        "cycle.audience.automation-teams": "Automaatiotiimit",
        "cycle.station.automation-opportunity-strategy": "Automaatiomahdollisuuden strategia",
        "cycle.station.process-user-requirements": "Prosessin ja käyttäjien vaatimukset",
        "cycle.station.automation-platform-decision": "Automaatioalustan päätös",
        "cycle.station.automation-workflow-design": "Automaatiotyönkulun suunnittelu",
        "cycle.station.automation-delivery": "Automaation toimitus ja operointi",
        "cycle.station.automation-readiness-review": "Automaation valmiuskatselmointi",
        "cycle.station.automation-enablement": "Automaation kayttoonotto ja kayttoonoton tuki",
        "cycle.station.automation-monitoring-improvement": "Automaation seuranta ja parantaminen",
        "cycle.automation-cycle.station.api-product-strategy.description": "Tunnista ja priorisoi automaatiomahdollisuudet arvon, toteutettavuuden, riskin, omistajuuden ja odotetun prosessivaikutuksen perusteella.",
        "cycle.automation-cycle.station.api-consumer-experience.description": "Kokoa prosessin käyttäjät, roolit, luovutukset, poikkeukset, rajoitteet ja palveluodotukset ennen automaation suunnittelua.",
        "cycle.automation-cycle.station.api-platform-architecture.description": "Valitse automaatioalusta, ajoymparisto, integraatiotapa, hallintakontrollit ja operatiiviset rajoitteet.",
        "cycle.automation-cycle.station.api-design.description": "Suunnittele automaation tyonkulku, kaynnistimet, paatospisteet, integraatiot, datankasittely, olennaiset rajapintasopimukset ja poikkeuspolut.",
        "cycle.automation-cycle.station.api-delivery.description": "Rakenna, testaa, julkaise, dokumentoi ja operoi automaatiota selkeällä omistajuudella, kontrolleilla ja palautuspoluilla.",
        "cycle.automation-cycle.station.api-audit.description": "Katselmoi automaation valmius, laatu, riski, vaatimustenmukaisuus, ihmisen valvonta, näyttö ja julkaisukriteerit.",
        "cycle.automation-cycle.station.api-publishing.description": "Mahdollista käyttäjien ja operaattorien työ löydettävyyden, käyttöönoton, käyttöohjeiden, tukipolkujen ja muutosviestinnän avulla.",
        "cycle.automation-cycle.station.monitoring-and-improving.description": "Seuraa automaation suorituskykyä, poikkeuksia, luotettavuutta, käyttäjien tuloksia, operatiivista vaikutusta ja parannusmahdollisuuksia.",
        "group.core-stations.title": "Kyvykkyyden elinkaaren ydinasemat",
        "group.core-stations.description": "Menetelmän ydinasemat, joissa tiimit oppivat suunnittelemaan, toimittamaan, hallitsemaan ja parantamaan uudelleenkäytettäviä kyvykkyyksiä APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden ja muiden integraatiotapojen yli.",
        "group.sub-stations.title": "APIn elinkaaren lähiöasemat",
        "group.sub-stations.description": "Lähiöasemat, jotka tarjoavat lisäresursseja, työkaluja ja parhaita käytäntöjä API-tiimeille.",
        "station.api-product-strategy.title": "Strategia",
        "station.api-product-strategy.description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa.",
        "station.api-product-strategy.why_it_matters": "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa.",
        "station.api-product-strategy.apply_in_work": "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
        "station.api-product-strategy.outcomes": "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
        "station.api-product-strategy.how_it_works": "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
        "station.api-consumer-experience.title": "Hyödyntäjien vaatimukset ja käyttöönotto",
        "station.api-consumer-experience.description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut.",
        "station.api-consumer-experience.why_it_matters": "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
        "station.api-consumer-experience.how_it_works": "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
        "station.api-consumer-experience.how_it_works.1": "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
        "station.api-consumer-experience.how_it_works.2": "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
        "station.api-consumer-experience.apply_in_work": "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
        "station.api-consumer-experience.outcomes": "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
        "station.api-platform-architecture.title": "Arkkitehtuuri- ja alustapäätökset",
        "station.api-platform-architecture.description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan.",
        "station.api-platform-architecture.why_it_matters": "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista.",
        "station.api-platform-architecture.apply_in_work": "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
        "station.api-platform-architecture.outcomes": "Perusteltu arkkitehtuurivalinta",
        "station.api-platform-architecture.how_it_works": "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
        "station.api-design.title": "Ratkaisu- ja rajapintasuunnittelu",
        "station.api-design.description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu.",
        "station.api-design.why_it_matters": "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi.",
        "station.api-design.apply_in_work": "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
        "station.api-design.outcomes": "Validoitu rajapintasopimus valitulle toteutustavalle",
        "station.api-design.how_it_works": "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
        "station.api-delivery.title": "Toimitus ja operointi",
        "station.api-delivery.description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä.",
        "station.api-delivery.why_it_matters": "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa.",
        "station.api-delivery.apply_in_work": "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
        "station.api-delivery.outcomes": "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
        "station.api-delivery.how_it_works": "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
        "station.api-audit.title": "Laadun ja valmiuden varmistus",
        "station.api-audit.description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua.",
        "station.api-audit.why_it_matters": "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä.",
        "station.api-audit.apply_in_work": "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
        "station.api-audit.outcomes": "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
        "station.api-audit.how_it_works": "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
        "station.api-publishing.title": "Julkaisu ja käyttöönoton mahdollistaminen",
        "station.api-publishing.description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea.",
        "station.api-publishing.why_it_matters": "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
        "station.api-publishing.apply_in_work": "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
        "station.api-publishing.outcomes": "Löydettävä uudelleenkäytettävä kyvykkyys",
        "station.api-publishing.how_it_works": "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
        "station.monitoring-and-improving.title": "Seuranta ja parantaminen",
        "station.monitoring-and-improving.description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen.",
        "station.monitoring-and-improving.why_it_matters": "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat.",
        "station.monitoring-and-improving.apply_in_work": "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
        "station.monitoring-and-improving.outcomes": "Mitattu kyvykkyyden tila ja arvo",
        "station.monitoring-and-improving.how_it_works": "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
        "station.user-experience.title": "Käyttäjäkokemus - Suunnittele APIt käyttäjälähtöisesti",
        "station.user-experience.description": "Varmistetaan, että rajapinnat on suunniteltu loppukäyttäjää ajatellen ja että ne tarjoavat saumattoman ja intuitiivisen käyttökokemuksen.",
        "station.user-experience.why_it_matters": "APIt eivät ole vain teknisiä tuotteita, vaan ne ovat myös käyttäjälle näkyviä tuotteita. Huono käyttökokemus voi johtaa vähäiseen käyttöön ja turhautumiseen. Tämä asema auttaa tiimejä suunnittelemaan APIt, jotka ovat käyttäjäystävällisiä ja vastaavat hyödyntäjien tarpeita.",
        "station.user-experience.apply_in_work": "Tarjotaan käyttäjäkokemusta koskevia ohjeita, malleja ja työkaluja API-suunnittelua varten. Varmistetaan, että tiimit noudattavat käyttäjäkeskeisiä suunnittelukäytäntöjä ja sisällyttävät käyttäjäpalautteen API-iteraatioihin.",
        "station.user-experience.outcomes": "APIt on suunniteltu käyttäjien tarpeet mielessä pitäen",
        "station.user-experience.how_it_works": "Käyttäjäpersoonien käyttö loppukäyttäjien tarpeiden ja odotusten ymmärtämiseksi.",
        "station.market-insights.title": "Markkinatietoa - API-maiseman ymmärtäminen",
        "station.market-insights.description": "Analysoi markkinasuuntauksia, kilpailijoiden rajapintoja ja alan standardeja rajapintastrategian laatimiseksi.",
        "station.market-insights.why_it_matters": "Markkinatilanteen ymmärtäminen auttaa tiimejä tunnistamaan mahdollisuuksia, välttämään sudenkuoppia ja mukauttamaan rajapintansa alan standardeihin. Tämä asema tarjoaa työkaluja markkinasuuntausten ja kilpailijoiden tarjonnan analysointiin.",
        "station.market-insights.apply_in_work": "Tarjotaan markkinatutkimustyökaluja, kilpailija-analyysimalleja ja alan standardeja koskevia resursseja. Varmistetaan, että tiimit pysyvät ajan tasalla markkinasuuntauksista ja sisällyttävät näkemykset API-strategiaan.",
        "station.market-insights.outcomes": "Markkinatrendit ja kilpailijoiden APIt analysoitu",
        "station.market-insights.how_it_works": "Markkinatutkimuksen tekeminen API-toimialalla vallitsevien suuntausten, mahdollisuuksien ja uhkien tunnistamiseksi.",
        "station.business-goals.title": "Liiketoiminnalliset tavoitteet - Kohdista rajapinnat liiketoimintatavoitteisiin.",
        "station.business-goals.description": "Varmistetaan, että rajapinnat ovat linjassa liiketoiminnan tavoitteiden kanssa ja edistävät organisaation yleisiä tavoitteita.",
        "station.business-goals.why_it_matters": "Rajapintoja ei pidä rakentaa erillään, vaan niiden on tuettava ja edistettävä liiketoiminnan tavoitteita. Tämä asema auttaa tiimejä sovittamaan rajapinnat strategisiin tavoitteisiin ja varmistamaan, että ne tuottavat todellista liiketoiminta-arvoa.",
        "station.business-goals.apply_in_work": "Tarjotaan liiketoimintasuuntautumiskehyksiä, malleja ja työkaluja API-liiketoiminta-arvon määrittelyyn. Varmistetaan, että tiimit tarkistavat ja sovittavat sovellusrajapinnat säännöllisesti yhteen muuttuvien liiketoimintatavoitteiden kanssa.",
        "station.business-goals.outcomes": "APIt linjassa liiketoiminnan tavoitteiden kanssa",
        "station.business-goals.how_it_works": "Määrittele liiketoimintatavoitteet ja se, miten rajapinnat voivat tukea niitä käyttämällä **liiketoimintamallia (Business Model Canvas**). Jos liiketoimintasi tarkoituksena on tarjota rajapintoja, käy läpi *API-tuotestrategia-asema* ja täytä **API-liiketoimintamalli Canvas**.",
        "station.competitive-analysis.title": "Kilpailuanalyysi - pysy kärjessä API-markkinoilla",
        "station.competitive-analysis.description": "Analysoi kilpailijoiden rajapinnat vahvuuksien, heikkouksien ja erottautumismahdollisuuksien tunnistamiseksi.",
        "station.competitive-analysis.why_it_matters": "Kilpailutilanteen ymmärtäminen auttaa tiimejä tunnistamaan API-rajapintojensa puutteet, mahdollisuudet ja parannuskohteet. Tämä asema tarjoaa työkaluja kilpailijoiden analysointiin ja API-strategian laatimiseen.",
        "station.competitive-analysis.apply_in_work": "Tarjotaan kilpailuanalyysityökaluja, malleja ja resursseja. Varmistetaan, että tiimit analysoivat säännöllisesti kilpailijoita ja sisällyttävät näkemykset API-strategiaan ja -suunnitteluun.",
        "station.competitive-analysis.outcomes": "Kilpailijoiden rajapintojen vahvuudet ja heikkoudet analysoidaan.",
        "station.competitive-analysis.how_it_works": "Suorita kilpailija-analyysi tärkeimpien kilpailijoiden, niiden API-tarjonnan sekä niiden vahvuuksien ja heikkouksien tunnistamiseksi.",
        "station.ecosystem-vision.title": "Ekosysteemin visio - Rakenna rajapinnat kukoistavaa ekosysteemiä varten.",
        "station.ecosystem-vision.description": "Luo visio siitä, miten rajapintasi sopivat laajempaan ekosysteemiin, joka mahdollistaa yhteistyön ja innovoinnin.",
        "station.ecosystem-vision.why_it_matters": "APIt eivät ole itsenäisiä tuotteita, vaan osa laajempaa ekosysteemiä. Tämä asema auttaa tiimejä määrittelemään, miten niiden rajapinnat ovat vuorovaikutuksessa muiden järjestelmien, alustojen ja palvelujen kanssa, jotta voidaan luoda kukoistava ekosysteemi, joka edistää yhteistyötä ja innovointia.",
        "station.ecosystem-vision.apply_in_work": "Tarjotaan ekosysteemin visiokehykset, kumppanien sitouttamisstrategiat ja integrointiohjeet. Varmistaa, että tiimit suunnittelevat rajapinnat ekosysteemiä silmällä pitäen ja edistävät kumppanien välistä yhteistyötä.",
        "station.ecosystem-vision.outcomes": "Selkeä ekosysteemin visio rajapinnoille",
        "station.ecosystem-vision.how_it_works": "Määrittele rajapintojesi ekosysteemivisio, mukaan lukien se, miten ne ovat vuorovaikutuksessa muiden järjestelmien ja alustojen kanssa.",
        "station.scalable-infrastructure.title": "Skaalautuva infrastruktuuri - rakenna APIt vankalle perustalle",
        "station.scalable-infrastructure.description": "Varmistetaan, että API-infrastruktuurisi voi skaalautua vastaamaan kasvavaa kysyntää ja tukea korkeaa käytettävyyttä.",
        "station.scalable-infrastructure.why_it_matters": "APIt on rakennettava vankalle infrastruktuurille, joka kestää kasvavan liikenteen ja varmistaa korkean käytettävyyden. Tämä asema tarjoaa ohjeita APIn kasvua ja suorituskykyä tukevan skaalautuvan infrastruktuurin suunnitteluun ja toteuttamiseen.",
        "station.scalable-infrastructure.apply_in_work": "Tarjotaan infrastruktuurin suunnitteluohjeita, pilvipohjaisia malleja ja valvontatyökaluja. Varmistetaan, että tiimit ottavat käyttöön skaalautuvan infrastruktuurin, joka pystyy mukautumaan muuttuviin vaatimuksiin ja tukemaan API-suorituskykyä.",
        "station.scalable-infrastructure.outcomes": "Skaalautuva ja joustava API-infrastruktuuri",
        "station.scalable-infrastructure.how_it_works": "Suunnittele API-infrastruktuuri skaalautuvaksi ja joustavaksi käyttäen pilvipohjaisia malleja ja teknologioita.",
        "station.legal-and-compliance.title": "Lainsäädäntö ja vaatimustenmukaisuus - varmista, että APIt täyttävät sääntelystandardit.",
        "station.legal-and-compliance.description": "Varmistetaan, että rajapinnat noudattavat lakisääteisiä ja lainsäädännöllisiä vaatimuksia ja suojaavat organisaatiota ja käyttäjiä.",
        "station.legal-and-compliance.why_it_matters": "API-rajapintojen on noudatettava oikeudellisia ja sääntelystandardeja organisaation ja käyttäjien suojelemiseksi. Tämä asema tarjoaa työkaluja ja ohjeita, joilla varmistetaan, että rajapinnat täyttävät vaatimustenmukaisuusvaatimukset, vähennetään oikeudellisia riskejä ja varmistetaan tietosuoja.",
        "station.legal-and-compliance.apply_in_work": "Tarjotaan oikeudellisia ja vaatimustenmukaisuutta koskevia puitteita, tarkistuslistoja ja työkaluja API-vaatimustenmukaisuuden varmistamiseksi. Varmistetaan, että tiimit ymmärtävät ja panevat täytäntöön oikeudelliset vaatimukset APIn suunnittelussa, kehittämisessä ja julkaisemisessa.",
        "station.legal-and-compliance.outcomes": "Oikeudellisten ja sääntelystandardien mukaiset APIt",
        "station.legal-and-compliance.how_it_works": "Tunnista rajapintoihin sovellettavat oikeudelliset ja sääntelyvaatimukset, kuten tietosuojaa, yksityisyyttä ja tietoturvaa koskevat vaatimukset.",
        "station.security-and-privacy.title": "Tietoturva ja yksityisyys - Suojaa APIt ja käyttäjät",
        "station.security-and-privacy.description": "Toteuta tietoturva- ja yksityisyydensuojatoimenpiteet, joilla suojataan rajapintoja ja käyttäjätietoja uhkilta ja tietoturvaloukkauksilta.",
        "station.security-and-privacy.why_it_matters": "APIt ovat alttiita tietoturvauhkille ja tietomurroille. Tämä asema tarjoaa ohjeita tietoturva- ja yksityisyydensuojatoimenpiteiden toteuttamiseen, joilla suojataan rajapintoja ja käyttäjätietoja ja varmistetaan luottamus ja vaatimustenmukaisuus.",
        "station.security-and-privacy.apply_in_work": "Tarjotaan tietoturvakehyksiä, -työkaluja ja parhaita käytäntöjä rajapintojen turvallisuutta ja yksityisyyttä varten. Varmistaa, että tiimit toteuttavat tietoturvatoimenpiteitä koko APIn elinkaaren ajan suunnittelusta julkaisuun ja seurantaan.",
        "station.security-and-privacy.outcomes": "Uhkia ja haavoittuvuuksia vastaan suojatut rajapinnat",
        "station.security-and-privacy.how_it_works": "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
        "station.design-standards.title": "Suunnittelustandardit - Varmistaa johdonmukainen ja laadukas API-suunnittelu.",
        "station.design-standards.description": "Suunnittelustandardien ja -ohjeiden laatiminen, jotta varmistetaan yhdenmukainen ja laadukas API-suunnittelu koko organisaatiossa.",
        "station.design-standards.why_it_matters": "Johdonmukainen ja laadukas API-suunnittelu on olennaisen tärkeää käytettävyyden, ylläpidettävyyden ja skaalautuvuuden kannalta. Tämä asema tarjoaa suunnittelustandardeja ja -ohjeita, joiden avulla tiimit voivat luoda rajapintoja, joita on helppo käyttää, ymmärtää ja ylläpitää.",
        "station.design-standards.apply_in_work": "Suunnittelustandardien dokumentointi, uudelleenkäytettävät komponentit ja suunnittelun tarkistusprosessit. Varmistetaan, että tiimit noudattavat suunnittelustandardeja ja tekevät säännöllisiä tarkistuksia laadukkaan API-suunnittelun ylläpitämiseksi.",
        "station.design-standards.outcomes": "Yhdenmukainen API-suunnittelu koko organisaatiossa",
        "station.design-standards.how_it_works": "Määrittele API-suunnittelun suunnittelustandardit ja -ohjeet, mukaan lukien nimeämiskäytännöt, vastausmuodot ja virheenkäsittely.",
        "station.vendor-management.title": "Toimittajan hallinta - Kolmannen osapuolen API-integraatioiden hallinta",
        "station.vendor-management.description": "Hallinnoi tehokkaasti kolmannen osapuolen API-toimittajia ja integraatioita luotettavuuden ja vaatimustenmukaisuuden varmistamiseksi.",
        "station.vendor-management.why_it_matters": "Kolmannen osapuolen rajapinnat voivat aiheuttaa riskejä ja riippuvuuksia, jotka vaikuttavat rajapintaekosysteemiisi. Tämä asema tarjoaa ohjeita toimittajasuhteiden hallintaan, luotettavuuden ja vaatimustenmukaisuuden varmistamiseen sekä API-strategian noudattamiseen.",
        "station.vendor-management.apply_in_work": "Tarjotaan toimittajien hallintakehykset, arviointikriteerit ja seurantatyökalut. Varmistetaan, että tiimit hallinnoivat tehokkaasti kolmannen osapuolen API-toimittajia ja varmistavat luotettavuuden, vaatimustenmukaisuuden ja organisaation standardien noudattamisen.",
        "station.vendor-management.outcomes": "Tehokkaat myyjien hallinnointiprosessit on otettu käyttöön",
        "station.vendor-management.how_it_works": "Ota käyttöön toimittajahallintaprosessit kolmansien osapuolten API-toimittajien arviointia, käyttöönottoa ja seurantaa varten.",
        "station.contract-design.title": "Sopimussuunnittelu - Määrittele selkeät API-sopimukset",
        "station.contract-design.description": "Luo selkeät ja hyvin määritellyt API-sopimukset, joissa hahmotellaan odotukset, vastuut ja käyttöohjeet.",
        "station.contract-design.why_it_matters": "API-rajapintasopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita selkeiden, kattavien ja helposti ymmärrettävien API-rajapintasopimusten suunnitteluun.",
        "station.contract-design.apply_in_work": "Tarjotaan sopimussuunnittelumalleja, standardoituja muotoja ja tarkistusprosesseja. Varmistetaan, että tiimit luovat selkeät ja hyvin määritellyt API-sopimukset, joissa hahmotellaan odotukset, vastuut ja käyttöohjeet.",
        "station.contract-design.outcomes": "Kullekin ajapinnalle määritellyt selkeät API-sopimukset",
        "station.contract-design.how_it_works": "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
        "station.development.title": "Kehitys - Rakenna APIt parhaiden käytäntöjen avulla",
        "station.development.description": "Toteuta rajapinnat parhaiden käytäntöjen ja kehysten avulla laadun, ylläpidettävyyden ja skaalautuvuuden varmistamiseksi.",
        "station.development.why_it_matters": "APIn kehittäminen on kriittinen vaihe, joka määrittää APIn laadun ja luotettavuuden. Tämä asema tarjoaa parhaita käytäntöjä ja kehyksiä API-kehitystä varten, jotta varmistetaan, että APIt rakennetaan korkeiden standardien mukaisesti ja että niitä voidaan ylläpitää ja skaalata tehokkaasti.",
        "station.development.apply_in_work": "Kehityskehysten, kirjastojen ja koodausstandardien tarjoaminen API-toteutusta varten. Varmistaa, että tiimit noudattavat parhaita käytäntöjä, ja suorittaa koodin tarkistuksia API-kehityksen laadun ylläpitämiseksi.",
        "station.development.outcomes": "parhaita käytäntöjä ja kehyksiä hyödyntävät rajapinnat",
        "station.development.how_it_works": "Käytetään vakiintuneita kehyksiä ja kirjastoja rajapintojen toteuttamiseen ja varmistetaan, että ne ovat uudelleenkäytettäviä ja ylläpidettäviä.",
        "station.ci-cd.title": "CI/CD - Automatisoi API-kehitys",
        "station.ci-cd.description": "Ota käyttöön jatkuvan integroinnin ja jatkuvan toimituksen (CI/CD) putket API-kehityksen automatisoimiseksi ja tasaisen laadun varmistamiseksi.",
        "station.ci-cd.why_it_matters": "CI/CD on olennaisen tärkeää sen varmistamiseksi, että rajapinnat toimitetaan nopeasti, luotettavasti ja laadukkaasti. Tämä asema tarjoaa ohjeita CI/CD-putkien toteuttamiseen, jotka automatisoivat API-rajapintojen rakentamis-, testaus- ja käyttöönottoprosessit.",
        "station.ci-cd.apply_in_work": "CI/CD-kehysten, työkalujen ja parhaiden käytäntöjen tarjoaminen API-kehitystä varten. Varmistetaan, että tiimit ottavat käyttöön automatisoidut putket, jotka tukevat APIen jatkuvaa integrointia, testausta ja käyttöönottoa.",
        "station.ci-cd.outcomes": "Automaattiset CI/CD-putket API-toimituksia varten.",
        "station.ci-cd.how_it_works": "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
        "station.test-automation.title": "Testausautomaatio - varmista API-laatu",
        "station.test-automation.description": "Ota käyttöön automatisoituja testauskäytäntöjä APIn laadun, luotettavuuden ja suorituskyvyn varmistamiseksi.",
        "station.test-automation.why_it_matters": "Automatisoitu testaus on ratkaisevan tärkeää sen varmistamiseksi, että rajapinnat toimivat oikein ja täyttävät laatuvaatimukset. Tämä asema tarjoaa ohjeita automaattisten testauskäytäntöjen käyttöönottoon, jotka kattavat APIen toiminnallisen, turvallisuus- ja suorituskykytestauksen.",
        "station.test-automation.apply_in_work": "Testausautomaatiokehysten, -työkalujen ja parhaiden käytäntöjen tarjoaminen API-testausta varten. Varmistetaan, että tiimit toteuttavat automatisoituja testejä, jotka kattavat APIen toiminnalliset, turvallisuus- ja suorituskykyyn liittyvät näkökohdat.",
        "station.test-automation.outcomes": "API-rajapintojen automatisoidut testauskäytännöt",
        "station.test-automation.how_it_works": "Käytetään automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin.",
        "station.release-management.title": "Julkaisunhallinta - Hallitse API-julkaisuja tehokkaasti",
        "station.release-management.description": "Ota käyttöön julkaisujen hallintakäytäntöjä sujuvien ja valvottujen API-julkaisujen varmistamiseksi.",
        "station.release-management.why_it_matters": "Tehokas julkaisujen hallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-julkaisut ovat sujuvia, hallittuja ja liiketoiminnan tarpeiden mukaisia. Tämä asema tarjoaa ohjeita API-julkaisujen hallintaan, mukaan lukien versiointi, käyttöönottostrategiat ja palautusmenettelyt.",
        "station.release-management.apply_in_work": "Tarjotaan julkaisunhallintakehykset, versiointiohjeet ja käyttöönottostrategiat. Varmistetaan, että tiimit noudattavat parhaita käytäntöjä API-julkaisujen hallinnassa, mukaan lukien versiointi, käyttöönotto ja palautusmenettelyt.",
        "station.release-management.outcomes": "Hallitut ja sujuvat API-julkaisut",
        "station.release-management.how_it_works": "Määrittele rajapintojen versiointistrategiat muutosten hallitsemiseksi ja taaksepäin yhteensopivuuden varmistamiseksi.",
        "station.service-agreements.title": "Palvelusopimukset - määrittele API-palvelutasot",
        "station.service-agreements.description": "Laadi palvelusopimukset, joissa määritellään API-toimittajien ja hyödyntäjien odotukset, palvelutasot ja vastuut.",
        "station.service-agreements.why_it_matters": "Palvelusopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita palvelusopimusten laatimiseen niin, että odotukset, palvelutasot ja vastuut ovat selvät ja väärinkäsitysten riski pienenee.",
        "station.service-agreements.apply_in_work": "Tarjoa palvelusopimusmalleja, standardoituja muotoja ja katselmointiprosesseja. Varmista, että tiimit luovat selkeät ja tarkkaan määritellyt palvelusopimukset, joissa kuvataan API-toimittajien ja hyödyntäjien odotukset, palvelutasot ja vastuut.",
        "station.service-agreements.outcomes": "Kullekin rajapinnalle määritellyt selkeät palvelusopimukset",
        "station.service-agreements.how_it_works": "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
        "station.api-consumer-adoption.title": "APIn käyttöönotto - APIn käytön edistäminen",
        "station.api-consumer-adoption.description": "Toteuta strategioita, joilla edistetään API-hyödyntäjien käyttöönottoa ja sitoutumista sekä varmistetaan, että API-rajapintoja käytetään tehokkaasti.",
        "station.api-consumer-adoption.why_it_matters": "API-hyödyntäjien käyttöönoton edistäminen on ratkaisevan tärkeää APIen arvon hyödyntämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä API-hyödyntäjien sitouttamiseen ja sen varmistamiseen, että he ymmärtävät, miten API-rajapintoja käytetään tehokkaasti ja miten niistä saadaan arvoa.",
        "station.api-consumer-adoption.apply_in_work": "Tarjoa API-hyödyntäjille resursseja, koulutusmateriaalia ja sitouttamisstrategioita. Varmista, että tiimit toteuttavat strategioita, jotka edistävät API-hyödyntäjien käyttöönottoa, sitoutumista ja tyytyväisyyttä.",
        "station.api-consumer-adoption.outcomes": "APIn käyttöönottoa edistävät strategiat hyödyntäjille",
        "station.api-consumer-adoption.how_it_works": "Kehitä käyttöönoton prosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten rajapintoja käytetään tehokkaasti.",
        "station.api-promotion.title": "API-näkyvyys - APIn näkyvyyden ja käytön lisääminen",
        "station.api-promotion.description": "Edistetään rajapintoja näkyvyyden, käytön ja hyväksynnän lisäämiseksi kohdeyleisöjen keskuudessa.",
        "station.api-promotion.why_it_matters": "API-rajapintojen tunnetuksi tekeminen on olennaisen tärkeää niiden näkyvyyden lisäämiseksi ja käytön edistämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä APIen tehokkaaseen markkinointiin kohdeyleisöille, jotta varmistetaan, että nämä ovat tietoisia APIista ja ymmärtävät niiden arvon.",
        "station.api-promotion.apply_in_work": "Tarjotaan markkinointistrategioita, myynninedistämismateriaalia ja resursseja yhteisön sitouttamiseen. Varmistaa, että tiimit toteuttavat tehokkaita APIn edistämisstrategioita, jotka lisäävät näkyvyyttä, käyttöä ja käyttöönottoa kohdeyleisöjen keskuudessa.",
        "station.api-promotion.outcomes": "Toteutetut API-edistämisstrategiat",
        "station.api-promotion.how_it_works": "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
        "station.partner-integration.title": "Kumppanien integrointi - Tee yhteistyötä kumppaneiden kanssa",
        "station.partner-integration.description": "Helpota kumppani-integraatioita API-ominaisuuksien parantamiseksi ja tavoittavuuden laajentamiseksi.",
        "station.partner-integration.why_it_matters": "Kumppani-integraatiot voivat parantaa API-ominaisuuksia ja laajentaa tavoitettavuutta. Tämä asema tarjoaa ohjeita kumppanien kanssa tehtävään yhteistyöhön niiden rajapintojen integroimiseksi, jotta varmistetaan saumaton yhteentoimivuus ja arvon luominen.",
        "station.partner-integration.apply_in_work": "Tarjotaan kumppaneiden integrointikehykset, ohjeet ja seurantatyökalut. Varmistaa, että tiimit tekevät tehokasta yhteistyötä kumppaneiden kanssa API-ominaisuuksien parantamiseksi, ulottuvuuden laajentamiseksi ja innovoinnin edistämiseksi.",
        "station.partner-integration.outcomes": "Kumppaneiden integrointiprosessit on luotu",
        "station.partner-integration.how_it_works": "Tunnista mahdolliset kumppanit, joiden APIt voivat parantaa API-valmiuksiasi ja arvolupaustasi.",
        "station.api-mindset.title": "API-ajattelutapa - API-first -kulttuurin edistäminen",
        "station.api-mindset.description": "Kehitä API-first -ajattelutapaa koko organisaatiossa innovoinnin ja yhteistyön edistämiseksi.",
        "station.api-mindset.why_it_matters": "API-first -ajattelutapa on olennaisen tärkeä innovoinnin ja yhteistyön edistämiseksi koko organisaatiossa. Tämä asema tarjoaa strategioita API-first -kulttuurin kehittämiseksi ja sen varmistamiseksi, että rajapinnat nähdään strategisina voimavaroina, jotka tuottavat liiketoiminta-arvoa.",
        "station.api-mindset.apply_in_work": "Tarjotaan koulutusohjelmia, resursseja ja viestintästrategioita API-first -kulttuurin edistämiseksi. Varmistetaan, että tiimit ymmärtävät APIen arvon ja että niillä on valtuudet johtaa API-strategiaa ja -aloitteita.",
        "station.api-mindset.outcomes": "API-first -kulttuuri on vakiintunut koko organisaatioon",
        "station.api-mindset.how_it_works": "Edistetään rajapintojen arvoa strategisina voimavaroina, jotka lisäävät liiketoiminnan arvoa ja innovointia.",
        "station.roles-and-responsibilities.title": "Roolit ja vastuualueet - API-tiimien rakenteiden määrittelyt",
        "station.roles-and-responsibilities.description": "Määrittele API-tiimeille selkeät roolit ja vastuualueet tehokkaan yhteistyön ja vastuuvelvollisuuden varmistamiseksi.",
        "station.roles-and-responsibilities.why_it_matters": "Selkeät roolit ja vastuualueet ovat olennaisen tärkeitä tehokkaan yhteistyön ja vastuuvelvollisuuden kannalta API-tiimeissä. Tämä asema tarjoaa ohjeita tiimirakenteiden, roolien ja vastuualueiden määrittelyyn ja varmistaa, että kaikki ymmärtävät oman panoksensa API-aloitteisiin.",
        "station.roles-and-responsibilities.apply_in_work": "Tarjotaan tiimirakenneohjeet, roolimäärittelyt ja viestintästrategiat. Varmistetaan, että tiimeillä on selkeät roolit ja vastuut, jotka edistävät tehokasta yhteistyötä ja vastuullisuutta API-aloitteissa.",
        "station.roles-and-responsibilities.outcomes": "API-tiimeille on määritelty selkeät roolit ja vastuut",
        "station.roles-and-responsibilities.how_it_works": "Määrittele API-tiimien tiimirakenteet ja roolit, mukaan lukien API-tuotteen omistajat, kehittäjät, arkkitehdit ja toiminnot.",
        "station.upskilling.title": "Osaamisen kehittäminen - API-taitojen ja -tiedon parantaminen",
        "station.upskilling.description": "Tarjotaan koulutusta ja resursseja API-taitojen ja -tiedon parantamiseksi koko organisaatiossa.",
        "station.upskilling.why_it_matters": "Jatkuva oppiminen ja täydennyskoulutus ovat olennaisen tärkeitä, jotta API-tiimit pysyvät ajan tasalla uusimmista teknologioista, käytännöistä ja suuntauksista. Tämä asema tarjoaa koulutusohjelmia ja resursseja API-taitojen ja -tiedon parantamiseen, jotta tiimit ovat valmiita toimittamaan korkealaatuisia API-rajapintoja.",
        "station.upskilling.apply_in_work": "Tarjotaan koulutusohjelmia, resursseja ja arviointivälineitä API-taitojen ja -tietojen parantamiseksi. Varmistetaan, että tiimeillä on mahdollisuus jatkuvaan oppimiseen, joka antaa heille mahdollisuuden edistää API-innovaatioita ja laatua.",
        "station.upskilling.outcomes": "API-taitojen ja -tiedon parantaminen koko organisaatiossa",
        "station.upskilling.how_it_works": "Tunnistetaan keskeiset API-taidot ja -tiedot, joita on kehitettävä, kuten API-suunnittelu, tietoturva ja suorituskyky.",
        "station.operating-guidelines.title": "Toimintaohjeet - API-hallinnon perustaminen",
        "station.operating-guidelines.description": "Laaditaan toimintaohjeet ja hallintokäytännöt, joilla varmistetaan APIn johdonmukainen hallinta ja laatu.",
        "station.operating-guidelines.why_it_matters": "Tehokas API-hallinta on olennaisen tärkeää, jotta voidaan varmistaa yhdenmukainen API-hallinta, laatu ja vaatimustenmukaisuus. Tämä asema tarjoaa toimintaohjeita ja hallintakäytäntöjä, jotka auttavat tiimejä hallinnoimaan API-rajapintoja tehokkaasti ja varmistamaan, että ne ovat organisaation standardien ja parhaiden käytäntöjen mukaisia.",
        "station.operating-guidelines.apply_in_work": "Toimintaohjeiden, hallintakehysten ja seurantatyökalujen tarjoaminen API-hallintaa varten. Varmistaa, että tiimit noudattavat vakiintuneita käytäntöjä, jotka edistävät johdonmukaista API-hallintaa, laatua ja organisaation standardien noudattamista.",
        "station.operating-guidelines.outcomes": "APIn hallintokäytännöt on vahvistettu",
        "station.operating-guidelines.how_it_works": "Määrittele APIOps Cyclesiin perustuvat toimintaohjeet, joissa hahmotellaan API-hallinnan prosessit, standardit ja parhaat käytännöt.",
        "station.portfolio-management.title": "Portfolionhallinta - hallinnoi API-portfoliota tehokkaasti",
        "station.portfolio-management.description": "Hallinnoida API-salkkua tehokkaasti varmistaaksesi, että se on linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa.",
        "station.portfolio-management.why_it_matters": "Tehokas rajapintasalkun hallinta on olennaisen tärkeää sen varmistamiseksi, että rajapinnat ovat linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa. Tämä asema tarjoaa ohjeita API-salkun hallintaan ja varmistaa, että APIt priorisoidaan, seurataan ja optimoidaan siten, että ne tuottavat mahdollisimman paljon arvoa.",
        "station.portfolio-management.apply_in_work": "Tarjotaan salkunhallintakehykset, priorisointikriteerit ja seurantatyökalut API-hallintaa varten. Varmistaa, että tiimit hallinnoivat API-salkkua tehokkaasti ja varmistavat, että se on linjassa liiketoimintatavoitteiden ja strategisten aloitteiden kanssa ja tuottaa mahdollisimman paljon arvoa.",
        "station.portfolio-management.outcomes": "API-salkunhallintakäytäntöjen käyttöönotto",
        "station.portfolio-management.how_it_works": "Määrittele salkunhallintakäytännöt, joissa hahmotellaan API-salkun hallinnointiprosessit, mukaan lukien priorisointi, seuranta ja optimointi.",
        "station.budget-and-resource-management.title": "Budjetin ja resurssien hallinta - Optimoi API-investoinnit",
        "station.budget-and-resource-management.description": "Optimoi API-aloitteiden budjetin ja resurssien hallinta tehokkaiden investointien ja resurssien kohdentamisen varmistamiseksi.",
        "station.budget-and-resource-management.why_it_matters": "Tehokas talousarvio- ja resurssienhallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-aloitteet ovat hyvin rahoitettuja ja resursoituja. Tämä asema tarjoaa ohjeita budjetin ja resurssien hallinnan optimoimiseksi ja sen varmistamiseksi, että API-aloitteet ovat linjassa liiketoimintatavoitteiden kanssa ja tuottavat maksimaalista arvoa.",
        "station.budget-and-resource-management.apply_in_work": "Tarjotaan API-aloitteille budjettihallintakehykset, priorisointikriteerit ja seurantatyökalut. Varmistaa, että tiimit hallinnoivat tehokkaasti budjetteja ja resursseja ja optimoivat API-kehitykseen ja -hallintaan tehdyt investoinnit mahdollisimman suuren arvon tuottamiseksi.",
        "station.budget-and-resource-management.outcomes": "API-aloitteita varten laaditut budjetti- ja resurssienhallintakäytännöt",
        "station.budget-and-resource-management.how_it_works": "Määrittele budjetti- ja resurssienhallintakäytännöt, joissa hahmotellaan API-aloitteiden budjettien ja resurssien hallinnointiprosessit.",
        "station.api-product-strategy.outcomes.1": "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
        "station.api-product-strategy.outcomes.2": "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
        "station.api-product-strategy.how_it_works.1": "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
        "station.api-product-strategy.how_it_works.2": "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
        "station.api-product-strategy.how_it_works.3": "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
        "station.api-consumer-experience.outcomes.1": "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
        "station.api-consumer-experience.outcomes.2": "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
        "station.api-consumer-experience.outcomes.3": "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta",
        "station.api-platform-architecture.outcomes.1": "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
        "station.api-platform-architecture.outcomes.2": "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
        "station.api-platform-architecture.how_it_works.1": "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
        "station.api-platform-architecture.how_it_works.2": "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
        "station.api-platform-architecture.how_it_works.3": "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
        "station.api-design.outcomes.1": "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
        "station.api-design.outcomes.2": "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
        "station.api-design.outcomes.3": "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa",
        "station.api-design.how_it_works.1": "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
        "station.api-design.how_it_works.2": "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
        "station.api-design.how_it_works.3": "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
        "station.api-design.how_it_works.4": "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
        "station.api-design.how_it_works.5": "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
        "station.api-design.how_it_works.6": "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
        "station.api-design.how_it_works.7": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
        "station.api-delivery.outcomes.1": "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
        "station.api-delivery.outcomes.2": "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
        "station.api-delivery.outcomes.3": "Jäljitettävät toimitus- ja julkaisukontrollit",
        "station.api-delivery.how_it_works.1": "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
        "station.api-delivery.how_it_works.2": "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
        "station.api-delivery.how_it_works.3": "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
        "station.api-delivery.how_it_works.4": "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
        "station.api-delivery.how_it_works.5": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
        "station.api-audit.outcomes.1": "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
        "station.api-audit.outcomes.2": "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
        "station.api-audit.outcomes.3": "Pienempi riski tuotannon ongelmille",
        "station.api-audit.how_it_works.1": "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
        "station.api-audit.how_it_works.2": "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
        "station.api-publishing.outcomes.1": "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
        "station.api-publishing.outcomes.2": "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
        "station.api-publishing.outcomes.3": "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä",
        "station.api-publishing.how_it_works.1": "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
        "station.api-publishing.how_it_works.2": "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
        "station.monitoring-and-improving.outcomes.1": "Parannusjono, joka perustuu operatiiviseen ja hyödyntäjien palautteeseen",
        "station.monitoring-and-improving.outcomes.2": "Uudelleenkäytön, luotettavuuden, datan laadun ja kustannusten signaalit omistajien saatavilla",
        "station.monitoring-and-improving.outcomes.3": "Jatkuva parantaminen linjassa hyödyntäjien tarpeiden kanssa",
        "station.monitoring-and-improving.how_it_works.1": "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
        "station.monitoring-and-improving.how_it_works.2": "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
        "station.user-experience.outcomes.1": "Intuitiiviset ja johdonmukaiset käyttöliittymät",
        "station.user-experience.outcomes.2": "Käyttäjien palaute sisällytetty APIn suunnitteluun",
        "station.user-experience.outcomes.3": "Parempi käyttäjätyytyväisyys ja hyväksyntä",
        "station.user-experience.how_it_works.1": "Suorita käyttäjätutkimus kerätäksesi tietoa siitä, miten hyödyntäjät ovat vuorovaikutuksessa ekosysteemipalveluiden tai API-sovelluksia käyttävien sovellusten kanssa.",
        "station.user-experience.how_it_works.2": "Dokumentoi käyttäjäkokemusta koskevat vaatimukset, jotta niitä voidaan käyttää API-suunnittelussa ja varmistaa, että ne ovat intuitiivisia ja helppokäyttöisiä.",
        "station.market-insights.outcomes.1": "Määritetyt alan standardit ja parhaat käytännöt",
        "station.market-insights.outcomes.2": "API-strategia linjassa markkinoiden tarpeiden kanssa",
        "station.market-insights.outcomes.3": "Markkinatietoon perustuva tietoon perustuva päätöksenteko",
        "station.market-insights.how_it_works.1": "Analysoi kilpailijoiden rajapinnat ymmärtämään niiden vahvuudet, heikkoudet ja ainutlaatuiset myyntivaltit.",
        "station.market-insights.how_it_works.2": "Tunnistetaan alan standardit ja parhaat käytännöt, jotta voidaan varmistaa, että rajapinnat ovat kilpailukykyisiä ja yhteensopivia.",
        "station.business-goals.outcomes.1": "Kullekin Rajapinnalle määritelty selkeä liiketoiminta-arvo",
        "station.business-goals.outcomes.2": "Sidosryhmien sitoutuminen ja tuki API-aloitteille",
        "station.business-goals.outcomes.3": "APIt edistävät organisaation menestystä",
        "station.business-goals.how_it_works.1": "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
        "station.business-goals.how_it_works.2": "Sidosryhmien sitouttaminen varmistamaan API-aloitteiden yhdenmukaisuus ja tuki.",
        "station.competitive-analysis.outcomes.1": "Eriyttämismahdollisuudet tunnistettu",
        "station.competitive-analysis.outcomes.2": "API-strategia, joka perustuu kilpailutietoon",
        "station.competitive-analysis.outcomes.3": "Lisääntynyt kilpailukyky API-markkinoilla",
        "station.competitive-analysis.how_it_works.1": "Tunnista markkinapuutteet, jotka rajapintasi voivat täyttää kilpailijoiden tarjonnan perusteella.",
        "station.competitive-analysis.how_it_works.2": "Kehitä erottautumisstrategia, jossa korostetaan rajapintojesi ainutlaatuisia ominaisuuksia ja etuja.",
        "station.ecosystem-vision.outcomes.1": "APIt, jotka on suunniteltu mahdollistamaan yhteistyö ja integrointi",
        "station.ecosystem-vision.outcomes.2": "Ekosysteemikumppanit tunnistetaan ja otetaan mukaan",
        "station.ecosystem-vision.outcomes.3": "APIt edistävät elinvoimaista ekosysteemiä",
        "station.ecosystem-vision.how_it_works.1": "Tunnistetaan tärkeimmät ekosysteemikumppanit ja sidosryhmät, jotka hyötyvät ekosysteemistä tai osallistuvat siihen.",
        "station.ecosystem-vision.how_it_works.2": "Suunnittele rajapinnat, jotka mahdollistavat saumattoman integroinnin ja yhteistyön ekosysteemissä.",
        "station.scalable-infrastructure.outcomes.1": "Korkea käytettävyys ja suorituskyky kuormitettuna",
        "station.scalable-infrastructure.outcomes.2": "Tulevaa kasvua varten suunniteltu infrastruktuuri",
        "station.scalable-infrastructure.outcomes.3": "Vähentää käyttökatkoksia ja parantaa käyttäjäkokemusta",
        "station.scalable-infrastructure.how_it_works.1": "Toteuta kuorman tasapainottaminen, välimuistitallennus ja muut tekniikat korkean käytettävyyden ja suorituskyvyn varmistamiseksi. Kerää infrastruktuurivaatimukset API-tiimeiltä Capacity Canvasin avulla.",
        "station.scalable-infrastructure.how_it_works.2": "Seuraa infrastruktuurin suorituskykyä ja kapasiteettia sen varmistamiseksi, että se pystyy vastaamaan kasvavaan kysyntään.",
        "station.legal-and-compliance.outcomes.1": "Tietosuojaa ja yksityisyyden suojaa koskevat vaatimukset täyttyvät",
        "station.legal-and-compliance.outcomes.2": "Oikeudellisten riskien tunnistaminen ja lieventäminen",
        "station.legal-and-compliance.outcomes.3": "Vaatimustenmukaisuustoimenpiteiden selkeä dokumentointi",
        "station.legal-and-compliance.how_it_works.1": "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
        "station.legal-and-compliance.how_it_works.2": "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
        "station.security-and-privacy.outcomes.1": "Käyttäjätiedot suojattu yksityisyydensuojatoimenpiteiden avulla",
        "station.security-and-privacy.outcomes.2": "Parhaat turvallisuuskäytännöt API-suunnittelussa ja -kehityksessä",
        "station.security-and-privacy.outcomes.3": "Turvallisuusstandardien ja -säännösten noudattaminen",
        "station.security-and-privacy.how_it_works.1": "Varmistetaan käyttäjien tietojen yksityisyys toteuttamalla tietosuojatoimenpiteitä, kuten anonymisointi ja käyttöoikeuksien valvonta.",
        "station.security-and-privacy.how_it_works.2": "Suorittaa säännöllisiä tietoturvatarkastuksia ja haavoittuvuusarviointeja riskien tunnistamiseksi ja vähentämiseksi.",
        "station.design-standards.outcomes.1": "Laadukkaat APIt, jotka vastaavat käyttäjien tarpeita",
        "station.design-standards.outcomes.2": "Uudelleenkäytettävät suunnittelumallit ja komponentit",
        "station.design-standards.outcomes.3": "Vähennetään suunnittelun epäjohdonmukaisuuksia ja teknistä velkaa.",
        "station.design-standards.how_it_works.1": "Luo uudelleenkäytettäviä suunnittelumalleja ja -komponentteja, joita tiimit voivat hyödyntää yhdenmukaisuuden ja laadun varmistamiseksi.",
        "station.design-standards.how_it_works.2": "Suoritat suunnittelun tarkastuksia ja auditointeja varmistaaksesi suunnittelustandardien noudattamisen ja yksilöidäksesi parannuskohteet.",
        "station.vendor-management.outcomes.1": "Kolmannen osapuolen APIt integroituvat luotettavasti ja turvallisesti.",
        "station.vendor-management.outcomes.2": "Myyjä noudattaa organisaation standardeja",
        "station.vendor-management.outcomes.3": "Kolmannen osapuolen riippuvuuksiin liittyvien riskien vähentäminen",
        "station.vendor-management.how_it_works.1": "Määrittele kriteerit toimittajien rajapintojen arviointia varten, mukaan lukien luotettavuus, turvallisuus ja vaatimustenmukaisuus.",
        "station.vendor-management.how_it_works.2": "Seuraa toimittajien suorituskykyä ja palvelutasosopimusten (SLA) ja organisaation standardien noudattamista.",
        "station.contract-design.outcomes.1": "API-toimittajien ja hyödyntäjien odotukset ja vastuut kuvattuina",
        "station.contract-design.outcomes.2": "Käyttöohjeet ja parhaat käytännöt dokumentoitu",
        "station.contract-design.outcomes.3": "APIn käyttöä koskevien väärinkäsitysten ja riitojen väheneminen.",
        "station.contract-design.how_it_works.1": "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida.",
        "station.contract-design.how_it_works.2": "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät API-sopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
        "station.development.outcomes.1": "Laadukkaat, ylläpidettävät ja skaalautuvat rajapinnat.",
        "station.development.outcomes.2": "Johdonmukaiset koodausstandardit ja -käytännöt",
        "station.development.outcomes.3": "Vähentää kehitysaikaa ja teknistä velkaa",
        "station.development.how_it_works.1": "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
        "station.development.how_it_works.2": "Noudata koodausstandardeja ja parhaita käytäntöjä varmistaaksesi johdonmukaisen ja laadukkaan API-kehityksen.",
        "station.ci-cd.outcomes.1": "API-kehityksen tasainen laatu ja jäljitettävyys",
        "station.ci-cd.outcomes.2": "Nopeammat iteraatiot ja lyhyempi aika markkinoille saattamiseen",
        "station.ci-cd.outcomes.3": "Parempi yhteistyö ja palautekierrokset API-kehityksessä",
        "station.ci-cd.how_it_works.1": "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
        "station.ci-cd.how_it_works.2": "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia.",
        "station.test-automation.outcomes.1": "Automaattiset toiminnalliset, turvallisuus- ja suorituskykytestit",
        "station.test-automation.outcomes.2": "Vähentää manuaalisen testauksen työmäärää ja lisää testien kattavuutta",
        "station.test-automation.outcomes.3": "APIn luotettavuuden ja laadun parantaminen",
        "station.test-automation.how_it_works.1": "Toteuta testiautomaatiokehykset, jotka tukevat sopimustestausta, integrointitestausta ja päästä päähän -testausta.",
        "station.test-automation.how_it_works.2": "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
        "station.release-management.outcomes.1": "Versiointi- ja käyttöönottostrategioiden määrittely",
        "station.release-management.outcomes.2": "API-julkaisuja varten vahvistetut palautusmenettelyt",
        "station.release-management.outcomes.3": "API-muutoksiin liittyvien riskien vähentäminen",
        "station.release-management.how_it_works.1": "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, canary releaset) API-julkaisuihin liittyvien riskien minimoimiseksi.",
        "station.release-management.how_it_works.2": "Ota käyttöön palautusmenettelyt, jotta muutokset voidaan palauttaa nopeasti, jos API-julkaisujen aikana ilmenee ongelmia.",
        "station.service-agreements.outcomes.1": "API-toimittajien ja hyödyntäjien odotukset ja palvelutasot kuvattuina",
        "station.service-agreements.outcomes.2": "Dokumentoidut vastuualueet ja tukiprosessit",
        "station.service-agreements.outcomes.3": "Parempi viestintä ja yhteistyö API-tiimien välillä",
        "station.service-agreements.how_it_works.1": "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
        "station.service-agreements.how_it_works.2": "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
        "station.api-consumer-adoption.outcomes.1": "APIn käytön ja sitoutumisen lisääminen",
        "station.api-consumer-adoption.outcomes.2": "APIn hyödyntäjät saavat tietoa APIn ominaisuuksista ja hyödyistä",
        "station.api-consumer-adoption.outcomes.3": "Parempi API-hyödyntäjätyytyväisyys ja -uskollisuus",
        "station.api-consumer-adoption.how_it_works.1": "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
        "station.api-consumer-adoption.how_it_works.2": "Ole vuorovaikutuksessa API-hyödyntäjien kanssa palautekierrosten, tukikanavien ja yhteisöfoorumien kautta, jotta heidän tarpeensa ymmärretään ja APIn käyttöönottoa voidaan parantaa.",
        "station.api-promotion.outcomes.1": "APIn näkyvyyden ja tietoisuuden lisääminen",
        "station.api-promotion.outcomes.2": "Korkeampi APIn käyttö- ja hyväksymisaste",
        "station.api-promotion.outcomes.3": "Parempi API-hyödyntäjien sitoutuminen ja tyytyväisyys",
        "station.api-promotion.how_it_works.1": "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
        "station.api-promotion.how_it_works.2": "Osallistu API-yhteisöihin ja -foorumeihin API-päivitysten jakamiseksi, palautteen keräämiseksi ja APIn käytön edistämiseksi.",
        "station.partner-integration.outcomes.1": "Parannetut API-ominaisuudet kumppani-APIen avulla",
        "station.partner-integration.outcomes.2": "Kumppanuuksien avulla laajennettu ulottuvuus ja markkinamahdollisuudet",
        "station.partner-integration.outcomes.3": "Parempi yhteistyö ja innovointi kumppaneiden kanssa",
        "station.partner-integration.how_it_works.1": "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
        "station.partner-integration.how_it_works.2": "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa.",
        "station.api-mindset.outcomes.1": "Innovaation ja yhteistyön lisääminen rajapintojen avulla",
        "station.api-mindset.outcomes.2": "API-tiimit, joilla on valtuudet johtaa API-strategiaa ja -aloitteita.",
        "station.api-mindset.outcomes.3": "Liiketoiminnan tavoitteiden ja API-kehityksen parempi yhteensovittaminen.",
        "station.api-mindset.how_it_works.1": "Kannustaa API-tiimien, liiketoimintayksiköiden ja sidosryhmien välistä monialaista yhteistyötä, jotta API-aloitteet voidaan sovittaa yhteen liiketoiminnan tavoitteiden kanssa.",
        "station.api-mindset.how_it_works.2": "Tarjotaan koulutusta ja resursseja, jotta tiimit voivat omaksua API-first -ajattelutavan ja ymmärtää APIen edut.",
        "station.roles-and-responsibilities.outcomes.1": "Tehokas yhteistyö ja vastuuvelvollisuus API-tiimeissä",
        "station.roles-and-responsibilities.outcomes.2": "Parempi viestintä ja yhdenmukaistaminen tiimin jäsenten välillä",
        "station.roles-and-responsibilities.outcomes.3": "Sekaannusten ja päällekkäisyyksien vähentäminen vastuualueilla",
        "station.roles-and-responsibilities.how_it_works.1": "Määritä selkeät vastuualueet kullekin roolille, mukaan lukien API-suunnittelu, kehittäminen, testaus ja toiminta.",
        "station.roles-and-responsibilities.how_it_works.2": "Varmistaa, että roolit ja vastuualueet ilmoitetaan kaikille tiimin jäsenille ja sidosryhmille, jotta varmistetaan niiden yhdenmukaisuus.",
        "station.upskilling.outcomes.1": "API-suunnittelun, -kehityksen ja -hallinnan lisääntynyt osaaminen.",
        "station.upskilling.outcomes.2": "Parempi kyky omaksua uutta teknologiaa ja uusia käytäntöjä",
        "station.upskilling.outcomes.3": "Valtuutetaan tiimit edistämään API-innovaatioita ja laatua.",
        "station.operating-guidelines.outcomes.1": "Yhdenmukainen API-hallinta ja laatu koko organisaatiossa",
        "station.operating-guidelines.outcomes.2": "organisaation standardien ja parhaiden käytäntöjen noudattaminen",
        "station.operating-guidelines.outcomes.3": "Parempi näkyvyys ja API-aloitteiden hallinta",
        "station.operating-guidelines.how_it_works.1": "Ota käyttöön hallintokäytännöt, joilla varmistetaan, että rajapintoja hallinnoidaan johdonmukaisesti, mukaan lukien tarkistukset, auditoinnit ja vaatimustenmukaisuuden tarkastukset.",
        "station.operating-guidelines.how_it_works.2": "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja hallintokäytäntöjen noudattamisen.",
        "station.portfolio-management.outcomes.1": "APIt linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa.",
        "station.portfolio-management.outcomes.2": "APIen priorisointi ja optimointi arvon ja vaikutusten perusteella.",
        "station.portfolio-management.outcomes.3": "Parempi näkyvyys ja API-portfolion hallinta",
        "station.budget-and-resource-management.outcomes.1": "Resurssien tehokas kohdentaminen API-aloitteisiin",
        "station.budget-and-resource-management.outcomes.2": "Optimoidut investoinnit API-kehitykseen ja -hallintaan",
        "station.budget-and-resource-management.outcomes.3": "Parempi taloudellinen näkyvyys ja API-aloitteiden valvonta.",
        "cycle.api-productization-cycle.station.api-product-strategy.title": "API-tuotestrategia - Tee rajapinnoista strategisia tuotteita",
        "cycle.api-productization-cycle.station.api-product-strategy.why_it_matters": "Monet organisaatiot pitävät rajapintoja teknisinä projekteina, eivät tuotteina. Tulos? Hämmentyneitä hyödyntäjiä, heikkoa käyttöönottoa ja turhaa työtä. Tämä asema auttaa määrittelemään APIn tarkoituksen, kohderyhmän ja menestyskriteerit, jotta tiimit voivat tuottaa rajapintoja, jotka ratkaisevat todellisia ongelmia.",
        "cycle.api-productization-cycle.station.api-product-strategy.apply_in_work": "Tarjotaan ohjeita ja malleja API-liiketoimintamallien, arvolupausten ja etenemissuunnitelmien luomista varten.",
        "cycle.api-productization-cycle.station.api-product-strategy.outcomes": "Suoraviivainen API-arvolupaus ja yleisö",
        "cycle.api-productization-cycle.station.api-product-strategy.how_it_works": "Tutki asiakkaan tai yhteistyökumppanin ongelmaa, jonka oletat voivasi ratkaista APIen avulla. Kartoita sidosryhmät, niiden matkat ja tulokset Customer Journey canvasin avulla.",
        "cycle.api-productization-cycle.station.api-product-strategy.outcomes.1": "Yhteinen kieli tuotteen, suunnittelun ja tekniikan välillä",
        "cycle.api-productization-cycle.station.api-product-strategy.outcomes.2": "vankka esitys tai peruste rahoituksen/hyväksynnän saamiseksi.",
        "cycle.api-productization-cycle.station.api-product-strategy.how_it_works.1": "Määrittele keskeiset entiteetit, niiden ominaisuudet ja suhteet, jotta voidaan luoda yhteinen käsitteellinen ymmärrys eri matkojen ja lopulta APIen välille.",
        "cycle.api-productization-cycle.station.api-product-strategy.how_it_works.2": "Käytä API Value Proposition Canvas -pohjaa tuettujen liiketoimintatehtävien sekä API-hyödyntäjien ongelmien, hyötyjen ja ominaisuuksien kuvaamiseen. Nämä ohjaavat uusien tai uudelleenkäytettävien API-rajapintojen muotoilua.",
        "cycle.api-productization-cycle.station.api-product-strategy.how_it_works.3": "Määrittele arvo API-hyödyntäjille ja liiketoiminnalle API Business Model Canvas -pohjan avulla, jotta API-strategiasta tulee visuaalinen, jaettava ja helposti validoitava seuraavalla asemalla.",
        "cycle.api-productization-cycle.station.api-consumer-experience.title": "API-hyödyntäjäkokemus - Suunnittele APIn todellisia hyödyntäjiä varten",
        "cycle.api-productization-cycle.station.api-consumer-experience.why_it_matters": "Hyvät aPIt eivät ainoastaan toimi - ne tuntuvat intuitiivisilta. Riippumatta siitä, onko hyödyntäjä sisäinen kehittäjä, ulkoinen kumppani vai tekoälyagentti, heidän kokemuksensa ratkaisee hyväksynnän. Ilman selkeää kokemussuunnitelmaa",
        "cycle.api-productization-cycle.station.api-consumer-experience.how_it_works": "Tarkastele olemassa olevaa API Value Proposition Canvasta API-hyödyntäjän näkökulmasta. Säilytä tuetut liiketoimintatehtävät vakaina ja rikasta tuskaa lievittäviä ja hyötyjä mahdollistavia ominaisuuksia API-hyödyntäjien näkökulmalla, jotta ne voivat ohjata myöhempiä suunnittelupäätöksiä.",
        "cycle.api-productization-cycle.station.api-consumer-experience.how_it_works.1": "Käytä Customer Journey Canvas -pohjaa API-hyödyntäjän matkan kuvaamiseen löytämisestä ja arvioinnista käyttöönottoon, integrointiin, vianmääritykseen ja jatkuvaan käyttöön.",
        "cycle.api-productization-cycle.station.api-consumer-experience.how_it_works.2": "Käytä tuloksena saatua polkua parantaaksesi käyttöönottoa, dokumentaatiota, tukea ja palautesilmukoita API-hyödyntäjille.",
        "cycle.api-productization-cycle.station.api-consumer-experience.apply_in_work": "Tarjotaan ohjeita, työkaluja ja palautemekanismeja sisäisten ja ulkoisten kehittäjien ja kumppaneiden kokemusten ymmärtämiseksi, analysoimiseksi ja parantamiseksi.",
        "cycle.api-productization-cycle.station.api-consumer-experience.outcomes": "Tunnista ja priorisoi API-asiakkaat",
        "cycle.api-productization-cycle.station.api-consumer-experience.outcomes.1": "Määrittele API-kokemuksen matka",
        "cycle.api-productization-cycle.station.api-consumer-experience.outcomes.2": "Suunnittele sisäänajo, dokumentointi ja palaute",
        "cycle.api-productization-cycle.station.api-consumer-experience.outcomes.3": "Paranna hyväksyntää aidon empatian ja kehittäjäkokemuksen (DX) avulla.",
        "cycle.api-productization-cycle.station.api-platform-architecture.title": "API-alustan arkkitehtuuri",
        "cycle.api-productization-cycle.station.api-platform-architecture.why_it_matters": "Kun rajapinnat skaalautuvat eri tiimeille, alustan on mahdollistettava hallinta ja uudelleenkäyttö nopeutta estämättä. Tällä asemalla kerrotaan, miten API-arkkitehtuurit voidaan suunnitella pitkäikäisiksi, turvallisiksi ja tehokkaiksi.",
        "cycle.api-productization-cycle.station.api-platform-architecture.apply_in_work": "Perustetaan skaalautuva, turvallinen ja vaatimustenmukainen infrastruktuuri API-toimintoja varten. Annetaan ohjeita arkkitehtuurin parhaista käytännöistä.",
        "cycle.api-productization-cycle.station.api-platform-architecture.outcomes": "Vähennä turhia API-rajapintoja ja vähennä pilvialustakustannuksia.",
        "cycle.api-productization-cycle.station.api-platform-architecture.how_it_works": "Business Impact Canvas auttaa tunnistamaan ja lieventämään APIn saatavuuteen, tietoturvaan ja toiminnallisuuteen liittyviä riskejä ja tukemaan tietoon perustuvia arkkitehtuuripäätöksiä.",
        "cycle.api-productization-cycle.station.api-platform-architecture.outcomes.1": "Johdonmukaisen hallinnon toteuttaminen ilman raskasta ylhäältä alaspäin suuntautuvaa valvontaa",
        "cycle.api-productization-cycle.station.api-platform-architecture.outcomes.2": "Suunnittelu sisäistä uudelleenkäyttöä ja ulkoista skaalautuvuutta varten",
        "cycle.api-productization-cycle.station.api-platform-architecture.how_it_works.1": "Kartoita API-palveluntarjoajien ja hyödyntäjien sääntely-, vaatimustenmukaisuus- ja verkkoasiointipaikat käytettävyyden ja vaatimustenmukaisuuden varmistamiseksi.",
        "cycle.api-productization-cycle.station.api-platform-architecture.how_it_works.2": "Capacity Canvas -ohjelmassa sovitetaan yhteen liiketoimintatapahtumien mallit, tulevat kulutustrendit ja tekniset ratkaisut, jotta voidaan varmistaa APIn skaalautuvuus ja suorituskyky. Se tarjoaa kriittisen panoksen skaalautumispäätöksiä ja infrastruktuurin suunnittelua varten.",
        "cycle.api-productization-cycle.station.api-platform-architecture.how_it_works.3": "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
        "cycle.api-productization-cycle.station.api-design.title": "API-design - Suunnittele arvoa tuottavia rajapintoja",
        "cycle.api-productization-cycle.station.api-design.why_it_matters": "APIen suunnittelu ei tarkoita pelkästään päätepisteiden (endpoints) nimeämistä. Hyvä suunnittelu varmistaa, että APIt ovat käyttökelpoisia, johdonmukaisia ja linjassa liiketoiminnallisten ja teknisten tavoitteiden kanssa. Huono suunnittelu johtaa tiukkoihin riippuvuuksiin, heikkoon uudelleenkäytettävyyteen ja kalliiseen uudelleen toteutukseen eri tiimien välillä.",
        "cycle.api-productization-cycle.station.api-design.apply_in_work": "Tarjoa uudelleenkäytettäviä suunnittelumalleja, yhteisiä standardeja ja validointityökaluja API-määrityksille. Varmista, että suunnittelupäätökset ovat johdonmukaisia, tarkistettuja varhaisessa vaiheessa ja linjassa liiketoiminnallisten tavoitteiden kanssa.",
        "cycle.api-productization-cycle.station.api-design.outcomes": "Hyvin dokumentoidut ja johdonmukaiset API-mallit",
        "cycle.api-productization-cycle.station.api-design.how_it_works": "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille.",
        "cycle.api-productization-cycle.station.api-design.outcomes.1": "Uudelleenkäytettävät ja validoidut API-sopimukset",
        "cycle.api-productization-cycle.station.api-design.outcomes.2": "Toimialamallien ja vuorovaikutusmallien mukaiset mallit",
        "cycle.api-productization-cycle.station.api-design.outcomes.3": "Suunnittelun jäljitettävyys liiketoiminnan arvoon",
        "cycle.api-productization-cycle.station.api-design.how_it_works.1": "Määrittele Interaction Canvasin avulla, miten hyödyntäjät ovat vuorovaikutuksessa APIn kanssa, ja Varmistetaan, että se vastaa heidän tarpeitaan ja odotuksiaan.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.2": "Sovellat REST-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.3": "Sovellat tapahtumapohjaisia suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.4": "Sovellat GraphQL-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.5": "Käytä suunnitteluperiaatteita ja API-tyyliohjetta, jotta suunnittelupäätöksesi ovat linjassa yhteisten sääntöjen kanssa ja mahdollistavat johdonmukaisen auditoinnin ja validoinnin.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.6": "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API-suunnittelu täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
        "cycle.api-productization-cycle.station.api-design.how_it_works.7": "Käytä API-tarkastuslistaa varmistaaksesi, että API-suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien turvallisuus, suorituskyky ja vaatimustenmukaisuus.",
        "cycle.api-productization-cycle.station.api-delivery.title": "API-kehitys - Kehitä turvalliset ja luotettavat rajapinnat",
        "cycle.api-productization-cycle.station.api-delivery.why_it_matters": "Parhaatkin API-suunnitelmat epäonnistuvat, jos kehitys on epäjohdonmukaista. Tällä asemalla varmistetaan, että rajapinnat rakennetaan laadukkaasti, testataan perusteellisesti ja otetaan käyttöön luotettavasti, mikä mahdollistaa nopeammat iteraatiot ja suuremman luottamuksen.",
        "cycle.api-productization-cycle.station.api-delivery.apply_in_work": "Toimittaa koodauskehyksiä, kirjastoja ja standardeja API-toteutusta varten. CI/CD-putkien, laadunvarmistuskehysten ja käyttöönottoautomaatiotyökalujen toteuttaminen.",
        "cycle.api-productization-cycle.station.api-delivery.outcomes": "Rajapinnat, jotka on toteutettu testattujen kehysten ja mallien avulla.",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works": "Käytä API-kehityksen parhaita käytäntöjä ohjeena validoidun sopimuksen toteuttamiseen vakiintuneilla kehysrakenteilla ja kirjastoilla varmistaen, että tulos on uudelleenkäytettävä ja ylläpidettävä.",
        "cycle.api-productization-cycle.station.api-delivery.outcomes.1": "Luotettavat ja automatisoidut CI/CD-putket",
        "cycle.api-productization-cycle.station.api-delivery.outcomes.2": "Toiminnallinen ja ei-toiminnallinen testaus integroitu",
        "cycle.api-productization-cycle.station.api-delivery.outcomes.3": "Turvalliset ja vaatimustenmukaiset kehitysputket",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works.1": "Rakenna API-toteutus validoidun sopimuksen pohjalta käyttäen vakiintuneita kehysrakenteita, kirjastoja ja tiimin standardeja.",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works.2": "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works.3": "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works.4": "Varmistetaan, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
        "cycle.api-productization-cycle.station.api-delivery.how_it_works.5": "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
        "cycle.api-productization-cycle.station.api-audit.title": "API-auditointi - API-rajapintojen tarkastus vaatimustenmukaisuuden ja laadun varmistamiseksi",
        "cycle.api-productization-cycle.station.api-audit.why_it_matters": "APIt ovat pitkäikäisiä tuotteita, ja niiden on täytettävä laatu-, johdonmukaisuus- ja vaatimustenmukaisuusodotukset. Auditointi yhdistää suunnittelupäätökset, toteutuksen ja toimintavalmiuden määriteltyihin standardeihin, mikä vähentää riskejä ennen käyttöönottoa.",
        "cycle.api-productization-cycle.station.api-audit.apply_in_work": "Luo johdonmukainen auditointiprosessi, joka arvioi APIn valmiutta elinkaaren eri vaiheissa määriteltyjen kriteerien, todisteiden ja standardien avulla. Varmista, että puutteet tunnistetaan varhaisessa vaiheessa ja korjataan ennen julkaisua.",
        "cycle.api-productization-cycle.station.api-audit.outcomes": "APIt täyttävät sisäiset ja ulkoiset standardit",
        "cycle.api-productization-cycle.station.api-audit.how_it_works": "Suorita tarkastuksia varmistaaksesi, että rajapinnat täyttävät organisatoriset, tekniset ja oikeudelliset standardit ennen julkaisemista.",
        "cycle.api-productization-cycle.station.api-audit.outcomes.1": "Selkeä dokumentaatio API-suunnittelusta ja toteutuspäätöksistä",
        "cycle.api-productization-cycle.station.api-audit.outcomes.2": "Turvallisuus, suorituskyky ja vaatimustenmukaisuus validoitu",
        "cycle.api-productization-cycle.station.api-audit.outcomes.3": "Tuotannossa ilmenevien ongelmien riskin pienentäminen",
        "cycle.api-productization-cycle.station.api-audit.how_it_works.1": "Käytä tarkistuslistoja, automatisoituja tarkistustyökaluja eli linttereitä ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen.",
        "cycle.api-productization-cycle.station.api-audit.how_it_works.2": "Tee yhteistyötä hallintotiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että rajapinnat ovat valmiita tuotantoon.",
        "cycle.api-productization-cycle.station.api-publishing.title": "API-julkaiseminen - Julkaise APIt luotettavasti",
        "cycle.api-productization-cycle.station.api-publishing.why_it_matters": "Julkaiseminen on muutakin kuin käyttöönottoa - kyse on löydettävyydestä, saatavuudesta ja tuesta. Jos rajapintoja ei julkaista oikein, niitä ei käytetä, käytetä uudelleen tai suojata tehokkaasti.",
        "cycle.api-productization-cycle.station.api-publishing.apply_in_work": "Mahdollistetaan APIen julkaiseminen asiaankuuluvassa ympäristössä ja selkeät rekisteröinti- ja käyttöoikeusmekanismit (esim. API-avaimet, OAuth, tilaussuunnitelmat) API-hyödyntäjäsegmenttien sekä turvallisuus- ja vaatimustenmukaisuusvaatimusten mukaan.",
        "cycle.api-productization-cycle.station.api-publishing.outcomes": "APIt julkaistaan oikeassa ympäristössä (yksityinen, kumppani, julkinen).",
        "cycle.api-productization-cycle.station.api-publishing.how_it_works": "Julkaise rajapinnat asianmukaisiin yhdyskäytäviin ja ympäristöihin, jotta ne ovat uudelleenkäytettävissä useille API-hyödyntäjille.",
        "cycle.api-productization-cycle.station.api-publishing.outcomes.1": "Selkeät API-käyttöönotto- ja rekisteröintiprosessit",
        "cycle.api-productization-cycle.station.api-publishing.outcomes.2": "Dokumentaatio, turvallisuusmallit ja -käytännöt saatavilla",
        "cycle.api-productization-cycle.station.api-publishing.outcomes.3": "APIt valmiina skaalautumiseen ja hallintaan",
        "cycle.api-productization-cycle.station.api-publishing.how_it_works.1": "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaa, mukaan lukien sisäänkirjautumisprosessit ja rekisteröinti.",
        "cycle.api-productization-cycle.station.api-publishing.how_it_works.2": "Varmista, että turvamallit, yhdyskäytävän kokoonpano ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
        "cycle.api-productization-cycle.station.monitoring-and-improving.title": "Seuranta ja parantaminen - API-arvoa varten",
        "cycle.api-productization-cycle.station.monitoring-and-improving.why_it_matters": "API-kehitys ei lopu käynnistykseen. Ilman seurantaa tiimit eivät voi parantaa käyttöönottoa, suorituskykyä tai ROI",
        "cycle.api-productization-cycle.station.monitoring-and-improving.apply_in_work": "Ota käyttöön analytiikkakehykset suorituskyvyn ja sitoutumisen seuraamiseksi. Kehitetään palautesilmukoita, analytiikkatyökaluja ja sitouttamisstrategioita API-rajapintoja varten.",
        "cycle.api-productization-cycle.station.monitoring-and-improving.outcomes": "Suorituskyvyn ja käytön mittarit määritellään ja niitä seurataan.",
        "cycle.api-productization-cycle.station.monitoring-and-improving.how_it_works": "Seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
        "cycle.api-productization-cycle.station.monitoring-and-improving.outcomes.1": "Kehittäjien palautekierrokset käytössä",
        "cycle.api-productization-cycle.station.monitoring-and-improving.outcomes.2": "Jatkuvasti tunnistetut ja käsitellyt ongelmat",
        "cycle.api-productization-cycle.station.monitoring-and-improving.outcomes.3": "APIn iterointi hyödyntäjien tarpeiden mukaisesti",
        "cycle.api-productization-cycle.station.monitoring-and-improving.how_it_works.1": "Analysoi APIn käyttömittareita ja ota hyödyntäjien palaute huomioon API-iteraatioissa.",
        "cycle.api-productization-cycle.station.monitoring-and-improving.how_it_works.2": "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
        "resource.api-community-engagement-strategies.title": "API-yhteisön sitouttamisstrategiat",
        "resource.api-community-engagement-strategies.description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
        "resource.api-community-engagement-strategies.outcomes": "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
        "resource.api-community-engagement-strategies.steps": "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
        "resource.api-community-engagement-strategies.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-compliance-best-practices.title": "API-vaatimustenmukaisuuden parhaat käytännöt",
        "resource.api-compliance-best-practices.description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
        "resource.api-compliance-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-compliance-best-practices.steps": "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
        "resource.api-compliance-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-development-best-practices.title": "API-kehityksen parhaat käytännöt",
        "resource.api-development-best-practices.description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
        "resource.api-development-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-development-best-practices.steps": "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
        "resource.api-development-best-practices.tips": "Mukauta API-kehityksen parhaat käytännöt omaan kontekstiisi sopiviksi",
        "resource.api-metrics-and-analytics.title": "API-mittarit ja analytiikka",
        "resource.api-metrics-and-analytics.description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
        "resource.api-metrics-and-analytics.outcomes": "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
        "resource.api-metrics-and-analytics.steps": "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
        "resource.api-metrics-and-analytics.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-onboarding-best-practices.title": "API-käyttöönoton parhaat käytännöt",
        "resource.api-onboarding-best-practices.description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
        "resource.api-onboarding-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-onboarding-best-practices.steps": "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
        "resource.api-onboarding-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-portfolio-management-guidelines.title": "API-portfolion hallinnan suuntaviivat",
        "resource.api-portfolio-management-guidelines.description": "Opas organisaation API-sarjan strategiseen hallintaan - APIen priorisointiin, resurssien jakamiseen ja suorituskyvyn seurantaan koko elinkaaren ajan.",
        "resource.api-portfolio-management-guidelines.outcomes": "Yhteinen ymmärrys resurssin API-portfolion hallinnan suuntaviivat tarkoituksesta ja käytöstä",
        "resource.api-portfolio-management-guidelines.steps": "Määrittele salkunhallintakäytännöt, joissa hahmotellaan API-salkun hallinnointiprosessit, mukaan lukien priorisointi, seuranta ja optimointi.",
        "resource.api-portfolio-management-guidelines.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-security-best-practices.title": "API-turvallisuuden parhaat käytännöt",
        "resource.api-security-best-practices.description": "Joukko toimivia valvontatoimia rajapintojen suojaamiseksi, mukaan lukien todennus, valtuutus, salaus, nopeuden rajoittaminen ja putkitason vaatimustenmukaisuustarkastukset.",
        "resource.api-security-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-turvallisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-security-best-practices.steps": "Varmista, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
        "resource.api-security-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-team-structure-guidelines.title": "API-tiimin rakennetta koskevat ohjeet",
        "resource.api-team-structure-guidelines.description": "Organisatoriset ohjeet roolien ja vastuualueiden määrittelemiseksi API-tiimeissä selkeyden, yhteistyön ja vastuuvelvollisuuden varmistamiseksi.",
        "resource.api-team-structure-guidelines.outcomes": "Yhteinen ymmärrys resurssin API-tiimin rakennetta koskevat ohjeet tarkoituksesta ja käytöstä",
        "resource.api-team-structure-guidelines.steps": "Määrittele API-tiimien tiimirakenteet ja roolit, mukaan lukien API-tuotteen omistajat, kehittäjät, arkkitehdit ja toiminnot.",
        "resource.api-team-structure-guidelines.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-testing-best-practices.title": "API-testauksen parhaat käytännöt",
        "resource.api-testing-best-practices.description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
        "resource.api-testing-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-testing-best-practices.steps": "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
        "resource.api-testing-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-training-programs.title": "API-koulutusohjelmat",
        "resource.api-training-programs.description": "Etenemissuunnitelma tiimien pätevöittämistä varten, jossa on jäsenneltyjä oppimispolkuja API-designin, hallinnan, suorituskyvyn ja tietoturvan alalla.",
        "resource.api-training-programs.outcomes": "Yhteinen ymmärrys resurssin API-koulutusohjelmat tarkoituksesta ja käytöstä",
        "resource.api-training-programs.steps": "Tunnistetaan keskeiset API-taidot ja -tiedot, joita on kehitettävä, kuten API-design, tietoturva ja suorituskyky.",
        "resource.api-training-programs.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-versioning-best-practices.title": "API-versionoinnin parhaat käytännöt",
        "resource.api-versioning-best-practices.description": "Strategiat API-versioiden käyttöönottoa, ylläpitoa ja käytöstä poistamista varten siten, että taaksepäin yhteensopivuus ja hyödyntäjien luottamus säilyvät.",
        "resource.api-versioning-best-practices.outcomes": "Yhteinen ymmärrys resurssin API-versionoinnin parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.api-versioning-best-practices.steps": "Määrittele rajapintojen versiointistrategiat muutosten hallitsemiseksi ja taaksepäin yhteensopivuuden varmistamiseksi.",
        "resource.api-versioning-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.apiops-CI-CD-for-apis.title": "APIOps CI/CD rajapinnoille",
        "resource.apiops-CI-CD-for-apis.description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
        "resource.apiops-CI-CD-for-apis.outcomes": "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
        "resource.apiops-CI-CD-for-apis.steps": "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
        "resource.apiops-CI-CD-for-apis.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.competitor-analysis-template.title": "Kilpailija-analyysimalli",
        "resource.competitor-analysis-template.description": "Strukturoitu työlista, jonka avulla voit vertailla API-tarjouksiasi kilpailijoihin kartoittamalla vahvuudet, heikkoudet ja erottavia tekijöitä.",
        "resource.competitor-analysis-template.outcomes": "Yhteinen ymmärrys resurssin Kilpailija-analyysimalli tarkoituksesta ja käytöstä",
        "resource.competitor-analysis-template.steps": "Suorita kilpailija-analyysi tärkeimpien kilpailijoiden ja niiden API-tarjonnan tunnistamiseksi.",
        "resource.competitor-analysis-template.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.contract-first-design.title": "Sopimuslähtöinen suunnittelu",
        "resource.contract-first-design.description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
        "resource.contract-first-design.outcomes": "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
        "resource.contract-first-design.steps": "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
        "resource.contract-first-design.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.cross-functional-collaboration-best-practices.title": "Toimialarajat ylittävän yhteistyön parhaat käytännöt",
        "resource.cross-functional-collaboration-best-practices.description": "Käytännöt, joilla helpotetaan viestintää ja yhdenmukaistamista liiketoiminta- ja tekniikkatiimien välillä API-rajapintoja suunniteltaessa tai toimitettaessa.",
        "resource.cross-functional-collaboration-best-practices.outcomes": "Yhteinen ymmärrys resurssin Toimialarajat ylittävän yhteistyön parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.cross-functional-collaboration-best-practices.steps": "Kannustaa API-tiimien, liiketoimintayksiköiden ja sidosryhmien välistä monialaista yhteistyötä, jotta API-aloitteet voidaan sovittaa yhteen liiketoiminnan tavoitteiden kanssa.",
        "resource.cross-functional-collaboration-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.data-privacy-guidelines.title": "Tietosuojaa koskevat ohjeet",
        "resource.data-privacy-guidelines.description": "Suunnitteluun liittyvät näkökohdat, joilla varmistetaan, että rajapinnat täyttävät tietosuojasäännökset, kuten GDPR:n, anonymisoinnin ja pääsynvalvonnan avulla.",
        "resource.data-privacy-guidelines.outcomes": "Yhteinen ymmärrys resurssin Tietosuojaa koskevat ohjeet tarkoituksesta ja käytöstä",
        "resource.data-privacy-guidelines.steps": "Varmista käyttäjien tietojen yksityisyys toteuttamalla tietosuojatoimenpiteitä, kuten anonymisointi ja käyttöoikeuksien valvonta.",
        "resource.data-privacy-guidelines.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.domain-canvas.title": "Toimialuekanvas",
        "resource.domain-canvas.description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
        "resource.domain-canvas.outcomes": "Parempi ymmärrys toimialueen mallinnuksesta",
        "resource.domain-canvas.steps": "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille.",
        "resource.domain-canvas.tips": "Mukauta Toimialuekanvas omaan kontekstiisi",
        "resource.ecosystem-vision-template.title": "Ekosysteemivisiomalli",
        "resource.ecosystem-vision-template.description": "Strateginen suunnittelutyökalu API-ekosysteemin määrittelemiseksi, mukaan lukien kohdekumppanit, arvoketjut ja integrointimahdollisuudet.",
        "resource.ecosystem-vision-template.outcomes": "Yhteinen ymmärrys resurssin Ekosysteemivisiomalli tarkoituksesta ja käytöstä",
        "resource.ecosystem-vision-template.steps": "Markkinatutkimuksen tekeminen API-toimialalla vallitsevien suuntausten, mahdollisuuksien ja uhkien tunnistamiseksi.",
        "resource.ecosystem-vision-template.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.industry-standards-and-best-practices.title": "Alan standardit ja parhaat käytännöt",
        "resource.industry-standards-and-best-practices.description": "Viiteresurssi API-designin ja -toiminnan mukauttamiseksi laajalti tunnustettuihin alan kehyksiin ja eritelmiin.",
        "resource.industry-standards-and-best-practices.outcomes": "Yhteinen ymmärrys resurssin Alan standardit ja parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.industry-standards-and-best-practices.steps": "Tunnistetaan alan standardit ja parhaat käytännöt, jotta voidaan varmistaa, että rajapinnat ovat kilpailukykyisiä ja yhteensopivia.",
        "resource.industry-standards-and-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.partner-integration-guidelines.title": "Kumppanien integrointiohjeet",
        "resource.partner-integration-guidelines.description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
        "resource.partner-integration-guidelines.outcomes": "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
        "resource.partner-integration-guidelines.steps": "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
        "resource.partner-integration-guidelines.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.role-communication-best-practices.title": "Rooliviestinnän parhaat käytännöt",
        "resource.role-communication-best-practices.description": "Työkalut, joilla määritetään ja kuvataan API-aloitteiden vastuut sekä varmistetaan selkeä työnjako ja vastuuvelvollisuus.",
        "resource.role-communication-best-practices.outcomes": "Yhteinen ymmärrys resurssin Rooliviestinnän parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.role-communication-best-practices.steps": "Määritä selkeät vastuualueet kullekin roolille, mukaan lukien API-design, kehittäminen, testaus ja toiminta.",
        "resource.role-communication-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.scalable-infrastructure-best-practices.title": "Skaalautuvan infrastruktuurin parhaat käytännöt",
        "resource.scalable-infrastructure-best-practices.description": "Arkkitehtuuriohjeet sen varmistamiseksi, että rajapinnat otetaan käyttöön infrastruktuurissa, joka pystyy käsittelemään joustavasti käyttöpiikkejä ja -kasvua.",
        "resource.scalable-infrastructure-best-practices.outcomes": "Yhteinen ymmärrys resurssin Skaalautuvan infrastruktuurin parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.scalable-infrastructure-best-practices.steps": "Suunnittele API-infrastruktuuri skaalautuvaksi ja joustavaksi käyttäen pilvipohjaisia malleja ja teknologioita.",
        "resource.scalable-infrastructure-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.service-agreement-template.title": "Palvelusopimusmalli",
        "resource.service-agreement-template.description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
        "resource.service-agreement-template.outcomes": "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
        "resource.service-agreement-template.steps": "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
        "resource.service-agreement-template.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.stakeholder-engagement-best-practices.title": "Sidosryhmien sitouttamisen parhaat käytännöt",
        "resource.stakeholder-engagement-best-practices.description": "sitouttamistaktiikat sisäisten ja ulkoisten sidosryhmien saattamiseksi yhteisten API-tavoitteiden, -arvon ja -hallinnan piiriin.",
        "resource.stakeholder-engagement-best-practices.outcomes": "Yhteinen ymmärrys resurssin Sidosryhmien sitouttamisen parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.stakeholder-engagement-best-practices.steps": "Sidosryhmien sitouttaminen varmistamaan API-aloitteiden yhdenmukaisuus ja tuki.",
        "resource.stakeholder-engagement-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.test-automation-frameworks.title": "Testausautomaation kehykset",
        "resource.test-automation-frameworks.description": "Suositellut työkalut ja mallit API-rajapintasopimus-, regressio- ja integrointitestauksen automatisointiin eri ympäristöissä.",
        "resource.test-automation-frameworks.outcomes": "Yhteinen ymmärrys resurssin Testausautomaation kehykset tarkoituksesta ja käytöstä",
        "resource.test-automation-frameworks.steps": "Toteuta testiautomaatiokehykset, jotka tukevat sopimustestausta, integrointitestausta ja päästä päähän -testausta.",
        "resource.test-automation-frameworks.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.vendor-management-best-practices.title": "Toimittajien hallinnan parhaat käytännöt",
        "resource.vendor-management-best-practices.description": "Kehys ulkoisten API-toimittajien ja kolmansien osapuolten integraatioiden arviointia ja hallintaa varten riskien, suorituskyvyn ja vaatimustenmukaisuuden perusteella.",
        "resource.vendor-management-best-practices.outcomes": "Yhteinen ymmärrys resurssin Toimittajien hallinnan parhaat käytännöt tarkoituksesta ja käytöstä",
        "resource.vendor-management-best-practices.steps": "Ota käyttöön toimittajagovernance-prosessit kolmansien osapuolten API-toimittajien arviointia, käyttöönottoa ja seurantaa varten.",
        "resource.vendor-management-best-practices.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-audit-checklist.title": "API-auditoinnin tarkistuslista",
        "resource.api-audit-checklist.description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
        "resource.api-audit-checklist.outcomes": "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
        "resource.api-audit-checklist.steps": "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
        "resource.api-audit-checklist.tips": "Jokainen auditointikohta yhdistää elinkaaren työvaiheet (asemat), ohjaavat ohjeet ja tukevat todisteet, jotta APIn valmiudesta saadaan selkeä kuva.",
        "resource.api-business-model-canvas.title": "API-liiketoimintamallikanvas",
        "resource.api-business-model-canvas.description": "Arvioi API-liiketoiminnan elinkelpoisuutta kartoittamalla arvolupaus, API-hyödyntäjäsegmentit ja keskeiset resurssit.",
        "resource.api-business-model-canvas.outcomes": "Selkeä liiketoimintastrategia rajapintoja varten",
        "resource.api-business-model-canvas.steps": "Tiivistä APIn arvolupauksen tiivistelmä",
        "resource.api-business-model-canvas.tips": "Aloita yhdestä rajapinnasta selkeyden varmistamiseksi",
        "resource.api-design-principles.title": "API-suunnitteluperiaatteet",
        "resource.api-design-principles.description": "Tiivis opas APIn käytettävyyteen, löydettävyyteen ja johdonmukaisuuteen, joka perustuu yhteisiin suunnittelusääntöihin ja todellisiin hyödyntäjien tarpeisiin.",
        "resource.api-design-principles.outcomes": "Yhteinen ymmärrys resurssin APIn suunnitteluperiaatteet tarkoituksesta ja käytöstä",
        "resource.api-design-principles.steps": "**Hyödyntäjä ensin -suunnittelu:** Aloita jokainen APIOps-sykli keräämällä käyttäjien tavoitteet ja toimialan ehdot, jotta APIt ratkaisevat todellisia ongelmia.",
        "resource.api-design-principles.tips": "Mukauta resurssi omaan toimintaympäristöösi.",
        "resource.api-value-proposition-canvas.title": "API-arvolupauskanvas",
        "resource.api-value-proposition-canvas.description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
        "resource.api-value-proposition-canvas.outcomes": "Keskitetty ominaisuuksien kehittäminen",
        "resource.api-value-proposition-canvas.steps": "Listaa käyttäjäpolun tehtävät.",
        "resource.api-value-proposition-canvas.tips": "Hyödynnä Asiakaspolkukanvasin tietoja",
        "resource.business-impact-canvas.title": "Liiketoimintavaikutuskanvas",
        "resource.business-impact-canvas.description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
        "resource.business-impact-canvas.outcomes": "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
        "resource.business-impact-canvas.steps": "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
        "resource.business-impact-canvas.tips": "Täytä tämä ennen toteutustavan valintaa tai vahvistamista.",
        "resource.capacity-canvas.title": "Kapasiteettikanvas",
        "resource.capacity-canvas.description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
        "resource.capacity-canvas.outcomes": "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
        "resource.capacity-canvas.steps": "Dokumentoi nykyiset liiketoiminnan volyymit",
        "resource.capacity-canvas.tips": "Täytä tämä ennen arkkitehtuuri- ja alustapäätösten viimeistelyä.",
        "resource.customer-journey-canvas.title": "Asiakaspolkukanvas",
        "resource.customer-journey-canvas.description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
        "resource.customer-journey-canvas.outcomes": "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
        "resource.customer-journey-canvas.steps": "Määrittele asiakaspersoona",
        "resource.customer-journey-canvas.tips": "Validoi polku niiden ihmisten kanssa, jotka toteuttavat sen tai kokevat sen.",
        "resource.event-canvas.title": "Tapahtumakanvas",
        "resource.event-canvas.description": "Suunnittele tapahtumapohjaiset rajapinnat ja integraatiot määrittelemällä tapahtumat, laukaisimet, skeemat, tuottajat, hyödyntäjät ja käsittelylogiikka.",
        "resource.event-canvas.outcomes": "Määritelty tapahtumapohjainen vuorovaikutusmalli",
        "resource.event-canvas.steps": "Järjestelmän keskeisten tapahtumien tunnistaminen",
        "resource.event-canvas.tips": "Tapahtumaskeemojen käyttäminen tapahtumamuotojen standardoimiseksi",
        "resource.graphql-canvas.title": "GraphQL-kanvas",
        "resource.graphql-canvas.description": "Suunnittele GraphQL APIt määrittelemällä tyypit, kyselyt, mutaatiot ja tilaukset.",
        "resource.graphql-canvas.outcomes": "Strukturoidun GraphQL APIn suunnittelu",
        "resource.graphql-canvas.steps": "Mitä ongelmia API-hyödyntäjät yrittävät ratkaista? Mitä tietoja he tarvitsevat?",
        "resource.graphql-canvas.tips": "Käytä introspektiota tyyppimääritysten validointiin",
        "resource.interaction-canvas.title": "Vuorovaikutuskanvas",
        "resource.interaction-canvas.description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
        "resource.interaction-canvas.outcomes": "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
        "resource.interaction-canvas.steps": "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
        "resource.interaction-canvas.tips": "Aloita yleisistä käyttötapauksista ennen ääritapausten käsittelyä",
        "resource.location-canvas.title": "Sijaintikanvas",
        "resource.location-canvas.description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
        "resource.location-canvas.outcomes": "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
        "resource.location-canvas.steps": "API-palveluntarjoajien sijainnit kartalla.",
        "resource.location-canvas.tips": "Yhteistyö oikeudellisten ja sääntöjen noudattamista käsittelevien tiimien kanssa",
        "resource.rest-canvas.title": "REST-kanvas",
        "resource.rest-canvas.description": "Suunnittele rajapinnat RESTful-periaatteiden mukaisesti määrittelemällä resurssit, verbit sekä esimerkkipyynnöt ja -vastaukset.",
        "resource.rest-canvas.outcomes": "Johdonmukainen RESTful API-design",
        "resource.rest-canvas.steps": "Tunnista APIn tarjoamat keskeiset resurssit",
        "resource.rest-canvas.tips": "Käytä tavallisia HTTP-menetelmiä (GET, POST, PUT, DELETE).",
        "resource.api-community-engagement-strategies.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
        "resource.api-community-engagement-strategies.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-community-engagement-strategies.steps.1": "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
        "resource.api-community-engagement-strategies.steps.2": "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
        "resource.api-community-engagement-strategies.steps.3": "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
        "resource.api-community-engagement-strategies.steps.4": "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa.",
        "resource.api-community-engagement-strategies.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-compliance-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
        "resource.api-compliance-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-compliance-best-practices.steps.1": "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
        "resource.api-compliance-best-practices.steps.2": "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen.",
        "resource.api-compliance-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-development-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
        "resource.api-development-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-development-best-practices.steps.1": "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen.",
        "resource.api-development-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-metrics-and-analytics.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
        "resource.api-metrics-and-analytics.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-metrics-and-analytics.steps.1": "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
        "resource.api-metrics-and-analytics.steps.2": "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen.",
        "resource.api-metrics-and-analytics.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-onboarding-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
        "resource.api-onboarding-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-onboarding-best-practices.steps.1": "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
        "resource.api-onboarding-best-practices.steps.2": "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti.",
        "resource.api-onboarding-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-portfolio-management-guidelines.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-portfolion hallinnan suuntaviivat",
        "resource.api-portfolio-management-guidelines.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-portfolio-management-guidelines.steps.1": "Määrittele budjetti- ja resurssienhallintakäytännöt, joissa hahmotellaan API-aloitteiden budjettien ja resurssien hallinnointiprosessit.",
        "resource.api-portfolio-management-guidelines.steps.2": "Laaditaan kriteerit budjettimäärärahojen arvioimiseksi ja priorisoimiseksi liiketoiminta-arvon, vaikutusten ja strategisten aloitteiden mukaisuuden perusteella.",
        "resource.api-portfolio-management-guidelines.steps.3": "Seuraa API-portfoliota varmistaaksesi, että APIt tuottavat arvoa, täyttävät suorituskykyodotukset ja ovat linjassa liiketoiminnan tavoitteiden kanssa.",
        "resource.api-portfolio-management-guidelines.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-security-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-turvallisuuden parhaat käytännöt",
        "resource.api-security-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-security-best-practices.steps.1": "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
        "resource.api-security-best-practices.steps.2": "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia.",
        "resource.api-security-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-team-structure-guidelines.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-tiimin rakennetta koskevat ohjeet",
        "resource.api-team-structure-guidelines.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-team-structure-guidelines.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-testing-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
        "resource.api-testing-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-testing-best-practices.steps.1": "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
        "resource.api-testing-best-practices.steps.2": "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin.",
        "resource.api-testing-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-training-programs.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-koulutusohjelmat",
        "resource.api-training-programs.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-training-programs.steps.1": "Kannustetaan jatkuvaan oppimiseen verkkokurssien, sertifikaattien ja yhteisöllisen sitoutumisen avulla.",
        "resource.api-training-programs.steps.2": "Tarjota koulutusta ja resursseja, jotta tiimit voivat omaksua API-first-ajattelutavan ja ymmärtää APIen edut.",
        "resource.api-training-programs.steps.3": "Tarjota koulutusohjelmia, työpajoja ja resursseja, joiden avulla tiimit voivat parantaa API-taitojaan ja -tietämystään.",
        "resource.api-training-programs.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-versioning-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-versionoinnin parhaat käytännöt",
        "resource.api-versioning-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-versioning-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.apiops-CI-CD-for-apis.outcomes.1": "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
        "resource.apiops-CI-CD-for-apis.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.apiops-CI-CD-for-apis.steps.1": "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
        "resource.apiops-CI-CD-for-apis.steps.2": "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
        "resource.apiops-CI-CD-for-apis.steps.3": "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
        "resource.apiops-CI-CD-for-apis.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.competitor-analysis-template.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Kilpailija-analyysimalli",
        "resource.competitor-analysis-template.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.competitor-analysis-template.steps.1": "Analysoi kilpailijoiden rajapinnat ymmärtämään niiden vahvuudet, heikkoudet ja ainutlaatuiset myyntivaltit.",
        "resource.competitor-analysis-template.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.contract-first-design.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
        "resource.contract-first-design.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.contract-first-design.steps.1": "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
        "resource.contract-first-design.steps.2": "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida.",
        "resource.contract-first-design.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.cross-functional-collaboration-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Toimialarajat ylittävän yhteistyön parhaat käytännöt",
        "resource.cross-functional-collaboration-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.cross-functional-collaboration-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.data-privacy-guidelines.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Tietosuojaa koskevat ohjeet",
        "resource.data-privacy-guidelines.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.data-privacy-guidelines.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.domain-canvas.outcomes.1": "Vakioitu lähestymistapa Toimialuekanvasin avulla",
        "resource.domain-canvas.outcomes.2": "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano",
        "resource.domain-canvas.tips.1": "Käytä sitä yhteistyössä eri liiketoiminta- ja teknisten roolien välillä",
        "resource.ecosystem-vision-template.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Ekosysteemivisiomalli",
        "resource.ecosystem-vision-template.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.ecosystem-vision-template.steps.1": "Tunnistetaan tärkeimmät ekosysteemikumppanit ja sidosryhmät, jotka hyötyvät ekosysteemistä tai osallistuvat siihen.",
        "resource.ecosystem-vision-template.steps.2": "Tunnista markkinapuutteet, jotka rajapintasi voivat täyttää kilpailijoiden tarjonnan perusteella.",
        "resource.ecosystem-vision-template.steps.3": "Tunnista mahdolliset kumppanit, joiden APIt voivat parantaa API-valmiuksiasi ja arvolupaustasi.",
        "resource.ecosystem-vision-template.steps.4": "Kehitä erottautumisstrategia, jossa korostetaan sovellusrajapintojesi ainutlaatuisia ominaisuuksia ja etuja.",
        "resource.ecosystem-vision-template.steps.5": "Määrittele sovellusrajapintojesi ekosysteemivisio, mukaan lukien se, miten ne ovat vuorovaikutuksessa muiden järjestelmien ja alustojen kanssa.",
        "resource.ecosystem-vision-template.steps.6": "Suunnittele rajapinnat, jotka mahdollistavat saumattoman integroinnin ja yhteistyön ekosysteemissä.",
        "resource.ecosystem-vision-template.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.industry-standards-and-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Alan standardit ja parhaat käytännöt",
        "resource.industry-standards-and-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.industry-standards-and-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.partner-integration-guidelines.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
        "resource.partner-integration-guidelines.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.partner-integration-guidelines.steps.1": "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa.",
        "resource.partner-integration-guidelines.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.role-communication-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Rooliviestinnän parhaat käytännöt",
        "resource.role-communication-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.role-communication-best-practices.steps.1": "Varmistaa, että roolit ja vastuut on ilmoitettu kaikille tiimin jäsenille ja sidosryhmille, jotta varmistetaan yhdenmukaisuus.",
        "resource.role-communication-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.scalable-infrastructure-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Skaalautuvan infrastruktuurin parhaat käytännöt",
        "resource.scalable-infrastructure-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.scalable-infrastructure-best-practices.steps.1": "Seuraa infrastruktuurin suorituskykyä ja kapasiteettia sen varmistamiseksi, että se pystyy vastaamaan kasvavaan kysyntään.",
        "resource.scalable-infrastructure-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.service-agreement-template.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
        "resource.service-agreement-template.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.service-agreement-template.steps.1": "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
        "resource.service-agreement-template.steps.2": "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
        "resource.service-agreement-template.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.stakeholder-engagement-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Sidosryhmien sitouttamisen parhaat käytännöt",
        "resource.stakeholder-engagement-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.stakeholder-engagement-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.test-automation-frameworks.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Testausautomaation kehykset",
        "resource.test-automation-frameworks.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.test-automation-frameworks.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.vendor-management-best-practices.outcomes.1": "Johdonmukainen tapa soveltaa resurssia Toimittajien hallinnan parhaat käytännöt",
        "resource.vendor-management-best-practices.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.vendor-management-best-practices.steps.1": "Määrittele kriteerit toimittajien rajapintojen arviointia varten, mukaan lukien luotettavuus, turvallisuus ja vaatimustenmukaisuus.",
        "resource.vendor-management-best-practices.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-audit-checklist.outcomes.1": "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
        "resource.api-audit-checklist.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-audit-checklist.steps.1": "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
        "resource.api-audit-checklist.steps.2": "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla.",
        "resource.api-audit-checklist.tips.1": "Käytä API-auditointilistaa yhteistyössä liiketoiminta- ja teknologia-roolien välillä",
        "resource.api-business-model-canvas.outcomes.1": "Keskeisten resurssien ja kumppaneiden tunnistaminen",
        "resource.api-business-model-canvas.outcomes.2": "API-ominaisuuksien ja liiketoiminnan tavoitteiden yhteensovittaminen",
        "resource.api-business-model-canvas.steps.1": "Hyödyntäjäsegmenttien määrittely",
        "resource.api-business-model-canvas.steps.2": "Kehittäjäsuhdestrategioiden määrittäminen",
        "resource.api-business-model-canvas.steps.3": "Kartoita jakelukanavat",
        "resource.api-business-model-canvas.steps.4": "Dokumentoi keskeiset resurssit ja toimet",
        "resource.api-business-model-canvas.steps.5": "Tunnistetaan tärkeimmät kumppanit ja sidosryhmät",
        "resource.api-business-model-canvas.steps.6": "Korosta hyötyjä ja kustannuksia",
        "resource.api-business-model-canvas.tips.1": "Mahdollisuuksien priorisointi kustannus-hyöty -suhteen kaltaisten mittareiden avulla.",
        "resource.api-business-model-canvas.tips.2": "Validoi tuotokset tärkeimpien sidosryhmien kanssa",
        "resource.api-design-principles.outcomes.1": "Johdonmukainen tapa soveltaa resurssia APIn suunnitteluperiaatteet",
        "resource.api-design-principles.outcomes.2": "Asiaan liittyvien käytäntöjen parempi soveltaminen",
        "resource.api-design-principles.steps.1": "**Johdonmukainen nimeäminen ja käyttäytyminen:** Sovelletaan yhteisiä käytäntöjä resursseja, virheitä ja formaatteja varten, jotta rajapinnat olisivat ennakoitavissa.",
        "resource.api-design-principles.steps.2": "**Sopimusperusteinen:** kaappaa rajapinta OpenAPIlla tai AsyncAPIlla ennen koodausta tiimien yhdenmukaistamiseksi ja automaation mahdollistamiseksi.",
        "resource.api-design-principles.steps.3": "**Käytettävyys ja löydettävyys:** Selkeä dokumentaatio ja esimerkit, jotta kehittäjät ymmärtävät nopeasti, miten APIta käytetään.",
        "resource.api-design-principles.steps.4": "**Iteroi turvallisesti:** Kehitä malleja pienissä, versioiduissa vaiheissa, jotta muutokset eivät häiritse nykyisiä API-hyödyntäjiä.",
        "resource.api-design-principles.tips.1": "Käytä resurssia yhteistyössä olennaisten liiketoiminta- ja teknisten roolien kanssa.",
        "resource.api-value-proposition-canvas.outcomes.1": "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
        "resource.api-value-proposition-canvas.outcomes.2": "Parempi API-hyödyntäjien tyytyväisyys",
        "resource.api-value-proposition-canvas.steps.1": "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
        "resource.api-value-proposition-canvas.steps.2": "Määritellään haasteisiin vastaavat ominaisuudet",
        "resource.api-value-proposition-canvas.steps.3": "Ominaisuuksien kartoittaminen API-tuotteisiin",
        "resource.api-value-proposition-canvas.tips.1": "Korosta ominaisuuksia, jotka vähentävät kipupisteitä tai vahvistavat tavoiteltuja hyötyjä.",
        "resource.api-value-proposition-canvas.tips.2": "Validoi ominaisuudet API-hyödyntäjien kanssa yhdenmukaistamisen varmistamiseksi.",
        "resource.business-impact-canvas.outcomes.1": "Priorisoidut riskit ja lieventämistoimenpiteet",
        "resource.business-impact-canvas.outcomes.2": "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö",
        "resource.business-impact-canvas.steps.1": "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
        "resource.business-impact-canvas.steps.2": "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
        "resource.business-impact-canvas.steps.3": "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
        "resource.business-impact-canvas.steps.4": "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
        "resource.business-impact-canvas.steps.5": "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi.",
        "resource.business-impact-canvas.tips.1": "Käy riskit läpi sekä liiketoiminnan että teknisten sidosryhmien kanssa.",
        "resource.business-impact-canvas.tips.2": "Haasta oletuksia aiempien häiriöiden ja operatiivisen näytön avulla.",
        "resource.capacity-canvas.outcomes.1": "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
        "resource.capacity-canvas.outcomes.2": "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut",
        "resource.capacity-canvas.steps.1": "Ennustaa tulevia kulutussuuntauksia",
        "resource.capacity-canvas.steps.2": "Suunnittele huippukuormitus ja saatavuusvaatimukset",
        "resource.capacity-canvas.steps.3": "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
        "resource.capacity-canvas.steps.4": "Ehdotetaan skaalausstrategioita",
        "resource.capacity-canvas.tips.1": "Käytä mitattua tietoa aina kun sitä on saatavilla ja kirjaa oletukset näkyviin.",
        "resource.capacity-canvas.tips.2": "Päivitä kanvas pilotin tai kysynnän olennaisten muutosten jälkeen.",
        "resource.customer-journey-canvas.outcomes.1": "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
        "resource.customer-journey-canvas.outcomes.2": "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi",
        "resource.customer-journey-canvas.steps.1": "Tunnista matkan käynnistäjät",
        "resource.customer-journey-canvas.steps.2": "Kuvaile matkan loppua",
        "resource.customer-journey-canvas.steps.3": "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
        "resource.customer-journey-canvas.steps.4": "Tunnista asiakkaan kipupisteet",
        "resource.customer-journey-canvas.steps.5": "Yhteenveto asiakkaan saamista eduista",
        "resource.customer-journey-canvas.steps.6": "Määritellään tarvittavat syötteet ja tuotokset",
        "resource.customer-journey-canvas.steps.7": "Määrittele API-vuorovaikutukset kullekin vaiheelle",
        "resource.customer-journey-canvas.tips.1": "Hyödynnä tuloksia arvolupauksen, toimialueen, vaatimusten ja arkkitehtuurin työstämisessä.",
        "resource.event-canvas.outcomes.1": "Selkeytetyt tapahtumat, laukaisimet, skeemat, tuottajat ja hyödyntäjät",
        "resource.event-canvas.outcomes.2": "Dokumentoidut käsittely-, kuittaus- ja virhetilanneodotukset",
        "resource.event-canvas.steps.1": "Määritä laukaisimet kullekin tapahtumalle",
        "resource.event-canvas.steps.2": "Kuvaa tapahtumien käsittely, tilamuutokset ja virhetilanteiden käsittely.",
        "resource.event-canvas.steps.3": "Määritä tuloksena olevat tuotokset tai kuittaukset",
        "resource.event-canvas.tips.1": "Dokumentoi tapahtumavirrat, omistajuus, järjestysoletukset ja riippuvuudet.",
        "resource.event-canvas.tips.2": "Validoi tapahtumien käsittely testitapauksilla",
        "resource.graphql-canvas.outcomes.1": "Määritellyt tyypit ja niiden väliset suhteet",
        "resource.graphql-canvas.outcomes.2": "Selkeät kyselyt, mutaatiot ja tilaukset",
        "resource.graphql-canvas.steps.1": "Määritä GraphQL-tyypit ja niiden attribuutit: mitkä ovat keskeiset tyypit (esim. käyttäjä, tilaus, tuote)?",
        "resource.graphql-canvas.steps.2": "Kartoita tyyppien väliset suhteet: Miten tyypit liittyvät toisiinsa sisäkkäisissä kyselyissä?",
        "resource.graphql-canvas.steps.3": "Määritä kyselyt tiedonhakua varten",
        "resource.graphql-canvas.steps.4": "Määritä tietojen muuttamista koskevat mutaatiot: Millaisilla operaatioilla tietoja muutetaan (esim. luodaan, päivitetään, poistetaan)?",
        "resource.graphql-canvas.steps.5": "Reaaliaikaisten päivitysten tilaukset",
        "resource.graphql-canvas.steps.6": "Määrittele todennus ja valtuutus: Kuka voi käyttää mitä kenttiä tai tyyppejä?",
        "resource.graphql-canvas.steps.7": "Harkitse, onko olemassa sivutus-, suodatus- tai nopeusrajoituksia.",
        "resource.graphql-canvas.tips.1": "Dokumentoi esimerkkikyselyt ja mutaatiot.",
        "resource.graphql-canvas.tips.2": "Varmista, että tyyppien nimet ovat kuvaavia ja johdonmukaisia.",
        "resource.interaction-canvas.outcomes.1": "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
        "resource.interaction-canvas.outcomes.2": "Sovitut validointisäännöt ja vuorovaikutusodotukset",
        "resource.interaction-canvas.steps.1": "Määritä päätepisteet kullekin vuorovaikutukselle",
        "resource.interaction-canvas.steps.2": "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
        "resource.interaction-canvas.steps.3": "Validointisääntöjen ja -rajoitusten määrittäminen",
        "resource.interaction-canvas.steps.4": "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten.",
        "resource.interaction-canvas.tips.1": "Simuloi vuorovaikutusta mallitietojen kanssa työnkulkujen validoimiseksi.",
        "resource.interaction-canvas.tips.2": "Dokumentoi odotetut vastaukset onnistuneissa, epäonnistuneissa ja poikkeuksellisissa tilanteissa.",
        "resource.location-canvas.outcomes.1": "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
        "resource.location-canvas.outcomes.2": "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely",
        "resource.location-canvas.steps.1": "Dokumentoi, missä hyödyntäjät sijaitsevat.",
        "resource.location-canvas.steps.2": "Tunnista sovellettavat säädökset.",
        "resource.location-canvas.steps.3": "Dokumentoi, missä tietojen on oltava.",
        "resource.location-canvas.steps.4": "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
        "resource.location-canvas.steps.5": "Validoi verkon suorituskyky eri alueilla.",
        "resource.location-canvas.tips.1": "Verkon suorituskyvyn validointi keskeisillä alueilla",
        "resource.location-canvas.tips.2": "Ratkaise ennakoivasti sijaintiin liittyviä rajoitteita",
        "resource.rest-canvas.outcomes.1": "Määritellyt resurssit ja niiden vuorovaikutus",
        "resource.rest-canvas.outcomes.2": "Esimerkkipyynnöt ja -vastaukset selkeyden vuoksi",
        "resource.rest-canvas.steps.1": "API-resurssimallin rakenteen määrittäminen",
        "resource.rest-canvas.steps.2": "Määritä HTTP-verbit, joita käytetään vuorovaikutuksessa resurssien kanssa.",
        "resource.rest-canvas.steps.3": "Anna esimerkkipyynnöt ja -vastaukset kullekin verbille",
        "resource.rest-canvas.tips.1": "Varmistetaan, että resurssien URI:t ovat intuitiivisia ja johdonmukaisia.",
        "resource.rest-canvas.tips.2": "Dokumentoi virheiden käsittely ja vastauskoodit.",
        "resource.capability-value-proposition-canvas.title": "Kyvykkyyden arvolupauskanvas",
        "resource.capability-value-proposition-canvas.description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
        "resource.capability-value-proposition-canvas.outcomes": "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
        "resource.capability-value-proposition-canvas.outcomes.1": "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
        "resource.capability-value-proposition-canvas.outcomes.2": "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten.",
        "resource.capability-value-proposition-canvas.steps": "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
        "resource.capability-value-proposition-canvas.steps.1": "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
        "resource.capability-value-proposition-canvas.steps.2": "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
        "resource.capability-value-proposition-canvas.steps.3": "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi.",
        "resource.capability-value-proposition-canvas.tips": "Pysy teknologiariippumattomana, kunnes vaatimukset osoittavat sopivan toteutustavan.",
        "resource.capability-value-proposition-canvas.tips.1": "Käytä tätä API Value Proposition Canvasin sijaan, kun APIa ei ole vielä valittu toteutustavaksi.",
        "resource.capability-business-model-canvas.title": "Kyvykkyyden liiketoimintamallikanvas",
        "resource.capability-business-model-canvas.description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
        "resource.capability-business-model-canvas.outcomes": "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
        "resource.capability-business-model-canvas.outcomes.1": "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
        "resource.capability-business-model-canvas.outcomes.2": "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta.",
        "resource.capability-business-model-canvas.steps": "Tiivistä kyvykkyyden arvolupaus.",
        "resource.capability-business-model-canvas.steps.1": "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
        "resource.capability-business-model-canvas.steps.2": "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
        "resource.capability-business-model-canvas.steps.3": "Kuvaa kustannukset ja hyödyt.",
        "resource.capability-business-model-canvas.steps.4": "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
        "resource.capability-business-model-canvas.steps.5": "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa.",
        "resource.capability-business-model-canvas.tips": "Käytä tätä API Business Model Canvasin sijaan niin kauan kuin toteutustapa on avoin.",
        "resource.capability-business-model-canvas.tips.1": "Pidä fokus uudelleenkäytettävän kyvykkyyden elinkelpoisuudessa, ei yksittäisessä yhteydessä.",
        "resource.consumer-experience-requirements-canvas.title": "Hyödyntäjäkokemuksen vaatimuskanvas",
        "resource.consumer-experience-requirements-canvas.description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
        "resource.consumer-experience-requirements-canvas.outcomes": "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
        "resource.consumer-experience-requirements-canvas.outcomes.1": "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
        "resource.consumer-experience-requirements-canvas.outcomes.2": "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten",
        "resource.consumer-experience-requirements-canvas.steps": "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
        "resource.consumer-experience-requirements-canvas.steps.1": "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
        "resource.consumer-experience-requirements-canvas.steps.2": "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
        "resource.consumer-experience-requirements-canvas.steps.3": "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta.",
        "resource.consumer-experience-requirements-canvas.tips": "Käytä tätä siltana kyvykkyyden arvon ja arkkitehtuuripäätöksen välillä.",
        "resource.consumer-experience-requirements-canvas.tips.1": "Älä valitse APIa, tapahtumaa, tiedostoa, tietovirtaa, datatuotetta, suoraa integraatiota tai hybriditapaa ennen kuin vaatimukset osoittavat sopivan vaihtoehdon.",
        "resource.integration-style-selection-guide.title": "Integraatiotavan valintaopas",
        "resource.integration-style-selection-guide.description": "Ohje API-, tapahtuma-, tiedosto-, tietovirta-, datatuote-, suora integraatio- tai hybriditoteutustavan valintaan vaatimusten ja rajoitteiden perusteella.",
        "resource.integration-style-selection-guide.outcomes": "Perusteltu integraation toteutustapa",
        "resource.integration-style-selection-guide.outcomes.1": "Integraatiotapojen keskeiset vaihtoehdot ja kompromissit on dokumentoitu.",
        "resource.integration-style-selection-guide.outcomes.2": "Valittu tapa on jäljitettävissä hyödyntäjä-, alusta-, data- ja operatiivisiin vaatimuksiin.",
        "resource.integration-style-selection-guide.steps": "Vertaa mahdollisia integraatiotapoja viiveen, volyymin, kytkeytymisen, datan omistajuuden, ajantasaisuuden, hallinnan ja operoitavuuden tarpeisiin.",
        "resource.integration-style-selection-guide.steps.1": "Tunnista, milloin API, tapahtuma, tiedosto, tietovirta, datatuote, suora integraatio tai hybridiratkaisu sopii käyttötapaukseen.",
        "resource.integration-style-selection-guide.steps.2": "Dokumentoi valitun toteutustavan rajoitteet, riskit ja alustariippuvuudet.",
        "resource.integration-style-selection-guide.steps.3": "Kirjaa, miksi hylättyjä vaihtoehtoja ei valittu.",
        "resource.integration-style-selection-guide.tips": "Käytä tätä sen jälkeen, kun vaatimukset ovat selkeät, mutta ennen yksityiskohtaista sopimussuunnittelua.",
        "resource.integration-style-selection-guide.tips.1": "Pidä REST-, tapahtuma-, GraphQL-, tiedosto-, tietovirta- ja datatuoteresurssit valinnaisina jatkosuunnittelun resursseina.",
        "resource.process-workflow-design-guide.title": "Prosessin ja työnkulun suunnitteluopas",
        "resource.process-workflow-design-guide.description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
        "resource.process-workflow-design-guide.outcomes": "Selkeä automaatiotyönkulun suunnitelma",
        "resource.process-workflow-design-guide.outcomes.1": "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
        "resource.process-workflow-design-guide.outcomes.2": "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty.",
        "resource.process-workflow-design-guide.steps": "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
        "resource.process-workflow-design-guide.steps.1": "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
        "resource.process-workflow-design-guide.steps.2": "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
        "resource.process-workflow-design-guide.steps.3": "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa.",
        "resource.process-workflow-design-guide.tips": "Pidä prosessisuunnittelu erillään API- tai integraatiosopimuksen suunnittelusta, kunnes työnkulku on selkeä.",
        "resource.process-workflow-design-guide.tips.1": "Käytä tätä ensisijaisena suunnitteluresurssina automaatiotyönkuluille.",
        "resource.decision-business-rules-guide.title": "Päätösten ja liiketoimintasääntöjen opas",
        "resource.decision-business-rules-guide.description": "Ohje sääntöjen, kynnysarvojen, päätösten, hyväksyntöjen, kelpoisuustarkistusten ja sääntöjen omistajuuden kuvaamiseen automaation suunnittelua varten.",
        "resource.decision-business-rules-guide.outcomes": "Selkeästi kuvatut päätökset ja liiketoimintasäännöt",
        "resource.decision-business-rules-guide.outcomes.1": "Säännöt ja kynnysarvot on dokumentoitu omistajineen.",
        "resource.decision-business-rules-guide.outcomes.2": "Automaation päätökset ovat jäljitettävissä käytäntöihin, prosessiin tai liiketoimintatarkoitukseen.",
        "resource.decision-business-rules-guide.steps": "Listaa päätökset, jotka automaation täytyy tehdä tai joita sen täytyy tukea.",
        "resource.decision-business-rules-guide.steps.1": "Dokumentoi sääntöjen ehdot, kynnysarvot, poikkeukset, hyväksynnät ja eskalointipisteet.",
        "resource.decision-business-rules-guide.steps.2": "Tunnista sääntöjen omistajat ja muutosten hallintatapa jokaiselle päätösalueelle.",
        "resource.decision-business-rules-guide.tips": "Erota vakaat liiketoimintasäännöt konfiguroitavista operatiivisista parametreista.",
        "resource.decision-business-rules-guide.tips.1": "Käytä esimerkkejä ja reunatapauksia sääntöjen tulkinnan validointiin.",
        "resource.automation-trigger-handoff-exception-guide.title": "Automaation käynnistinten, luovutusten ja poikkeusten opas",
        "resource.automation-trigger-handoff-exception-guide.description": "Ohje automaation käynnistinten, ihmisten välisten luovutusten, poikkeusten käsittelyn, uudelleenyritysten, kompensoivien toimien ja tuen eskalointipolkujen määrittelyyn.",
        "resource.automation-trigger-handoff-exception-guide.outcomes": "Määritellyt automaation käynnistimet ja poikkeuspolut",
        "resource.automation-trigger-handoff-exception-guide.outcomes.1": "Ihmisten väliset luovutukset ja tuen eskaloinnit ovat selkeitä.",
        "resource.automation-trigger-handoff-exception-guide.outcomes.2": "Poikkeukset, uudelleenyritykset ja kompensoivat toimet on suunniteltu ennen toimitusta.",
        "resource.automation-trigger-handoff-exception-guide.steps": "Määritä tapahtumat, aikataulut, käyttäjätoimet tai järjestelmätilat, jotka käynnistävät automaation.",
        "resource.automation-trigger-handoff-exception-guide.steps.1": "Kuvaa luovutukset automaatiolta käyttäjille, operaattoreille tai tukitiimeille.",
        "resource.automation-trigger-handoff-exception-guide.steps.2": "Dokumentoi poikkeukset, uudelleenyrityssäännöt, aikakatkaisujen toiminta ja varapolut.",
        "resource.automation-trigger-handoff-exception-guide.steps.3": "Määritä hälytykset ja eskalointikynnykset epäonnistuneille tai epäselville automaation tuloksille.",
        "resource.automation-trigger-handoff-exception-guide.tips": "Suunnittele poikkeuspolut työnkulun olennaisena osana, ei jälkikäteen.",
        "resource.automation-trigger-handoff-exception-guide.tips.1": "Ota liiketoiminta- ja operointiroolit mukaan luovutusten validointiin.",
        "resource.automation-testing-guide.title": "Automaation testausopas",
        "resource.automation-testing-guide.description": "Ohje automatisoitujen työnkulkujen, päätösten, integraatioiden, poikkeusten, palautuksen, valvonnan ja käyttäjävaikutusten testaamiseen ennen julkaisua.",
        "resource.automation-testing-guide.outcomes": "Validoitu automaation toiminta",
        "resource.automation-testing-guide.outcomes.1": "Työnkulun, sääntöjen, poikkeusten ja integraatioiden testit on määritelty.",
        "resource.automation-testing-guide.outcomes.2": "Julkaisuluottamus automatisoituihin ja ihmistä tukeviin polkuihin.",
        "resource.automation-testing-guide.steps": "Luo testit onnistuneille poluille, reunatapauksille, poikkeuksille, uudelleenyrityksille ja luovutuksille.",
        "resource.automation-testing-guide.steps.1": "Validoi liiketoimintasäännöt ja päätösten tulokset edustavalla datalla.",
        "resource.automation-testing-guide.steps.2": "Testaa palautus, toipuminen, havainnoitavuus ja manuaalisen puuttumisen polut.",
        "resource.automation-testing-guide.steps.3": "Ota käyttäjät ja operaattorit mukaan hyväksyntätestaukseen, kun automaatio muuttaa työtapoja.",
        "resource.automation-testing-guide.tips": "Käytä tuotantoa vastaavia skenaarioita ja datamuotoja paljastamatta arkaluonteista dataa.",
        "resource.automation-testing-guide.tips.1": "Pidä testausnäyttö saatavilla valmiuskatselmointia varten.",
        "resource.automation-operational-ownership-guide.title": "Automaation operatiivisen omistajuuden opas",
        "resource.automation-operational-ownership-guide.description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
        "resource.automation-operational-ownership-guide.outcomes": "Selkeä automaation toimintamalli",
        "resource.automation-operational-ownership-guide.outcomes.1": "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
        "resource.automation-operational-ownership-guide.outcomes.2": "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten.",
        "resource.automation-operational-ownership-guide.steps": "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
        "resource.automation-operational-ownership-guide.steps.1": "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
        "resource.automation-operational-ownership-guide.steps.2": "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille.",
        "resource.automation-operational-ownership-guide.tips": "Älä julkaise automaatiota ilman nimettyä omistajaa poikkeuksille ja jatkuvalle parantamiselle.",
        "resource.automation-operational-ownership-guide.tips.1": "Tee valvonnan tarpeet näkyviksi ennen toimitussuunnittelun valmistumista.",
        "resource.automation-rollback-supervision-guide.title": "Automaation palautuksen ja valvonnan opas",
        "resource.automation-rollback-supervision-guide.description": "Ohje automaatioiden palautuksen, keskeytyksen, manuaalisen ohituksen, seurannan, valvonnan ja toipumispolkujen suunnitteluun.",
        "resource.automation-rollback-supervision-guide.outcomes": "Hallittavat automaation toipumispolut",
        "resource.automation-rollback-supervision-guide.outcomes.1": "Palautus, keskeytys ja ohitus on dokumentoitu.",
        "resource.automation-rollback-supervision-guide.outcomes.2": "Valvontatarpeet ja toipumisvastuut on määritelty.",
        "resource.automation-rollback-supervision-guide.steps": "Tunnista toimet, jotka täytyy voida palauttaa, keskeyttää tai ohittaa manuaalisesti.",
        "resource.automation-rollback-supervision-guide.steps.1": "Määritä palautus-, kompensaatio- ja toipumismenettelyt epäonnistuneille tai virheellisille automaation tuloksille.",
        "resource.automation-rollback-supervision-guide.steps.2": "Dokumentoi valvontakynnykset, hälytykset ja manuaaliset päätöspisteet.",
        "resource.automation-rollback-supervision-guide.steps.3": "Validoi toipumismenettelyt ennen julkaisua.",
        "resource.automation-rollback-supervision-guide.tips": "Käsittele palautusta ja valvontaa osana työnkulun suunnittelua ja toimitussuunnitelmaa.",
        "resource.automation-rollback-supervision-guide.tips.1": "Hyödynnä operatiivisia häiriöitä ja läheltä piti -tilanteita valvontakriteerien tarkentamiseen.",
        "resource.automation-readiness-checklist.title": "Automaation valmiuden tarkistuslista",
        "resource.automation-readiness-checklist.description": "Tarkistuslista automaation työnkulun, kontrollien, riskien, vaatimustenmukaisuuden, ihmisen valvonnan, testausnäytön, palautuksen, operoinnin ja julkaisuvalmiuden validointiin.",
        "resource.automation-readiness-checklist.outcomes": "Dokumentoitu automaation valmius",
        "resource.automation-readiness-checklist.outcomes.1": "Tunnetut valmiuspuutteet ja lievennykset on tunnistettu ennen julkaisua.",
        "resource.automation-readiness-checklist.outcomes.2": "Näyttö laadusta, riskistä, vaatimustenmukaisuudesta, valvonnasta ja operatiivisesta hyväksynnästä.",
        "resource.automation-readiness-checklist.steps": "Katselmoi työnkulun suunnittelu, liiketoimintasäännöt, kontrollit, pääsy, datankäsittely ja poikkeuspolut.",
        "resource.automation-readiness-checklist.steps.1": "Varmista testausnäyttö, palautusmenettelyt, valvontamalli ja tuen valmius.",
        "resource.automation-readiness-checklist.steps.2": "Vahvista omistajuus, runbookit, seuranta, muutosten hallinta ja julkaisuhyväksyntä.",
        "resource.automation-readiness-checklist.steps.3": "Kirjaa avoimet puutteet, päätökset ja hyväksytyt riskit ennen julkaisua.",
        "resource.automation-readiness-checklist.tips": "Käytä ennen julkaisua ja uudelleen olennaisten työnkulku- tai sääntömuutosten jälkeen.",
        "resource.automation-readiness-checklist.tips.1": "Tee ihmisen valvonta ja poikkeusten käsittely näkyväksi näytössä.",
        "resource.automation-rollout-enablement-guide.title": "Automaation käyttöönoton ja tuen opas",
        "resource.automation-rollout-enablement-guide.description": "Ohje automaatioiden käyttöönottoon käyttäjäviestinnän, onboardingin, käyttöohjeiden, tukipolkujen, muutoksenhallinnan ja palautesilmukoiden avulla.",
        "resource.automation-rollout-enablement-guide.outcomes": "Käyttäjät ja operaattorit on tuettu automaation käyttöön",
        "resource.automation-rollout-enablement-guide.outcomes.1": "Käyttöönoton viestintä, onboarding ja tukipolut on valmisteltu.",
        "resource.automation-rollout-enablement-guide.outcomes.2": "Käyttäjät ja operaattorit ymmärtävät, miten työ muuttuu automaation julkaisun jälkeen.",
        "resource.automation-rollout-enablement-guide.steps": "Määritä käyttöönoton kohderyhmät, ajoitus, viestintäkanavat ja koulutustarpeet.",
        "resource.automation-rollout-enablement-guide.steps.1": "Julkaise käyttöohjeet, tukipolut, poikkeusten käsittelyn ohjeet ja eskalointikontaktit.",
        "resource.automation-rollout-enablement-guide.steps.2": "Suunnittele siirtymän tuki käyttäjille, operaattoreille ja prosessinomistajille.",
        "resource.automation-rollout-enablement-guide.steps.3": "Kerää palautetta käyttöönoton jälkeen ja vie parannukset kehitysjonoon.",
        "resource.automation-rollout-enablement-guide.tips": "Käytä automaatioille käyttöönoton kieltä sen sijaan, että käsittelet tukea API-julkaisuna.",
        "resource.automation-rollout-enablement-guide.tips.1": "Ota mukaan sekä prosessin käyttäjät että automaatiosta vastaavat operaattorit.",
        "resource.api-community-engagement-strategies.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "resource.api-development-best-practices.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "resource.api-metrics-and-analytics.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "resource.api-testing-best-practices.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "resource.apiops-CI-CD-for-apis.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "resource.api-audit-checklist.tips.2": "Käytä tätä resurssia, kun valittu toteutustapa on API.",
        "exit_criteria": "Valmistumiskriteerit",
        "entry_criteria": "Aloituskriteerit",
        "criterion.metrics-feedback-available": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
        "criterion.business-goals-defined": "Liiketoimintatavoitteet on määritelty.",
        "criterion.market-research-done": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
        "criterion.stakeholder-approval": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
        "criterion.api-opportunity-documented": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
        "criterion.api-reusability": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
        "criterion.hide-backend-discrepancies": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
        "criterion.value-prop-validated": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
        "criterion.consumer-segments-identified": "Hyödyntäjäsegmentit on tunnistettu.",
        "criterion.api-roadmap-defined": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
        "criterion.architecture-patterns-validated": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
        "criterion.design-reflects-business-value": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
        "criterion.api-consistency": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
        "criterion.api-contract-tested": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
        "criterion.automation-workflow-validated": "Työnkulku, säännöt, integraatiot ja olennaiset rajapintasopimukset on validoitu ja testattu.",
        "criterion.api-description-available": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
        "criterion.audit-passed": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
        "criterion.audit-reports-shared": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
        "criterion.api-ready-for-publishing": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
        "criterion.api-documentation-ready": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
        "criterion.consumer-support-ready": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
        "criterion.legal-compliance-clear": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
        "stakeholder.involvement.lead": "Vetäjä",
        "stakeholder.involvement.core": "Ydintiimi",
        "stakeholder.involvement.consulted": "Konsultoitava",
        "stakeholder.business-owner.title": "Liiketoiminnan omistaja",
        "stakeholder.business-owner.description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
        "stakeholder.api-program-owner.title": "API-ohjelman omistaja",
        "stakeholder.api-program-owner.description": "Koordinoi API-portfolion käytäntöjä, organisaation suuntautumista ja pitkän aikavälin API-kyvykkyyksien kehitystä.",
        "stakeholder.api-product-owner.title": "API-tuoteomistaja",
        "stakeholder.api-product-owner.description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
        "stakeholder.capability-owner.title": "Kyvykkyyden omistaja",
        "stakeholder.capability-owner.description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
        "stakeholder.domain-specialist.title": "Liiketoiminta-asiantuntija",
        "stakeholder.domain-specialist.description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
        "stakeholder.customer-specialist.title": "Asiakas- tai kumppaniedustaja",
        "stakeholder.customer-specialist.description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
        "stakeholder.api-consumer-specialist.title": "API-hyödyntäjien edustaja",
        "stakeholder.api-consumer-specialist.description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
        "stakeholder.platform-architect.title": "Alusta-arkkitehti",
        "stakeholder.platform-architect.description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
        "stakeholder.api-architect.title": "API-arkkitehti",
        "stakeholder.api-architect.description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
        "stakeholder.integration-architect.title": "Integraatioarkkitehti",
        "stakeholder.integration-architect.description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
        "stakeholder.platform-owner.title": "Alustan omistaja",
        "stakeholder.platform-owner.description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
        "stakeholder.api-designer.title": "API-suunnittelija",
        "stakeholder.api-designer.description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
        "stakeholder.api-engineer.title": "Toimituskehittäjä",
        "stakeholder.api-engineer.description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
        "stakeholder.automation-owner.title": "Automaation omistaja",
        "stakeholder.automation-owner.description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
        "stakeholder.process-owner.title": "Prosessin omistaja",
        "stakeholder.process-owner.description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
        "stakeholder.automation-engineer.title": "Automaatiokehittäjä",
        "stakeholder.automation-engineer.description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
        "stakeholder.security-specialist.title": "Turvallisuusasiantuntija",
        "stakeholder.security-specialist.description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
        "stakeholder.compliance-specialist.title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
        "stakeholder.compliance-specialist.description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
        "stakeholder.governance-specialist.title": "API-hallinnan omistaja",
        "stakeholder.governance-specialist.description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
        "stakeholder.api-devrel-specialist.title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
        "stakeholder.api-devrel-specialist.description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
        "stakeholder.operations-specialist.title": "Tuki- ja operaatioiden omistaja",
        "stakeholder.operations-specialist.description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
        "stakeholder.partner-specialist.title": "Kumppani- ja toimittajavastaava",
        "stakeholder.partner-specialist.description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
        "lines.title": "Metrolinjat",
        "lines.description": "APIOps Cycles -metrolinjat, jotka ohjaavat kyvykkyyksien, APIen ja integraatioiden suunnittelua, toteutusta ja kehittämistä.",
        "line.business-opportunities-line.title": "Liiketoimintamahdollisuuksien linja",
        "line.business-opportunities-line.description": "Keskittyy tunnistamaan, arvioimaan ja tuotteistamaan liiketoimintamahdollisuuksia uudelleenkäytettävinä kyvykkyyksinä.",
        "line.platform-architecture-line.title": "Alusta-arkkitehtuurilinja",
        "line.platform-architecture-line.description": "Kattaa alustojen, integraatioiden ja rajapintojen arkkitehtuurin suunnittelun.",
        "line.api-design-line.title": "API-suunnittelulinja",
        "line.api-design-line.description": "Keskittyy rajapintojen ja integraatioratkaisujen suunnitteluperiaatteisiin ja -käytäntöihin.",
        "line.delivery-line.title": "Toimituslinja",
        "line.delivery-line.description": "Kattaa toteutuksen, testauksen, automaation ja toimituskäytännöt.",
        "line.publishing-and-adoption-line.title": "Julkaisu- ja käyttöönoton linja",
        "line.publishing-and-adoption-line.description": "Keskittyy kyvykkyyksien julkaisemiseen, käyttöönottoon ja hyödyntämisen tukemiseen.",
        "line.operating-model-line.title": "Toimintamallilinja",
        "line.operating-model-line.description": "Kattaa kyvykkyyksien hallintamallin, vastuut ja governance-käytännöt."
      },
      "cycles": [
        {
          "id": "capability-productization-cycle",
          "slug": "capability-productization-cycle",
          "title": "Kyvykkyyden tuotteistamisen sykli",
          "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa.",
          "purpose": "Tunnista ja tuotteista uudelleenkaytettavia digitaalisia kyvykkyyksia ennen API-, tapahtuma-, tiedosto-, virta-, datatuote-, tekoalya hyodyntava palvelu-, suora integraatio- tai hybriditoteutustavan valintaa.",
          "audiences": [],
          "audienceStakeholders": [
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "capabilityValuePropositionCanvas",
                  "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                  "canvasId": "capabilityValuePropositionCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "capabilityBusinessModelCanvas",
                  "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                  "canvasId": "capabilityBusinessModelCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "consumerExperienceRequirementsCanvas",
                  "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "governance-specialist",
              "sourceKey": "governance-specialist",
              "sourceStakeholderId": "governance-specialist",
              "title": "API-hallinnan omistaja",
              "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            }
          ],
          "entryCriteria": [
            "business-goals-defined",
            "stakeholder-approval"
          ],
          "exitCriteria": [
            "value-prop-validated",
            "architecture-patterns-validated",
            "audit-passed"
          ],
          "entryCriteriaDetails": [
            {
              "id": "business-goals-defined",
              "title": "Liiketoimintatavoitteet on määritelty.",
              "description": "Business goals are defined."
            },
            {
              "id": "stakeholder-approval",
              "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
              "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
            }
          ],
          "exitCriteriaDetails": [
            {
              "id": "value-prop-validated",
              "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
              "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
            },
            {
              "id": "architecture-patterns-validated",
              "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
              "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
            },
            {
              "id": "audit-passed",
              "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
              "description": "The API passes compliance, security, and audit checks."
            }
          ],
          "questionnaireResources": [
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Kyvykkyysstrategia",
              "resourceId": "capabilityValuePropositionCanvas",
              "resourceTitle": "Kyvykkyyden arvolupauskanvas",
              "canvasId": "capabilityValuePropositionCanvas",
              "suggestedAnswerOwner": {
                "id": "capability-owner",
                "sourceKey": "capability-owner",
                "sourceStakeholderId": "capability-owner",
                "title": "Kyvykkyyden omistaja",
                "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "capabilityValuePropositionCanvas",
                    "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                    "canvasId": "capabilityValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capabilityBusinessModelCanvas",
                    "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                    "canvasId": "capabilityBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Kyvykkyysstrategia",
              "resourceId": "capabilityBusinessModelCanvas",
              "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
              "canvasId": "capabilityBusinessModelCanvas",
              "suggestedAnswerOwner": {
                "id": "capability-owner",
                "sourceKey": "capability-owner",
                "sourceStakeholderId": "capability-owner",
                "title": "Kyvykkyyden omistaja",
                "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "capabilityValuePropositionCanvas",
                    "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                    "canvasId": "capabilityValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capabilityBusinessModelCanvas",
                    "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                    "canvasId": "capabilityBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Kyvykkyysstrategia",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas",
              "suggestedAnswerOwner": {
                "id": "business-owner",
                "sourceKey": "business-owner",
                "sourceStakeholderId": "business-owner",
                "title": "Liiketoiminnan omistaja",
                "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "customerJourneyCanvas",
                    "resourceTitle": "Asiakaspolkukanvas",
                    "canvasId": "customerJourneyCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Kyvykkyysstrategia",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas",
              "suggestedAnswerOwner": {
                "id": "domain-specialist",
                "sourceKey": "domain-specialist",
                "sourceStakeholderId": "domain-specialist",
                "title": "Liiketoiminta-asiantuntija",
                "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "domainCanvas",
                    "resourceTitle": "Toimialuekanvas",
                    "canvasId": "domainCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-consumer-experience",
              "stationTitle": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "resourceId": "consumerExperienceRequirementsCanvas",
              "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "canvasId": "consumerExperienceRequirementsCanvas",
              "suggestedAnswerOwner": {
                "id": "api-consumer-specialist",
                "sourceKey": "api-consumer-specialist",
                "sourceStakeholderId": "api-consumer-specialist",
                "title": "API-hyödyntäjien edustaja",
                "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "consumerExperienceRequirementsCanvas",
                    "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                    "canvasId": "consumerExperienceRequirementsCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Arkkitehtuuri ja alustaratkaisut",
              "resourceId": "locationsCanvas",
              "resourceTitle": "Sijaintikanvas",
              "canvasId": "locationsCanvas",
              "suggestedAnswerOwner": {
                "id": "platform-architect",
                "sourceKey": "platform-architect",
                "sourceStakeholderId": "platform-architect",
                "title": "Alusta-arkkitehti",
                "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "locationsCanvas",
                    "resourceTitle": "Sijaintikanvas",
                    "canvasId": "locationsCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Arkkitehtuuri ja alustaratkaisut",
              "resourceId": "capacityCanvas",
              "resourceTitle": "Kapasiteettikanvas",
              "canvasId": "capacityCanvas",
              "suggestedAnswerOwner": {
                "id": "platform-owner",
                "sourceKey": "platform-owner",
                "sourceStakeholderId": "platform-owner",
                "title": "Alustan omistaja",
                "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "capacityCanvas",
                    "resourceTitle": "Kapasiteettikanvas",
                    "canvasId": "capacityCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Arkkitehtuuri ja alustaratkaisut",
              "resourceId": "businessImpactCanvas",
              "resourceTitle": "Liiketoimintavaikutuskanvas",
              "canvasId": "businessImpactCanvas",
              "suggestedAnswerOwner": {
                "id": "capability-owner",
                "sourceKey": "capability-owner",
                "sourceStakeholderId": "capability-owner",
                "title": "Kyvykkyyden omistaja",
                "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "businessImpactCanvas",
                    "resourceTitle": "Liiketoimintavaikutuskanvas",
                    "canvasId": "businessImpactCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            }
          ],
          "stations": [
            {
              "index": 1,
              "id": "api-product-strategy",
              "slug": "method/api-product-strategy",
              "icon": "strategy-outline",
              "title": "Kyvykkyysstrategia",
              "description": "Kuvaa liiketoimintatarve uudelleenkaytettavana kyvykkyytena, jolla on selkea arvo, hyodyntajat, omistajuus ja liiketoimintatavoitteet ennen toteutustavan valintaa.",
              "whyItMatters": "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa.",
              "applyInWork": "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
              "outcomes": [
                "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
                "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
                "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa"
              ],
              "steps": [
                {
                  "text": "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas"
                }
              ],
              "questions": [
                "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
                "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
              ],
              "criteria": [
                "metrics-feedback-available",
                "business-goals-defined",
                "market-research-done",
                "stakeholder-approval"
              ],
              "criteriaDetails": [
                {
                  "id": "metrics-feedback-available",
                  "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
                  "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity."
                },
                {
                  "id": "business-goals-defined",
                  "title": "Liiketoimintatavoitteet on määritelty.",
                  "description": "Business goals are defined."
                },
                {
                  "id": "market-research-done",
                  "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
                  "description": "Market research identifies API opportunities."
                },
                {
                  "id": "stakeholder-approval",
                  "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
                  "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
                }
              ],
              "baseTitle": "Strategia",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "lead",
                  "responsibilities": [
                    {
                      "resourceId": "capabilityValuePropositionCanvas",
                      "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                      "canvasId": "capabilityValuePropositionCanvas",
                      "role": "suggested-answer-owner"
                    },
                    {
                      "resourceId": "capabilityBusinessModelCanvas",
                      "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                      "canvasId": "capabilityBusinessModelCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "customer-specialist",
                  "sourceKey": "customer-specialist",
                  "sourceStakeholderId": "customer-specialist",
                  "title": "Asiakas- tai kumppaniedustaja",
                  "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "customerJourneyCanvas",
                      "resourceTitle": "Asiakaspolkukanvas",
                      "canvasId": "customerJourneyCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "domainCanvas",
                      "resourceTitle": "Toimialuekanvas",
                      "canvasId": "domainCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-program-owner",
                  "sourceKey": "api-program-owner",
                  "sourceStakeholderId": "api-program-owner",
                  "title": "API-ohjelman omistaja",
                  "description": "Koordinoi API-portfolion käytäntöjä, organisaation suuntautumista ja pitkän aikavälin API-kyvykkyyksien kehitystä.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "customerJourneyCanvas",
                  "slug": "resources/customer-journey-canvas",
                  "title": "Asiakaspolkukanvas",
                  "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 1,
                  "outcomes": [
                    "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                    "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                    "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
                  ],
                  "steps": [
                    "Määrittele asiakaspersoona",
                    "Tunnista matkan käynnistäjät",
                    "Kuvaile matkan loppua",
                    "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                    "Tunnista asiakkaan kipupisteet",
                    "Yhteenveto asiakkaan saamista eduista",
                    "Määritellään tarvittavat syötteet ja tuotokset",
                    "Määrittele API-vuorovaikutukset kullekin vaiheelle"
                  ],
                  "canvasId": "customerJourneyCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capabilityValuePropositionCanvas",
                  "slug": "resources/capability-value-proposition-canvas",
                  "title": "Kyvykkyyden arvolupauskanvas",
                  "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 2.1,
                  "outcomes": [
                    "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                    "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                    "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
                  ],
                  "steps": [
                    "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                    "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
                  ],
                  "canvasId": "capabilityValuePropositionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capabilityBusinessModelCanvas",
                  "slug": "resources/capability-business-model-canvas",
                  "title": "Kyvykkyyden liiketoimintamallikanvas",
                  "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3.1,
                  "outcomes": [
                    "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                    "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                    "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
                  ],
                  "steps": [
                    "Tiivistä kyvykkyyden arvolupaus.",
                    "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                    "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                    "Kuvaa kustannukset ja hyödyt.",
                    "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                    "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
                  ],
                  "canvasId": "capabilityBusinessModelCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "research",
                "roadmap"
              ]
            },
            {
              "index": 2,
              "id": "api-consumer-experience",
              "slug": "method/api-consumer-experience",
              "icon": "deployed-code-account-outline",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien vaatimukset, käyttöönoton tarpeet, rajoitteet, palveluodotukset ja tuottajan vastuut.",
              "whyItMatters": "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
              "applyInWork": "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
              "outcomes": [
                "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
                "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
                "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
                "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta"
              ],
              "steps": [
                {
                  "text": "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
                "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista."
              ],
              "criteria": [
                "api-opportunity-documented",
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-opportunity-documented",
                  "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
                  "description": "Individual API opportunities are identified and documented."
                },
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "customer-specialist",
                  "sourceKey": "customer-specialist",
                  "sourceStakeholderId": "customer-specialist",
                  "title": "Asiakas- tai kumppaniedustaja",
                  "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "consumerExperienceRequirementsCanvas",
                      "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                      "canvasId": "consumerExperienceRequirementsCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "consumerExperienceRequirementsCanvas",
                  "slug": "resources/consumer-experience-requirements-canvas",
                  "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3.2,
                  "outcomes": [
                    "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                    "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                    "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
                  ],
                  "steps": [
                    "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                    "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                    "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                    "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
                  ],
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "consumer-feedback"
              ]
            },
            {
              "index": 3,
              "id": "api-platform-architecture",
              "slug": "method/api-platform-architecture",
              "icon": "code-blocks-outline",
              "title": "Arkkitehtuuri ja alustaratkaisut",
              "description": "Kayta vaatimuksia ja rajoitteita toteutustavan, arkkitehtuurimallin ja mahdollistavien alustakyvykkyyksien valintaan.",
              "whyItMatters": "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista.",
              "applyInWork": "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
              "outcomes": [
                "Perusteltu arkkitehtuurivalinta",
                "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
                "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle"
              ],
              "steps": [
                {
                  "text": "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas"
                },
                {
                  "text": "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas"
                },
                {
                  "text": "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas"
                },
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
                "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
              ],
              "criteria": [
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Arkkitehtuuri- ja alustapäätökset",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "architecture",
              "stakeholders": [
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "lead",
                  "responsibilities": [
                    {
                      "resourceId": "locationsCanvas",
                      "resourceTitle": "Sijaintikanvas",
                      "canvasId": "locationsCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "capacityCanvas",
                      "resourceTitle": "Kapasiteettikanvas",
                      "canvasId": "capacityCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "businessImpactCanvas",
                      "resourceTitle": "Liiketoimintavaikutuskanvas",
                      "canvasId": "businessImpactCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "businessImpactCanvas",
                  "slug": "resources/business-impact-canvas",
                  "title": "Liiketoimintavaikutuskanvas",
                  "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 4,
                  "outcomes": [
                    "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                    "Priorisoidut riskit ja lieventämistoimenpiteet",
                    "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
                  ],
                  "steps": [
                    "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                    "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                    "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                    "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                    "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                    "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
                  ],
                  "canvasId": "businessImpactCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "locationsCanvas",
                  "slug": "resources/location-canvas",
                  "title": "Sijaintikanvas",
                  "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 6,
                  "outcomes": [
                    "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                    "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                    "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
                  ],
                  "steps": [
                    "API-palveluntarjoajien sijainnit kartalla.",
                    "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                    "Tunnista sovellettavat säädökset.",
                    "Dokumentoi, missä tietojen on oltava.",
                    "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                    "Validoi verkon suorituskyky eri alueilla."
                  ],
                  "canvasId": "locationsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capacityCanvas",
                  "slug": "resources/capacity-canvas",
                  "title": "Kapasiteettikanvas",
                  "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 7,
                  "outcomes": [
                    "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                    "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                    "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
                  ],
                  "steps": [
                    "Dokumentoi nykyiset liiketoiminnan volyymit",
                    "Ennustaa tulevia kulutussuuntauksia",
                    "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                    "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                    "Ehdotetaan skaalausstrategioita"
                  ],
                  "canvasId": "capacityCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "architecture-decision",
                "documentation",
                "platform-config",
                "metrics"
              ]
            },
            {
              "index": 4,
              "id": "api-design",
              "slug": "method/api-design",
              "icon": "api",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli valitulle toteutustavalle.",
              "whyItMatters": "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi.",
              "applyInWork": "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
              "outcomes": [
                "Validoitu rajapintasopimus valitulle toteutustavalle",
                "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
                "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
                "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                  "resourceId": "interactionCanvas",
                  "resourceTitle": "Vuorovaikutuskanvas",
                  "canvasId": "interactionCanvas"
                },
                {
                  "text": "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                  "resourceId": "restCanvas",
                  "resourceTitle": "REST-kanvas",
                  "canvasId": "restCanvas"
                },
                {
                  "text": "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                  "resourceId": "eventCanvas",
                  "resourceTitle": "Tapahtumakanvas",
                  "canvasId": "eventCanvas"
                },
                {
                  "text": "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                  "resourceId": "graphqlCanvas",
                  "resourceTitle": "GraphQL-kanvas",
                  "canvasId": "graphqlCanvas"
                },
                {
                  "text": "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                  "resourceId": "api-design-principles",
                  "resourceTitle": "API-suunnitteluperiaatteet",
                  "canvasId": null
                },
                {
                  "text": "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                  "resourceId": "contract-first-design",
                  "resourceTitle": "Sopimuslähtöinen suunnittelu",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
                "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Ratkaisu- ja rajapintasuunnittelu",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "design",
              "stakeholders": [
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "interactionCanvas",
                  "slug": "resources/interaction-canvas",
                  "title": "Vuorovaikutuskanvas",
                  "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 9,
                  "outcomes": [
                    "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                    "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                    "Sovitut validointisäännöt ja vuorovaikutusodotukset"
                  ],
                  "steps": [
                    "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                    "Määritä päätepisteet kullekin vuorovaikutukselle",
                    "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                    "Validointisääntöjen ja -rajoitusten määrittäminen",
                    "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
                  ],
                  "canvasId": "interactionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "contract-first-design",
                  "slug": "resources/contract-first-design",
                  "title": "Sopimuslähtöinen suunnittelu",
                  "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 146,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                    "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                    "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-contract-example.yaml",
                  "sourceUrl": null,
                  "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
                  "draft": true
                }
              ],
              "evidence": [
                "spec",
                "contract",
                "design-artifact",
                "documentation"
              ]
            },
            {
              "index": 5,
              "id": "api-delivery",
              "slug": "method/api-delivery",
              "icon": "code",
              "title": "Toimitus ja operointi",
              "description": "Rakenna, testaa, julkaise ja operoi kyvykkyyttä valitulla toteutustavalla ja validoidulla rajapintasopimuksella.",
              "whyItMatters": "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa.",
              "applyInWork": "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
              "outcomes": [
                "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
                "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
                "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
                "Jäljitettävät toimitus- ja julkaisukontrollit"
              ],
              "steps": [
                {
                  "text": "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                  "resourceId": "api-testing-best-practices",
                  "resourceTitle": "API-testauksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                  "resourceId": "api-security-best-practices",
                  "resourceTitle": "API-turvallisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
                "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Toimitus ja operointi",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "delivery",
              "stakeholders": [
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-development-best-practices",
                  "slug": "resources/api-development-best-practices",
                  "title": "API-kehityksen parhaat käytännöt",
                  "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 112,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                    "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
                  "sourceUrl": null,
                  "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
                  "draft": true
                },
                {
                  "id": "api-testing-best-practices",
                  "slug": "resources/api-testing-best-practices",
                  "title": "API-testauksen parhaat käytännöt",
                  "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 133,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                    "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                    "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "apiops-CI-CD-for-apis",
                  "slug": "resources/apiops-CI-CD-for-apis",
                  "title": "APIOps CI/CD rajapinnoille",
                  "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 140,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                    "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                    "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                    "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "implementation",
                "pipeline-config",
                "test-report",
                "security-report"
              ]
            },
            {
              "index": 6,
              "id": "api-audit",
              "slug": "method/api-audit",
              "icon": "check-box-outline",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Validoi rajapintasopimus, kontrollit, dokumentaatio, tukimalli ja operatiivinen valmius ennen julkaisua.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä.",
              "applyInWork": "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
              "outcomes": [
                "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
                "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
                "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
                "Pienempi riski tuotannon ongelmille"
              ],
              "steps": [
                {
                  "text": "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                },
                {
                  "text": "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                  "resourceId": "api-compliance-best-practices",
                  "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                  "resourceTitle": "",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
                "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "design-reflects-business-value",
                "api-description-available",
                "api-consistency",
                "api-contract-tested"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-description-available",
                  "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
                  "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                },
                {
                  "id": "api-contract-tested",
                  "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
                  "description": "The API contract is tested and meets functional and non-functional requirements."
                }
              ],
              "baseTitle": "Laadun ja valmiuden varmistus",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "governance-specialist",
                  "sourceKey": "governance-specialist",
                  "sourceStakeholderId": "governance-specialist",
                  "title": "API-hallinnan omistaja",
                  "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-audit-checklist",
                  "slug": "resources/api-audit-checklist",
                  "title": "API-auditoinnin tarkistuslista",
                  "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
                  "category": "checklist",
                  "icon": "check-box-outline",
                  "order": 13,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                    "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                    "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-audit-checklist.json",
                  "sourceUrl": null,
                  "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
                  "draft": false
                },
                {
                  "id": "api-compliance-best-practices",
                  "slug": "resources/api-compliance-best-practices",
                  "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 104,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                    "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                    "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "audit-report",
                "compliance-report",
                "security-report",
                "test-report"
              ]
            },
            {
              "index": 7,
              "id": "api-publishing",
              "slug": "method/api-publishing",
              "icon": "deployed-code-outline",
              "title": "Julkaisu ja kayttoonoton tuki",
              "description": "Julkaise kyvykkyys, jotta hyodyntajat voivat loytaa sen, arvioida sen, pyytaa kayttooikeutta, suorittaa kayttoonoton, kayttaa sita ja saada tukea.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
              "applyInWork": "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
              "outcomes": [
                "Löydettävä uudelleenkäytettävä kyvykkyys",
                "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
                "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
                "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä"
              ],
              "steps": [
                {
                  "text": "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
                "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset."
              ],
              "criteria": [
                "audit-passed",
                "audit-reports-shared",
                "api-ready-for-publishing",
                "api-documentation-ready"
              ],
              "criteriaDetails": [
                {
                  "id": "audit-passed",
                  "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
                  "description": "The API passes compliance, security, and audit checks."
                },
                {
                  "id": "audit-reports-shared",
                  "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
                  "description": "Audit findings and remediation decisions are shared with the relevant stakeholders."
                },
                {
                  "id": "api-ready-for-publishing",
                  "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
                  "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
                },
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                }
              ],
              "baseTitle": "Julkaisu ja käyttöönoton mahdollistaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "partner-specialist",
                  "sourceKey": "partner-specialist",
                  "sourceStakeholderId": "partner-specialist",
                  "title": "Kumppani- ja toimittajavastaava",
                  "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "service-agreement-template",
                  "slug": "resources/service-agreement-template",
                  "title": "Palvelusopimusmalli",
                  "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 172,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                    "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                    "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "gateway-config",
                "developer-portal",
                "documentation",
                "release-record"
              ]
            },
            {
              "index": 8,
              "id": "monitoring-and-improving",
              "slug": "method/monitoring-and-improving",
              "icon": "analytics-outline",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa kyvykkyyden tilaa, hyödyntäjien tuloksia, luotettavuutta, uudelleenkäyttöä ja parannusmahdollisuuksia.",
              "whyItMatters": "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat.",
              "applyInWork": "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
              "outcomes": [
                "Mitattu kyvykkyyden tila ja arvo",
                "Parannusjono, joka perustuu operatiiviseen ja hyödyntäjien palautteeseen",
                "Uudelleenkäytön, luotettavuuden, datan laadun ja kustannusten signaalit omistajien saatavilla",
                "Jatkuva parantaminen linjassa hyödyntäjien tarpeiden kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                },
                {
                  "text": "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                  "resourceId": "api-community-engagement-strategies",
                  "resourceTitle": "API-yhteisön sitouttamisstrategiat",
                  "canvasId": null
                },
                {
                  "text": "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
                "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat."
              ],
              "criteria": [
                "api-documentation-ready",
                "consumer-support-ready",
                "legal-compliance-clear"
              ],
              "criteriaDetails": [
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                },
                {
                  "id": "consumer-support-ready",
                  "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
                  "description": "Registration, support, and communication processes are ready for API consumers."
                },
                {
                  "id": "legal-compliance-clear",
                  "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
                  "description": "Legal, privacy, and compliance requirements for publishing are defined and understood."
                }
              ],
              "baseTitle": "Seuranta ja parantaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "improving",
              "stakeholders": [
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-metrics-and-analytics",
                  "slug": "resources/api-metrics-and-analytics",
                  "title": "API-mittarit ja analytiikka",
                  "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 119,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                    "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                    "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-community-engagement-strategies",
                  "slug": "resources/api-community-engagement-strategies",
                  "title": "API-yhteisön sitouttamisstrategiat",
                  "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 103,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                    "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                    "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                    "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                    "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "metrics",
                "consumer-feedback",
                "incident-report",
                "roadmap"
              ]
            }
          ]
        },
        {
          "id": "api-productization-cycle",
          "slug": "api-productization-cycle",
          "title": "API-tuotteistamisen sykli",
          "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen.",
          "purpose": "API-keskeinen menetelmäpolku tiimeille, jotka jo tietävät, että tarkoitettu toteutustapa on API-tuote.",
          "audiences": [],
          "audienceStakeholders": [
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-architect",
              "sourceKey": "api-architect",
              "sourceStakeholderId": "api-architect",
              "title": "API-arkkitehti",
              "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "governance-specialist",
              "sourceKey": "governance-specialist",
              "sourceStakeholderId": "governance-specialist",
              "title": "API-hallinnan omistaja",
              "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
              "involvement": "lead",
              "responsibilities": []
            }
          ],
          "entryCriteria": [
            "api-opportunity-documented",
            "consumer-segments-identified"
          ],
          "exitCriteria": [
            "api-contract-tested",
            "api-ready-for-publishing",
            "api-documentation-ready"
          ],
          "entryCriteriaDetails": [
            {
              "id": "api-opportunity-documented",
              "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
              "description": "Individual API opportunities are identified and documented."
            },
            {
              "id": "consumer-segments-identified",
              "title": "Hyödyntäjäsegmentit on tunnistettu.",
              "description": "API consumer segments (internal and external) are identified."
            }
          ],
          "exitCriteriaDetails": [
            {
              "id": "api-contract-tested",
              "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
              "description": "The API contract is tested and meets functional and non-functional requirements."
            },
            {
              "id": "api-ready-for-publishing",
              "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
              "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
            },
            {
              "id": "api-documentation-ready",
              "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
              "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
            }
          ],
          "questionnaireResources": [
            {
              "stationId": "api-product-strategy",
              "stationTitle": "API-tuotestrategia",
              "resourceId": "apiValuePropositionCanvas",
              "resourceTitle": "API-arvolupauskanvas",
              "canvasId": "apiValuePropositionCanvas",
              "suggestedAnswerOwner": {
                "id": "api-product-owner",
                "sourceKey": "api-product-owner",
                "sourceStakeholderId": "api-product-owner",
                "title": "API-tuoteomistaja",
                "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "apiValuePropositionCanvas",
                    "resourceTitle": "API-arvolupauskanvas",
                    "canvasId": "apiValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "apiBusinessModelCanvas",
                    "resourceTitle": "API-liiketoimintamallikanvas",
                    "canvasId": "apiBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "API-tuotestrategia",
              "resourceId": "apiBusinessModelCanvas",
              "resourceTitle": "API-liiketoimintamallikanvas",
              "canvasId": "apiBusinessModelCanvas",
              "suggestedAnswerOwner": {
                "id": "api-product-owner",
                "sourceKey": "api-product-owner",
                "sourceStakeholderId": "api-product-owner",
                "title": "API-tuoteomistaja",
                "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "apiValuePropositionCanvas",
                    "resourceTitle": "API-arvolupauskanvas",
                    "canvasId": "apiValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "apiBusinessModelCanvas",
                    "resourceTitle": "API-liiketoimintamallikanvas",
                    "canvasId": "apiBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "API-tuotestrategia",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas",
              "suggestedAnswerOwner": {
                "id": "business-owner",
                "sourceKey": "business-owner",
                "sourceStakeholderId": "business-owner",
                "title": "Liiketoiminnan omistaja",
                "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "customerJourneyCanvas",
                    "resourceTitle": "Asiakaspolkukanvas",
                    "canvasId": "customerJourneyCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "API-tuotestrategia",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas",
              "suggestedAnswerOwner": {
                "id": "domain-specialist",
                "sourceKey": "domain-specialist",
                "sourceStakeholderId": "domain-specialist",
                "title": "Liiketoiminta-asiantuntija",
                "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "domainCanvas",
                    "resourceTitle": "Toimialuekanvas",
                    "canvasId": "domainCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "API-alustan arkkitehtuuri",
              "resourceId": "locationsCanvas",
              "resourceTitle": "Sijaintikanvas",
              "canvasId": "locationsCanvas",
              "suggestedAnswerOwner": {
                "id": "api-architect",
                "sourceKey": "api-architect",
                "sourceStakeholderId": "api-architect",
                "title": "API-arkkitehti",
                "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "locationsCanvas",
                    "resourceTitle": "Sijaintikanvas",
                    "canvasId": "locationsCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capacityCanvas",
                    "resourceTitle": "Kapasiteettikanvas",
                    "canvasId": "capacityCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "API-alustan arkkitehtuuri",
              "resourceId": "capacityCanvas",
              "resourceTitle": "Kapasiteettikanvas",
              "canvasId": "capacityCanvas",
              "suggestedAnswerOwner": {
                "id": "api-architect",
                "sourceKey": "api-architect",
                "sourceStakeholderId": "api-architect",
                "title": "API-arkkitehti",
                "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "locationsCanvas",
                    "resourceTitle": "Sijaintikanvas",
                    "canvasId": "locationsCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capacityCanvas",
                    "resourceTitle": "Kapasiteettikanvas",
                    "canvasId": "capacityCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "API-alustan arkkitehtuuri",
              "resourceId": "businessImpactCanvas",
              "resourceTitle": "Liiketoimintavaikutuskanvas",
              "canvasId": "businessImpactCanvas",
              "suggestedAnswerOwner": {
                "id": "api-product-owner",
                "sourceKey": "api-product-owner",
                "sourceStakeholderId": "api-product-owner",
                "title": "API-tuoteomistaja",
                "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "businessImpactCanvas",
                    "resourceTitle": "Liiketoimintavaikutuskanvas",
                    "canvasId": "businessImpactCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            }
          ],
          "stations": [
            {
              "index": 1,
              "id": "api-product-strategy",
              "slug": "method/api-product-strategy",
              "icon": "strategy-outline",
              "title": "API-tuotestrategia",
              "description": "Ennen kuin rakennat mitään, määrittele APIn arvo, hyödyntäjät ja liiketoiminnalliset tavoitteet heti alusta alkaen.",
              "whyItMatters": "Monet organisaatiot pitävät rajapintoja teknisinä projekteina, eivät tuotteina. Tulos? Hämmentyneitä hyödyntäjiä, heikkoa käyttöönottoa ja turhaa työtä. Tämä asema auttaa määrittelemään APIn tarkoituksen, kohderyhmän ja menestyskriteerit, jotta tiimit voivat tuottaa rajapintoja, jotka ratkaisevat todellisia ongelmia.",
              "applyInWork": "Tarjotaan ohjeita ja malleja API-liiketoimintamallien, arvolupausten ja etenemissuunnitelmien luomista varten.",
              "outcomes": [
                "Suoraviivainen API-arvolupaus ja yleisö",
                "Yhteinen kieli tuotteen, suunnittelun ja tekniikan välillä",
                "vankka esitys tai peruste rahoituksen/hyväksynnän saamiseksi."
              ],
              "steps": [
                {
                  "text": "Tutki asiakkaan tai yhteistyökumppanin ongelmaa, jonka oletat voivasi ratkaista APIen avulla. Kartoita sidosryhmät, niiden matkat ja tulokset Customer Journey canvasin avulla.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Määrittele keskeiset entiteetit, niiden ominaisuudet ja suhteet, jotta voidaan luoda yhteinen käsitteellinen ymmärrys eri matkojen ja lopulta APIen välille.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Käytä API Value Proposition Canvas -pohjaa tuettujen liiketoimintatehtävien sekä API-hyödyntäjien ongelmien, hyötyjen ja ominaisuuksien kuvaamiseen. Nämä ohjaavat uusien tai uudelleenkäytettävien API-rajapintojen muotoilua.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Määrittele arvo API-hyödyntäjille ja liiketoiminnalle API Business Model Canvas -pohjan avulla, jotta API-strategiasta tulee visuaalinen, jaettava ja helposti validoitava seuraavalla asemalla.",
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas"
                }
              ],
              "questions": [
                "Tutki asiakkaan tai yhteistyökumppanin ongelmaa, jonka oletat voivasi ratkaista APIen avulla. Kartoita sidosryhmät, niiden matkat ja tulokset Customer Journey canvasin avulla.",
                "Määrittele keskeiset entiteetit, niiden ominaisuudet ja suhteet, jotta voidaan luoda yhteinen käsitteellinen ymmärrys eri matkojen ja lopulta APIen välille.",
                "Käytä API Value Proposition Canvas -pohjaa tuettujen liiketoimintatehtävien sekä API-hyödyntäjien ongelmien, hyötyjen ja ominaisuuksien kuvaamiseen. Nämä ohjaavat uusien tai uudelleenkäytettävien API-rajapintojen muotoilua.",
                "Määrittele arvo API-hyödyntäjille ja liiketoiminnalle API Business Model Canvas -pohjan avulla, jotta API-strategiasta tulee visuaalinen, jaettava ja helposti validoitava seuraavalla asemalla.",
                "Tarjotaan ohjeita ja malleja API-liiketoimintamallien, arvolupausten ja etenemissuunnitelmien luomista varten.",
                "Monet organisaatiot pitävät rajapintoja teknisinä projekteina, eivät tuotteina. Tulos? Hämmentyneitä hyödyntäjiä, heikkoa käyttöönottoa ja turhaa työtä. Tämä asema auttaa määrittelemään APIn tarkoituksen, kohderyhmän ja menestyskriteerit, jotta tiimit voivat tuottaa rajapintoja, jotka ratkaisevat todellisia ongelmia."
              ],
              "criteria": [
                "metrics-feedback-available",
                "business-goals-defined",
                "market-research-done",
                "stakeholder-approval"
              ],
              "criteriaDetails": [
                {
                  "id": "metrics-feedback-available",
                  "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
                  "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity."
                },
                {
                  "id": "business-goals-defined",
                  "title": "Liiketoimintatavoitteet on määritelty.",
                  "description": "Business goals are defined."
                },
                {
                  "id": "market-research-done",
                  "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
                  "description": "Market research identifies API opportunities."
                },
                {
                  "id": "stakeholder-approval",
                  "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
                  "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
                }
              ],
              "baseTitle": "Strategia",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "lead",
                  "responsibilities": [
                    {
                      "resourceId": "apiValuePropositionCanvas",
                      "resourceTitle": "API-arvolupauskanvas",
                      "canvasId": "apiValuePropositionCanvas",
                      "role": "suggested-answer-owner"
                    },
                    {
                      "resourceId": "apiBusinessModelCanvas",
                      "resourceTitle": "API-liiketoimintamallikanvas",
                      "canvasId": "apiBusinessModelCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "customer-specialist",
                  "sourceKey": "customer-specialist",
                  "sourceStakeholderId": "customer-specialist",
                  "title": "Asiakas- tai kumppaniedustaja",
                  "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "customerJourneyCanvas",
                      "resourceTitle": "Asiakaspolkukanvas",
                      "canvasId": "customerJourneyCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "domainCanvas",
                      "resourceTitle": "Toimialuekanvas",
                      "canvasId": "domainCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "customerJourneyCanvas",
                  "slug": "resources/customer-journey-canvas",
                  "title": "Asiakaspolkukanvas",
                  "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 1,
                  "outcomes": [
                    "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                    "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                    "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
                  ],
                  "steps": [
                    "Määrittele asiakaspersoona",
                    "Tunnista matkan käynnistäjät",
                    "Kuvaile matkan loppua",
                    "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                    "Tunnista asiakkaan kipupisteet",
                    "Yhteenveto asiakkaan saamista eduista",
                    "Määritellään tarvittavat syötteet ja tuotokset",
                    "Määrittele API-vuorovaikutukset kullekin vaiheelle"
                  ],
                  "canvasId": "customerJourneyCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "apiValuePropositionCanvas",
                  "slug": "resources/api-value-proposition-canvas",
                  "title": "API-arvolupauskanvas",
                  "description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 2,
                  "outcomes": [
                    "Keskitetty ominaisuuksien kehittäminen",
                    "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
                    "Parempi API-hyödyntäjien tyytyväisyys"
                  ],
                  "steps": [
                    "Listaa käyttäjäpolun tehtävät.",
                    "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
                    "Määritellään haasteisiin vastaavat ominaisuudet",
                    "Ominaisuuksien kartoittaminen API-tuotteisiin"
                  ],
                  "canvasId": "apiValuePropositionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "apiBusinessModelCanvas",
                  "slug": "resources/api-business-model-canvas",
                  "title": "API-liiketoimintamallikanvas",
                  "description": "Arvioi API-liiketoiminnan elinkelpoisuutta kartoittamalla arvolupaus, API-hyödyntäjäsegmentit ja keskeiset resurssit.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3,
                  "outcomes": [
                    "Selkeä liiketoimintastrategia rajapintoja varten",
                    "Keskeisten resurssien ja kumppaneiden tunnistaminen",
                    "API-ominaisuuksien ja liiketoiminnan tavoitteiden yhteensovittaminen"
                  ],
                  "steps": [
                    "Tiivistä APIn arvolupauksen tiivistelmä",
                    "Hyödyntäjäsegmenttien määrittely",
                    "Kehittäjäsuhdestrategioiden määrittäminen",
                    "Kartoita jakelukanavat",
                    "Dokumentoi keskeiset resurssit ja toimet",
                    "Tunnistetaan tärkeimmät kumppanit ja sidosryhmät",
                    "Korosta hyötyjä ja kustannuksia"
                  ],
                  "canvasId": "apiBusinessModelCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "research",
                "roadmap"
              ]
            },
            {
              "index": 2,
              "id": "api-consumer-experience",
              "slug": "method/api-consumer-experience",
              "icon": "deployed-code-account-outline",
              "title": "API-hyödyntäjäkokemus",
              "description": "Varmistetaan, että API on löydettävissä, ymmärrettävissä ja käyttökelpoinen ennen käyttöönottoa ja sen jälkeen.",
              "whyItMatters": "Hyvät aPIt eivät ainoastaan toimi - ne tuntuvat intuitiivisilta. Riippumatta siitä, onko hyödyntäjä sisäinen kehittäjä, ulkoinen kumppani vai tekoälyagentti, heidän kokemuksensa ratkaisee hyväksynnän. Ilman selkeää kokemussuunnitelmaa",
              "applyInWork": "Tarjotaan ohjeita, työkaluja ja palautemekanismeja sisäisten ja ulkoisten kehittäjien ja kumppaneiden kokemusten ymmärtämiseksi, analysoimiseksi ja parantamiseksi.",
              "outcomes": [
                "Tunnista ja priorisoi API-asiakkaat",
                "Määrittele API-kokemuksen matka",
                "Suunnittele sisäänajo, dokumentointi ja palaute",
                "Paranna hyväksyntää aidon empatian ja kehittäjäkokemuksen (DX) avulla."
              ],
              "steps": [
                {
                  "text": "Tarkastele olemassa olevaa API Value Proposition Canvasta API-hyödyntäjän näkökulmasta. Säilytä tuetut liiketoimintatehtävät vakaina ja rikasta tuskaa lievittäviä ja hyötyjä mahdollistavia ominaisuuksia API-hyödyntäjien näkökulmalla, jotta ne voivat ohjata myöhempiä suunnittelupäätöksiä.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Käytä Customer Journey Canvas -pohjaa API-hyödyntäjän matkan kuvaamiseen löytämisestä ja arvioinnista käyttöönottoon, integrointiin, vianmääritykseen ja jatkuvaan käyttöön.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Käytä tuloksena saatua polkua parantaaksesi käyttöönottoa, dokumentaatiota, tukea ja palautesilmukoita API-hyödyntäjille.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                }
              ],
              "questions": [
                "Tarkastele olemassa olevaa API Value Proposition Canvasta API-hyödyntäjän näkökulmasta. Säilytä tuetut liiketoimintatehtävät vakaina ja rikasta tuskaa lievittäviä ja hyötyjä mahdollistavia ominaisuuksia API-hyödyntäjien näkökulmalla, jotta ne voivat ohjata myöhempiä suunnittelupäätöksiä.",
                "Käytä Customer Journey Canvas -pohjaa API-hyödyntäjän matkan kuvaamiseen löytämisestä ja arvioinnista käyttöönottoon, integrointiin, vianmääritykseen ja jatkuvaan käyttöön.",
                "Käytä tuloksena saatua polkua parantaaksesi käyttöönottoa, dokumentaatiota, tukea ja palautesilmukoita API-hyödyntäjille.",
                "Tarjotaan ohjeita, työkaluja ja palautemekanismeja sisäisten ja ulkoisten kehittäjien ja kumppaneiden kokemusten ymmärtämiseksi, analysoimiseksi ja parantamiseksi.",
                "Hyvät aPIt eivät ainoastaan toimi - ne tuntuvat intuitiivisilta. Riippumatta siitä, onko hyödyntäjä sisäinen kehittäjä, ulkoinen kumppani vai tekoälyagentti, heidän kokemuksensa ratkaisee hyväksynnän. Ilman selkeää kokemussuunnitelmaa"
              ],
              "criteria": [
                "api-opportunity-documented",
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-opportunity-documented",
                  "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
                  "description": "Individual API opportunities are identified and documented."
                },
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "apiValuePropositionCanvas",
                  "slug": "resources/api-value-proposition-canvas",
                  "title": "API-arvolupauskanvas",
                  "description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 2,
                  "outcomes": [
                    "Keskitetty ominaisuuksien kehittäminen",
                    "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
                    "Parempi API-hyödyntäjien tyytyväisyys"
                  ],
                  "steps": [
                    "Listaa käyttäjäpolun tehtävät.",
                    "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
                    "Määritellään haasteisiin vastaavat ominaisuudet",
                    "Ominaisuuksien kartoittaminen API-tuotteisiin"
                  ],
                  "canvasId": "apiValuePropositionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "customerJourneyCanvas",
                  "slug": "resources/customer-journey-canvas",
                  "title": "Asiakaspolkukanvas",
                  "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 1,
                  "outcomes": [
                    "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                    "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                    "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
                  ],
                  "steps": [
                    "Määrittele asiakaspersoona",
                    "Tunnista matkan käynnistäjät",
                    "Kuvaile matkan loppua",
                    "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                    "Tunnista asiakkaan kipupisteet",
                    "Yhteenveto asiakkaan saamista eduista",
                    "Määritellään tarvittavat syötteet ja tuotokset",
                    "Määrittele API-vuorovaikutukset kullekin vaiheelle"
                  ],
                  "canvasId": "customerJourneyCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "consumer-feedback"
              ]
            },
            {
              "index": 3,
              "id": "api-platform-architecture",
              "slug": "method/api-platform-architecture",
              "icon": "code-blocks-outline",
              "title": "API-alustan arkkitehtuuri",
              "description": "Varmistetaan skaalautuvuus, uudelleenkäyttö ja hallinta API- ja alustakomponenttien välillä.",
              "whyItMatters": "Kun rajapinnat skaalautuvat eri tiimeille, alustan on mahdollistettava hallinta ja uudelleenkäyttö nopeutta estämättä. Tällä asemalla kerrotaan, miten API-arkkitehtuurit voidaan suunnitella pitkäikäisiksi, turvallisiksi ja tehokkaiksi.",
              "applyInWork": "Perustetaan skaalautuva, turvallinen ja vaatimustenmukainen infrastruktuuri API-toimintoja varten. Annetaan ohjeita arkkitehtuurin parhaista käytännöistä.",
              "outcomes": [
                "Vähennä turhia API-rajapintoja ja vähennä pilvialustakustannuksia.",
                "Johdonmukaisen hallinnon toteuttaminen ilman raskasta ylhäältä alaspäin suuntautuvaa valvontaa",
                "Suunnittelu sisäistä uudelleenkäyttöä ja ulkoista skaalautuvuutta varten"
              ],
              "steps": [
                {
                  "text": "Business Impact Canvas auttaa tunnistamaan ja lieventämään APIn saatavuuteen, tietoturvaan ja toiminnallisuuteen liittyviä riskejä ja tukemaan tietoon perustuvia arkkitehtuuripäätöksiä.",
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas"
                },
                {
                  "text": "Kartoita API-palveluntarjoajien ja hyödyntäjien sääntely-, vaatimustenmukaisuus- ja verkkoasiointipaikat käytettävyyden ja vaatimustenmukaisuuden varmistamiseksi.",
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas"
                },
                {
                  "text": "Capacity Canvas -ohjelmassa sovitetaan yhteen liiketoimintatapahtumien mallit, tulevat kulutustrendit ja tekniset ratkaisut, jotta voidaan varmistaa APIn skaalautuvuus ja suorituskyky. Se tarjoaa kriittisen panoksen skaalautumispäätöksiä ja infrastruktuurin suunnittelua varten.",
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas"
                },
                {
                  "text": "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                }
              ],
              "questions": [
                "Business Impact Canvas auttaa tunnistamaan ja lieventämään APIn saatavuuteen, tietoturvaan ja toiminnallisuuteen liittyviä riskejä ja tukemaan tietoon perustuvia arkkitehtuuripäätöksiä.",
                "Kartoita API-palveluntarjoajien ja hyödyntäjien sääntely-, vaatimustenmukaisuus- ja verkkoasiointipaikat käytettävyyden ja vaatimustenmukaisuuden varmistamiseksi.",
                "Capacity Canvas -ohjelmassa sovitetaan yhteen liiketoimintatapahtumien mallit, tulevat kulutustrendit ja tekniset ratkaisut, jotta voidaan varmistaa APIn skaalautuvuus ja suorituskyky. Se tarjoaa kriittisen panoksen skaalautumispäätöksiä ja infrastruktuurin suunnittelua varten.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Perustetaan skaalautuva, turvallinen ja vaatimustenmukainen infrastruktuuri API-toimintoja varten. Annetaan ohjeita arkkitehtuurin parhaista käytännöistä.",
                "Kun rajapinnat skaalautuvat eri tiimeille, alustan on mahdollistettava hallinta ja uudelleenkäyttö nopeutta estämättä. Tällä asemalla kerrotaan, miten API-arkkitehtuurit voidaan suunnitella pitkäikäisiksi, turvallisiksi ja tehokkaiksi."
              ],
              "criteria": [
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Arkkitehtuuri- ja alustapäätökset",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "architecture",
              "stakeholders": [
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-architect",
                  "sourceKey": "api-architect",
                  "sourceStakeholderId": "api-architect",
                  "title": "API-arkkitehti",
                  "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "locationsCanvas",
                      "resourceTitle": "Sijaintikanvas",
                      "canvasId": "locationsCanvas",
                      "role": "suggested-answer-owner"
                    },
                    {
                      "resourceId": "capacityCanvas",
                      "resourceTitle": "Kapasiteettikanvas",
                      "canvasId": "capacityCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "businessImpactCanvas",
                      "resourceTitle": "Liiketoimintavaikutuskanvas",
                      "canvasId": "businessImpactCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "businessImpactCanvas",
                  "slug": "resources/business-impact-canvas",
                  "title": "Liiketoimintavaikutuskanvas",
                  "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 4,
                  "outcomes": [
                    "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                    "Priorisoidut riskit ja lieventämistoimenpiteet",
                    "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
                  ],
                  "steps": [
                    "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                    "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                    "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                    "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                    "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                    "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
                  ],
                  "canvasId": "businessImpactCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "locationsCanvas",
                  "slug": "resources/location-canvas",
                  "title": "Sijaintikanvas",
                  "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 6,
                  "outcomes": [
                    "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                    "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                    "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
                  ],
                  "steps": [
                    "API-palveluntarjoajien sijainnit kartalla.",
                    "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                    "Tunnista sovellettavat säädökset.",
                    "Dokumentoi, missä tietojen on oltava.",
                    "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                    "Validoi verkon suorituskyky eri alueilla."
                  ],
                  "canvasId": "locationsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capacityCanvas",
                  "slug": "resources/capacity-canvas",
                  "title": "Kapasiteettikanvas",
                  "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 7,
                  "outcomes": [
                    "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                    "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                    "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
                  ],
                  "steps": [
                    "Dokumentoi nykyiset liiketoiminnan volyymit",
                    "Ennustaa tulevia kulutussuuntauksia",
                    "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                    "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                    "Ehdotetaan skaalausstrategioita"
                  ],
                  "canvasId": "capacityCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "api-metrics-and-analytics",
                  "slug": "resources/api-metrics-and-analytics",
                  "title": "API-mittarit ja analytiikka",
                  "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 119,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                    "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                    "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "architecture-decision",
                "documentation",
                "platform-config",
                "metrics"
              ]
            },
            {
              "index": 4,
              "id": "api-design",
              "slug": "method/api-design",
              "icon": "api",
              "title": "API-suunnittelu",
              "description": "Luo API-suunnitelmia, jotka ovat johdonmukaisia, uudelleenkäytettäviä ja perustuvat liiketoiminnallisiin tavoitteisiin sekä yhteisiin standardeihin.",
              "whyItMatters": "APIen suunnittelu ei tarkoita pelkästään päätepisteiden (endpoints) nimeämistä. Hyvä suunnittelu varmistaa, että APIt ovat käyttökelpoisia, johdonmukaisia ja linjassa liiketoiminnallisten ja teknisten tavoitteiden kanssa. Huono suunnittelu johtaa tiukkoihin riippuvuuksiin, heikkoon uudelleenkäytettävyyteen ja kalliiseen uudelleen toteutukseen eri tiimien välillä.",
              "applyInWork": "Tarjoa uudelleenkäytettäviä suunnittelumalleja, yhteisiä standardeja ja validointityökaluja API-määrityksille. Varmista, että suunnittelupäätökset ovat johdonmukaisia, tarkistettuja varhaisessa vaiheessa ja linjassa liiketoiminnallisten tavoitteiden kanssa.",
              "outcomes": [
                "Hyvin dokumentoidut ja johdonmukaiset API-mallit",
                "Uudelleenkäytettävät ja validoidut API-sopimukset",
                "Toimialamallien ja vuorovaikutusmallien mukaiset mallit",
                "Suunnittelun jäljitettävyys liiketoiminnan arvoon"
              ],
              "steps": [
                {
                  "text": "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Määrittele Interaction Canvasin avulla, miten hyödyntäjät ovat vuorovaikutuksessa APIn kanssa, ja Varmistetaan, että se vastaa heidän tarpeitaan ja odotuksiaan.",
                  "resourceId": "interactionCanvas",
                  "resourceTitle": "Vuorovaikutuskanvas",
                  "canvasId": "interactionCanvas"
                },
                {
                  "text": "Sovellat REST-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                  "resourceId": "restCanvas",
                  "resourceTitle": "REST-kanvas",
                  "canvasId": "restCanvas"
                },
                {
                  "text": "Sovellat tapahtumapohjaisia suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                  "resourceId": "eventCanvas",
                  "resourceTitle": "Tapahtumakanvas",
                  "canvasId": "eventCanvas"
                },
                {
                  "text": "Sovellat GraphQL-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                  "resourceId": "graphqlCanvas",
                  "resourceTitle": "GraphQL-kanvas",
                  "canvasId": "graphqlCanvas"
                },
                {
                  "text": "Käytä suunnitteluperiaatteita ja API-tyyliohjetta, jotta suunnittelupäätöksesi ovat linjassa yhteisten sääntöjen kanssa ja mahdollistavat johdonmukaisen auditoinnin ja validoinnin.",
                  "resourceId": "api-design-principles",
                  "resourceTitle": "API-suunnitteluperiaatteet",
                  "canvasId": null
                },
                {
                  "text": "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API-suunnittelu täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "contract-first-design",
                  "resourceTitle": "Sopimuslähtöinen suunnittelu",
                  "canvasId": null
                },
                {
                  "text": "Käytä API-tarkastuslistaa varmistaaksesi, että API-suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien turvallisuus, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille.",
                "Määrittele Interaction Canvasin avulla, miten hyödyntäjät ovat vuorovaikutuksessa APIn kanssa, ja Varmistetaan, että se vastaa heidän tarpeitaan ja odotuksiaan.",
                "Sovellat REST-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                "Sovellat tapahtumapohjaisia suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                "Sovellat GraphQL-suunnittelumalleja luodaksesi johdonmukaisia, uudelleenkäytettäviä API-sopimuksia, jotka validoidaan sidosryhmien kanssa.",
                "Käytä suunnitteluperiaatteita ja API-tyyliohjetta, jotta suunnittelupäätöksesi ovat linjassa yhteisten sääntöjen kanssa ja mahdollistavat johdonmukaisen auditoinnin ja validoinnin.",
                "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API-suunnittelu täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Käytä API-tarkastuslistaa varmistaaksesi, että API-suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien turvallisuus, suorituskyky ja vaatimustenmukaisuus.",
                "Tarjoa uudelleenkäytettäviä suunnittelumalleja, yhteisiä standardeja ja validointityökaluja API-määrityksille. Varmista, että suunnittelupäätökset ovat johdonmukaisia, tarkistettuja varhaisessa vaiheessa ja linjassa liiketoiminnallisten tavoitteiden kanssa.",
                "APIen suunnittelu ei tarkoita pelkästään päätepisteiden (endpoints) nimeämistä. Hyvä suunnittelu varmistaa, että APIt ovat käyttökelpoisia, johdonmukaisia ja linjassa liiketoiminnallisten ja teknisten tavoitteiden kanssa. Huono suunnittelu johtaa tiukkoihin riippuvuuksiin, heikkoon uudelleenkäytettävyyteen ja kalliiseen uudelleen toteutukseen eri tiimien välillä."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Ratkaisu- ja rajapintasuunnittelu",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "design",
              "stakeholders": [
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "interactionCanvas",
                  "slug": "resources/interaction-canvas",
                  "title": "Vuorovaikutuskanvas",
                  "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 9,
                  "outcomes": [
                    "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                    "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                    "Sovitut validointisäännöt ja vuorovaikutusodotukset"
                  ],
                  "steps": [
                    "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                    "Määritä päätepisteet kullekin vuorovaikutukselle",
                    "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                    "Validointisääntöjen ja -rajoitusten määrittäminen",
                    "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
                  ],
                  "canvasId": "interactionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "restCanvas",
                  "slug": "resources/rest-canvas",
                  "title": "REST-kanvas",
                  "description": "Suunnittele rajapinnat RESTful-periaatteiden mukaisesti määrittelemällä resurssit, verbit sekä esimerkkipyynnöt ja -vastaukset.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 10,
                  "outcomes": [
                    "Johdonmukainen RESTful API-design",
                    "Määritellyt resurssit ja niiden vuorovaikutus",
                    "Esimerkkipyynnöt ja -vastaukset selkeyden vuoksi"
                  ],
                  "steps": [
                    "Tunnista APIn tarjoamat keskeiset resurssit",
                    "API-resurssimallin rakenteen määrittäminen",
                    "Määritä HTTP-verbit, joita käytetään vuorovaikutuksessa resurssien kanssa.",
                    "Anna esimerkkipyynnöt ja -vastaukset kullekin verbille"
                  ],
                  "canvasId": "restCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "eventCanvas",
                  "slug": "resources/event-canvas",
                  "title": "Tapahtumakanvas",
                  "description": "Suunnittele tapahtumapohjaiset rajapinnat ja integraatiot määrittelemällä tapahtumat, laukaisimet, skeemat, tuottajat, hyödyntäjät ja käsittelylogiikka.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 12,
                  "outcomes": [
                    "Määritelty tapahtumapohjainen vuorovaikutusmalli",
                    "Selkeytetyt tapahtumat, laukaisimet, skeemat, tuottajat ja hyödyntäjät",
                    "Dokumentoidut käsittely-, kuittaus- ja virhetilanneodotukset"
                  ],
                  "steps": [
                    "Järjestelmän keskeisten tapahtumien tunnistaminen",
                    "Määritä laukaisimet kullekin tapahtumalle",
                    "Kuvaa tapahtumien käsittely, tilamuutokset ja virhetilanteiden käsittely.",
                    "Määritä tuloksena olevat tuotokset tai kuittaukset"
                  ],
                  "canvasId": "eventCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "graphqlCanvas",
                  "slug": "resources/graphql-canvas",
                  "title": "GraphQL-kanvas",
                  "description": "Suunnittele GraphQL APIt määrittelemällä tyypit, kyselyt, mutaatiot ja tilaukset.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 11,
                  "outcomes": [
                    "Strukturoidun GraphQL APIn suunnittelu",
                    "Määritellyt tyypit ja niiden väliset suhteet",
                    "Selkeät kyselyt, mutaatiot ja tilaukset"
                  ],
                  "steps": [
                    "Mitä ongelmia API-hyödyntäjät yrittävät ratkaista? Mitä tietoja he tarvitsevat?",
                    "Määritä GraphQL-tyypit ja niiden attribuutit: mitkä ovat keskeiset tyypit (esim. käyttäjä, tilaus, tuote)?",
                    "Kartoita tyyppien väliset suhteet: Miten tyypit liittyvät toisiinsa sisäkkäisissä kyselyissä?",
                    "Määritä kyselyt tiedonhakua varten",
                    "Määritä tietojen muuttamista koskevat mutaatiot: Millaisilla operaatioilla tietoja muutetaan (esim. luodaan, päivitetään, poistetaan)?",
                    "Reaaliaikaisten päivitysten tilaukset",
                    "Määrittele todennus ja valtuutus: Kuka voi käyttää mitä kenttiä tai tyyppejä?",
                    "Harkitse, onko olemassa sivutus-, suodatus- tai nopeusrajoituksia."
                  ],
                  "canvasId": "graphqlCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-design-principles",
                  "slug": "resources/api-design-principles",
                  "title": "API-suunnitteluperiaatteet",
                  "description": "Tiivis opas APIn käytettävyyteen, löydettävyyteen ja johdonmukaisuuteen, joka perustuu yhteisiin suunnittelusääntöihin ja todellisiin hyödyntäjien tarpeisiin.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 14,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin APIn suunnitteluperiaatteet tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia APIn suunnitteluperiaatteet",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "**Hyödyntäjä ensin -suunnittelu:** Aloita jokainen APIOps-sykli keräämällä käyttäjien tavoitteet ja toimialan ehdot, jotta APIt ratkaisevat todellisia ongelmia.",
                    "**Johdonmukainen nimeäminen ja käyttäytyminen:** Sovelletaan yhteisiä käytäntöjä resursseja, virheitä ja formaatteja varten, jotta rajapinnat olisivat ennakoitavissa.",
                    "**Sopimusperusteinen:** kaappaa rajapinta OpenAPIlla tai AsyncAPIlla ennen koodausta tiimien yhdenmukaistamiseksi ja automaation mahdollistamiseksi.",
                    "**Käytettävyys ja löydettävyys:** Selkeä dokumentaatio ja esimerkit, jotta kehittäjät ymmärtävät nopeasti, miten APIta käytetään.",
                    "**Iteroi turvallisesti:** Kehitä malleja pienissä, versioiduissa vaiheissa, jotta muutokset eivät häiritse nykyisiä API-hyödyntäjiä."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-style-guide.json",
                  "sourceUrl": null,
                  "contentMarkdown": "{\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"hides-raw-backend-data\",\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}",
                  "draft": false
                },
                {
                  "id": "contract-first-design",
                  "slug": "resources/contract-first-design",
                  "title": "Sopimuslähtöinen suunnittelu",
                  "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 146,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                    "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                    "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-contract-example.yaml",
                  "sourceUrl": null,
                  "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
                  "draft": true
                }
              ],
              "evidence": [
                "spec",
                "contract",
                "design-artifact",
                "documentation"
              ]
            },
            {
              "index": 5,
              "id": "api-delivery",
              "slug": "method/api-delivery",
              "icon": "code",
              "title": "API-toteutus",
              "description": "Rakenna, testaa ja julkaise rajapintoja käyttämällä nykyaikaisia jakeluputkia ja parhaita teknisiä käytäntöjä.",
              "whyItMatters": "Parhaatkin API-suunnitelmat epäonnistuvat, jos kehitys on epäjohdonmukaista. Tällä asemalla varmistetaan, että rajapinnat rakennetaan laadukkaasti, testataan perusteellisesti ja otetaan käyttöön luotettavasti, mikä mahdollistaa nopeammat iteraatiot ja suuremman luottamuksen.",
              "applyInWork": "Toimittaa koodauskehyksiä, kirjastoja ja standardeja API-toteutusta varten. CI/CD-putkien, laadunvarmistuskehysten ja käyttöönottoautomaatiotyökalujen toteuttaminen.",
              "outcomes": [
                "Rajapinnat, jotka on toteutettu testattujen kehysten ja mallien avulla.",
                "Luotettavat ja automatisoidut CI/CD-putket",
                "Toiminnallinen ja ei-toiminnallinen testaus integroitu",
                "Turvalliset ja vaatimustenmukaiset kehitysputket"
              ],
              "steps": [
                {
                  "text": "Käytä API-kehityksen parhaita käytäntöjä ohjeena validoidun sopimuksen toteuttamiseen vakiintuneilla kehysrakenteilla ja kirjastoilla varmistaen, että tulos on uudelleenkäytettävä ja ylläpidettävä.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Rakenna API-toteutus validoidun sopimuksen pohjalta käyttäen vakiintuneita kehysrakenteita, kirjastoja ja tiimin standardeja.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                  "resourceId": "api-testing-best-practices",
                  "resourceTitle": "API-testauksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Varmistetaan, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
                  "resourceId": "api-security-best-practices",
                  "resourceTitle": "API-turvallisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä API-kehityksen parhaita käytäntöjä ohjeena validoidun sopimuksen toteuttamiseen vakiintuneilla kehysrakenteilla ja kirjastoilla varmistaen, että tulos on uudelleenkäytettävä ja ylläpidettävä.",
                "Rakenna API-toteutus validoidun sopimuksen pohjalta käyttäen vakiintuneita kehysrakenteita, kirjastoja ja tiimin standardeja.",
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Varmistetaan, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
                "Varmistetaan API-auditoinnin tarkistuslistan avulla, että API täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Toimittaa koodauskehyksiä, kirjastoja ja standardeja API-toteutusta varten. CI/CD-putkien, laadunvarmistuskehysten ja käyttöönottoautomaatiotyökalujen toteuttaminen.",
                "Parhaatkin API-suunnitelmat epäonnistuvat, jos kehitys on epäjohdonmukaista. Tällä asemalla varmistetaan, että rajapinnat rakennetaan laadukkaasti, testataan perusteellisesti ja otetaan käyttöön luotettavasti, mikä mahdollistaa nopeammat iteraatiot ja suuremman luottamuksen."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Toimitus ja operointi",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "delivery",
              "stakeholders": [
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-development-best-practices",
                  "slug": "resources/api-development-best-practices",
                  "title": "API-kehityksen parhaat käytännöt",
                  "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 112,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                    "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
                  "sourceUrl": null,
                  "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
                  "draft": true
                },
                {
                  "id": "api-testing-best-practices",
                  "slug": "resources/api-testing-best-practices",
                  "title": "API-testauksen parhaat käytännöt",
                  "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 133,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                    "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                    "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "apiops-CI-CD-for-apis",
                  "slug": "resources/apiops-CI-CD-for-apis",
                  "title": "APIOps CI/CD rajapinnoille",
                  "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 140,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                    "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                    "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                    "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-security-best-practices",
                  "slug": "resources/api-security-best-practices",
                  "title": "API-turvallisuuden parhaat käytännöt",
                  "description": "Joukko toimivia valvontatoimia rajapintojen suojaamiseksi, mukaan lukien todennus, valtuutus, salaus, nopeuden rajoittaminen ja putkitason vaatimustenmukaisuustarkastukset.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 130,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-turvallisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-turvallisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
                    "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
                    "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "implementation",
                "pipeline-config",
                "test-report",
                "security-report"
              ]
            },
            {
              "index": 6,
              "id": "api-audit",
              "slug": "method/api-audit",
              "icon": "check-box-outline",
              "title": "API-auditointi",
              "description": "Varmista, että APIt täyttävät liiketoiminta-, suunnittelu- ja toimintastandardit ennen julkaisua ja käyttöönottoa.",
              "whyItMatters": "APIt ovat pitkäikäisiä tuotteita, ja niiden on täytettävä laatu-, johdonmukaisuus- ja vaatimustenmukaisuusodotukset. Auditointi yhdistää suunnittelupäätökset, toteutuksen ja toimintavalmiuden määriteltyihin standardeihin, mikä vähentää riskejä ennen käyttöönottoa.",
              "applyInWork": "Luo johdonmukainen auditointiprosessi, joka arvioi APIn valmiutta elinkaaren eri vaiheissa määriteltyjen kriteerien, todisteiden ja standardien avulla. Varmista, että puutteet tunnistetaan varhaisessa vaiheessa ja korjataan ennen julkaisua.",
              "outcomes": [
                "APIt täyttävät sisäiset ja ulkoiset standardit",
                "Selkeä dokumentaatio API-suunnittelusta ja toteutuspäätöksistä",
                "Turvallisuus, suorituskyky ja vaatimustenmukaisuus validoitu",
                "Tuotannossa ilmenevien ongelmien riskin pienentäminen"
              ],
              "steps": [
                {
                  "text": "Suorita tarkastuksia varmistaaksesi, että rajapinnat täyttävät organisatoriset, tekniset ja oikeudelliset standardit ennen julkaisemista.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                },
                {
                  "text": "Käytä tarkistuslistoja, automatisoituja tarkistustyökaluja eli linttereitä ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen.",
                  "resourceId": "api-compliance-best-practices",
                  "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Tee yhteistyötä hallintotiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että rajapinnat ovat valmiita tuotantoon.",
                  "resourceTitle": "",
                  "canvasId": null
                }
              ],
              "questions": [
                "Suorita tarkastuksia varmistaaksesi, että rajapinnat täyttävät organisatoriset, tekniset ja oikeudelliset standardit ennen julkaisemista.",
                "Käytä tarkistuslistoja, automatisoituja tarkistustyökaluja eli linttereitä ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen.",
                "Tee yhteistyötä hallintotiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että rajapinnat ovat valmiita tuotantoon.",
                "Luo johdonmukainen auditointiprosessi, joka arvioi APIn valmiutta elinkaaren eri vaiheissa määriteltyjen kriteerien, todisteiden ja standardien avulla. Varmista, että puutteet tunnistetaan varhaisessa vaiheessa ja korjataan ennen julkaisua.",
                "APIt ovat pitkäikäisiä tuotteita, ja niiden on täytettävä laatu-, johdonmukaisuus- ja vaatimustenmukaisuusodotukset. Auditointi yhdistää suunnittelupäätökset, toteutuksen ja toimintavalmiuden määriteltyihin standardeihin, mikä vähentää riskejä ennen käyttöönottoa."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "design-reflects-business-value",
                "api-description-available",
                "api-consistency",
                "api-contract-tested"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-description-available",
                  "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
                  "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                },
                {
                  "id": "api-contract-tested",
                  "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
                  "description": "The API contract is tested and meets functional and non-functional requirements."
                }
              ],
              "baseTitle": "Laadun ja valmiuden varmistus",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "governance-specialist",
                  "sourceKey": "governance-specialist",
                  "sourceStakeholderId": "governance-specialist",
                  "title": "API-hallinnan omistaja",
                  "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-audit-checklist",
                  "slug": "resources/api-audit-checklist",
                  "title": "API-auditoinnin tarkistuslista",
                  "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
                  "category": "checklist",
                  "icon": "check-box-outline",
                  "order": 13,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                    "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                    "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-audit-checklist.json",
                  "sourceUrl": null,
                  "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
                  "draft": false
                },
                {
                  "id": "api-compliance-best-practices",
                  "slug": "resources/api-compliance-best-practices",
                  "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 104,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                    "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                    "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "audit-report",
                "compliance-report",
                "security-report",
                "test-report"
              ]
            },
            {
              "index": 7,
              "id": "api-publishing",
              "slug": "method/api-publishing",
              "icon": "deployed-code-outline",
              "title": "API-julkaisu",
              "description": "Esittele APIt turvallisesti ja selkeästi oikealle yleisölle oikean dokumentaation ja prosessien avulla.",
              "whyItMatters": "Julkaiseminen on muutakin kuin käyttöönottoa - kyse on löydettävyydestä, saatavuudesta ja tuesta. Jos rajapintoja ei julkaista oikein, niitä ei käytetä, käytetä uudelleen tai suojata tehokkaasti.",
              "applyInWork": "Mahdollistetaan APIen julkaiseminen asiaankuuluvassa ympäristössä ja selkeät rekisteröinti- ja käyttöoikeusmekanismit (esim. API-avaimet, OAuth, tilaussuunnitelmat) API-hyödyntäjäsegmenttien sekä turvallisuus- ja vaatimustenmukaisuusvaatimusten mukaan.",
              "outcomes": [
                "APIt julkaistaan oikeassa ympäristössä (yksityinen, kumppani, julkinen).",
                "Selkeät API-käyttöönotto- ja rekisteröintiprosessit",
                "Dokumentaatio, turvallisuusmallit ja -käytännöt saatavilla",
                "APIt valmiina skaalautumiseen ja hallintaan"
              ],
              "steps": [
                {
                  "text": "Julkaise rajapinnat asianmukaisiin yhdyskäytäviin ja ympäristöihin, jotta ne ovat uudelleenkäytettävissä useille API-hyödyntäjille.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaa, mukaan lukien sisäänkirjautumisprosessit ja rekisteröinti.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Varmista, että turvamallit, yhdyskäytävän kokoonpano ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Julkaise rajapinnat asianmukaisiin yhdyskäytäviin ja ympäristöihin, jotta ne ovat uudelleenkäytettävissä useille API-hyödyntäjille.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaa, mukaan lukien sisäänkirjautumisprosessit ja rekisteröinti.",
                "Varmista, että turvamallit, yhdyskäytävän kokoonpano ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                "Mahdollistetaan APIen julkaiseminen asiaankuuluvassa ympäristössä ja selkeät rekisteröinti- ja käyttöoikeusmekanismit (esim. API-avaimet, OAuth, tilaussuunnitelmat) API-hyödyntäjäsegmenttien sekä turvallisuus- ja vaatimustenmukaisuusvaatimusten mukaan.",
                "Julkaiseminen on muutakin kuin käyttöönottoa - kyse on löydettävyydestä, saatavuudesta ja tuesta. Jos rajapintoja ei julkaista oikein, niitä ei käytetä, käytetä uudelleen tai suojata tehokkaasti."
              ],
              "criteria": [
                "audit-passed",
                "audit-reports-shared",
                "api-ready-for-publishing",
                "api-documentation-ready"
              ],
              "criteriaDetails": [
                {
                  "id": "audit-passed",
                  "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
                  "description": "The API passes compliance, security, and audit checks."
                },
                {
                  "id": "audit-reports-shared",
                  "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
                  "description": "Audit findings and remediation decisions are shared with the relevant stakeholders."
                },
                {
                  "id": "api-ready-for-publishing",
                  "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
                  "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
                },
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                }
              ],
              "baseTitle": "Julkaisu ja käyttöönoton mahdollistaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "apiops-CI-CD-for-apis",
                  "slug": "resources/apiops-CI-CD-for-apis",
                  "title": "APIOps CI/CD rajapinnoille",
                  "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 140,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                    "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                    "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                    "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-audit-checklist",
                  "slug": "resources/api-audit-checklist",
                  "title": "API-auditoinnin tarkistuslista",
                  "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
                  "category": "checklist",
                  "icon": "check-box-outline",
                  "order": 13,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                    "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                    "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-audit-checklist.json",
                  "sourceUrl": null,
                  "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
                  "draft": false
                }
              ],
              "evidence": [
                "gateway-config",
                "developer-portal",
                "documentation",
                "release-record"
              ]
            },
            {
              "index": 8,
              "id": "monitoring-and-improving",
              "slug": "method/monitoring-and-improving",
              "icon": "analytics-outline",
              "title": "APIen seuranta ja parantaminen",
              "description": "Käytä mittareita ja palautetta API-suorituskyvyn seuraamiseen ja jatkuvan parantamisen edistämiseen.",
              "whyItMatters": "API-kehitys ei lopu käynnistykseen. Ilman seurantaa tiimit eivät voi parantaa käyttöönottoa, suorituskykyä tai ROI",
              "applyInWork": "Ota käyttöön analytiikkakehykset suorituskyvyn ja sitoutumisen seuraamiseksi. Kehitetään palautesilmukoita, analytiikkatyökaluja ja sitouttamisstrategioita API-rajapintoja varten.",
              "outcomes": [
                "Suorituskyvyn ja käytön mittarit määritellään ja niitä seurataan.",
                "Kehittäjien palautekierrokset käytössä",
                "Jatkuvasti tunnistetut ja käsitellyt ongelmat",
                "APIn iterointi hyödyntäjien tarpeiden mukaisesti"
              ],
              "steps": [
                {
                  "text": "Seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                },
                {
                  "text": "Analysoi APIn käyttömittareita ja ota hyödyntäjien palaute huomioon API-iteraatioissa.",
                  "resourceId": "api-community-engagement-strategies",
                  "resourceTitle": "API-yhteisön sitouttamisstrategiat",
                  "canvasId": null
                },
                {
                  "text": "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                }
              ],
              "questions": [
                "Seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Analysoi APIn käyttömittareita ja ota hyödyntäjien palaute huomioon API-iteraatioissa.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                "Ota käyttöön analytiikkakehykset suorituskyvyn ja sitoutumisen seuraamiseksi. Kehitetään palautesilmukoita, analytiikkatyökaluja ja sitouttamisstrategioita API-rajapintoja varten.",
                "API-kehitys ei lopu käynnistykseen. Ilman seurantaa tiimit eivät voi parantaa käyttöönottoa, suorituskykyä tai ROI"
              ],
              "criteria": [
                "api-documentation-ready",
                "consumer-support-ready",
                "legal-compliance-clear"
              ],
              "criteriaDetails": [
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                },
                {
                  "id": "consumer-support-ready",
                  "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
                  "description": "Registration, support, and communication processes are ready for API consumers."
                },
                {
                  "id": "legal-compliance-clear",
                  "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
                  "description": "Legal, privacy, and compliance requirements for publishing are defined and understood."
                }
              ],
              "baseTitle": "Seuranta ja parantaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "improving",
              "stakeholders": [
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-metrics-and-analytics",
                  "slug": "resources/api-metrics-and-analytics",
                  "title": "API-mittarit ja analytiikka",
                  "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 119,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                    "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                    "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-community-engagement-strategies",
                  "slug": "resources/api-community-engagement-strategies",
                  "title": "API-yhteisön sitouttamisstrategiat",
                  "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 103,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                    "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                    "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                    "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                    "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "metrics",
                "consumer-feedback",
                "incident-report",
                "roadmap"
              ]
            }
          ]
        },
        {
          "id": "integration-productization-cycle",
          "slug": "integration-productization-cycle",
          "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
          "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa.",
          "purpose": "Ohjaa uudelleenkaytettavan integraatiokyvykkyyden suunnittelua ennen API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutustavan valintaa.",
          "audiences": [],
          "audienceStakeholders": [
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "capabilityValuePropositionCanvas",
                  "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                  "canvasId": "capabilityValuePropositionCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "capabilityBusinessModelCanvas",
                  "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                  "canvasId": "capabilityBusinessModelCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "consumerExperienceRequirementsCanvas",
                  "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "governance-specialist",
              "sourceKey": "governance-specialist",
              "sourceStakeholderId": "governance-specialist",
              "title": "API-hallinnan omistaja",
              "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "partner-specialist",
              "sourceKey": "partner-specialist",
              "sourceStakeholderId": "partner-specialist",
              "title": "Kumppani- ja toimittajavastaava",
              "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
              "involvement": "core",
              "responsibilities": []
            }
          ],
          "entryCriteria": [
            "business-goals-defined",
            "api-opportunity-documented"
          ],
          "exitCriteria": [
            "architecture-patterns-validated",
            "api-description-available",
            "audit-passed"
          ],
          "entryCriteriaDetails": [
            {
              "id": "business-goals-defined",
              "title": "Liiketoimintatavoitteet on määritelty.",
              "description": "Business goals are defined."
            },
            {
              "id": "api-opportunity-documented",
              "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
              "description": "Individual API opportunities are identified and documented."
            }
          ],
          "exitCriteriaDetails": [
            {
              "id": "architecture-patterns-validated",
              "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
              "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
            },
            {
              "id": "api-description-available",
              "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
              "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
            },
            {
              "id": "audit-passed",
              "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
              "description": "The API passes compliance, security, and audit checks."
            }
          ],
          "questionnaireResources": [
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Integraatiokyvykkyyden strategia",
              "resourceId": "capabilityValuePropositionCanvas",
              "resourceTitle": "Kyvykkyyden arvolupauskanvas",
              "canvasId": "capabilityValuePropositionCanvas",
              "suggestedAnswerOwner": {
                "id": "capability-owner",
                "sourceKey": "capability-owner",
                "sourceStakeholderId": "capability-owner",
                "title": "Kyvykkyyden omistaja",
                "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "capabilityValuePropositionCanvas",
                    "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                    "canvasId": "capabilityValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capabilityBusinessModelCanvas",
                    "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                    "canvasId": "capabilityBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Integraatiokyvykkyyden strategia",
              "resourceId": "capabilityBusinessModelCanvas",
              "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
              "canvasId": "capabilityBusinessModelCanvas",
              "suggestedAnswerOwner": {
                "id": "capability-owner",
                "sourceKey": "capability-owner",
                "sourceStakeholderId": "capability-owner",
                "title": "Kyvykkyyden omistaja",
                "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "capabilityValuePropositionCanvas",
                    "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                    "canvasId": "capabilityValuePropositionCanvas",
                    "role": "suggested-answer-owner"
                  },
                  {
                    "resourceId": "capabilityBusinessModelCanvas",
                    "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                    "canvasId": "capabilityBusinessModelCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Integraatiokyvykkyyden strategia",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas",
              "suggestedAnswerOwner": {
                "id": "business-owner",
                "sourceKey": "business-owner",
                "sourceStakeholderId": "business-owner",
                "title": "Liiketoiminnan omistaja",
                "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "customerJourneyCanvas",
                    "resourceTitle": "Asiakaspolkukanvas",
                    "canvasId": "customerJourneyCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Integraatiokyvykkyyden strategia",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas",
              "suggestedAnswerOwner": {
                "id": "domain-specialist",
                "sourceKey": "domain-specialist",
                "sourceStakeholderId": "domain-specialist",
                "title": "Liiketoiminta-asiantuntija",
                "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "domainCanvas",
                    "resourceTitle": "Toimialuekanvas",
                    "canvasId": "domainCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-consumer-experience",
              "stationTitle": "Integraation hyödyntäjien vaatimukset ja käyttöönotto",
              "resourceId": "consumerExperienceRequirementsCanvas",
              "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "canvasId": "consumerExperienceRequirementsCanvas",
              "suggestedAnswerOwner": {
                "id": "api-consumer-specialist",
                "sourceKey": "api-consumer-specialist",
                "sourceStakeholderId": "api-consumer-specialist",
                "title": "API-hyödyntäjien edustaja",
                "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "consumerExperienceRequirementsCanvas",
                    "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                    "canvasId": "consumerExperienceRequirementsCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Integraatioarkkitehtuuri ja alustapaatokset",
              "resourceId": "locationsCanvas",
              "resourceTitle": "Sijaintikanvas",
              "canvasId": "locationsCanvas",
              "suggestedAnswerOwner": {
                "id": "platform-architect",
                "sourceKey": "platform-architect",
                "sourceStakeholderId": "platform-architect",
                "title": "Alusta-arkkitehti",
                "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                "involvement": "lead",
                "responsibilities": [
                  {
                    "resourceId": "locationsCanvas",
                    "resourceTitle": "Sijaintikanvas",
                    "canvasId": "locationsCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Integraatioarkkitehtuuri ja alustapaatokset",
              "resourceId": "capacityCanvas",
              "resourceTitle": "Kapasiteettikanvas",
              "canvasId": "capacityCanvas",
              "suggestedAnswerOwner": {
                "id": "platform-owner",
                "sourceKey": "platform-owner",
                "sourceStakeholderId": "platform-owner",
                "title": "Alustan omistaja",
                "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "capacityCanvas",
                    "resourceTitle": "Kapasiteettikanvas",
                    "canvasId": "capacityCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-platform-architecture",
              "stationTitle": "Integraatioarkkitehtuuri ja alustapaatokset",
              "resourceId": "businessImpactCanvas",
              "resourceTitle": "Liiketoimintavaikutuskanvas",
              "canvasId": "businessImpactCanvas",
              "suggestedAnswerOwner": {
                "id": "integration-architect",
                "sourceKey": "integration-architect",
                "sourceStakeholderId": "integration-architect",
                "title": "Integraatioarkkitehti",
                "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "businessImpactCanvas",
                    "resourceTitle": "Liiketoimintavaikutuskanvas",
                    "canvasId": "businessImpactCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            }
          ],
          "stations": [
            {
              "index": 1,
              "id": "api-product-strategy",
              "slug": "method/api-product-strategy",
              "icon": "strategy-outline",
              "title": "Integraatiokyvykkyyden strategia",
              "description": "Kuvaa uudelleenkaytettava integraatiokyvykkyys, liiketoimintatarve, omistajuus ja odotettu uudelleenkaytto ennen toteutustavan valintaa.",
              "whyItMatters": "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa.",
              "applyInWork": "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
              "outcomes": [
                "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
                "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
                "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa"
              ],
              "steps": [
                {
                  "text": "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas"
                }
              ],
              "questions": [
                "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
                "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
              ],
              "criteria": [
                "metrics-feedback-available",
                "business-goals-defined",
                "market-research-done",
                "stakeholder-approval"
              ],
              "criteriaDetails": [
                {
                  "id": "metrics-feedback-available",
                  "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
                  "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity."
                },
                {
                  "id": "business-goals-defined",
                  "title": "Liiketoimintatavoitteet on määritelty.",
                  "description": "Business goals are defined."
                },
                {
                  "id": "market-research-done",
                  "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
                  "description": "Market research identifies API opportunities."
                },
                {
                  "id": "stakeholder-approval",
                  "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
                  "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
                }
              ],
              "baseTitle": "Strategia",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "capability-owner",
                  "sourceKey": "capability-owner",
                  "sourceStakeholderId": "capability-owner",
                  "title": "Kyvykkyyden omistaja",
                  "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "capabilityValuePropositionCanvas",
                      "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                      "canvasId": "capabilityValuePropositionCanvas",
                      "role": "suggested-answer-owner"
                    },
                    {
                      "resourceId": "capabilityBusinessModelCanvas",
                      "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                      "canvasId": "capabilityBusinessModelCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "customerJourneyCanvas",
                      "resourceTitle": "Asiakaspolkukanvas",
                      "canvasId": "customerJourneyCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "domainCanvas",
                      "resourceTitle": "Toimialuekanvas",
                      "canvasId": "domainCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "api-product-owner",
                  "sourceKey": "api-product-owner",
                  "sourceStakeholderId": "api-product-owner",
                  "title": "API-tuoteomistaja",
                  "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "partner-specialist",
                  "sourceKey": "partner-specialist",
                  "sourceStakeholderId": "partner-specialist",
                  "title": "Kumppani- ja toimittajavastaava",
                  "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "customerJourneyCanvas",
                  "slug": "resources/customer-journey-canvas",
                  "title": "Asiakaspolkukanvas",
                  "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 1,
                  "outcomes": [
                    "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                    "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                    "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
                  ],
                  "steps": [
                    "Määrittele asiakaspersoona",
                    "Tunnista matkan käynnistäjät",
                    "Kuvaile matkan loppua",
                    "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                    "Tunnista asiakkaan kipupisteet",
                    "Yhteenveto asiakkaan saamista eduista",
                    "Määritellään tarvittavat syötteet ja tuotokset",
                    "Määrittele API-vuorovaikutukset kullekin vaiheelle"
                  ],
                  "canvasId": "customerJourneyCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capabilityValuePropositionCanvas",
                  "slug": "resources/capability-value-proposition-canvas",
                  "title": "Kyvykkyyden arvolupauskanvas",
                  "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 2.1,
                  "outcomes": [
                    "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                    "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                    "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
                  ],
                  "steps": [
                    "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                    "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
                  ],
                  "canvasId": "capabilityValuePropositionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capabilityBusinessModelCanvas",
                  "slug": "resources/capability-business-model-canvas",
                  "title": "Kyvykkyyden liiketoimintamallikanvas",
                  "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3.1,
                  "outcomes": [
                    "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                    "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                    "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
                  ],
                  "steps": [
                    "Tiivistä kyvykkyyden arvolupaus.",
                    "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                    "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                    "Kuvaa kustannukset ja hyödyt.",
                    "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                    "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
                  ],
                  "canvasId": "capabilityBusinessModelCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "research",
                "roadmap"
              ]
            },
            {
              "index": 2,
              "id": "api-consumer-experience",
              "slug": "method/api-consumer-experience",
              "icon": "deployed-code-account-outline",
              "title": "Integraation hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa integraation hyödyntäjät, tuottajan vastuut, käyttöönoton tarpeet, palveluodotukset ja operatiiviset rajoitteet.",
              "whyItMatters": "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
              "applyInWork": "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
              "outcomes": [
                "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
                "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
                "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
                "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta"
              ],
              "steps": [
                {
                  "text": "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
                "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista."
              ],
              "criteria": [
                "api-opportunity-documented",
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-opportunity-documented",
                  "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
                  "description": "Individual API opportunities are identified and documented."
                },
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "lead",
                  "responsibilities": [
                    {
                      "resourceId": "consumerExperienceRequirementsCanvas",
                      "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                      "canvasId": "consumerExperienceRequirementsCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "customer-specialist",
                  "sourceKey": "customer-specialist",
                  "sourceStakeholderId": "customer-specialist",
                  "title": "Asiakas- tai kumppaniedustaja",
                  "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "partner-specialist",
                  "sourceKey": "partner-specialist",
                  "sourceStakeholderId": "partner-specialist",
                  "title": "Kumppani- ja toimittajavastaava",
                  "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "consumerExperienceRequirementsCanvas",
                  "slug": "resources/consumer-experience-requirements-canvas",
                  "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3.2,
                  "outcomes": [
                    "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                    "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                    "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
                  ],
                  "steps": [
                    "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                    "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                    "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                    "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
                  ],
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "consumer-feedback"
              ]
            },
            {
              "index": 3,
              "id": "api-platform-architecture",
              "slug": "method/api-platform-architecture",
              "icon": "code-blocks-outline",
              "title": "Integraatioarkkitehtuuri ja alustapaatokset",
              "description": "Valitse integraatioarkkitehtuuri, toteutustapa ja alustakyvykkyydet huomioiden rajoitteet ja hallintamalli.",
              "whyItMatters": "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista.",
              "applyInWork": "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
              "outcomes": [
                "Perusteltu arkkitehtuurivalinta",
                "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
                "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle"
              ],
              "steps": [
                {
                  "text": "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas"
                },
                {
                  "text": "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas"
                },
                {
                  "text": "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas"
                },
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
                "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
              ],
              "criteria": [
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Arkkitehtuuri- ja alustapäätökset",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "architecture",
              "stakeholders": [
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "lead",
                  "responsibilities": [
                    {
                      "resourceId": "locationsCanvas",
                      "resourceTitle": "Sijaintikanvas",
                      "canvasId": "locationsCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "capacityCanvas",
                      "resourceTitle": "Kapasiteettikanvas",
                      "canvasId": "capacityCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "businessImpactCanvas",
                      "resourceTitle": "Liiketoimintavaikutuskanvas",
                      "canvasId": "businessImpactCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-architect",
                  "sourceKey": "api-architect",
                  "sourceStakeholderId": "api-architect",
                  "title": "API-arkkitehti",
                  "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "businessImpactCanvas",
                  "slug": "resources/business-impact-canvas",
                  "title": "Liiketoimintavaikutuskanvas",
                  "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 4,
                  "outcomes": [
                    "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                    "Priorisoidut riskit ja lieventämistoimenpiteet",
                    "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
                  ],
                  "steps": [
                    "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                    "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                    "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                    "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                    "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                    "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
                  ],
                  "canvasId": "businessImpactCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "locationsCanvas",
                  "slug": "resources/location-canvas",
                  "title": "Sijaintikanvas",
                  "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 6,
                  "outcomes": [
                    "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                    "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                    "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
                  ],
                  "steps": [
                    "API-palveluntarjoajien sijainnit kartalla.",
                    "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                    "Tunnista sovellettavat säädökset.",
                    "Dokumentoi, missä tietojen on oltava.",
                    "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                    "Validoi verkon suorituskyky eri alueilla."
                  ],
                  "canvasId": "locationsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capacityCanvas",
                  "slug": "resources/capacity-canvas",
                  "title": "Kapasiteettikanvas",
                  "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 7,
                  "outcomes": [
                    "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                    "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                    "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
                  ],
                  "steps": [
                    "Dokumentoi nykyiset liiketoiminnan volyymit",
                    "Ennustaa tulevia kulutussuuntauksia",
                    "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                    "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                    "Ehdotetaan skaalausstrategioita"
                  ],
                  "canvasId": "capacityCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "partner-integration-guidelines",
                  "slug": "resources/partner-integration-guidelines",
                  "title": "Kumppanien integrointiohjeet",
                  "description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 164,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
                    "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "architecture-decision",
                "documentation",
                "platform-config",
                "metrics"
              ]
            },
            {
              "index": 4,
              "id": "api-design",
              "slug": "method/api-design",
              "icon": "api",
              "title": "Integraation ratkaisusuunnittelu",
              "description": "Suunnittele rajapintasopimus, skeemat, tietosisallot ja vuorovaikutusmallit valitulle integraatiotavalle.",
              "whyItMatters": "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi.",
              "applyInWork": "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
              "outcomes": [
                "Validoitu rajapintasopimus valitulle toteutustavalle",
                "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
                "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
                "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                  "resourceId": "interactionCanvas",
                  "resourceTitle": "Vuorovaikutuskanvas",
                  "canvasId": "interactionCanvas"
                },
                {
                  "text": "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                  "resourceId": "restCanvas",
                  "resourceTitle": "REST-kanvas",
                  "canvasId": "restCanvas"
                },
                {
                  "text": "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                  "resourceId": "eventCanvas",
                  "resourceTitle": "Tapahtumakanvas",
                  "canvasId": "eventCanvas"
                },
                {
                  "text": "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                  "resourceId": "graphqlCanvas",
                  "resourceTitle": "GraphQL-kanvas",
                  "canvasId": "graphqlCanvas"
                },
                {
                  "text": "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                  "resourceId": "api-design-principles",
                  "resourceTitle": "API-suunnitteluperiaatteet",
                  "canvasId": null
                },
                {
                  "text": "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                  "resourceId": "contract-first-design",
                  "resourceTitle": "Sopimuslähtöinen suunnittelu",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
                "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Ratkaisu- ja rajapintasuunnittelu",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "design",
              "stakeholders": [
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "interactionCanvas",
                  "slug": "resources/interaction-canvas",
                  "title": "Vuorovaikutuskanvas",
                  "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 9,
                  "outcomes": [
                    "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                    "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                    "Sovitut validointisäännöt ja vuorovaikutusodotukset"
                  ],
                  "steps": [
                    "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                    "Määritä päätepisteet kullekin vuorovaikutukselle",
                    "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                    "Validointisääntöjen ja -rajoitusten määrittäminen",
                    "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
                  ],
                  "canvasId": "interactionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "integration-style-selection-guide",
                  "slug": "resources/integration-style-selection-guide",
                  "title": "Integraatiotavan valintaopas",
                  "description": "Ohje API-, tapahtuma-, tiedosto-, tietovirta-, datatuote-, suora integraatio- tai hybriditoteutustavan valintaan vaatimusten ja rajoitteiden perusteella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 180,
                  "outcomes": [
                    "Perusteltu integraation toteutustapa",
                    "Integraatiotapojen keskeiset vaihtoehdot ja kompromissit on dokumentoitu.",
                    "Valittu tapa on jäljitettävissä hyödyntäjä-, alusta-, data- ja operatiivisiin vaatimuksiin."
                  ],
                  "steps": [
                    "Vertaa mahdollisia integraatiotapoja viiveen, volyymin, kytkeytymisen, datan omistajuuden, ajantasaisuuden, hallinnan ja operoitavuuden tarpeisiin.",
                    "Tunnista, milloin API, tapahtuma, tiedosto, tietovirta, datatuote, suora integraatio tai hybridiratkaisu sopii käyttötapaukseen.",
                    "Dokumentoi valitun toteutustavan rajoitteet, riskit ja alustariippuvuudet.",
                    "Kirjaa, miksi hylättyjä vaihtoehtoja ei valittu."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "restCanvas",
                  "slug": "resources/rest-canvas",
                  "title": "REST-kanvas",
                  "description": "Suunnittele rajapinnat RESTful-periaatteiden mukaisesti määrittelemällä resurssit, verbit sekä esimerkkipyynnöt ja -vastaukset.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 10,
                  "outcomes": [
                    "Johdonmukainen RESTful API-design",
                    "Määritellyt resurssit ja niiden vuorovaikutus",
                    "Esimerkkipyynnöt ja -vastaukset selkeyden vuoksi"
                  ],
                  "steps": [
                    "Tunnista APIn tarjoamat keskeiset resurssit",
                    "API-resurssimallin rakenteen määrittäminen",
                    "Määritä HTTP-verbit, joita käytetään vuorovaikutuksessa resurssien kanssa.",
                    "Anna esimerkkipyynnöt ja -vastaukset kullekin verbille"
                  ],
                  "canvasId": "restCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "eventCanvas",
                  "slug": "resources/event-canvas",
                  "title": "Tapahtumakanvas",
                  "description": "Suunnittele tapahtumapohjaiset rajapinnat ja integraatiot määrittelemällä tapahtumat, laukaisimet, skeemat, tuottajat, hyödyntäjät ja käsittelylogiikka.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 12,
                  "outcomes": [
                    "Määritelty tapahtumapohjainen vuorovaikutusmalli",
                    "Selkeytetyt tapahtumat, laukaisimet, skeemat, tuottajat ja hyödyntäjät",
                    "Dokumentoidut käsittely-, kuittaus- ja virhetilanneodotukset"
                  ],
                  "steps": [
                    "Järjestelmän keskeisten tapahtumien tunnistaminen",
                    "Määritä laukaisimet kullekin tapahtumalle",
                    "Kuvaa tapahtumien käsittely, tilamuutokset ja virhetilanteiden käsittely.",
                    "Määritä tuloksena olevat tuotokset tai kuittaukset"
                  ],
                  "canvasId": "eventCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "graphqlCanvas",
                  "slug": "resources/graphql-canvas",
                  "title": "GraphQL-kanvas",
                  "description": "Suunnittele GraphQL APIt määrittelemällä tyypit, kyselyt, mutaatiot ja tilaukset.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 11,
                  "outcomes": [
                    "Strukturoidun GraphQL APIn suunnittelu",
                    "Määritellyt tyypit ja niiden väliset suhteet",
                    "Selkeät kyselyt, mutaatiot ja tilaukset"
                  ],
                  "steps": [
                    "Mitä ongelmia API-hyödyntäjät yrittävät ratkaista? Mitä tietoja he tarvitsevat?",
                    "Määritä GraphQL-tyypit ja niiden attribuutit: mitkä ovat keskeiset tyypit (esim. käyttäjä, tilaus, tuote)?",
                    "Kartoita tyyppien väliset suhteet: Miten tyypit liittyvät toisiinsa sisäkkäisissä kyselyissä?",
                    "Määritä kyselyt tiedonhakua varten",
                    "Määritä tietojen muuttamista koskevat mutaatiot: Millaisilla operaatioilla tietoja muutetaan (esim. luodaan, päivitetään, poistetaan)?",
                    "Reaaliaikaisten päivitysten tilaukset",
                    "Määrittele todennus ja valtuutus: Kuka voi käyttää mitä kenttiä tai tyyppejä?",
                    "Harkitse, onko olemassa sivutus-, suodatus- tai nopeusrajoituksia."
                  ],
                  "canvasId": "graphqlCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "contract-first-design",
                  "slug": "resources/contract-first-design",
                  "title": "Sopimuslähtöinen suunnittelu",
                  "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 146,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                    "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                    "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-contract-example.yaml",
                  "sourceUrl": null,
                  "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
                  "draft": true
                }
              ],
              "evidence": [
                "spec",
                "contract",
                "design-artifact",
                "documentation"
              ]
            },
            {
              "index": 5,
              "id": "api-delivery",
              "slug": "method/api-delivery",
              "icon": "code",
              "title": "Integraation toimitus ja operointi",
              "description": "Rakenna, testaa, automatisoi, julkaise ja operoi integraatiokyvykkyyttä sen valitulla toteutustavalla ja validoidulla rajapintasopimuksella.",
              "whyItMatters": "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa.",
              "applyInWork": "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
              "outcomes": [
                "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
                "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
                "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
                "Jäljitettävät toimitus- ja julkaisukontrollit"
              ],
              "steps": [
                {
                  "text": "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                  "resourceId": "api-testing-best-practices",
                  "resourceTitle": "API-testauksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                  "resourceId": "api-security-best-practices",
                  "resourceTitle": "API-turvallisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
                "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Toimitus ja operointi",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "delivery",
              "stakeholders": [
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "partner-specialist",
                  "sourceKey": "partner-specialist",
                  "sourceStakeholderId": "partner-specialist",
                  "title": "Kumppani- ja toimittajavastaava",
                  "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-development-best-practices",
                  "slug": "resources/api-development-best-practices",
                  "title": "API-kehityksen parhaat käytännöt",
                  "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 112,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                    "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
                  "sourceUrl": null,
                  "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
                  "draft": true
                },
                {
                  "id": "api-testing-best-practices",
                  "slug": "resources/api-testing-best-practices",
                  "title": "API-testauksen parhaat käytännöt",
                  "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 133,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                    "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                    "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "apiops-CI-CD-for-apis",
                  "slug": "resources/apiops-CI-CD-for-apis",
                  "title": "APIOps CI/CD rajapinnoille",
                  "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 140,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                    "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                    "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                    "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-security-best-practices",
                  "slug": "resources/api-security-best-practices",
                  "title": "API-turvallisuuden parhaat käytännöt",
                  "description": "Joukko toimivia valvontatoimia rajapintojen suojaamiseksi, mukaan lukien todennus, valtuutus, salaus, nopeuden rajoittaminen ja putkitason vaatimustenmukaisuustarkastukset.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 130,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-turvallisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-turvallisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
                    "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
                    "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "partner-integration-guidelines",
                  "slug": "resources/partner-integration-guidelines",
                  "title": "Kumppanien integrointiohjeet",
                  "description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 164,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
                    "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "implementation",
                "pipeline-config",
                "test-report",
                "security-report"
              ]
            },
            {
              "index": 6,
              "id": "api-audit",
              "slug": "method/api-audit",
              "icon": "check-box-outline",
              "title": "Integraation valmiuden varmistus",
              "description": "Varmista integraation valmius, hallintamalli, laatu, tietoturva, vaatimustenmukaisuus ja operatiivinen näyttö ennen julkaisua.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä.",
              "applyInWork": "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
              "outcomes": [
                "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
                "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
                "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
                "Pienempi riski tuotannon ongelmille"
              ],
              "steps": [
                {
                  "text": "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                },
                {
                  "text": "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                  "resourceId": "api-compliance-best-practices",
                  "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                  "resourceTitle": "",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
                "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "design-reflects-business-value",
                "api-description-available",
                "api-consistency",
                "api-contract-tested"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-description-available",
                  "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
                  "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                },
                {
                  "id": "api-contract-tested",
                  "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
                  "description": "The API contract is tested and meets functional and non-functional requirements."
                }
              ],
              "baseTitle": "Laadun ja valmiuden varmistus",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "governance-specialist",
                  "sourceKey": "governance-specialist",
                  "sourceStakeholderId": "governance-specialist",
                  "title": "API-hallinnan omistaja",
                  "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-audit-checklist",
                  "slug": "resources/api-audit-checklist",
                  "title": "API-auditoinnin tarkistuslista",
                  "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
                  "category": "checklist",
                  "icon": "check-box-outline",
                  "order": 13,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                    "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                    "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
                  ],
                  "canvasId": null,
                  "sourcePath": "src/snippets/api-audit-checklist.json",
                  "sourceUrl": null,
                  "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
                  "draft": false
                },
                {
                  "id": "api-compliance-best-practices",
                  "slug": "resources/api-compliance-best-practices",
                  "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 104,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                    "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                    "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "audit-report",
                "compliance-report",
                "security-report",
                "test-report"
              ]
            },
            {
              "index": 7,
              "id": "api-publishing",
              "slug": "method/api-publishing",
              "icon": "deployed-code-outline",
              "title": "Integraation julkaisu ja kayttoonoton tuki",
              "description": "Julkaise integraatiokyvykkyys, jotta tiimit voivat loytaa sen, arvioida sen, pyytaa kayttooikeutta, suorittaa kayttoonoton, kayttaa sita uudelleen ja saada tukea.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
              "applyInWork": "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
              "outcomes": [
                "Löydettävä uudelleenkäytettävä kyvykkyys",
                "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
                "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
                "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä"
              ],
              "steps": [
                {
                  "text": "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
                "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset."
              ],
              "criteria": [
                "audit-passed",
                "audit-reports-shared",
                "api-ready-for-publishing",
                "api-documentation-ready"
              ],
              "criteriaDetails": [
                {
                  "id": "audit-passed",
                  "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
                  "description": "The API passes compliance, security, and audit checks."
                },
                {
                  "id": "audit-reports-shared",
                  "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
                  "description": "Audit findings and remediation decisions are shared with the relevant stakeholders."
                },
                {
                  "id": "api-ready-for-publishing",
                  "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
                  "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
                },
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                }
              ],
              "baseTitle": "Julkaisu ja käyttöönoton mahdollistaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "partner-specialist",
                  "sourceKey": "partner-specialist",
                  "sourceStakeholderId": "partner-specialist",
                  "title": "Kumppani- ja toimittajavastaava",
                  "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-onboarding-best-practices",
                  "slug": "resources/api-onboarding-best-practices",
                  "title": "API-käyttöönoton parhaat käytännöt",
                  "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 121,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                    "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                    "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "service-agreement-template",
                  "slug": "resources/service-agreement-template",
                  "title": "Palvelusopimusmalli",
                  "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 172,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                    "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                    "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "gateway-config",
                "developer-portal",
                "documentation",
                "release-record"
              ]
            },
            {
              "index": 8,
              "id": "monitoring-and-improving",
              "slug": "method/monitoring-and-improving",
              "icon": "analytics-outline",
              "title": "Integraation seuranta ja parantaminen",
              "description": "Seuraa integraation luotettavuutta, uudelleenkäyttöä, häiriöitä, suorituskykyä, hyödyntäjien tuloksia ja parannustarpeita.",
              "whyItMatters": "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat.",
              "applyInWork": "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
              "outcomes": [
                "Mitattu kyvykkyyden tila ja arvo",
                "Parannusjono, joka perustuu operatiiviseen ja hyödyntäjien palautteeseen",
                "Uudelleenkäytön, luotettavuuden, datan laadun ja kustannusten signaalit omistajien saatavilla",
                "Jatkuva parantaminen linjassa hyödyntäjien tarpeiden kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                },
                {
                  "text": "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                  "resourceId": "api-community-engagement-strategies",
                  "resourceTitle": "API-yhteisön sitouttamisstrategiat",
                  "canvasId": null
                },
                {
                  "text": "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
                "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat."
              ],
              "criteria": [
                "api-documentation-ready",
                "consumer-support-ready",
                "legal-compliance-clear"
              ],
              "criteriaDetails": [
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                },
                {
                  "id": "consumer-support-ready",
                  "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
                  "description": "Registration, support, and communication processes are ready for API consumers."
                },
                {
                  "id": "legal-compliance-clear",
                  "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
                  "description": "Legal, privacy, and compliance requirements for publishing are defined and understood."
                }
              ],
              "baseTitle": "Seuranta ja parantaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "improving",
              "stakeholders": [
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "api-metrics-and-analytics",
                  "slug": "resources/api-metrics-and-analytics",
                  "title": "API-mittarit ja analytiikka",
                  "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 119,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                    "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                    "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-community-engagement-strategies",
                  "slug": "resources/api-community-engagement-strategies",
                  "title": "API-yhteisön sitouttamisstrategiat",
                  "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 103,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                    "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                    "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                    "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                    "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "metrics",
                "consumer-feedback",
                "incident-report",
                "roadmap"
              ]
            }
          ]
        },
        {
          "id": "automation-cycle",
          "slug": "automation-cycle",
          "title": "Automaatiosykli",
          "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen.",
          "purpose": "Tuotteista automaatiomahdollisuuksia hallituiksi työnkuluiksi, joilla on selkeät käyttäjät, alustat, kontrollit, toimituspolut, käyttöönoton tuki ja seuranta.",
          "audiences": [],
          "audienceStakeholders": [
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "interactionCanvas",
                  "resourceTitle": "Vuorovaikutuskanvas",
                  "canvasId": "interactionCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "governance-specialist",
              "sourceKey": "governance-specialist",
              "sourceStakeholderId": "governance-specialist",
              "title": "API-hallinnan omistaja",
              "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            }
          ],
          "entryCriteria": [
            "business-goals-defined",
            "stakeholder-approval"
          ],
          "exitCriteria": [
            "design-reflects-business-value",
            "automation-workflow-validated",
            "audit-passed"
          ],
          "entryCriteriaDetails": [
            {
              "id": "business-goals-defined",
              "title": "Liiketoimintatavoitteet on määritelty.",
              "description": "Business goals are defined."
            },
            {
              "id": "stakeholder-approval",
              "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
              "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
            }
          ],
          "exitCriteriaDetails": [
            {
              "id": "design-reflects-business-value",
              "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
              "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
            },
            {
              "id": "automation-workflow-validated",
              "title": "Työnkulku, säännöt, integraatiot ja olennaiset rajapintasopimukset on validoitu ja testattu.",
              "description": "The workflow, rules, integrations, and relevant interface contracts have been validated and tested."
            },
            {
              "id": "audit-passed",
              "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
              "description": "The API passes compliance, security, and audit checks."
            }
          ],
          "questionnaireResources": [
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Automaatiomahdollisuuden strategia",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas",
              "suggestedAnswerOwner": {
                "id": "business-owner",
                "sourceKey": "business-owner",
                "sourceStakeholderId": "business-owner",
                "title": "Liiketoiminnan omistaja",
                "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "customerJourneyCanvas",
                    "resourceTitle": "Asiakaspolkukanvas",
                    "canvasId": "customerJourneyCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-product-strategy",
              "stationTitle": "Automaatiomahdollisuuden strategia",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas",
              "suggestedAnswerOwner": {
                "id": "domain-specialist",
                "sourceKey": "domain-specialist",
                "sourceStakeholderId": "domain-specialist",
                "title": "Liiketoiminta-asiantuntija",
                "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "domainCanvas",
                    "resourceTitle": "Toimialuekanvas",
                    "canvasId": "domainCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-consumer-experience",
              "stationTitle": "Prosessin ja käyttäjien vaatimukset",
              "resourceId": "consumerExperienceRequirementsCanvas",
              "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "canvasId": "consumerExperienceRequirementsCanvas",
              "suggestedAnswerOwner": {
                "id": "api-consumer-specialist",
                "sourceKey": "api-consumer-specialist",
                "sourceStakeholderId": "api-consumer-specialist",
                "title": "API-hyödyntäjien edustaja",
                "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                "involvement": "consulted",
                "responsibilities": [
                  {
                    "resourceId": "consumerExperienceRequirementsCanvas",
                    "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                    "canvasId": "consumerExperienceRequirementsCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            },
            {
              "stationId": "api-design",
              "stationTitle": "Automaatiotyönkulun suunnittelu",
              "resourceId": "interactionCanvas",
              "resourceTitle": "Vuorovaikutuskanvas",
              "canvasId": "interactionCanvas",
              "suggestedAnswerOwner": {
                "id": "integration-architect",
                "sourceKey": "integration-architect",
                "sourceStakeholderId": "integration-architect",
                "title": "Integraatioarkkitehti",
                "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                "involvement": "core",
                "responsibilities": [
                  {
                    "resourceId": "interactionCanvas",
                    "resourceTitle": "Vuorovaikutuskanvas",
                    "canvasId": "interactionCanvas",
                    "role": "suggested-answer-owner"
                  }
                ]
              }
            }
          ],
          "stations": [
            {
              "index": 1,
              "id": "api-product-strategy",
              "slug": "method/api-product-strategy",
              "icon": "strategy-outline",
              "title": "Automaatiomahdollisuuden strategia",
              "description": "Tunnista ja priorisoi automaatiomahdollisuudet arvon, toteutettavuuden, riskin, omistajuuden ja odotetun prosessivaikutuksen perusteella.",
              "whyItMatters": "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa.",
              "applyInWork": "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
              "outcomes": [
                "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
                "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
                "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa"
              ],
              "steps": [
                {
                  "text": "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas"
                }
              ],
              "questions": [
                "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
                "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
                "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
                "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
                "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
                "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
              ],
              "criteria": [
                "metrics-feedback-available",
                "business-goals-defined",
                "market-research-done",
                "stakeholder-approval"
              ],
              "criteriaDetails": [
                {
                  "id": "metrics-feedback-available",
                  "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
                  "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity."
                },
                {
                  "id": "business-goals-defined",
                  "title": "Liiketoimintatavoitteet on määritelty.",
                  "description": "Business goals are defined."
                },
                {
                  "id": "market-research-done",
                  "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
                  "description": "Market research identifies API opportunities."
                },
                {
                  "id": "stakeholder-approval",
                  "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
                  "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
                }
              ],
              "baseTitle": "Strategia",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "customerJourneyCanvas",
                      "resourceTitle": "Asiakaspolkukanvas",
                      "canvasId": "customerJourneyCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "domainCanvas",
                      "resourceTitle": "Toimialuekanvas",
                      "canvasId": "domainCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "customerJourneyCanvas",
                  "slug": "resources/customer-journey-canvas",
                  "title": "Asiakaspolkukanvas",
                  "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 1,
                  "outcomes": [
                    "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                    "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                    "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
                  ],
                  "steps": [
                    "Määrittele asiakaspersoona",
                    "Tunnista matkan käynnistäjät",
                    "Kuvaile matkan loppua",
                    "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                    "Tunnista asiakkaan kipupisteet",
                    "Yhteenveto asiakkaan saamista eduista",
                    "Määritellään tarvittavat syötteet ja tuotokset",
                    "Määrittele API-vuorovaikutukset kullekin vaiheelle"
                  ],
                  "canvasId": "customerJourneyCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capabilityValuePropositionCanvas",
                  "slug": "resources/capability-value-proposition-canvas",
                  "title": "Kyvykkyyden arvolupauskanvas",
                  "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 2.1,
                  "outcomes": [
                    "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                    "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                    "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
                  ],
                  "steps": [
                    "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                    "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                    "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
                  ],
                  "canvasId": "capabilityValuePropositionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "research",
                "roadmap"
              ]
            },
            {
              "index": 2,
              "id": "api-consumer-experience",
              "slug": "method/api-consumer-experience",
              "icon": "deployed-code-account-outline",
              "title": "Prosessin ja käyttäjien vaatimukset",
              "description": "Kokoa prosessin käyttäjät, roolit, luovutukset, poikkeukset, rajoitteet ja palveluodotukset ennen automaation suunnittelua.",
              "whyItMatters": "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
              "applyInWork": "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
              "outcomes": [
                "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
                "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
                "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
                "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta"
              ],
              "steps": [
                {
                  "text": "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas"
                },
                {
                  "text": "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas"
                },
                {
                  "text": "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
                "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
                "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
                "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
                "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista."
              ],
              "criteria": [
                "api-opportunity-documented",
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-opportunity-documented",
                  "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
                  "description": "Individual API opportunities are identified and documented."
                },
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "strategy",
              "stakeholders": [
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "customer-specialist",
                  "sourceKey": "customer-specialist",
                  "sourceStakeholderId": "customer-specialist",
                  "title": "Asiakas- tai kumppaniedustaja",
                  "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-consumer-specialist",
                  "sourceKey": "api-consumer-specialist",
                  "sourceStakeholderId": "api-consumer-specialist",
                  "title": "API-hyödyntäjien edustaja",
                  "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
                  "involvement": "consulted",
                  "responsibilities": [
                    {
                      "resourceId": "consumerExperienceRequirementsCanvas",
                      "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                      "canvasId": "consumerExperienceRequirementsCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "consumerExperienceRequirementsCanvas",
                  "slug": "resources/consumer-experience-requirements-canvas",
                  "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 3.2,
                  "outcomes": [
                    "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                    "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                    "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
                  ],
                  "steps": [
                    "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                    "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                    "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                    "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
                  ],
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                }
              ],
              "evidence": [
                "design-artifact",
                "documentation",
                "consumer-feedback"
              ]
            },
            {
              "index": 3,
              "id": "api-platform-architecture",
              "slug": "method/api-platform-architecture",
              "icon": "code-blocks-outline",
              "title": "Automaatioalustan päätös",
              "description": "Valitse automaatioalusta, ajoymparisto, integraatiotapa, hallintakontrollit ja operatiiviset rajoitteet.",
              "whyItMatters": "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista.",
              "applyInWork": "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
              "outcomes": [
                "Perusteltu arkkitehtuurivalinta",
                "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
                "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle"
              ],
              "steps": [
                {
                  "text": "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas"
                },
                {
                  "text": "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas"
                },
                {
                  "text": "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas"
                },
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
                "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
                "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
                "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
                "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
                "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
              ],
              "criteria": [
                "api-reusability",
                "hide-backend-discrepancies",
                "value-prop-validated",
                "consumer-segments-identified",
                "api-roadmap-defined"
              ],
              "criteriaDetails": [
                {
                  "id": "api-reusability",
                  "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
                  "description": "The API meets a clear business need and is reusable for multiple API consumers."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "value-prop-validated",
                  "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
                  "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
                },
                {
                  "id": "consumer-segments-identified",
                  "title": "Hyödyntäjäsegmentit on tunnistettu.",
                  "description": "API consumer segments (internal and external) are identified."
                },
                {
                  "id": "api-roadmap-defined",
                  "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
                  "description": "High-level roadmaps for API development are established."
                }
              ],
              "baseTitle": "Arkkitehtuuri- ja alustapäätökset",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "architecture",
              "stakeholders": [
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "businessImpactCanvas",
                  "slug": "resources/business-impact-canvas",
                  "title": "Liiketoimintavaikutuskanvas",
                  "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 4,
                  "outcomes": [
                    "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                    "Priorisoidut riskit ja lieventämistoimenpiteet",
                    "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
                  ],
                  "steps": [
                    "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                    "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                    "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                    "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                    "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                    "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
                  ],
                  "canvasId": "businessImpactCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "locationsCanvas",
                  "slug": "resources/location-canvas",
                  "title": "Sijaintikanvas",
                  "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 6,
                  "outcomes": [
                    "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                    "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                    "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
                  ],
                  "steps": [
                    "API-palveluntarjoajien sijainnit kartalla.",
                    "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                    "Tunnista sovellettavat säädökset.",
                    "Dokumentoi, missä tietojen on oltava.",
                    "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                    "Validoi verkon suorituskyky eri alueilla."
                  ],
                  "canvasId": "locationsCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "capacityCanvas",
                  "slug": "resources/capacity-canvas",
                  "title": "Kapasiteettikanvas",
                  "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 7,
                  "outcomes": [
                    "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                    "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                    "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
                  ],
                  "steps": [
                    "Dokumentoi nykyiset liiketoiminnan volyymit",
                    "Ennustaa tulevia kulutussuuntauksia",
                    "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                    "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                    "Ehdotetaan skaalausstrategioita"
                  ],
                  "canvasId": "capacityCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "automation-operational-ownership-guide",
                  "slug": "resources/automation-operational-ownership-guide",
                  "title": "Automaation operatiivisen omistajuuden opas",
                  "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 185,
                  "outcomes": [
                    "Selkeä automaation toimintamalli",
                    "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                    "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
                  ],
                  "steps": [
                    "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                    "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                    "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "architecture-decision",
                "documentation",
                "platform-config",
                "metrics"
              ]
            },
            {
              "index": 4,
              "id": "api-design",
              "slug": "method/api-design",
              "icon": "api",
              "title": "Automaatiotyönkulun suunnittelu",
              "description": "Suunnittele automaation tyonkulku, kaynnistimet, paatospisteet, integraatiot, datankasittely, olennaiset rajapintasopimukset ja poikkeuspolut.",
              "whyItMatters": "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi.",
              "applyInWork": "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
              "outcomes": [
                "Validoitu rajapintasopimus valitulle toteutustavalle",
                "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
                "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
                "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas"
                },
                {
                  "text": "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                  "resourceId": "interactionCanvas",
                  "resourceTitle": "Vuorovaikutuskanvas",
                  "canvasId": "interactionCanvas"
                },
                {
                  "text": "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                  "resourceId": "restCanvas",
                  "resourceTitle": "REST-kanvas",
                  "canvasId": "restCanvas"
                },
                {
                  "text": "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                  "resourceId": "eventCanvas",
                  "resourceTitle": "Tapahtumakanvas",
                  "canvasId": "eventCanvas"
                },
                {
                  "text": "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                  "resourceId": "graphqlCanvas",
                  "resourceTitle": "GraphQL-kanvas",
                  "canvasId": "graphqlCanvas"
                },
                {
                  "text": "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                  "resourceId": "api-design-principles",
                  "resourceTitle": "API-suunnitteluperiaatteet",
                  "canvasId": null
                },
                {
                  "text": "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                  "resourceId": "contract-first-design",
                  "resourceTitle": "Sopimuslähtöinen suunnittelu",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
                "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
                "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
                "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
                "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
                "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
                "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
                "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Ratkaisu- ja rajapintasuunnittelu",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "design",
              "stakeholders": [
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "integration-architect",
                  "sourceKey": "integration-architect",
                  "sourceStakeholderId": "integration-architect",
                  "title": "Integraatioarkkitehti",
                  "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
                  "involvement": "core",
                  "responsibilities": [
                    {
                      "resourceId": "interactionCanvas",
                      "resourceTitle": "Vuorovaikutuskanvas",
                      "canvasId": "interactionCanvas",
                      "role": "suggested-answer-owner"
                    }
                  ]
                },
                {
                  "id": "domain-specialist",
                  "sourceKey": "domain-specialist",
                  "sourceStakeholderId": "domain-specialist",
                  "title": "Liiketoiminta-asiantuntija",
                  "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "api-designer",
                  "sourceKey": "api-designer",
                  "sourceStakeholderId": "api-designer",
                  "title": "API-suunnittelija",
                  "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "domainCanvas",
                  "slug": "resources/domain-canvas",
                  "title": "Toimialuekanvas",
                  "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 152,
                  "outcomes": [
                    "Parempi ymmärrys toimialueen mallinnuksesta",
                    "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                    "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
                  ],
                  "steps": [
                    "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
                  ],
                  "canvasId": "domainCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "interactionCanvas",
                  "slug": "resources/interaction-canvas",
                  "title": "Vuorovaikutuskanvas",
                  "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
                  "category": "canvas",
                  "icon": "dashboard-outline",
                  "order": 9,
                  "outcomes": [
                    "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                    "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                    "Sovitut validointisäännöt ja vuorovaikutusodotukset"
                  ],
                  "steps": [
                    "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                    "Määritä päätepisteet kullekin vuorovaikutukselle",
                    "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                    "Validointisääntöjen ja -rajoitusten määrittäminen",
                    "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
                  ],
                  "canvasId": "interactionCanvas",
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": false
                },
                {
                  "id": "process-workflow-design-guide",
                  "slug": "resources/process-workflow-design-guide",
                  "title": "Prosessin ja työnkulun suunnitteluopas",
                  "description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 181,
                  "outcomes": [
                    "Selkeä automaatiotyönkulun suunnitelma",
                    "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
                    "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty."
                  ],
                  "steps": [
                    "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
                    "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
                    "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
                    "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "decision-business-rules-guide",
                  "slug": "resources/decision-business-rules-guide",
                  "title": "Päätösten ja liiketoimintasääntöjen opas",
                  "description": "Ohje sääntöjen, kynnysarvojen, päätösten, hyväksyntöjen, kelpoisuustarkistusten ja sääntöjen omistajuuden kuvaamiseen automaation suunnittelua varten.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 182,
                  "outcomes": [
                    "Selkeästi kuvatut päätökset ja liiketoimintasäännöt",
                    "Säännöt ja kynnysarvot on dokumentoitu omistajineen.",
                    "Automaation päätökset ovat jäljitettävissä käytäntöihin, prosessiin tai liiketoimintatarkoitukseen."
                  ],
                  "steps": [
                    "Listaa päätökset, jotka automaation täytyy tehdä tai joita sen täytyy tukea.",
                    "Dokumentoi sääntöjen ehdot, kynnysarvot, poikkeukset, hyväksynnät ja eskalointipisteet.",
                    "Tunnista sääntöjen omistajat ja muutosten hallintatapa jokaiselle päätösalueelle."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "automation-trigger-handoff-exception-guide",
                  "slug": "resources/automation-trigger-handoff-exception-guide",
                  "title": "Automaation käynnistinten, luovutusten ja poikkeusten opas",
                  "description": "Ohje automaation käynnistinten, ihmisten välisten luovutusten, poikkeusten käsittelyn, uudelleenyritysten, kompensoivien toimien ja tuen eskalointipolkujen määrittelyyn.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 183,
                  "outcomes": [
                    "Määritellyt automaation käynnistimet ja poikkeuspolut",
                    "Ihmisten väliset luovutukset ja tuen eskaloinnit ovat selkeitä.",
                    "Poikkeukset, uudelleenyritykset ja kompensoivat toimet on suunniteltu ennen toimitusta."
                  ],
                  "steps": [
                    "Määritä tapahtumat, aikataulut, käyttäjätoimet tai järjestelmätilat, jotka käynnistävät automaation.",
                    "Kuvaa luovutukset automaatiolta käyttäjille, operaattoreille tai tukitiimeille.",
                    "Dokumentoi poikkeukset, uudelleenyrityssäännöt, aikakatkaisujen toiminta ja varapolut.",
                    "Määritä hälytykset ja eskalointikynnykset epäonnistuneille tai epäselville automaation tuloksille."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "spec",
                "contract",
                "design-artifact",
                "documentation"
              ]
            },
            {
              "index": 5,
              "id": "api-delivery",
              "slug": "method/api-delivery",
              "icon": "code",
              "title": "Automaation toimitus ja operointi",
              "description": "Rakenna, testaa, julkaise, dokumentoi ja operoi automaatiota selkeällä omistajuudella, kontrolleilla ja palautuspoluilla.",
              "whyItMatters": "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa.",
              "applyInWork": "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
              "outcomes": [
                "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
                "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
                "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
                "Jäljitettävät toimitus- ja julkaisukontrollit"
              ],
              "steps": [
                {
                  "text": "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                  "resourceId": "api-development-best-practices",
                  "resourceTitle": "API-kehityksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                  "resourceId": "api-testing-best-practices",
                  "resourceTitle": "API-testauksen parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                  "resourceId": "api-security-best-practices",
                  "resourceTitle": "API-turvallisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
                "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
                "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
                "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
                "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
                "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "hide-backend-discrepancies",
                "design-reflects-business-value",
                "api-consistency"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "hide-backend-discrepancies",
                  "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
                  "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                }
              ],
              "baseTitle": "Toimitus ja operointi",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "delivery",
              "stakeholders": [
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "api-engineer",
                  "sourceKey": "api-engineer",
                  "sourceStakeholderId": "api-engineer",
                  "title": "Toimituskehittäjä",
                  "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "automation-testing-guide",
                  "slug": "resources/automation-testing-guide",
                  "title": "Automaation testausopas",
                  "description": "Ohje automatisoitujen työnkulkujen, päätösten, integraatioiden, poikkeusten, palautuksen, valvonnan ja käyttäjävaikutusten testaamiseen ennen julkaisua.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 184,
                  "outcomes": [
                    "Validoitu automaation toiminta",
                    "Työnkulun, sääntöjen, poikkeusten ja integraatioiden testit on määritelty.",
                    "Julkaisuluottamus automatisoituihin ja ihmistä tukeviin polkuihin."
                  ],
                  "steps": [
                    "Luo testit onnistuneille poluille, reunatapauksille, poikkeuksille, uudelleenyrityksille ja luovutuksille.",
                    "Validoi liiketoimintasäännöt ja päätösten tulokset edustavalla datalla.",
                    "Testaa palautus, toipuminen, havainnoitavuus ja manuaalisen puuttumisen polut.",
                    "Ota käyttäjät ja operaattorit mukaan hyväksyntätestaukseen, kun automaatio muuttaa työtapoja."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "automation-operational-ownership-guide",
                  "slug": "resources/automation-operational-ownership-guide",
                  "title": "Automaation operatiivisen omistajuuden opas",
                  "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 185,
                  "outcomes": [
                    "Selkeä automaation toimintamalli",
                    "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                    "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
                  ],
                  "steps": [
                    "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                    "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                    "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "automation-rollback-supervision-guide",
                  "slug": "resources/automation-rollback-supervision-guide",
                  "title": "Automaation palautuksen ja valvonnan opas",
                  "description": "Ohje automaatioiden palautuksen, keskeytyksen, manuaalisen ohituksen, seurannan, valvonnan ja toipumispolkujen suunnitteluun.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 186,
                  "outcomes": [
                    "Hallittavat automaation toipumispolut",
                    "Palautus, keskeytys ja ohitus on dokumentoitu.",
                    "Valvontatarpeet ja toipumisvastuut on määritelty."
                  ],
                  "steps": [
                    "Tunnista toimet, jotka täytyy voida palauttaa, keskeyttää tai ohittaa manuaalisesti.",
                    "Määritä palautus-, kompensaatio- ja toipumismenettelyt epäonnistuneille tai virheellisille automaation tuloksille.",
                    "Dokumentoi valvontakynnykset, hälytykset ja manuaaliset päätöspisteet.",
                    "Validoi toipumismenettelyt ennen julkaisua."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "implementation",
                "pipeline-config",
                "test-report",
                "security-report"
              ]
            },
            {
              "index": 6,
              "id": "api-audit",
              "slug": "method/api-audit",
              "icon": "check-box-outline",
              "title": "Automaation valmiuskatselmointi",
              "description": "Katselmoi automaation valmius, laatu, riski, vaatimustenmukaisuus, ihmisen valvonta, näyttö ja julkaisukriteerit.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä.",
              "applyInWork": "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
              "outcomes": [
                "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
                "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
                "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
                "Pienempi riski tuotannon ongelmille"
              ],
              "steps": [
                {
                  "text": "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                },
                {
                  "text": "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                  "resourceId": "api-compliance-best-practices",
                  "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                  "resourceTitle": "",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
                "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
                "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
                "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
                "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä."
              ],
              "criteria": [
                "architecture-patterns-validated",
                "design-reflects-business-value",
                "api-description-available",
                "api-consistency",
                "api-contract-tested"
              ],
              "criteriaDetails": [
                {
                  "id": "architecture-patterns-validated",
                  "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
                  "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
                },
                {
                  "id": "design-reflects-business-value",
                  "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
                  "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
                },
                {
                  "id": "api-description-available",
                  "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
                  "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
                },
                {
                  "id": "api-consistency",
                  "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
                  "description": "The API design follows our shared API product and design conventions."
                },
                {
                  "id": "api-contract-tested",
                  "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
                  "description": "The API contract is tested and meets functional and non-functional requirements."
                }
              ],
              "baseTitle": "Laadun ja valmiuden varmistus",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "governance-specialist",
                  "sourceKey": "governance-specialist",
                  "sourceStakeholderId": "governance-specialist",
                  "title": "API-hallinnan omistaja",
                  "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-architect",
                  "sourceKey": "platform-architect",
                  "sourceStakeholderId": "platform-architect",
                  "title": "Alusta-arkkitehti",
                  "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "automation-readiness-checklist",
                  "slug": "resources/automation-readiness-checklist",
                  "title": "Automaation valmiuden tarkistuslista",
                  "description": "Tarkistuslista automaation työnkulun, kontrollien, riskien, vaatimustenmukaisuuden, ihmisen valvonnan, testausnäytön, palautuksen, operoinnin ja julkaisuvalmiuden validointiin.",
                  "category": "checklist",
                  "icon": "check-box-outline",
                  "order": 187,
                  "outcomes": [
                    "Dokumentoitu automaation valmius",
                    "Tunnetut valmiuspuutteet ja lievennykset on tunnistettu ennen julkaisua.",
                    "Näyttö laadusta, riskistä, vaatimustenmukaisuudesta, valvonnasta ja operatiivisesta hyväksynnästä."
                  ],
                  "steps": [
                    "Katselmoi työnkulun suunnittelu, liiketoimintasäännöt, kontrollit, pääsy, datankäsittely ja poikkeuspolut.",
                    "Varmista testausnäyttö, palautusmenettelyt, valvontamalli ja tuen valmius.",
                    "Vahvista omistajuus, runbookit, seuranta, muutosten hallinta ja julkaisuhyväksyntä.",
                    "Kirjaa avoimet puutteet, päätökset ja hyväksytyt riskit ennen julkaisua."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-compliance-best-practices",
                  "slug": "resources/api-compliance-best-practices",
                  "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
                  "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 104,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                    "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                    "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "audit-report",
                "compliance-report",
                "security-report",
                "test-report"
              ]
            },
            {
              "index": 7,
              "id": "api-publishing",
              "slug": "method/api-publishing",
              "icon": "deployed-code-outline",
              "title": "Automaation kayttoonotto ja kayttoonoton tuki",
              "description": "Mahdollista käyttäjien ja operaattorien työ löydettävyyden, käyttöönoton, käyttöohjeiden, tukipolkujen ja muutosviestinnän avulla.",
              "whyItMatters": "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
              "applyInWork": "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
              "outcomes": [
                "Löydettävä uudelleenkäytettävä kyvykkyys",
                "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
                "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
                "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä"
              ],
              "steps": [
                {
                  "text": "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                },
                {
                  "text": "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                  "resourceId": "api-onboarding-best-practices",
                  "resourceTitle": "API-käyttöönoton parhaat käytännöt",
                  "canvasId": null
                },
                {
                  "text": "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                  "resourceId": "api-audit-checklist",
                  "resourceTitle": "API-auditoinnin tarkistuslista",
                  "canvasId": null
                }
              ],
              "questions": [
                "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
                "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
                "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
                "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
                "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset."
              ],
              "criteria": [
                "audit-passed",
                "audit-reports-shared",
                "api-ready-for-publishing",
                "api-documentation-ready"
              ],
              "criteriaDetails": [
                {
                  "id": "audit-passed",
                  "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
                  "description": "The API passes compliance, security, and audit checks."
                },
                {
                  "id": "audit-reports-shared",
                  "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
                  "description": "Audit findings and remediation decisions are shared with the relevant stakeholders."
                },
                {
                  "id": "api-ready-for-publishing",
                  "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
                  "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
                },
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                }
              ],
              "baseTitle": "Julkaisu ja käyttöönoton mahdollistaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "publishing",
              "stakeholders": [
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "api-devrel-specialist",
                  "sourceKey": "api-devrel-specialist",
                  "sourceStakeholderId": "api-devrel-specialist",
                  "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
                  "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "automation-rollout-enablement-guide",
                  "slug": "resources/automation-rollout-enablement-guide",
                  "title": "Automaation käyttöönoton ja tuen opas",
                  "description": "Ohje automaatioiden käyttöönottoon käyttäjäviestinnän, onboardingin, käyttöohjeiden, tukipolkujen, muutoksenhallinnan ja palautesilmukoiden avulla.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 188,
                  "outcomes": [
                    "Käyttäjät ja operaattorit on tuettu automaation käyttöön",
                    "Käyttöönoton viestintä, onboarding ja tukipolut on valmisteltu.",
                    "Käyttäjät ja operaattorit ymmärtävät, miten työ muuttuu automaation julkaisun jälkeen."
                  ],
                  "steps": [
                    "Määritä käyttöönoton kohderyhmät, ajoitus, viestintäkanavat ja koulutustarpeet.",
                    "Julkaise käyttöohjeet, tukipolut, poikkeusten käsittelyn ohjeet ja eskalointikontaktit.",
                    "Suunnittele siirtymän tuki käyttäjille, operaattoreille ja prosessinomistajille.",
                    "Kerää palautetta käyttöönoton jälkeen ja vie parannukset kehitysjonoon."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "service-agreement-template",
                  "slug": "resources/service-agreement-template",
                  "title": "Palvelusopimusmalli",
                  "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 172,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                    "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                    "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "gateway-config",
                "developer-portal",
                "documentation",
                "release-record"
              ]
            },
            {
              "index": 8,
              "id": "monitoring-and-improving",
              "slug": "method/monitoring-and-improving",
              "icon": "analytics-outline",
              "title": "Automaation seuranta ja parantaminen",
              "description": "Seuraa automaation suorituskykyä, poikkeuksia, luotettavuutta, käyttäjien tuloksia, operatiivista vaikutusta ja parannusmahdollisuuksia.",
              "whyItMatters": "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat.",
              "applyInWork": "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
              "outcomes": [
                "Mitattu kyvykkyyden tila ja arvo",
                "Parannusjono, joka perustuu operatiiviseen ja hyödyntäjien palautteeseen",
                "Uudelleenkäytön, luotettavuuden, datan laadun ja kustannusten signaalit omistajien saatavilla",
                "Jatkuva parantaminen linjassa hyödyntäjien tarpeiden kanssa"
              ],
              "steps": [
                {
                  "text": "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                  "resourceId": "api-metrics-and-analytics",
                  "resourceTitle": "API-mittarit ja analytiikka",
                  "canvasId": null
                },
                {
                  "text": "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                  "resourceId": "api-community-engagement-strategies",
                  "resourceTitle": "API-yhteisön sitouttamisstrategiat",
                  "canvasId": null
                },
                {
                  "text": "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                  "resourceId": "apiops-CI-CD-for-apis",
                  "resourceTitle": "APIOps CI/CD rajapinnoille",
                  "canvasId": null
                }
              ],
              "questions": [
                "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
                "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
                "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
                "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
                "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat."
              ],
              "criteria": [
                "api-documentation-ready",
                "consumer-support-ready",
                "legal-compliance-clear"
              ],
              "criteriaDetails": [
                {
                  "id": "api-documentation-ready",
                  "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
                  "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
                },
                {
                  "id": "consumer-support-ready",
                  "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
                  "description": "Registration, support, and communication processes are ready for API consumers."
                },
                {
                  "id": "legal-compliance-clear",
                  "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
                  "description": "Legal, privacy, and compliance requirements for publishing are defined and understood."
                }
              ],
              "baseTitle": "Seuranta ja parantaminen",
              "group": "Kyvykkyyden elinkaaren ydinasemat",
              "lifecycleStage": "improving",
              "stakeholders": [
                {
                  "id": "automation-owner",
                  "sourceKey": "automation-owner",
                  "sourceStakeholderId": "automation-owner",
                  "title": "Automaation omistaja",
                  "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
                  "involvement": "lead",
                  "responsibilities": []
                },
                {
                  "id": "automation-engineer",
                  "sourceKey": "automation-engineer",
                  "sourceStakeholderId": "automation-engineer",
                  "title": "Automaatiokehittäjä",
                  "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "process-owner",
                  "sourceKey": "process-owner",
                  "sourceStakeholderId": "process-owner",
                  "title": "Prosessin omistaja",
                  "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "operations-specialist",
                  "sourceKey": "operations-specialist",
                  "sourceStakeholderId": "operations-specialist",
                  "title": "Tuki- ja operaatioiden omistaja",
                  "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
                  "involvement": "core",
                  "responsibilities": []
                },
                {
                  "id": "platform-owner",
                  "sourceKey": "platform-owner",
                  "sourceStakeholderId": "platform-owner",
                  "title": "Alustan omistaja",
                  "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "business-owner",
                  "sourceKey": "business-owner",
                  "sourceStakeholderId": "business-owner",
                  "title": "Liiketoiminnan omistaja",
                  "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "security-specialist",
                  "sourceKey": "security-specialist",
                  "sourceStakeholderId": "security-specialist",
                  "title": "Turvallisuusasiantuntija",
                  "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
                  "involvement": "consulted",
                  "responsibilities": []
                },
                {
                  "id": "compliance-specialist",
                  "sourceKey": "compliance-specialist",
                  "sourceStakeholderId": "compliance-specialist",
                  "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
                  "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
                  "involvement": "consulted",
                  "responsibilities": []
                }
              ],
              "resources": [
                {
                  "id": "automation-operational-ownership-guide",
                  "slug": "resources/automation-operational-ownership-guide",
                  "title": "Automaation operatiivisen omistajuuden opas",
                  "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 185,
                  "outcomes": [
                    "Selkeä automaation toimintamalli",
                    "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                    "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
                  ],
                  "steps": [
                    "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                    "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                    "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                },
                {
                  "id": "api-metrics-and-analytics",
                  "slug": "resources/api-metrics-and-analytics",
                  "title": "API-mittarit ja analytiikka",
                  "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
                  "category": "guideline",
                  "icon": "edit-document-outline",
                  "order": 119,
                  "outcomes": [
                    "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                    "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                    "Asiaan liittyvien käytäntöjen parempi soveltaminen"
                  ],
                  "steps": [
                    "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                    "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                    "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
                  ],
                  "canvasId": null,
                  "sourcePath": null,
                  "sourceUrl": null,
                  "contentMarkdown": null,
                  "draft": true
                }
              ],
              "evidence": [
                "metrics",
                "consumer-feedback",
                "incident-report",
                "roadmap"
              ]
            }
          ]
        }
      ],
      "lines": [
        {
          "id": "business-opportunities-line",
          "slug": "business-opportunities-line",
          "title": "Liiketoimintamahdollisuuksien linja",
          "description": "Keskittyy tunnistamaan, arvioimaan ja tuotteistamaan liiketoimintamahdollisuuksia uudelleenkäytettävinä kyvykkyyksinä.",
          "icon": "",
          "color": "#26b309",
          "order": 1,
          "stations": [
            "monitoring-and-improving",
            "api-product-strategy",
            "user-experience",
            "market-insights",
            "business-goals",
            "competitive-analysis",
            "ecosystem-vision"
          ]
        },
        {
          "id": "platform-architecture-line",
          "slug": "platform-architecture-line",
          "title": "Alusta-arkkitehtuurilinja",
          "description": "Kattaa alustojen, integraatioiden ja rajapintojen arkkitehtuurin suunnittelun.",
          "icon": "",
          "color": "#933469",
          "order": 2,
          "stations": [
            "api-product-strategy",
            "api-consumer-experience",
            "api-platform-architecture",
            "scalable-infrastructure",
            "legal-and-compliance",
            "security-and-privacy",
            "design-standards",
            "vendor-management"
          ]
        },
        {
          "id": "api-design-line",
          "slug": "api-design-line",
          "title": "API-suunnittelulinja",
          "description": "Keskittyy rajapintojen ja integraatioratkaisujen suunnitteluperiaatteisiin ja -käytäntöihin.",
          "icon": "",
          "color": "#db9b0c",
          "order": 3,
          "stations": [
            "api-platform-architecture",
            "api-design",
            "api-delivery",
            "api-audit"
          ]
        },
        {
          "id": "delivery-line",
          "slug": "delivery-line",
          "title": "Toimituslinja",
          "description": "Kattaa toteutuksen, testauksen, automaation ja toimituskäytännöt.",
          "icon": "",
          "color": "#db9b0c",
          "order": 4,
          "stations": [
            "api-delivery",
            "contract-design",
            "development",
            "ci-cd",
            "test-automation",
            "release-management"
          ]
        },
        {
          "id": "publishing-and-adoption-line",
          "slug": "publishing-and-adoption-line",
          "title": "Julkaisu- ja käyttöönoton linja",
          "description": "Keskittyy kyvykkyyksien julkaisemiseen, käyttöönottoon ja hyödyntämisen tukemiseen.",
          "icon": "",
          "color": "#17C6E9",
          "order": 5,
          "stations": [
            "api-audit",
            "api-publishing",
            "monitoring-and-improving",
            "service-agreements",
            "api-consumer-adoption",
            "api-promotion",
            "partner-integration"
          ]
        },
        {
          "id": "operating-model-line",
          "slug": "operating-model-line",
          "title": "Toimintamallilinja",
          "description": "Kattaa kyvykkyyksien hallintamallin, vastuut ja governance-käytännöt.",
          "icon": "",
          "color": "#1a3987",
          "order": 6,
          "stations": [
            "api-product-strategy",
            "api-mindset",
            "roles-and-responsibilities",
            "upskilling",
            "operating-guidelines",
            "portfolio-management",
            "budget-and-resource-management"
          ]
        }
      ],
      "stations": [
        {
          "id": "api-product-strategy",
          "slug": "method/api-product-strategy",
          "icon": "strategy-outline",
          "title": "Strategia",
          "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa.",
          "whyItMatters": "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa.",
          "applyInWork": "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "strategy",
          "outcomes": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa"
          ],
          "steps": [
            {
              "text": "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas"
            },
            {
              "text": "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas"
            },
            {
              "text": "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
              "resourceId": "apiValuePropositionCanvas",
              "resourceTitle": "API-arvolupauskanvas",
              "canvasId": "apiValuePropositionCanvas"
            },
            {
              "text": "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
              "resourceId": "apiBusinessModelCanvas",
              "resourceTitle": "API-liiketoimintamallikanvas",
              "canvasId": "apiBusinessModelCanvas"
            }
          ],
          "questions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "criteria": [
            "metrics-feedback-available",
            "business-goals-defined",
            "market-research-done",
            "stakeholder-approval"
          ],
          "criteriaDetails": [
            {
              "id": "metrics-feedback-available",
              "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
              "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity."
            },
            {
              "id": "business-goals-defined",
              "title": "Liiketoimintatavoitteet on määritelty.",
              "description": "Business goals are defined."
            },
            {
              "id": "market-research-done",
              "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
              "description": "Market research identifies API opportunities."
            },
            {
              "id": "stakeholder-approval",
              "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
              "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing."
            }
          ],
          "stakeholders": [
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "apiValuePropositionCanvas",
                  "resourceTitle": "API-arvolupauskanvas",
                  "canvasId": "apiValuePropositionCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "apiBusinessModelCanvas",
                  "resourceTitle": "API-liiketoimintamallikanvas",
                  "canvasId": "apiBusinessModelCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "capabilityValuePropositionCanvas",
                  "resourceTitle": "Kyvykkyyden arvolupauskanvas",
                  "canvasId": "capabilityValuePropositionCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "capabilityBusinessModelCanvas",
                  "resourceTitle": "Kyvykkyyden liiketoimintamallikanvas",
                  "canvasId": "capabilityBusinessModelCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "customerJourneyCanvas",
                  "resourceTitle": "Asiakaspolkukanvas",
                  "canvasId": "customerJourneyCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "domainCanvas",
                  "resourceTitle": "Toimialuekanvas",
                  "canvasId": "domainCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-program-owner",
              "sourceKey": "api-program-owner",
              "sourceStakeholderId": "api-program-owner",
              "title": "API-ohjelman omistaja",
              "description": "Koordinoi API-portfolion käytäntöjä, organisaation suuntautumista ja pitkän aikavälin API-kyvykkyyksien kehitystä.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "partner-specialist",
              "sourceKey": "partner-specialist",
              "sourceStakeholderId": "partner-specialist",
              "title": "Kumppani- ja toimittajavastaava",
              "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "design-artifact",
            "documentation",
            "research",
            "roadmap"
          ]
        },
        {
          "id": "user-experience",
          "slug": "method/user-experience",
          "icon": "user-attributes-outline",
          "title": "Käyttäjäkokemus - Suunnittele APIt käyttäjälähtöisesti",
          "description": "Varmistetaan, että rajapinnat on suunniteltu loppukäyttäjää ajatellen ja että ne tarjoavat saumattoman ja intuitiivisen käyttökokemuksen.",
          "whyItMatters": "APIt eivät ole vain teknisiä tuotteita, vaan ne ovat myös käyttäjälle näkyviä tuotteita. Huono käyttökokemus voi johtaa vähäiseen käyttöön ja turhautumiseen. Tämä asema auttaa tiimejä suunnittelemaan APIt, jotka ovat käyttäjäystävällisiä ja vastaavat hyödyntäjien tarpeita.",
          "applyInWork": "Tarjotaan käyttäjäkokemusta koskevia ohjeita, malleja ja työkaluja API-suunnittelua varten. Varmistetaan, että tiimit noudattavat käyttäjäkeskeisiä suunnittelukäytäntöjä ja sisällyttävät käyttäjäpalautteen API-iteraatioihin.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "APIt on suunniteltu käyttäjien tarpeet mielessä pitäen",
            "Intuitiiviset ja johdonmukaiset käyttöliittymät",
            "Käyttäjien palaute sisällytetty APIn suunnitteluun",
            "Parempi käyttäjätyytyväisyys ja hyväksyntä"
          ],
          "steps": [
            {
              "text": "Käyttäjäpersoonien käyttö loppukäyttäjien tarpeiden ja odotusten ymmärtämiseksi.",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas"
            },
            {
              "text": "Suorita käyttäjätutkimus kerätäksesi tietoa siitä, miten hyödyntäjät ovat vuorovaikutuksessa ekosysteemipalveluiden tai API-sovelluksia käyttävien sovellusten kanssa.",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas"
            },
            {
              "text": "Dokumentoi käyttäjäkokemusta koskevat vaatimukset, jotta niitä voidaan käyttää API-suunnittelussa ja varmistaa, että ne ovat intuitiivisia ja helppokäyttöisiä.",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas"
            }
          ],
          "questions": [
            "Käyttäjäpersoonien käyttö loppukäyttäjien tarpeiden ja odotusten ymmärtämiseksi.",
            "Suorita käyttäjätutkimus kerätäksesi tietoa siitä, miten hyödyntäjät ovat vuorovaikutuksessa ekosysteemipalveluiden tai API-sovelluksia käyttävien sovellusten kanssa.",
            "Dokumentoi käyttäjäkokemusta koskevat vaatimukset, jotta niitä voidaan käyttää API-suunnittelussa ja varmistaa, että ne ovat intuitiivisia ja helppokäyttöisiä.",
            "Tarjotaan käyttäjäkokemusta koskevia ohjeita, malleja ja työkaluja API-suunnittelua varten. Varmistetaan, että tiimit noudattavat käyttäjäkeskeisiä suunnittelukäytäntöjä ja sisällyttävät käyttäjäpalautteen API-iteraatioihin.",
            "APIt eivät ole vain teknisiä tuotteita, vaan ne ovat myös käyttäjälle näkyviä tuotteita. Huono käyttökokemus voi johtaa vähäiseen käyttöön ja turhautumiseen. Tämä asema auttaa tiimejä suunnittelemaan APIt, jotka ovat käyttäjäystävällisiä ja vastaavat hyödyntäjien tarpeita."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-consumer-experience",
          "slug": "method/api-consumer-experience",
          "icon": "deployed-code-account-outline",
          "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
          "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut.",
          "whyItMatters": "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
          "applyInWork": "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "strategy",
          "outcomes": [
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
            "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
            "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
            "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta"
          ],
          "steps": [
            {
              "text": "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
              "resourceId": "apiValuePropositionCanvas",
              "resourceTitle": "API-arvolupauskanvas",
              "canvasId": "apiValuePropositionCanvas"
            },
            {
              "text": "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
              "resourceId": "customerJourneyCanvas",
              "resourceTitle": "Asiakaspolkukanvas",
              "canvasId": "customerJourneyCanvas"
            },
            {
              "text": "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
              "resourceId": "api-onboarding-best-practices",
              "resourceTitle": "API-käyttöönoton parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
            "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
            "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
            "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
            "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista."
          ],
          "criteria": [
            "api-opportunity-documented",
            "api-reusability",
            "hide-backend-discrepancies",
            "value-prop-validated",
            "consumer-segments-identified",
            "api-roadmap-defined"
          ],
          "criteriaDetails": [
            {
              "id": "api-opportunity-documented",
              "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
              "description": "Individual API opportunities are identified and documented."
            },
            {
              "id": "api-reusability",
              "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
              "description": "The API meets a clear business need and is reusable for multiple API consumers."
            },
            {
              "id": "hide-backend-discrepancies",
              "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
              "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
            },
            {
              "id": "value-prop-validated",
              "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
              "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
            },
            {
              "id": "consumer-segments-identified",
              "title": "Hyödyntäjäsegmentit on tunnistettu.",
              "description": "API consumer segments (internal and external) are identified."
            },
            {
              "id": "api-roadmap-defined",
              "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
              "description": "High-level roadmaps for API development are established."
            }
          ],
          "stakeholders": [
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "consumerExperienceRequirementsCanvas",
                  "resourceTitle": "Hyödyntäjäkokemuksen vaatimuskanvas",
                  "canvasId": "consumerExperienceRequirementsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "customer-specialist",
              "sourceKey": "customer-specialist",
              "sourceStakeholderId": "customer-specialist",
              "title": "Asiakas- tai kumppaniedustaja",
              "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "partner-specialist",
              "sourceKey": "partner-specialist",
              "sourceStakeholderId": "partner-specialist",
              "title": "Kumppani- ja toimittajavastaava",
              "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "design-artifact",
            "documentation",
            "consumer-feedback"
          ]
        },
        {
          "id": "market-insights",
          "slug": "method/market-insights",
          "icon": "area-chart-outline",
          "title": "Markkinatietoa - API-maiseman ymmärtäminen",
          "description": "Analysoi markkinasuuntauksia, kilpailijoiden rajapintoja ja alan standardeja rajapintastrategian laatimiseksi.",
          "whyItMatters": "Markkinatilanteen ymmärtäminen auttaa tiimejä tunnistamaan mahdollisuuksia, välttämään sudenkuoppia ja mukauttamaan rajapintansa alan standardeihin. Tämä asema tarjoaa työkaluja markkinasuuntausten ja kilpailijoiden tarjonnan analysointiin.",
          "applyInWork": "Tarjotaan markkinatutkimustyökaluja, kilpailija-analyysimalleja ja alan standardeja koskevia resursseja. Varmistetaan, että tiimit pysyvät ajan tasalla markkinasuuntauksista ja sisällyttävät näkemykset API-strategiaan.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Markkinatrendit ja kilpailijoiden APIt analysoitu",
            "Määritetyt alan standardit ja parhaat käytännöt",
            "API-strategia linjassa markkinoiden tarpeiden kanssa",
            "Markkinatietoon perustuva tietoon perustuva päätöksenteko"
          ],
          "steps": [
            {
              "text": "Markkinatutkimuksen tekeminen API-toimialalla vallitsevien suuntausten, mahdollisuuksien ja uhkien tunnistamiseksi.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Analysoi kilpailijoiden rajapinnat ymmärtämään niiden vahvuudet, heikkoudet ja ainutlaatuiset myyntivaltit.",
              "resourceId": "competitor-analysis-template",
              "resourceTitle": "Kilpailija-analyysimalli",
              "canvasId": null
            },
            {
              "text": "Tunnistetaan alan standardit ja parhaat käytännöt, jotta voidaan varmistaa, että rajapinnat ovat kilpailukykyisiä ja yhteensopivia.",
              "resourceId": "industry-standards-and-best-practices",
              "resourceTitle": "Alan standardit ja parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Markkinatutkimuksen tekeminen API-toimialalla vallitsevien suuntausten, mahdollisuuksien ja uhkien tunnistamiseksi.",
            "Analysoi kilpailijoiden rajapinnat ymmärtämään niiden vahvuudet, heikkoudet ja ainutlaatuiset myyntivaltit.",
            "Tunnistetaan alan standardit ja parhaat käytännöt, jotta voidaan varmistaa, että rajapinnat ovat kilpailukykyisiä ja yhteensopivia.",
            "Tarjotaan markkinatutkimustyökaluja, kilpailija-analyysimalleja ja alan standardeja koskevia resursseja. Varmistetaan, että tiimit pysyvät ajan tasalla markkinasuuntauksista ja sisällyttävät näkemykset API-strategiaan.",
            "Markkinatilanteen ymmärtäminen auttaa tiimejä tunnistamaan mahdollisuuksia, välttämään sudenkuoppia ja mukauttamaan rajapintansa alan standardeihin. Tämä asema tarjoaa työkaluja markkinasuuntausten ja kilpailijoiden tarjonnan analysointiin."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-platform-architecture",
          "slug": "method/api-platform-architecture",
          "icon": "code-blocks-outline",
          "title": "Arkkitehtuuri- ja alustapäätökset",
          "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan.",
          "whyItMatters": "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista.",
          "applyInWork": "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "architecture",
          "outcomes": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle"
          ],
          "steps": [
            {
              "text": "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
              "resourceId": "businessImpactCanvas",
              "resourceTitle": "Liiketoimintavaikutuskanvas",
              "canvasId": "businessImpactCanvas"
            },
            {
              "text": "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
              "resourceId": "locationsCanvas",
              "resourceTitle": "Sijaintikanvas",
              "canvasId": "locationsCanvas"
            },
            {
              "text": "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
              "resourceId": "capacityCanvas",
              "resourceTitle": "Kapasiteettikanvas",
              "canvasId": "capacityCanvas"
            },
            {
              "text": "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
              "resourceId": "api-metrics-and-analytics",
              "resourceTitle": "API-mittarit ja analytiikka",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "criteria": [
            "api-reusability",
            "hide-backend-discrepancies",
            "value-prop-validated",
            "consumer-segments-identified",
            "api-roadmap-defined"
          ],
          "criteriaDetails": [
            {
              "id": "api-reusability",
              "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
              "description": "The API meets a clear business need and is reusable for multiple API consumers."
            },
            {
              "id": "hide-backend-discrepancies",
              "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
              "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
            },
            {
              "id": "value-prop-validated",
              "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
              "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders."
            },
            {
              "id": "consumer-segments-identified",
              "title": "Hyödyntäjäsegmentit on tunnistettu.",
              "description": "API consumer segments (internal and external) are identified."
            },
            {
              "id": "api-roadmap-defined",
              "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
              "description": "High-level roadmaps for API development are established."
            }
          ],
          "stakeholders": [
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "lead",
              "responsibilities": [
                {
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-architect",
              "sourceKey": "api-architect",
              "sourceStakeholderId": "api-architect",
              "title": "API-arkkitehti",
              "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "locationsCanvas",
                  "resourceTitle": "Sijaintikanvas",
                  "canvasId": "locationsCanvas",
                  "role": "suggested-answer-owner"
                },
                {
                  "resourceId": "capacityCanvas",
                  "resourceTitle": "Kapasiteettikanvas",
                  "canvasId": "capacityCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "core",
              "responsibilities": [
                {
                  "resourceId": "businessImpactCanvas",
                  "resourceTitle": "Liiketoimintavaikutuskanvas",
                  "canvasId": "businessImpactCanvas",
                  "role": "suggested-answer-owner"
                }
              ]
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics"
          ]
        },
        {
          "id": "business-goals",
          "slug": "method/business-goals",
          "icon": "business-center-outline",
          "title": "Liiketoiminnalliset tavoitteet - Kohdista rajapinnat liiketoimintatavoitteisiin.",
          "description": "Varmistetaan, että rajapinnat ovat linjassa liiketoiminnan tavoitteiden kanssa ja edistävät organisaation yleisiä tavoitteita.",
          "whyItMatters": "Rajapintoja ei pidä rakentaa erillään, vaan niiden on tuettava ja edistettävä liiketoiminnan tavoitteita. Tämä asema auttaa tiimejä sovittamaan rajapinnat strategisiin tavoitteisiin ja varmistamaan, että ne tuottavat todellista liiketoiminta-arvoa.",
          "applyInWork": "Tarjotaan liiketoimintasuuntautumiskehyksiä, malleja ja työkaluja API-liiketoiminta-arvon määrittelyyn. Varmistetaan, että tiimit tarkistavat ja sovittavat sovellusrajapinnat säännöllisesti yhteen muuttuvien liiketoimintatavoitteiden kanssa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "APIt linjassa liiketoiminnan tavoitteiden kanssa",
            "Kullekin Rajapinnalle määritelty selkeä liiketoiminta-arvo",
            "Sidosryhmien sitoutuminen ja tuki API-aloitteille",
            "APIt edistävät organisaation menestystä"
          ],
          "steps": [
            {
              "text": "Määrittele liiketoimintatavoitteet ja se, miten rajapinnat voivat tukea niitä käyttämällä **liiketoimintamallia (Business Model Canvas**). Jos liiketoimintasi tarkoituksena on tarjota rajapintoja, käy läpi *API-tuotestrategia-asema* ja täytä **API-liiketoimintamalli Canvas**.",
              "resourceId": "apiBusinessModelCanvas",
              "resourceTitle": "API-liiketoimintamallikanvas",
              "canvasId": "apiBusinessModelCanvas"
            },
            {
              "text": "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
              "resourceId": "api-metrics-and-analytics",
              "resourceTitle": "API-mittarit ja analytiikka",
              "canvasId": null
            },
            {
              "text": "Sidosryhmien sitouttaminen varmistamaan API-aloitteiden yhdenmukaisuus ja tuki.",
              "resourceId": "stakeholder-engagement-best-practices",
              "resourceTitle": "Sidosryhmien sitouttamisen parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele liiketoimintatavoitteet ja se, miten rajapinnat voivat tukea niitä käyttämällä **liiketoimintamallia (Business Model Canvas**). Jos liiketoimintasi tarkoituksena on tarjota rajapintoja, käy läpi *API-tuotestrategia-asema* ja täytä **API-liiketoimintamalli Canvas**.",
            "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
            "Sidosryhmien sitouttaminen varmistamaan API-aloitteiden yhdenmukaisuus ja tuki.",
            "Tarjotaan liiketoimintasuuntautumiskehyksiä, malleja ja työkaluja API-liiketoiminta-arvon määrittelyyn. Varmistetaan, että tiimit tarkistavat ja sovittavat sovellusrajapinnat säännöllisesti yhteen muuttuvien liiketoimintatavoitteiden kanssa.",
            "Rajapintoja ei pidä rakentaa erillään, vaan niiden on tuettava ja edistettävä liiketoiminnan tavoitteita. Tämä asema auttaa tiimejä sovittamaan rajapinnat strategisiin tavoitteisiin ja varmistamaan, että ne tuottavat todellista liiketoiminta-arvoa."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-design",
          "slug": "method/api-design",
          "icon": "api",
          "title": "Ratkaisu- ja rajapintasuunnittelu",
          "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu.",
          "whyItMatters": "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi.",
          "applyInWork": "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "design",
          "outcomes": [
            "Validoitu rajapintasopimus valitulle toteutustavalle",
            "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
            "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
            "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa"
          ],
          "steps": [
            {
              "text": "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
              "resourceId": "domainCanvas",
              "resourceTitle": "Toimialuekanvas",
              "canvasId": "domainCanvas"
            },
            {
              "text": "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
              "resourceId": "interactionCanvas",
              "resourceTitle": "Vuorovaikutuskanvas",
              "canvasId": "interactionCanvas"
            },
            {
              "text": "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
              "resourceId": "restCanvas",
              "resourceTitle": "REST-kanvas",
              "canvasId": "restCanvas"
            },
            {
              "text": "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
              "resourceId": "eventCanvas",
              "resourceTitle": "Tapahtumakanvas",
              "canvasId": "eventCanvas"
            },
            {
              "text": "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
              "resourceId": "graphqlCanvas",
              "resourceTitle": "GraphQL-kanvas",
              "canvasId": "graphqlCanvas"
            },
            {
              "text": "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
              "resourceId": "api-design-principles",
              "resourceTitle": "API-suunnitteluperiaatteet",
              "canvasId": null
            },
            {
              "text": "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
              "resourceId": "contract-first-design",
              "resourceTitle": "Sopimuslähtöinen suunnittelu",
              "canvasId": null
            },
            {
              "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
            "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
            "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
            "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
            "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
            "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti.",
            "Sovella contract-first- tai design-first-lähestymistapaa rajapintasopimuksen kuvaamiseen ja validointiin ennen toteutusta.",
            "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että suunnittelu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
            "Valitse valittuun toteutustapaan sopivat suunnitteluresurssit ja dokumentoi rajapintasopimus ennen toteutusta.",
            "Kun arkkitehtuurimalli on tiedossa, suunnittelun on muutettava kyvykkyysvaatimukset selkeiksi rajapintasopimuksiksi, vuorovaikutuksiksi, skeemoiksi, datasäännöiksi, elinkaariodotuksiksi ja hyödyntäjien velvoitteiksi."
          ],
          "criteria": [
            "architecture-patterns-validated",
            "hide-backend-discrepancies",
            "design-reflects-business-value",
            "api-consistency"
          ],
          "criteriaDetails": [
            {
              "id": "architecture-patterns-validated",
              "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
              "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
            },
            {
              "id": "hide-backend-discrepancies",
              "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
              "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
            },
            {
              "id": "design-reflects-business-value",
              "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
              "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
            },
            {
              "id": "api-consistency",
              "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
              "description": "The API design follows our shared API product and design conventions."
            }
          ],
          "stakeholders": [
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "spec",
            "contract",
            "design-artifact",
            "documentation"
          ]
        },
        {
          "id": "competitive-analysis",
          "slug": "method/competitive-analysis",
          "icon": "trophy-outline",
          "title": "Kilpailuanalyysi - pysy kärjessä API-markkinoilla",
          "description": "Analysoi kilpailijoiden rajapinnat vahvuuksien, heikkouksien ja erottautumismahdollisuuksien tunnistamiseksi.",
          "whyItMatters": "Kilpailutilanteen ymmärtäminen auttaa tiimejä tunnistamaan API-rajapintojensa puutteet, mahdollisuudet ja parannuskohteet. Tämä asema tarjoaa työkaluja kilpailijoiden analysointiin ja API-strategian laatimiseen.",
          "applyInWork": "Tarjotaan kilpailuanalyysityökaluja, malleja ja resursseja. Varmistetaan, että tiimit analysoivat säännöllisesti kilpailijoita ja sisällyttävät näkemykset API-strategiaan ja -suunnitteluun.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Kilpailijoiden rajapintojen vahvuudet ja heikkoudet analysoidaan.",
            "Eriyttämismahdollisuudet tunnistettu",
            "API-strategia, joka perustuu kilpailutietoon",
            "Lisääntynyt kilpailukyky API-markkinoilla"
          ],
          "steps": [
            {
              "text": "Suorita kilpailija-analyysi tärkeimpien kilpailijoiden, niiden API-tarjonnan sekä niiden vahvuuksien ja heikkouksien tunnistamiseksi.",
              "resourceId": "competitor-analysis-template",
              "resourceTitle": "Kilpailija-analyysimalli",
              "canvasId": null
            },
            {
              "text": "Tunnista markkinapuutteet, jotka rajapintasi voivat täyttää kilpailijoiden tarjonnan perusteella.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Kehitä erottautumisstrategia, jossa korostetaan rajapintojesi ainutlaatuisia ominaisuuksia ja etuja.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            }
          ],
          "questions": [
            "Suorita kilpailija-analyysi tärkeimpien kilpailijoiden, niiden API-tarjonnan sekä niiden vahvuuksien ja heikkouksien tunnistamiseksi.",
            "Tunnista markkinapuutteet, jotka rajapintasi voivat täyttää kilpailijoiden tarjonnan perusteella.",
            "Kehitä erottautumisstrategia, jossa korostetaan rajapintojesi ainutlaatuisia ominaisuuksia ja etuja.",
            "Tarjotaan kilpailuanalyysityökaluja, malleja ja resursseja. Varmistetaan, että tiimit analysoivat säännöllisesti kilpailijoita ja sisällyttävät näkemykset API-strategiaan ja -suunnitteluun.",
            "Kilpailutilanteen ymmärtäminen auttaa tiimejä tunnistamaan API-rajapintojensa puutteet, mahdollisuudet ja parannuskohteet. Tämä asema tarjoaa työkaluja kilpailijoiden analysointiin ja API-strategian laatimiseen."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-delivery",
          "slug": "method/api-delivery",
          "icon": "code",
          "title": "Toimitus ja operointi",
          "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä.",
          "whyItMatters": "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa.",
          "applyInWork": "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "delivery",
          "outcomes": [
            "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
            "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
            "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
            "Jäljitettävät toimitus- ja julkaisukontrollit"
          ],
          "steps": [
            {
              "text": "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
              "resourceId": "api-development-best-practices",
              "resourceTitle": "API-kehityksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
              "resourceId": "api-development-best-practices",
              "resourceTitle": "API-kehityksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
              "resourceId": "api-testing-best-practices",
              "resourceTitle": "API-testauksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            },
            {
              "text": "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
              "resourceId": "api-security-best-practices",
              "resourceTitle": "API-turvallisuuden parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
            "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
            "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
            "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
            "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
            "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
            "Sovella toimituksen, testauksen, CI/CD:n, operoinnin ja tietoturvan ohjeistusta valittuun toteutustapaan.",
            "Uudelleenkäytettävä kyvykkyys tarvitsee luotettavan toimituksen ja operoinnin riippumatta siitä, toteutuuko se APIlla, tapahtumavirtana, tiedostosiirtona, datatuotteena vai suorana integraationa."
          ],
          "criteria": [
            "architecture-patterns-validated",
            "hide-backend-discrepancies",
            "design-reflects-business-value",
            "api-consistency"
          ],
          "criteriaDetails": [
            {
              "id": "architecture-patterns-validated",
              "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
              "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
            },
            {
              "id": "hide-backend-discrepancies",
              "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
              "description": "The API is intended to shield consumers from backend complexity and inconsistencies."
            },
            {
              "id": "design-reflects-business-value",
              "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
              "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
            },
            {
              "id": "api-consistency",
              "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
              "description": "The API design follows our shared API product and design conventions."
            }
          ],
          "stakeholders": [
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "partner-specialist",
              "sourceKey": "partner-specialist",
              "sourceStakeholderId": "partner-specialist",
              "title": "Kumppani- ja toimittajavastaava",
              "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "implementation",
            "pipeline-config",
            "test-report",
            "security-report"
          ]
        },
        {
          "id": "ecosystem-vision",
          "slug": "method/ecosystem-vision",
          "icon": "globe-book-rounded",
          "title": "Ekosysteemin visio - Rakenna rajapinnat kukoistavaa ekosysteemiä varten.",
          "description": "Luo visio siitä, miten rajapintasi sopivat laajempaan ekosysteemiin, joka mahdollistaa yhteistyön ja innovoinnin.",
          "whyItMatters": "APIt eivät ole itsenäisiä tuotteita, vaan osa laajempaa ekosysteemiä. Tämä asema auttaa tiimejä määrittelemään, miten niiden rajapinnat ovat vuorovaikutuksessa muiden järjestelmien, alustojen ja palvelujen kanssa, jotta voidaan luoda kukoistava ekosysteemi, joka edistää yhteistyötä ja innovointia.",
          "applyInWork": "Tarjotaan ekosysteemin visiokehykset, kumppanien sitouttamisstrategiat ja integrointiohjeet. Varmistaa, että tiimit suunnittelevat rajapinnat ekosysteemiä silmällä pitäen ja edistävät kumppanien välistä yhteistyötä.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Selkeä ekosysteemin visio rajapinnoille",
            "APIt, jotka on suunniteltu mahdollistamaan yhteistyö ja integrointi",
            "Ekosysteemikumppanit tunnistetaan ja otetaan mukaan",
            "APIt edistävät elinvoimaista ekosysteemiä"
          ],
          "steps": [
            {
              "text": "Määrittele rajapintojesi ekosysteemivisio, mukaan lukien se, miten ne ovat vuorovaikutuksessa muiden järjestelmien ja alustojen kanssa.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Tunnistetaan tärkeimmät ekosysteemikumppanit ja sidosryhmät, jotka hyötyvät ekosysteemistä tai osallistuvat siihen.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Suunnittele rajapinnat, jotka mahdollistavat saumattoman integroinnin ja yhteistyön ekosysteemissä.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele rajapintojesi ekosysteemivisio, mukaan lukien se, miten ne ovat vuorovaikutuksessa muiden järjestelmien ja alustojen kanssa.",
            "Tunnistetaan tärkeimmät ekosysteemikumppanit ja sidosryhmät, jotka hyötyvät ekosysteemistä tai osallistuvat siihen.",
            "Suunnittele rajapinnat, jotka mahdollistavat saumattoman integroinnin ja yhteistyön ekosysteemissä.",
            "Tarjotaan ekosysteemin visiokehykset, kumppanien sitouttamisstrategiat ja integrointiohjeet. Varmistaa, että tiimit suunnittelevat rajapinnat ekosysteemiä silmällä pitäen ja edistävät kumppanien välistä yhteistyötä.",
            "APIt eivät ole itsenäisiä tuotteita, vaan osa laajempaa ekosysteemiä. Tämä asema auttaa tiimejä määrittelemään, miten niiden rajapinnat ovat vuorovaikutuksessa muiden järjestelmien, alustojen ja palvelujen kanssa, jotta voidaan luoda kukoistava ekosysteemi, joka edistää yhteistyötä ja innovointia."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-audit",
          "slug": "method/api-audit",
          "icon": "check-box-outline",
          "title": "Laadun ja valmiuden varmistus",
          "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua.",
          "whyItMatters": "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä.",
          "applyInWork": "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "publishing",
          "outcomes": [
            "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
            "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
            "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
            "Pienempi riski tuotannon ongelmille"
          ],
          "steps": [
            {
              "text": "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            },
            {
              "text": "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
              "resourceId": "api-compliance-best-practices",
              "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
              "resourceTitle": "",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
            "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
            "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
            "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
            "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä."
          ],
          "criteria": [
            "architecture-patterns-validated",
            "design-reflects-business-value",
            "api-description-available",
            "api-consistency",
            "api-contract-tested"
          ],
          "criteriaDetails": [
            {
              "id": "architecture-patterns-validated",
              "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
              "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders."
            },
            {
              "id": "design-reflects-business-value",
              "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
              "description": "The API design and exposed capabilities clearly trace back to business value and user needs."
            },
            {
              "id": "api-description-available",
              "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
              "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding."
            },
            {
              "id": "api-consistency",
              "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
              "description": "The API design follows our shared API product and design conventions."
            },
            {
              "id": "api-contract-tested",
              "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
              "description": "The API contract is tested and meets functional and non-functional requirements."
            }
          ],
          "stakeholders": [
            {
              "id": "governance-specialist",
              "sourceKey": "governance-specialist",
              "sourceStakeholderId": "governance-specialist",
              "title": "API-hallinnan omistaja",
              "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-designer",
              "sourceKey": "api-designer",
              "sourceStakeholderId": "api-designer",
              "title": "API-suunnittelija",
              "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "audit-report",
            "compliance-report",
            "security-report",
            "test-report"
          ]
        },
        {
          "id": "scalable-infrastructure",
          "slug": "method/scalable-infrastructure",
          "icon": "cloud-done-outline",
          "title": "Skaalautuva infrastruktuuri - rakenna APIt vankalle perustalle",
          "description": "Varmistetaan, että API-infrastruktuurisi voi skaalautua vastaamaan kasvavaa kysyntää ja tukea korkeaa käytettävyyttä.",
          "whyItMatters": "APIt on rakennettava vankalle infrastruktuurille, joka kestää kasvavan liikenteen ja varmistaa korkean käytettävyyden. Tämä asema tarjoaa ohjeita APIn kasvua ja suorituskykyä tukevan skaalautuvan infrastruktuurin suunnitteluun ja toteuttamiseen.",
          "applyInWork": "Tarjotaan infrastruktuurin suunnitteluohjeita, pilvipohjaisia malleja ja valvontatyökaluja. Varmistetaan, että tiimit ottavat käyttöön skaalautuvan infrastruktuurin, joka pystyy mukautumaan muuttuviin vaatimuksiin ja tukemaan API-suorituskykyä.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Skaalautuva ja joustava API-infrastruktuuri",
            "Korkea käytettävyys ja suorituskyky kuormitettuna",
            "Tulevaa kasvua varten suunniteltu infrastruktuuri",
            "Vähentää käyttökatkoksia ja parantaa käyttäjäkokemusta"
          ],
          "steps": [
            {
              "text": "Suunnittele API-infrastruktuuri skaalautuvaksi ja joustavaksi käyttäen pilvipohjaisia malleja ja teknologioita.",
              "resourceId": "scalable-infrastructure-best-practices",
              "resourceTitle": "Skaalautuvan infrastruktuurin parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Toteuta kuorman tasapainottaminen, välimuistitallennus ja muut tekniikat korkean käytettävyyden ja suorituskyvyn varmistamiseksi. Kerää infrastruktuurivaatimukset API-tiimeiltä Capacity Canvasin avulla.",
              "resourceId": "capacityCanvas",
              "resourceTitle": "Kapasiteettikanvas",
              "canvasId": "capacityCanvas"
            },
            {
              "text": "Seuraa infrastruktuurin suorituskykyä ja kapasiteettia sen varmistamiseksi, että se pystyy vastaamaan kasvavaan kysyntään.",
              "resourceId": "scalable-infrastructure-best-practices",
              "resourceTitle": "Skaalautuvan infrastruktuurin parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Suunnittele API-infrastruktuuri skaalautuvaksi ja joustavaksi käyttäen pilvipohjaisia malleja ja teknologioita.",
            "Toteuta kuorman tasapainottaminen, välimuistitallennus ja muut tekniikat korkean käytettävyyden ja suorituskyvyn varmistamiseksi. Kerää infrastruktuurivaatimukset API-tiimeiltä Capacity Canvasin avulla.",
            "Seuraa infrastruktuurin suorituskykyä ja kapasiteettia sen varmistamiseksi, että se pystyy vastaamaan kasvavaan kysyntään.",
            "Tarjotaan infrastruktuurin suunnitteluohjeita, pilvipohjaisia malleja ja valvontatyökaluja. Varmistetaan, että tiimit ottavat käyttöön skaalautuvan infrastruktuurin, joka pystyy mukautumaan muuttuviin vaatimuksiin ja tukemaan API-suorituskykyä.",
            "APIt on rakennettava vankalle infrastruktuurille, joka kestää kasvavan liikenteen ja varmistaa korkean käytettävyyden. Tämä asema tarjoaa ohjeita APIn kasvua ja suorituskykyä tukevan skaalautuvan infrastruktuurin suunnitteluun ja toteuttamiseen."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-publishing",
          "slug": "method/api-publishing",
          "icon": "deployed-code-outline",
          "title": "Julkaisu ja käyttöönoton mahdollistaminen",
          "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea.",
          "whyItMatters": "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
          "applyInWork": "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "publishing",
          "outcomes": [
            "Löydettävä uudelleenkäytettävä kyvykkyys",
            "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
            "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
            "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä"
          ],
          "steps": [
            {
              "text": "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            },
            {
              "text": "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
              "resourceId": "api-onboarding-best-practices",
              "resourceTitle": "API-käyttöönoton parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            }
          ],
          "questions": [
            "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
            "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
            "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
            "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
            "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset."
          ],
          "criteria": [
            "audit-passed",
            "audit-reports-shared",
            "api-ready-for-publishing",
            "api-documentation-ready"
          ],
          "criteriaDetails": [
            {
              "id": "audit-passed",
              "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
              "description": "The API passes compliance, security, and audit checks."
            },
            {
              "id": "audit-reports-shared",
              "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
              "description": "Audit findings and remediation decisions are shared with the relevant stakeholders."
            },
            {
              "id": "api-ready-for-publishing",
              "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
              "description": "The API is ready to be deployed and exposed through the intended gateways and environments."
            },
            {
              "id": "api-documentation-ready",
              "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
              "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
            }
          ],
          "stakeholders": [
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "partner-specialist",
              "sourceKey": "partner-specialist",
              "sourceStakeholderId": "partner-specialist",
              "title": "Kumppani- ja toimittajavastaava",
              "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "gateway-config",
            "developer-portal",
            "documentation",
            "release-record"
          ]
        },
        {
          "id": "legal-and-compliance",
          "slug": "method/legal-and-compliance",
          "icon": "gavel-rounded",
          "title": "Lainsäädäntö ja vaatimustenmukaisuus - varmista, että APIt täyttävät sääntelystandardit.",
          "description": "Varmistetaan, että rajapinnat noudattavat lakisääteisiä ja lainsäädännöllisiä vaatimuksia ja suojaavat organisaatiota ja käyttäjiä.",
          "whyItMatters": "API-rajapintojen on noudatettava oikeudellisia ja sääntelystandardeja organisaation ja käyttäjien suojelemiseksi. Tämä asema tarjoaa työkaluja ja ohjeita, joilla varmistetaan, että rajapinnat täyttävät vaatimustenmukaisuusvaatimukset, vähennetään oikeudellisia riskejä ja varmistetaan tietosuoja.",
          "applyInWork": "Tarjotaan oikeudellisia ja vaatimustenmukaisuutta koskevia puitteita, tarkistuslistoja ja työkaluja API-vaatimustenmukaisuuden varmistamiseksi. Varmistetaan, että tiimit ymmärtävät ja panevat täytäntöön oikeudelliset vaatimukset APIn suunnittelussa, kehittämisessä ja julkaisemisessa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Oikeudellisten ja sääntelystandardien mukaiset APIt",
            "Tietosuojaa ja yksityisyyden suojaa koskevat vaatimukset täyttyvät",
            "Oikeudellisten riskien tunnistaminen ja lieventäminen",
            "Vaatimustenmukaisuustoimenpiteiden selkeä dokumentointi"
          ],
          "steps": [
            {
              "text": "Tunnista rajapintoihin sovellettavat oikeudelliset ja sääntelyvaatimukset, kuten tietosuojaa, yksityisyyttä ja tietoturvaa koskevat vaatimukset.",
              "resourceId": "api-compliance-best-practices",
              "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
              "resourceId": "api-compliance-best-practices",
              "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
              "resourceId": "api-compliance-best-practices",
              "resourceTitle": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Tunnista rajapintoihin sovellettavat oikeudelliset ja sääntelyvaatimukset, kuten tietosuojaa, yksityisyyttä ja tietoturvaa koskevat vaatimukset.",
            "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
            "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
            "Tarjotaan oikeudellisia ja vaatimustenmukaisuutta koskevia puitteita, tarkistuslistoja ja työkaluja API-vaatimustenmukaisuuden varmistamiseksi. Varmistetaan, että tiimit ymmärtävät ja panevat täytäntöön oikeudelliset vaatimukset APIn suunnittelussa, kehittämisessä ja julkaisemisessa.",
            "API-rajapintojen on noudatettava oikeudellisia ja sääntelystandardeja organisaation ja käyttäjien suojelemiseksi. Tämä asema tarjoaa työkaluja ja ohjeita, joilla varmistetaan, että rajapinnat täyttävät vaatimustenmukaisuusvaatimukset, vähennetään oikeudellisia riskejä ja varmistetaan tietosuoja."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "monitoring-and-improving",
          "slug": "method/monitoring-and-improving",
          "icon": "analytics-outline",
          "title": "Seuranta ja parantaminen",
          "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen.",
          "whyItMatters": "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat.",
          "applyInWork": "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
          "group": "Kyvykkyyden elinkaaren ydinasemat",
          "lifecycleStage": "improving",
          "outcomes": [
            "Mitattu kyvykkyyden tila ja arvo",
            "Parannusjono, joka perustuu operatiiviseen ja hyödyntäjien palautteeseen",
            "Uudelleenkäytön, luotettavuuden, datan laadun ja kustannusten signaalit omistajien saatavilla",
            "Jatkuva parantaminen linjassa hyödyntäjien tarpeiden kanssa"
          ],
          "steps": [
            {
              "text": "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
              "resourceId": "api-metrics-and-analytics",
              "resourceTitle": "API-mittarit ja analytiikka",
              "canvasId": null
            },
            {
              "text": "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            },
            {
              "text": "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytä mittari- ja analytiikkaohjeistusta kyvykkyyden käytön, luotettavuuden, datan laadun, kustannusten, käyttöönoton ja hyödyntäjäarvon mittareiden määrittelyyn.",
            "Analysoi käyttömittareita ja ota hyödyntäjien palaute mukaan kyvykkyyden kehitysversioihin.",
            "Luo tapa tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia.",
            "Käytä mittareita, analytiikkaa ja osallistamisen käytäntöjä kyvykkyyden jatkuvaan parantamiseen.",
            "Kyvykkyydet tarvitsevat jatkuvaa palautetta pysyäkseen luotettavina, arvokkaina, kustannustehokkaina ja uudelleenkäytettävinä, kun hyödyntäjät, järjestelmät, data ja alustat muuttuvat."
          ],
          "criteria": [
            "api-documentation-ready",
            "consumer-support-ready",
            "legal-compliance-clear"
          ],
          "criteriaDetails": [
            {
              "id": "api-documentation-ready",
              "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
              "description": "Consumer-facing API documentation is complete enough for publishing and onboarding."
            },
            {
              "id": "consumer-support-ready",
              "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
              "description": "Registration, support, and communication processes are ready for API consumers."
            },
            {
              "id": "legal-compliance-clear",
              "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
              "description": "Legal, privacy, and compliance requirements for publishing are defined and understood."
            }
          ],
          "stakeholders": [
            {
              "id": "api-product-owner",
              "sourceKey": "api-product-owner",
              "sourceStakeholderId": "api-product-owner",
              "title": "API-tuoteomistaja",
              "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "automation-owner",
              "sourceKey": "automation-owner",
              "sourceStakeholderId": "automation-owner",
              "title": "Automaation omistaja",
              "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "integration-architect",
              "sourceKey": "integration-architect",
              "sourceStakeholderId": "integration-architect",
              "title": "Integraatioarkkitehti",
              "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "capability-owner",
              "sourceKey": "capability-owner",
              "sourceStakeholderId": "capability-owner",
              "title": "Kyvykkyyden omistaja",
              "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
              "involvement": "lead",
              "responsibilities": []
            },
            {
              "id": "platform-owner",
              "sourceKey": "platform-owner",
              "sourceStakeholderId": "platform-owner",
              "title": "Alustan omistaja",
              "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-consumer-specialist",
              "sourceKey": "api-consumer-specialist",
              "sourceStakeholderId": "api-consumer-specialist",
              "title": "API-hyödyntäjien edustaja",
              "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "automation-engineer",
              "sourceKey": "automation-engineer",
              "sourceStakeholderId": "automation-engineer",
              "title": "Automaatiokehittäjä",
              "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-devrel-specialist",
              "sourceKey": "api-devrel-specialist",
              "sourceStakeholderId": "api-devrel-specialist",
              "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
              "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "business-owner",
              "sourceKey": "business-owner",
              "sourceStakeholderId": "business-owner",
              "title": "Liiketoiminnan omistaja",
              "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "process-owner",
              "sourceKey": "process-owner",
              "sourceStakeholderId": "process-owner",
              "title": "Prosessin omistaja",
              "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "api-engineer",
              "sourceKey": "api-engineer",
              "sourceStakeholderId": "api-engineer",
              "title": "Toimituskehittäjä",
              "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "operations-specialist",
              "sourceKey": "operations-specialist",
              "sourceStakeholderId": "operations-specialist",
              "title": "Tuki- ja operaatioiden omistaja",
              "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
              "involvement": "core",
              "responsibilities": []
            },
            {
              "id": "platform-architect",
              "sourceKey": "platform-architect",
              "sourceStakeholderId": "platform-architect",
              "title": "Alusta-arkkitehti",
              "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "domain-specialist",
              "sourceKey": "domain-specialist",
              "sourceStakeholderId": "domain-specialist",
              "title": "Liiketoiminta-asiantuntija",
              "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "security-specialist",
              "sourceKey": "security-specialist",
              "sourceStakeholderId": "security-specialist",
              "title": "Turvallisuusasiantuntija",
              "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
              "involvement": "consulted",
              "responsibilities": []
            },
            {
              "id": "compliance-specialist",
              "sourceKey": "compliance-specialist",
              "sourceStakeholderId": "compliance-specialist",
              "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
              "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
              "involvement": "consulted",
              "responsibilities": []
            }
          ],
          "evidence": [
            "metrics",
            "consumer-feedback",
            "incident-report",
            "roadmap"
          ]
        },
        {
          "id": "security-and-privacy",
          "slug": "method/security-and-privacy",
          "icon": "cloud-lock-outline",
          "title": "Tietoturva ja yksityisyys - Suojaa APIt ja käyttäjät",
          "description": "Toteuta tietoturva- ja yksityisyydensuojatoimenpiteet, joilla suojataan rajapintoja ja käyttäjätietoja uhkilta ja tietoturvaloukkauksilta.",
          "whyItMatters": "APIt ovat alttiita tietoturvauhkille ja tietomurroille. Tämä asema tarjoaa ohjeita tietoturva- ja yksityisyydensuojatoimenpiteiden toteuttamiseen, joilla suojataan rajapintoja ja käyttäjätietoja ja varmistetaan luottamus ja vaatimustenmukaisuus.",
          "applyInWork": "Tarjotaan tietoturvakehyksiä, -työkaluja ja parhaita käytäntöjä rajapintojen turvallisuutta ja yksityisyyttä varten. Varmistaa, että tiimit toteuttavat tietoturvatoimenpiteitä koko APIn elinkaaren ajan suunnittelusta julkaisuun ja seurantaan.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Uhkia ja haavoittuvuuksia vastaan suojatut rajapinnat",
            "Käyttäjätiedot suojattu yksityisyydensuojatoimenpiteiden avulla",
            "Parhaat turvallisuuskäytännöt API-suunnittelussa ja -kehityksessä",
            "Turvallisuusstandardien ja -säännösten noudattaminen"
          ],
          "steps": [
            {
              "text": "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
              "resourceId": "api-security-best-practices",
              "resourceTitle": "API-turvallisuuden parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Varmistetaan käyttäjien tietojen yksityisyys toteuttamalla tietosuojatoimenpiteitä, kuten anonymisointi ja käyttöoikeuksien valvonta.",
              "resourceId": "data-privacy-guidelines",
              "resourceTitle": "Tietosuojaa koskevat ohjeet",
              "canvasId": null
            },
            {
              "text": "Suorittaa säännöllisiä tietoturvatarkastuksia ja haavoittuvuusarviointeja riskien tunnistamiseksi ja vähentämiseksi.",
              "resourceId": "",
              "resourceTitle": "",
              "canvasId": null
            }
          ],
          "questions": [
            "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
            "Varmistetaan käyttäjien tietojen yksityisyys toteuttamalla tietosuojatoimenpiteitä, kuten anonymisointi ja käyttöoikeuksien valvonta.",
            "Suorittaa säännöllisiä tietoturvatarkastuksia ja haavoittuvuusarviointeja riskien tunnistamiseksi ja vähentämiseksi.",
            "Tarjotaan tietoturvakehyksiä, -työkaluja ja parhaita käytäntöjä rajapintojen turvallisuutta ja yksityisyyttä varten. Varmistaa, että tiimit toteuttavat tietoturvatoimenpiteitä koko APIn elinkaaren ajan suunnittelusta julkaisuun ja seurantaan.",
            "APIt ovat alttiita tietoturvauhkille ja tietomurroille. Tämä asema tarjoaa ohjeita tietoturva- ja yksityisyydensuojatoimenpiteiden toteuttamiseen, joilla suojataan rajapintoja ja käyttäjätietoja ja varmistetaan luottamus ja vaatimustenmukaisuus."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "design-standards",
          "slug": "method/design-standards",
          "icon": "design-services-outline",
          "title": "Suunnittelustandardit - Varmistaa johdonmukainen ja laadukas API-suunnittelu.",
          "description": "Suunnittelustandardien ja -ohjeiden laatiminen, jotta varmistetaan yhdenmukainen ja laadukas API-suunnittelu koko organisaatiossa.",
          "whyItMatters": "Johdonmukainen ja laadukas API-suunnittelu on olennaisen tärkeää käytettävyyden, ylläpidettävyyden ja skaalautuvuuden kannalta. Tämä asema tarjoaa suunnittelustandardeja ja -ohjeita, joiden avulla tiimit voivat luoda rajapintoja, joita on helppo käyttää, ymmärtää ja ylläpitää.",
          "applyInWork": "Suunnittelustandardien dokumentointi, uudelleenkäytettävät komponentit ja suunnittelun tarkistusprosessit. Varmistetaan, että tiimit noudattavat suunnittelustandardeja ja tekevät säännöllisiä tarkistuksia laadukkaan API-suunnittelun ylläpitämiseksi.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Yhdenmukainen API-suunnittelu koko organisaatiossa",
            "Laadukkaat APIt, jotka vastaavat käyttäjien tarpeita",
            "Uudelleenkäytettävät suunnittelumallit ja komponentit",
            "Vähennetään suunnittelun epäjohdonmukaisuuksia ja teknistä velkaa."
          ],
          "steps": [
            {
              "text": "Määrittele API-suunnittelun suunnittelustandardit ja -ohjeet, mukaan lukien nimeämiskäytännöt, vastausmuodot ja virheenkäsittely.",
              "resourceId": "api-design-principles",
              "resourceTitle": "API-suunnitteluperiaatteet",
              "canvasId": null
            },
            {
              "text": "Luo uudelleenkäytettäviä suunnittelumalleja ja -komponentteja, joita tiimit voivat hyödyntää yhdenmukaisuuden ja laadun varmistamiseksi.",
              "resourceId": "",
              "resourceTitle": "",
              "canvasId": null
            },
            {
              "text": "Suoritat suunnittelun tarkastuksia ja auditointeja varmistaaksesi suunnittelustandardien noudattamisen ja yksilöidäksesi parannuskohteet.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele API-suunnittelun suunnittelustandardit ja -ohjeet, mukaan lukien nimeämiskäytännöt, vastausmuodot ja virheenkäsittely.",
            "Luo uudelleenkäytettäviä suunnittelumalleja ja -komponentteja, joita tiimit voivat hyödyntää yhdenmukaisuuden ja laadun varmistamiseksi.",
            "Suoritat suunnittelun tarkastuksia ja auditointeja varmistaaksesi suunnittelustandardien noudattamisen ja yksilöidäksesi parannuskohteet.",
            "Suunnittelustandardien dokumentointi, uudelleenkäytettävät komponentit ja suunnittelun tarkistusprosessit. Varmistetaan, että tiimit noudattavat suunnittelustandardeja ja tekevät säännöllisiä tarkistuksia laadukkaan API-suunnittelun ylläpitämiseksi.",
            "Johdonmukainen ja laadukas API-suunnittelu on olennaisen tärkeää käytettävyyden, ylläpidettävyyden ja skaalautuvuuden kannalta. Tämä asema tarjoaa suunnittelustandardeja ja -ohjeita, joiden avulla tiimit voivat luoda rajapintoja, joita on helppo käyttää, ymmärtää ja ylläpitää."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "vendor-management",
          "slug": "method/vendor-management",
          "icon": "handshake-outline",
          "title": "Toimittajan hallinta - Kolmannen osapuolen API-integraatioiden hallinta",
          "description": "Hallinnoi tehokkaasti kolmannen osapuolen API-toimittajia ja integraatioita luotettavuuden ja vaatimustenmukaisuuden varmistamiseksi.",
          "whyItMatters": "Kolmannen osapuolen rajapinnat voivat aiheuttaa riskejä ja riippuvuuksia, jotka vaikuttavat rajapintaekosysteemiisi. Tämä asema tarjoaa ohjeita toimittajasuhteiden hallintaan, luotettavuuden ja vaatimustenmukaisuuden varmistamiseen sekä API-strategian noudattamiseen.",
          "applyInWork": "Tarjotaan toimittajien hallintakehykset, arviointikriteerit ja seurantatyökalut. Varmistetaan, että tiimit hallinnoivat tehokkaasti kolmannen osapuolen API-toimittajia ja varmistavat luotettavuuden, vaatimustenmukaisuuden ja organisaation standardien noudattamisen.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Tehokkaat myyjien hallinnointiprosessit on otettu käyttöön",
            "Kolmannen osapuolen APIt integroituvat luotettavasti ja turvallisesti.",
            "Myyjä noudattaa organisaation standardeja",
            "Kolmannen osapuolen riippuvuuksiin liittyvien riskien vähentäminen"
          ],
          "steps": [
            {
              "text": "Ota käyttöön toimittajahallintaprosessit kolmansien osapuolten API-toimittajien arviointia, käyttöönottoa ja seurantaa varten.",
              "resourceId": "vendor-management-best-practices",
              "resourceTitle": "Toimittajien hallinnan parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Määrittele kriteerit toimittajien rajapintojen arviointia varten, mukaan lukien luotettavuus, turvallisuus ja vaatimustenmukaisuus.",
              "resourceId": "vendor-management-best-practices",
              "resourceTitle": "Toimittajien hallinnan parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Seuraa toimittajien suorituskykyä ja palvelutasosopimusten (SLA) ja organisaation standardien noudattamista.",
              "resourceId": "vendor-management-best-practices",
              "resourceTitle": "Toimittajien hallinnan parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Ota käyttöön toimittajahallintaprosessit kolmansien osapuolten API-toimittajien arviointia, käyttöönottoa ja seurantaa varten.",
            "Määrittele kriteerit toimittajien rajapintojen arviointia varten, mukaan lukien luotettavuus, turvallisuus ja vaatimustenmukaisuus.",
            "Seuraa toimittajien suorituskykyä ja palvelutasosopimusten (SLA) ja organisaation standardien noudattamista.",
            "Tarjotaan toimittajien hallintakehykset, arviointikriteerit ja seurantatyökalut. Varmistetaan, että tiimit hallinnoivat tehokkaasti kolmannen osapuolen API-toimittajia ja varmistavat luotettavuuden, vaatimustenmukaisuuden ja organisaation standardien noudattamisen.",
            "Kolmannen osapuolen rajapinnat voivat aiheuttaa riskejä ja riippuvuuksia, jotka vaikuttavat rajapintaekosysteemiisi. Tämä asema tarjoaa ohjeita toimittajasuhteiden hallintaan, luotettavuuden ja vaatimustenmukaisuuden varmistamiseen sekä API-strategian noudattamiseen."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "contract-design",
          "slug": "method/contract-design",
          "icon": "folder-code-outline",
          "title": "Sopimussuunnittelu - Määrittele selkeät API-sopimukset",
          "description": "Luo selkeät ja hyvin määritellyt API-sopimukset, joissa hahmotellaan odotukset, vastuut ja käyttöohjeet.",
          "whyItMatters": "API-rajapintasopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita selkeiden, kattavien ja helposti ymmärrettävien API-rajapintasopimusten suunnitteluun.",
          "applyInWork": "Tarjotaan sopimussuunnittelumalleja, standardoituja muotoja ja tarkistusprosesseja. Varmistetaan, että tiimit luovat selkeät ja hyvin määritellyt API-sopimukset, joissa hahmotellaan odotukset, vastuut ja käyttöohjeet.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Kullekin ajapinnalle määritellyt selkeät API-sopimukset",
            "API-toimittajien ja hyödyntäjien odotukset ja vastuut kuvattuina",
            "Käyttöohjeet ja parhaat käytännöt dokumentoitu",
            "APIn käyttöä koskevien väärinkäsitysten ja riitojen väheneminen."
          ],
          "steps": [
            {
              "text": "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
              "resourceId": "contract-first-design",
              "resourceTitle": "Sopimuslähtöinen suunnittelu",
              "canvasId": null
            },
            {
              "text": "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida.",
              "resourceId": "contract-first-design",
              "resourceTitle": "Sopimuslähtöinen suunnittelu",
              "canvasId": null
            },
            {
              "text": "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät API-sopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
              "resourceId": "api-audit-checklist",
              "resourceTitle": "API-auditoinnin tarkistuslista",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
            "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida.",
            "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät API-sopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
            "Tarjotaan sopimussuunnittelumalleja, standardoituja muotoja ja tarkistusprosesseja. Varmistetaan, että tiimit luovat selkeät ja hyvin määritellyt API-sopimukset, joissa hahmotellaan odotukset, vastuut ja käyttöohjeet.",
            "API-rajapintasopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita selkeiden, kattavien ja helposti ymmärrettävien API-rajapintasopimusten suunnitteluun."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "development",
          "slug": "method/development",
          "icon": "deployed-code-outline",
          "title": "Kehitys - Rakenna APIt parhaiden käytäntöjen avulla",
          "description": "Toteuta rajapinnat parhaiden käytäntöjen ja kehysten avulla laadun, ylläpidettävyyden ja skaalautuvuuden varmistamiseksi.",
          "whyItMatters": "APIn kehittäminen on kriittinen vaihe, joka määrittää APIn laadun ja luotettavuuden. Tämä asema tarjoaa parhaita käytäntöjä ja kehyksiä API-kehitystä varten, jotta varmistetaan, että APIt rakennetaan korkeiden standardien mukaisesti ja että niitä voidaan ylläpitää ja skaalata tehokkaasti.",
          "applyInWork": "Kehityskehysten, kirjastojen ja koodausstandardien tarjoaminen API-toteutusta varten. Varmistaa, että tiimit noudattavat parhaita käytäntöjä, ja suorittaa koodin tarkistuksia API-kehityksen laadun ylläpitämiseksi.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "parhaita käytäntöjä ja kehyksiä hyödyntävät rajapinnat",
            "Laadukkaat, ylläpidettävät ja skaalautuvat rajapinnat.",
            "Johdonmukaiset koodausstandardit ja -käytännöt",
            "Vähentää kehitysaikaa ja teknistä velkaa"
          ],
          "steps": [
            {
              "text": "Käytetään vakiintuneita kehyksiä ja kirjastoja rajapintojen toteuttamiseen ja varmistetaan, että ne ovat uudelleenkäytettäviä ja ylläpidettäviä.",
              "resourceId": "api-development-best-practices",
              "resourceTitle": "API-kehityksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
              "resourceId": "contract-first-design",
              "resourceTitle": "Sopimuslähtöinen suunnittelu",
              "canvasId": null
            },
            {
              "text": "Noudata koodausstandardeja ja parhaita käytäntöjä varmistaaksesi johdonmukaisen ja laadukkaan API-kehityksen.",
              "resourceId": "api-development-best-practices",
              "resourceTitle": "API-kehityksen parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytetään vakiintuneita kehyksiä ja kirjastoja rajapintojen toteuttamiseen ja varmistetaan, että ne ovat uudelleenkäytettäviä ja ylläpidettäviä.",
            "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
            "Noudata koodausstandardeja ja parhaita käytäntöjä varmistaaksesi johdonmukaisen ja laadukkaan API-kehityksen.",
            "Kehityskehysten, kirjastojen ja koodausstandardien tarjoaminen API-toteutusta varten. Varmistaa, että tiimit noudattavat parhaita käytäntöjä, ja suorittaa koodin tarkistuksia API-kehityksen laadun ylläpitämiseksi.",
            "APIn kehittäminen on kriittinen vaihe, joka määrittää APIn laadun ja luotettavuuden. Tämä asema tarjoaa parhaita käytäntöjä ja kehyksiä API-kehitystä varten, jotta varmistetaan, että APIt rakennetaan korkeiden standardien mukaisesti ja että niitä voidaan ylläpitää ja skaalata tehokkaasti."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "ci-cd",
          "slug": "method/ci-cd",
          "icon": "deployed-code-update-outline",
          "title": "CI/CD - Automatisoi API-kehitys",
          "description": "Ota käyttöön jatkuvan integroinnin ja jatkuvan toimituksen (CI/CD) putket API-kehityksen automatisoimiseksi ja tasaisen laadun varmistamiseksi.",
          "whyItMatters": "CI/CD on olennaisen tärkeää sen varmistamiseksi, että rajapinnat toimitetaan nopeasti, luotettavasti ja laadukkaasti. Tämä asema tarjoaa ohjeita CI/CD-putkien toteuttamiseen, jotka automatisoivat API-rajapintojen rakentamis-, testaus- ja käyttöönottoprosessit.",
          "applyInWork": "CI/CD-kehysten, työkalujen ja parhaiden käytäntöjen tarjoaminen API-kehitystä varten. Varmistetaan, että tiimit ottavat käyttöön automatisoidut putket, jotka tukevat APIen jatkuvaa integrointia, testausta ja käyttöönottoa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Automaattiset CI/CD-putket API-toimituksia varten.",
            "API-kehityksen tasainen laatu ja jäljitettävyys",
            "Nopeammat iteraatiot ja lyhyempi aika markkinoille saattamiseen",
            "Parempi yhteistyö ja palautekierrokset API-kehityksessä"
          ],
          "steps": [
            {
              "text": "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            },
            {
              "text": "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
              "resourceId": "api-testing-best-practices",
              "resourceTitle": "API-testauksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia.",
              "resourceId": "api-security-best-practices",
              "resourceTitle": "API-turvallisuuden parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytetään CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
            "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
            "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia.",
            "CI/CD-kehysten, työkalujen ja parhaiden käytäntöjen tarjoaminen API-kehitystä varten. Varmistetaan, että tiimit ottavat käyttöön automatisoidut putket, jotka tukevat APIen jatkuvaa integrointia, testausta ja käyttöönottoa.",
            "CI/CD on olennaisen tärkeää sen varmistamiseksi, että rajapinnat toimitetaan nopeasti, luotettavasti ja laadukkaasti. Tämä asema tarjoaa ohjeita CI/CD-putkien toteuttamiseen, jotka automatisoivat API-rajapintojen rakentamis-, testaus- ja käyttöönottoprosessit."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "test-automation",
          "slug": "method/test-automation",
          "icon": "deployed-code-alert-outline",
          "title": "Testausautomaatio - varmista API-laatu",
          "description": "Ota käyttöön automatisoituja testauskäytäntöjä APIn laadun, luotettavuuden ja suorituskyvyn varmistamiseksi.",
          "whyItMatters": "Automatisoitu testaus on ratkaisevan tärkeää sen varmistamiseksi, että rajapinnat toimivat oikein ja täyttävät laatuvaatimukset. Tämä asema tarjoaa ohjeita automaattisten testauskäytäntöjen käyttöönottoon, jotka kattavat APIen toiminnallisen, turvallisuus- ja suorituskykytestauksen.",
          "applyInWork": "Testausautomaatiokehysten, -työkalujen ja parhaiden käytäntöjen tarjoaminen API-testausta varten. Varmistetaan, että tiimit toteuttavat automatisoituja testejä, jotka kattavat APIen toiminnalliset, turvallisuus- ja suorituskykyyn liittyvät näkökohdat.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-rajapintojen automatisoidut testauskäytännöt",
            "Automaattiset toiminnalliset, turvallisuus- ja suorituskykytestit",
            "Vähentää manuaalisen testauksen työmäärää ja lisää testien kattavuutta",
            "APIn luotettavuuden ja laadun parantaminen"
          ],
          "steps": [
            {
              "text": "Käytetään automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin.",
              "resourceId": "api-testing-best-practices",
              "resourceTitle": "API-testauksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Toteuta testiautomaatiokehykset, jotka tukevat sopimustestausta, integrointitestausta ja päästä päähän -testausta.",
              "resourceId": "api-testing-best-practices",
              "resourceTitle": "API-testauksen parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            }
          ],
          "questions": [
            "Käytetään automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin.",
            "Toteuta testiautomaatiokehykset, jotka tukevat sopimustestausta, integrointitestausta ja päästä päähän -testausta.",
            "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
            "Testausautomaatiokehysten, -työkalujen ja parhaiden käytäntöjen tarjoaminen API-testausta varten. Varmistetaan, että tiimit toteuttavat automatisoituja testejä, jotka kattavat APIen toiminnalliset, turvallisuus- ja suorituskykyyn liittyvät näkökohdat.",
            "Automatisoitu testaus on ratkaisevan tärkeää sen varmistamiseksi, että rajapinnat toimivat oikein ja täyttävät laatuvaatimukset. Tämä asema tarjoaa ohjeita automaattisten testauskäytäntöjen käyttöönottoon, jotka kattavat APIen toiminnallisen, turvallisuus- ja suorituskykytestauksen."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "release-management",
          "slug": "method/release-management",
          "icon": "rocket-launch-outline",
          "title": "Julkaisunhallinta - Hallitse API-julkaisuja tehokkaasti",
          "description": "Ota käyttöön julkaisujen hallintakäytäntöjä sujuvien ja valvottujen API-julkaisujen varmistamiseksi.",
          "whyItMatters": "Tehokas julkaisujen hallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-julkaisut ovat sujuvia, hallittuja ja liiketoiminnan tarpeiden mukaisia. Tämä asema tarjoaa ohjeita API-julkaisujen hallintaan, mukaan lukien versiointi, käyttöönottostrategiat ja palautusmenettelyt.",
          "applyInWork": "Tarjotaan julkaisunhallintakehykset, versiointiohjeet ja käyttöönottostrategiat. Varmistetaan, että tiimit noudattavat parhaita käytäntöjä API-julkaisujen hallinnassa, mukaan lukien versiointi, käyttöönotto ja palautusmenettelyt.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Hallitut ja sujuvat API-julkaisut",
            "Versiointi- ja käyttöönottostrategioiden määrittely",
            "API-julkaisuja varten vahvistetut palautusmenettelyt",
            "API-muutoksiin liittyvien riskien vähentäminen"
          ],
          "steps": [
            {
              "text": "Määrittele rajapintojen versiointistrategiat muutosten hallitsemiseksi ja taaksepäin yhteensopivuuden varmistamiseksi.",
              "resourceId": "api-versioning-best-practices",
              "resourceTitle": "API-versionoinnin parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, canary releaset) API-julkaisuihin liittyvien riskien minimoimiseksi.",
              "resourceId": "apiops-CI-CD-for-apis",
              "resourceTitle": "APIOps CI/CD rajapinnoille",
              "canvasId": null
            },
            {
              "text": "Ota käyttöön palautusmenettelyt, jotta muutokset voidaan palauttaa nopeasti, jos API-julkaisujen aikana ilmenee ongelmia.",
              "resourceId": "",
              "resourceTitle": "",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele rajapintojen versiointistrategiat muutosten hallitsemiseksi ja taaksepäin yhteensopivuuden varmistamiseksi.",
            "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, canary releaset) API-julkaisuihin liittyvien riskien minimoimiseksi.",
            "Ota käyttöön palautusmenettelyt, jotta muutokset voidaan palauttaa nopeasti, jos API-julkaisujen aikana ilmenee ongelmia.",
            "Tarjotaan julkaisunhallintakehykset, versiointiohjeet ja käyttöönottostrategiat. Varmistetaan, että tiimit noudattavat parhaita käytäntöjä API-julkaisujen hallinnassa, mukaan lukien versiointi, käyttöönotto ja palautusmenettelyt.",
            "Tehokas julkaisujen hallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-julkaisut ovat sujuvia, hallittuja ja liiketoiminnan tarpeiden mukaisia. Tämä asema tarjoaa ohjeita API-julkaisujen hallintaan, mukaan lukien versiointi, käyttöönottostrategiat ja palautusmenettelyt."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "service-agreements",
          "slug": "method/service-agreements",
          "icon": "contract-outline",
          "title": "Palvelusopimukset - määrittele API-palvelutasot",
          "description": "Laadi palvelusopimukset, joissa määritellään API-toimittajien ja hyödyntäjien odotukset, palvelutasot ja vastuut.",
          "whyItMatters": "Palvelusopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita palvelusopimusten laatimiseen niin, että odotukset, palvelutasot ja vastuut ovat selvät ja väärinkäsitysten riski pienenee.",
          "applyInWork": "Tarjoa palvelusopimusmalleja, standardoituja muotoja ja katselmointiprosesseja. Varmista, että tiimit luovat selkeät ja tarkkaan määritellyt palvelusopimukset, joissa kuvataan API-toimittajien ja hyödyntäjien odotukset, palvelutasot ja vastuut.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Kullekin rajapinnalle määritellyt selkeät palvelusopimukset",
            "API-toimittajien ja hyödyntäjien odotukset ja palvelutasot kuvattuina",
            "Dokumentoidut vastuualueet ja tukiprosessit",
            "Parempi viestintä ja yhteistyö API-tiimien välillä"
          ],
          "steps": [
            {
              "text": "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
              "resourceId": "service-agreement-template",
              "resourceTitle": "Palvelusopimusmalli",
              "canvasId": null
            },
            {
              "text": "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
              "resourceId": "service-agreement-template",
              "resourceTitle": "Palvelusopimusmalli",
              "canvasId": null
            },
            {
              "text": "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
              "resourceId": "service-agreement-template",
              "resourceTitle": "Palvelusopimusmalli",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
            "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
            "Varmistetaan, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys.",
            "Tarjoa palvelusopimusmalleja, standardoituja muotoja ja katselmointiprosesseja. Varmista, että tiimit luovat selkeät ja tarkkaan määritellyt palvelusopimukset, joissa kuvataan API-toimittajien ja hyödyntäjien odotukset, palvelutasot ja vastuut.",
            "Palvelusopimukset ovat olennaisen tärkeitä, jotta API-toimittajien ja hyödyntäjien välillä on selkeys ja yhdenmukaisuus. Tämä asema tarjoaa ohjeita palvelusopimusten laatimiseen niin, että odotukset, palvelutasot ja vastuut ovat selvät ja väärinkäsitysten riski pienenee."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-consumer-adoption",
          "slug": "method/api-consumer-adoption",
          "icon": "chart-data-outline",
          "title": "APIn käyttöönotto - APIn käytön edistäminen",
          "description": "Toteuta strategioita, joilla edistetään API-hyödyntäjien käyttöönottoa ja sitoutumista sekä varmistetaan, että API-rajapintoja käytetään tehokkaasti.",
          "whyItMatters": "API-hyödyntäjien käyttöönoton edistäminen on ratkaisevan tärkeää APIen arvon hyödyntämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä API-hyödyntäjien sitouttamiseen ja sen varmistamiseen, että he ymmärtävät, miten API-rajapintoja käytetään tehokkaasti ja miten niistä saadaan arvoa.",
          "applyInWork": "Tarjoa API-hyödyntäjille resursseja, koulutusmateriaalia ja sitouttamisstrategioita. Varmista, että tiimit toteuttavat strategioita, jotka edistävät API-hyödyntäjien käyttöönottoa, sitoutumista ja tyytyväisyyttä.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "APIn käyttöönottoa edistävät strategiat hyödyntäjille",
            "APIn käytön ja sitoutumisen lisääminen",
            "APIn hyödyntäjät saavat tietoa APIn ominaisuuksista ja hyödyistä",
            "Parempi API-hyödyntäjätyytyväisyys ja -uskollisuus"
          ],
          "steps": [
            {
              "text": "Kehitä käyttöönoton prosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten rajapintoja käytetään tehokkaasti.",
              "resourceId": "api-onboarding-best-practices",
              "resourceTitle": "API-käyttöönoton parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            },
            {
              "text": "Ole vuorovaikutuksessa API-hyödyntäjien kanssa palautekierrosten, tukikanavien ja yhteisöfoorumien kautta, jotta heidän tarpeensa ymmärretään ja APIn käyttöönottoa voidaan parantaa.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            }
          ],
          "questions": [
            "Kehitä käyttöönoton prosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten rajapintoja käytetään tehokkaasti.",
            "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
            "Ole vuorovaikutuksessa API-hyödyntäjien kanssa palautekierrosten, tukikanavien ja yhteisöfoorumien kautta, jotta heidän tarpeensa ymmärretään ja APIn käyttöönottoa voidaan parantaa.",
            "Tarjoa API-hyödyntäjille resursseja, koulutusmateriaalia ja sitouttamisstrategioita. Varmista, että tiimit toteuttavat strategioita, jotka edistävät API-hyödyntäjien käyttöönottoa, sitoutumista ja tyytyväisyyttä.",
            "API-hyödyntäjien käyttöönoton edistäminen on ratkaisevan tärkeää APIen arvon hyödyntämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä API-hyödyntäjien sitouttamiseen ja sen varmistamiseen, että he ymmärtävät, miten API-rajapintoja käytetään tehokkaasti ja miten niistä saadaan arvoa."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-promotion",
          "slug": "method/api-promotion",
          "icon": "brand-awareness-outline",
          "title": "API-näkyvyys - APIn näkyvyyden ja käytön lisääminen",
          "description": "Edistetään rajapintoja näkyvyyden, käytön ja hyväksynnän lisäämiseksi kohdeyleisöjen keskuudessa.",
          "whyItMatters": "API-rajapintojen tunnetuksi tekeminen on olennaisen tärkeää niiden näkyvyyden lisäämiseksi ja käytön edistämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä APIen tehokkaaseen markkinointiin kohdeyleisöille, jotta varmistetaan, että nämä ovat tietoisia APIista ja ymmärtävät niiden arvon.",
          "applyInWork": "Tarjotaan markkinointistrategioita, myynninedistämismateriaalia ja resursseja yhteisön sitouttamiseen. Varmistaa, että tiimit toteuttavat tehokkaita APIn edistämisstrategioita, jotka lisäävät näkyvyyttä, käyttöä ja käyttöönottoa kohdeyleisöjen keskuudessa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Toteutetut API-edistämisstrategiat",
            "APIn näkyvyyden ja tietoisuuden lisääminen",
            "Korkeampi APIn käyttö- ja hyväksymisaste",
            "Parempi API-hyödyntäjien sitoutuminen ja tyytyväisyys"
          ],
          "steps": [
            {
              "text": "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            },
            {
              "text": "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            },
            {
              "text": "Osallistu API-yhteisöihin ja -foorumeihin API-päivitysten jakamiseksi, palautteen keräämiseksi ja APIn käytön edistämiseksi.",
              "resourceId": "api-community-engagement-strategies",
              "resourceTitle": "API-yhteisön sitouttamisstrategiat",
              "canvasId": null
            }
          ],
          "questions": [
            "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
            "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
            "Osallistu API-yhteisöihin ja -foorumeihin API-päivitysten jakamiseksi, palautteen keräämiseksi ja APIn käytön edistämiseksi.",
            "Tarjotaan markkinointistrategioita, myynninedistämismateriaalia ja resursseja yhteisön sitouttamiseen. Varmistaa, että tiimit toteuttavat tehokkaita APIn edistämisstrategioita, jotka lisäävät näkyvyyttä, käyttöä ja käyttöönottoa kohdeyleisöjen keskuudessa.",
            "API-rajapintojen tunnetuksi tekeminen on olennaisen tärkeää niiden näkyvyyden lisäämiseksi ja käytön edistämiseksi. Tämä asema tarjoaa strategioita ja parhaita käytäntöjä APIen tehokkaaseen markkinointiin kohdeyleisöille, jotta varmistetaan, että nämä ovat tietoisia APIista ja ymmärtävät niiden arvon."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "partner-integration",
          "slug": "method/partner-integration",
          "icon": "integration-instructions-outline",
          "title": "Kumppanien integrointi - Tee yhteistyötä kumppaneiden kanssa",
          "description": "Helpota kumppani-integraatioita API-ominaisuuksien parantamiseksi ja tavoittavuuden laajentamiseksi.",
          "whyItMatters": "Kumppani-integraatiot voivat parantaa API-ominaisuuksia ja laajentaa tavoitettavuutta. Tämä asema tarjoaa ohjeita kumppanien kanssa tehtävään yhteistyöhön niiden rajapintojen integroimiseksi, jotta varmistetaan saumaton yhteentoimivuus ja arvon luominen.",
          "applyInWork": "Tarjotaan kumppaneiden integrointikehykset, ohjeet ja seurantatyökalut. Varmistaa, että tiimit tekevät tehokasta yhteistyötä kumppaneiden kanssa API-ominaisuuksien parantamiseksi, ulottuvuuden laajentamiseksi ja innovoinnin edistämiseksi.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "Kumppaneiden integrointiprosessit on luotu",
            "Parannetut API-ominaisuudet kumppani-APIen avulla",
            "Kumppanuuksien avulla laajennettu ulottuvuus ja markkinamahdollisuudet",
            "Parempi yhteistyö ja innovointi kumppaneiden kanssa"
          ],
          "steps": [
            {
              "text": "Tunnista mahdolliset kumppanit, joiden APIt voivat parantaa API-valmiuksiasi ja arvolupaustasi.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
              "resourceId": "partner-integration-guidelines",
              "resourceTitle": "Kumppanien integrointiohjeet",
              "canvasId": null
            },
            {
              "text": "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa.",
              "resourceId": "partner-integration-guidelines",
              "resourceTitle": "Kumppanien integrointiohjeet",
              "canvasId": null
            }
          ],
          "questions": [
            "Tunnista mahdolliset kumppanit, joiden APIt voivat parantaa API-valmiuksiasi ja arvolupaustasi.",
            "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
            "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa.",
            "Tarjotaan kumppaneiden integrointikehykset, ohjeet ja seurantatyökalut. Varmistaa, että tiimit tekevät tehokasta yhteistyötä kumppaneiden kanssa API-ominaisuuksien parantamiseksi, ulottuvuuden laajentamiseksi ja innovoinnin edistämiseksi.",
            "Kumppani-integraatiot voivat parantaa API-ominaisuuksia ja laajentaa tavoitettavuutta. Tämä asema tarjoaa ohjeita kumppanien kanssa tehtävään yhteistyöhön niiden rajapintojen integroimiseksi, jotta varmistetaan saumaton yhteentoimivuus ja arvon luominen."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "api-mindset",
          "slug": "method/api-mindset",
          "icon": "psychology-outline",
          "title": "API-ajattelutapa - API-first -kulttuurin edistäminen",
          "description": "Kehitä API-first -ajattelutapaa koko organisaatiossa innovoinnin ja yhteistyön edistämiseksi.",
          "whyItMatters": "API-first -ajattelutapa on olennaisen tärkeä innovoinnin ja yhteistyön edistämiseksi koko organisaatiossa. Tämä asema tarjoaa strategioita API-first -kulttuurin kehittämiseksi ja sen varmistamiseksi, että rajapinnat nähdään strategisina voimavaroina, jotka tuottavat liiketoiminta-arvoa.",
          "applyInWork": "Tarjotaan koulutusohjelmia, resursseja ja viestintästrategioita API-first -kulttuurin edistämiseksi. Varmistetaan, että tiimit ymmärtävät APIen arvon ja että niillä on valtuudet johtaa API-strategiaa ja -aloitteita.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-first -kulttuuri on vakiintunut koko organisaatioon",
            "Innovaation ja yhteistyön lisääminen rajapintojen avulla",
            "API-tiimit, joilla on valtuudet johtaa API-strategiaa ja -aloitteita.",
            "Liiketoiminnan tavoitteiden ja API-kehityksen parempi yhteensovittaminen."
          ],
          "steps": [
            {
              "text": "Edistetään rajapintojen arvoa strategisina voimavaroina, jotka lisäävät liiketoiminnan arvoa ja innovointia.",
              "resourceId": "ecosystem-vision-template",
              "resourceTitle": "Ekosysteemivisiomalli",
              "canvasId": null
            },
            {
              "text": "Kannustaa API-tiimien, liiketoimintayksiköiden ja sidosryhmien välistä monialaista yhteistyötä, jotta API-aloitteet voidaan sovittaa yhteen liiketoiminnan tavoitteiden kanssa.",
              "resourceId": "cross-functional-collaboration-best-practices",
              "resourceTitle": "Toimialarajat ylittävän yhteistyön parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Tarjotaan koulutusta ja resursseja, jotta tiimit voivat omaksua API-first -ajattelutavan ja ymmärtää APIen edut.",
              "resourceId": "api-training-programs",
              "resourceTitle": "API-koulutusohjelmat",
              "canvasId": null
            }
          ],
          "questions": [
            "Edistetään rajapintojen arvoa strategisina voimavaroina, jotka lisäävät liiketoiminnan arvoa ja innovointia.",
            "Kannustaa API-tiimien, liiketoimintayksiköiden ja sidosryhmien välistä monialaista yhteistyötä, jotta API-aloitteet voidaan sovittaa yhteen liiketoiminnan tavoitteiden kanssa.",
            "Tarjotaan koulutusta ja resursseja, jotta tiimit voivat omaksua API-first -ajattelutavan ja ymmärtää APIen edut.",
            "Tarjotaan koulutusohjelmia, resursseja ja viestintästrategioita API-first -kulttuurin edistämiseksi. Varmistetaan, että tiimit ymmärtävät APIen arvon ja että niillä on valtuudet johtaa API-strategiaa ja -aloitteita.",
            "API-first -ajattelutapa on olennaisen tärkeä innovoinnin ja yhteistyön edistämiseksi koko organisaatiossa. Tämä asema tarjoaa strategioita API-first -kulttuurin kehittämiseksi ja sen varmistamiseksi, että rajapinnat nähdään strategisina voimavaroina, jotka tuottavat liiketoiminta-arvoa."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "roles-and-responsibilities",
          "slug": "method/roles-and-responsibilities",
          "icon": "manage-accounts-outline",
          "title": "Roolit ja vastuualueet - API-tiimien rakenteiden määrittelyt",
          "description": "Määrittele API-tiimeille selkeät roolit ja vastuualueet tehokkaan yhteistyön ja vastuuvelvollisuuden varmistamiseksi.",
          "whyItMatters": "Selkeät roolit ja vastuualueet ovat olennaisen tärkeitä tehokkaan yhteistyön ja vastuuvelvollisuuden kannalta API-tiimeissä. Tämä asema tarjoaa ohjeita tiimirakenteiden, roolien ja vastuualueiden määrittelyyn ja varmistaa, että kaikki ymmärtävät oman panoksensa API-aloitteisiin.",
          "applyInWork": "Tarjotaan tiimirakenneohjeet, roolimäärittelyt ja viestintästrategiat. Varmistetaan, että tiimeillä on selkeät roolit ja vastuut, jotka edistävät tehokasta yhteistyötä ja vastuullisuutta API-aloitteissa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-tiimeille on määritelty selkeät roolit ja vastuut",
            "Tehokas yhteistyö ja vastuuvelvollisuus API-tiimeissä",
            "Parempi viestintä ja yhdenmukaistaminen tiimin jäsenten välillä",
            "Sekaannusten ja päällekkäisyyksien vähentäminen vastuualueilla"
          ],
          "steps": [
            {
              "text": "Määrittele API-tiimien tiimirakenteet ja roolit, mukaan lukien API-tuotteen omistajat, kehittäjät, arkkitehdit ja toiminnot.",
              "resourceId": "api-team-structure-guidelines",
              "resourceTitle": "API-tiimin rakennetta koskevat ohjeet",
              "canvasId": null
            },
            {
              "text": "Määritä selkeät vastuualueet kullekin roolille, mukaan lukien API-suunnittelu, kehittäminen, testaus ja toiminta.",
              "resourceId": "role-communication-best-practices",
              "resourceTitle": "Rooliviestinnän parhaat käytännöt",
              "canvasId": null
            },
            {
              "text": "Varmistaa, että roolit ja vastuualueet ilmoitetaan kaikille tiimin jäsenille ja sidosryhmille, jotta varmistetaan niiden yhdenmukaisuus.",
              "resourceId": "role-communication-best-practices",
              "resourceTitle": "Rooliviestinnän parhaat käytännöt",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele API-tiimien tiimirakenteet ja roolit, mukaan lukien API-tuotteen omistajat, kehittäjät, arkkitehdit ja toiminnot.",
            "Määritä selkeät vastuualueet kullekin roolille, mukaan lukien API-suunnittelu, kehittäminen, testaus ja toiminta.",
            "Varmistaa, että roolit ja vastuualueet ilmoitetaan kaikille tiimin jäsenille ja sidosryhmille, jotta varmistetaan niiden yhdenmukaisuus.",
            "Tarjotaan tiimirakenneohjeet, roolimäärittelyt ja viestintästrategiat. Varmistetaan, että tiimeillä on selkeät roolit ja vastuut, jotka edistävät tehokasta yhteistyötä ja vastuullisuutta API-aloitteissa.",
            "Selkeät roolit ja vastuualueet ovat olennaisen tärkeitä tehokkaan yhteistyön ja vastuuvelvollisuuden kannalta API-tiimeissä. Tämä asema tarjoaa ohjeita tiimirakenteiden, roolien ja vastuualueiden määrittelyyn ja varmistaa, että kaikki ymmärtävät oman panoksensa API-aloitteisiin."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "upskilling",
          "slug": "method/upskilling",
          "icon": "school-outline",
          "title": "Osaamisen kehittäminen - API-taitojen ja -tiedon parantaminen",
          "description": "Tarjotaan koulutusta ja resursseja API-taitojen ja -tiedon parantamiseksi koko organisaatiossa.",
          "whyItMatters": "Jatkuva oppiminen ja täydennyskoulutus ovat olennaisen tärkeitä, jotta API-tiimit pysyvät ajan tasalla uusimmista teknologioista, käytännöistä ja suuntauksista. Tämä asema tarjoaa koulutusohjelmia ja resursseja API-taitojen ja -tiedon parantamiseen, jotta tiimit ovat valmiita toimittamaan korkealaatuisia API-rajapintoja.",
          "applyInWork": "Tarjotaan koulutusohjelmia, resursseja ja arviointivälineitä API-taitojen ja -tietojen parantamiseksi. Varmistetaan, että tiimeillä on mahdollisuus jatkuvaan oppimiseen, joka antaa heille mahdollisuuden edistää API-innovaatioita ja laatua.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-taitojen ja -tiedon parantaminen koko organisaatiossa",
            "API-suunnittelun, -kehityksen ja -hallinnan lisääntynyt osaaminen.",
            "Parempi kyky omaksua uutta teknologiaa ja uusia käytäntöjä",
            "Valtuutetaan tiimit edistämään API-innovaatioita ja laatua."
          ],
          "steps": [
            {
              "text": "Tunnistetaan keskeiset API-taidot ja -tiedot, joita on kehitettävä, kuten API-suunnittelu, tietoturva ja suorituskyky.",
              "resourceId": "api-training-programs",
              "resourceTitle": "API-koulutusohjelmat",
              "canvasId": null
            }
          ],
          "questions": [
            "Tunnistetaan keskeiset API-taidot ja -tiedot, joita on kehitettävä, kuten API-suunnittelu, tietoturva ja suorituskyky.",
            "Tarjotaan koulutusohjelmia, resursseja ja arviointivälineitä API-taitojen ja -tietojen parantamiseksi. Varmistetaan, että tiimeillä on mahdollisuus jatkuvaan oppimiseen, joka antaa heille mahdollisuuden edistää API-innovaatioita ja laatua.",
            "Jatkuva oppiminen ja täydennyskoulutus ovat olennaisen tärkeitä, jotta API-tiimit pysyvät ajan tasalla uusimmista teknologioista, käytännöistä ja suuntauksista. Tämä asema tarjoaa koulutusohjelmia ja resursseja API-taitojen ja -tiedon parantamiseen, jotta tiimit ovat valmiita toimittamaan korkealaatuisia API-rajapintoja."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "operating-guidelines",
          "slug": "method/operating-guidelines",
          "icon": "list-alt-outline",
          "title": "Toimintaohjeet - API-hallinnon perustaminen",
          "description": "Laaditaan toimintaohjeet ja hallintokäytännöt, joilla varmistetaan APIn johdonmukainen hallinta ja laatu.",
          "whyItMatters": "Tehokas API-hallinta on olennaisen tärkeää, jotta voidaan varmistaa yhdenmukainen API-hallinta, laatu ja vaatimustenmukaisuus. Tämä asema tarjoaa toimintaohjeita ja hallintakäytäntöjä, jotka auttavat tiimejä hallinnoimaan API-rajapintoja tehokkaasti ja varmistamaan, että ne ovat organisaation standardien ja parhaiden käytäntöjen mukaisia.",
          "applyInWork": "Toimintaohjeiden, hallintakehysten ja seurantatyökalujen tarjoaminen API-hallintaa varten. Varmistaa, että tiimit noudattavat vakiintuneita käytäntöjä, jotka edistävät johdonmukaista API-hallintaa, laatua ja organisaation standardien noudattamista.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "APIn hallintokäytännöt on vahvistettu",
            "Yhdenmukainen API-hallinta ja laatu koko organisaatiossa",
            "organisaation standardien ja parhaiden käytäntöjen noudattaminen",
            "Parempi näkyvyys ja API-aloitteiden hallinta"
          ],
          "steps": [
            {
              "text": "Määrittele APIOps Cyclesiin perustuvat toimintaohjeet, joissa hahmotellaan API-hallinnan prosessit, standardit ja parhaat käytännöt.",
              "resourceId": "",
              "resourceTitle": "",
              "canvasId": null
            },
            {
              "text": "Ota käyttöön hallintokäytännöt, joilla varmistetaan, että rajapintoja hallinnoidaan johdonmukaisesti, mukaan lukien tarkistukset, auditoinnit ja vaatimustenmukaisuuden tarkastukset.",
              "resourceId": "",
              "resourceTitle": "",
              "canvasId": null
            },
            {
              "text": "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja hallintokäytäntöjen noudattamisen.",
              "resourceId": "api-metrics-and-analytics",
              "resourceTitle": "API-mittarit ja analytiikka",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele APIOps Cyclesiin perustuvat toimintaohjeet, joissa hahmotellaan API-hallinnan prosessit, standardit ja parhaat käytännöt.",
            "Ota käyttöön hallintokäytännöt, joilla varmistetaan, että rajapintoja hallinnoidaan johdonmukaisesti, mukaan lukien tarkistukset, auditoinnit ja vaatimustenmukaisuuden tarkastukset.",
            "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja hallintokäytäntöjen noudattamisen.",
            "Toimintaohjeiden, hallintakehysten ja seurantatyökalujen tarjoaminen API-hallintaa varten. Varmistaa, että tiimit noudattavat vakiintuneita käytäntöjä, jotka edistävät johdonmukaista API-hallintaa, laatua ja organisaation standardien noudattamista.",
            "Tehokas API-hallinta on olennaisen tärkeää, jotta voidaan varmistaa yhdenmukainen API-hallinta, laatu ja vaatimustenmukaisuus. Tämä asema tarjoaa toimintaohjeita ja hallintakäytäntöjä, jotka auttavat tiimejä hallinnoimaan API-rajapintoja tehokkaasti ja varmistamaan, että ne ovat organisaation standardien ja parhaiden käytäntöjen mukaisia."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "portfolio-management",
          "slug": "method/portfolio-management",
          "icon": "cases-outline",
          "title": "Portfolionhallinta - hallinnoi API-portfoliota tehokkaasti",
          "description": "Hallinnoida API-salkkua tehokkaasti varmistaaksesi, että se on linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa.",
          "whyItMatters": "Tehokas rajapintasalkun hallinta on olennaisen tärkeää sen varmistamiseksi, että rajapinnat ovat linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa. Tämä asema tarjoaa ohjeita API-salkun hallintaan ja varmistaa, että APIt priorisoidaan, seurataan ja optimoidaan siten, että ne tuottavat mahdollisimman paljon arvoa.",
          "applyInWork": "Tarjotaan salkunhallintakehykset, priorisointikriteerit ja seurantatyökalut API-hallintaa varten. Varmistaa, että tiimit hallinnoivat API-salkkua tehokkaasti ja varmistavat, että se on linjassa liiketoimintatavoitteiden ja strategisten aloitteiden kanssa ja tuottaa mahdollisimman paljon arvoa.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-salkunhallintakäytäntöjen käyttöönotto",
            "APIt linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa.",
            "APIen priorisointi ja optimointi arvon ja vaikutusten perusteella.",
            "Parempi näkyvyys ja API-portfolion hallinta"
          ],
          "steps": [
            {
              "text": "Määrittele salkunhallintakäytännöt, joissa hahmotellaan API-salkun hallinnointiprosessit, mukaan lukien priorisointi, seuranta ja optimointi.",
              "resourceId": "api-portfolio-management-guidelines",
              "resourceTitle": "API-portfolion hallinnan suuntaviivat",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele salkunhallintakäytännöt, joissa hahmotellaan API-salkun hallinnointiprosessit, mukaan lukien priorisointi, seuranta ja optimointi.",
            "Tarjotaan salkunhallintakehykset, priorisointikriteerit ja seurantatyökalut API-hallintaa varten. Varmistaa, että tiimit hallinnoivat API-salkkua tehokkaasti ja varmistavat, että se on linjassa liiketoimintatavoitteiden ja strategisten aloitteiden kanssa ja tuottaa mahdollisimman paljon arvoa.",
            "Tehokas rajapintasalkun hallinta on olennaisen tärkeää sen varmistamiseksi, että rajapinnat ovat linjassa liiketoiminnan tavoitteiden ja strategisten aloitteiden kanssa. Tämä asema tarjoaa ohjeita API-salkun hallintaan ja varmistaa, että APIt priorisoidaan, seurataan ja optimoidaan siten, että ne tuottavat mahdollisimman paljon arvoa."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        },
        {
          "id": "budget-and-resource-management",
          "slug": "method/budget-and-resource-management",
          "icon": "money-bag-outline",
          "title": "Budjetin ja resurssien hallinta - Optimoi API-investoinnit",
          "description": "Optimoi API-aloitteiden budjetin ja resurssien hallinta tehokkaiden investointien ja resurssien kohdentamisen varmistamiseksi.",
          "whyItMatters": "Tehokas talousarvio- ja resurssienhallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-aloitteet ovat hyvin rahoitettuja ja resursoituja. Tämä asema tarjoaa ohjeita budjetin ja resurssien hallinnan optimoimiseksi ja sen varmistamiseksi, että API-aloitteet ovat linjassa liiketoimintatavoitteiden kanssa ja tuottavat maksimaalista arvoa.",
          "applyInWork": "Tarjotaan API-aloitteille budjettihallintakehykset, priorisointikriteerit ja seurantatyökalut. Varmistaa, että tiimit hallinnoivat tehokkaasti budjetteja ja resursseja ja optimoivat API-kehitykseen ja -hallintaan tehdyt investoinnit mahdollisimman suuren arvon tuottamiseksi.",
          "group": "APIn elinkaaren lähiöasemat",
          "lifecycleStage": "supporting",
          "outcomes": [
            "API-aloitteita varten laaditut budjetti- ja resurssienhallintakäytännöt",
            "Resurssien tehokas kohdentaminen API-aloitteisiin",
            "Optimoidut investoinnit API-kehitykseen ja -hallintaan",
            "Parempi taloudellinen näkyvyys ja API-aloitteiden valvonta."
          ],
          "steps": [
            {
              "text": "Määrittele budjetti- ja resurssienhallintakäytännöt, joissa hahmotellaan API-aloitteiden budjettien ja resurssien hallinnointiprosessit.",
              "resourceId": "api-portfolio-management-guidelines",
              "resourceTitle": "API-portfolion hallinnan suuntaviivat",
              "canvasId": null
            }
          ],
          "questions": [
            "Määrittele budjetti- ja resurssienhallintakäytännöt, joissa hahmotellaan API-aloitteiden budjettien ja resurssien hallinnointiprosessit.",
            "Tarjotaan API-aloitteille budjettihallintakehykset, priorisointikriteerit ja seurantatyökalut. Varmistaa, että tiimit hallinnoivat tehokkaasti budjetteja ja resursseja ja optimoivat API-kehitykseen ja -hallintaan tehdyt investoinnit mahdollisimman suuren arvon tuottamiseksi.",
            "Tehokas talousarvio- ja resurssienhallinta on olennaisen tärkeää, jotta voidaan varmistaa, että API-aloitteet ovat hyvin rahoitettuja ja resursoituja. Tämä asema tarjoaa ohjeita budjetin ja resurssien hallinnan optimoimiseksi ja sen varmistamiseksi, että API-aloitteet ovat linjassa liiketoimintatavoitteiden kanssa ja tuottavat maksimaalista arvoa."
          ],
          "criteria": [],
          "criteriaDetails": [],
          "stakeholders": [],
          "evidence": []
        }
      ],
      "stakeholders": [
        {
          "id": "platform-architect",
          "sourceKey": "platform-architect",
          "sourceStakeholderId": "platform-architect",
          "title": "Alusta-arkkitehti",
          "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
          "involvement": ""
        },
        {
          "id": "platform-owner",
          "sourceKey": "platform-owner",
          "sourceStakeholderId": "platform-owner",
          "title": "Alustan omistaja",
          "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
          "involvement": ""
        },
        {
          "id": "api-architect",
          "sourceKey": "api-architect",
          "sourceStakeholderId": "api-architect",
          "title": "API-arkkitehti",
          "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
          "involvement": ""
        },
        {
          "id": "governance-specialist",
          "sourceKey": "governance-specialist",
          "sourceStakeholderId": "governance-specialist",
          "title": "API-hallinnan omistaja",
          "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
          "involvement": ""
        },
        {
          "id": "api-consumer-specialist",
          "sourceKey": "api-consumer-specialist",
          "sourceStakeholderId": "api-consumer-specialist",
          "title": "API-hyödyntäjien edustaja",
          "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
          "involvement": ""
        },
        {
          "id": "api-program-owner",
          "sourceKey": "api-program-owner",
          "sourceStakeholderId": "api-program-owner",
          "title": "API-ohjelman omistaja",
          "description": "Koordinoi API-portfolion käytäntöjä, organisaation suuntautumista ja pitkän aikavälin API-kyvykkyyksien kehitystä.",
          "involvement": ""
        },
        {
          "id": "api-designer",
          "sourceKey": "api-designer",
          "sourceStakeholderId": "api-designer",
          "title": "API-suunnittelija",
          "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
          "involvement": ""
        },
        {
          "id": "api-product-owner",
          "sourceKey": "api-product-owner",
          "sourceStakeholderId": "api-product-owner",
          "title": "API-tuoteomistaja",
          "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
          "involvement": ""
        },
        {
          "id": "customer-specialist",
          "sourceKey": "customer-specialist",
          "sourceStakeholderId": "customer-specialist",
          "title": "Asiakas- tai kumppaniedustaja",
          "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
          "involvement": ""
        },
        {
          "id": "automation-engineer",
          "sourceKey": "automation-engineer",
          "sourceStakeholderId": "automation-engineer",
          "title": "Automaatiokehittäjä",
          "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
          "involvement": ""
        },
        {
          "id": "automation-owner",
          "sourceKey": "automation-owner",
          "sourceStakeholderId": "automation-owner",
          "title": "Automaation omistaja",
          "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
          "involvement": ""
        },
        {
          "id": "api-devrel-specialist",
          "sourceKey": "api-devrel-specialist",
          "sourceStakeholderId": "api-devrel-specialist",
          "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
          "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
          "involvement": ""
        },
        {
          "id": "integration-architect",
          "sourceKey": "integration-architect",
          "sourceStakeholderId": "integration-architect",
          "title": "Integraatioarkkitehti",
          "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
          "involvement": ""
        },
        {
          "id": "partner-specialist",
          "sourceKey": "partner-specialist",
          "sourceStakeholderId": "partner-specialist",
          "title": "Kumppani- ja toimittajavastaava",
          "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
          "involvement": ""
        },
        {
          "id": "capability-owner",
          "sourceKey": "capability-owner",
          "sourceStakeholderId": "capability-owner",
          "title": "Kyvykkyyden omistaja",
          "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
          "involvement": ""
        },
        {
          "id": "business-owner",
          "sourceKey": "business-owner",
          "sourceStakeholderId": "business-owner",
          "title": "Liiketoiminnan omistaja",
          "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
          "involvement": ""
        },
        {
          "id": "domain-specialist",
          "sourceKey": "domain-specialist",
          "sourceStakeholderId": "domain-specialist",
          "title": "Liiketoiminta-asiantuntija",
          "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
          "involvement": ""
        },
        {
          "id": "process-owner",
          "sourceKey": "process-owner",
          "sourceStakeholderId": "process-owner",
          "title": "Prosessin omistaja",
          "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
          "involvement": ""
        },
        {
          "id": "api-engineer",
          "sourceKey": "api-engineer",
          "sourceStakeholderId": "api-engineer",
          "title": "Toimituskehittäjä",
          "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
          "involvement": ""
        },
        {
          "id": "operations-specialist",
          "sourceKey": "operations-specialist",
          "sourceStakeholderId": "operations-specialist",
          "title": "Tuki- ja operaatioiden omistaja",
          "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
          "involvement": ""
        },
        {
          "id": "security-specialist",
          "sourceKey": "security-specialist",
          "sourceStakeholderId": "security-specialist",
          "title": "Turvallisuusasiantuntija",
          "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
          "involvement": ""
        },
        {
          "id": "compliance-specialist",
          "sourceKey": "compliance-specialist",
          "sourceStakeholderId": "compliance-specialist",
          "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
          "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
          "involvement": ""
        }
      ],
      "routeProfiles": [
        {
          "id": "platform-architect",
          "stakeholderId": "platform-architect",
          "title": "Alusta-arkkitehti",
          "summary": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
          "stakeholder": {
            "id": "platform-architect",
            "sourceKey": "platform-architect",
            "sourceStakeholderId": "platform-architect",
            "title": "Alusta-arkkitehti",
            "description": "Ohjaa alustan, integraation, skaalautuvuuden ja arkkitehtuurin päätöksiä, jotka määrittelevät, miten kyvykkyys tai API rakennetaan ja operoidaan.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Perusteltu arkkitehtuurivalinta"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            }
          ],
          "promptIds": [
            "platform-architect:facilitate-station",
            "platform-architect:use-resources",
            "platform-architect:next-actions"
          ]
        },
        {
          "id": "platform-owner",
          "stakeholderId": "platform-owner",
          "title": "Alustan omistaja",
          "summary": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
          "stakeholder": {
            "id": "platform-owner",
            "sourceKey": "platform-owner",
            "sourceStakeholderId": "platform-owner",
            "title": "Alustan omistaja",
            "description": "Vastaa alustan kyvykkyyksistä, tiekartasta, operatiivisesta mallista ja palveluodotuksista.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            }
          ],
          "decisions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "outputs": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics",
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus"
          ],
          "recommendedResources": [
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-metrics-and-analytics",
              "slug": "resources/api-metrics-and-analytics",
              "title": "API-mittarit ja analytiikka",
              "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 119,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-community-engagement-strategies",
              "slug": "resources/api-community-engagement-strategies",
              "title": "API-yhteisön sitouttamisstrategiat",
              "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 103,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "partner-integration-guidelines",
              "slug": "resources/partner-integration-guidelines",
              "title": "Kumppanien integrointiohjeet",
              "description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 164,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
                "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "platform-owner:facilitate-station",
            "platform-owner:use-resources",
            "platform-owner:next-actions"
          ]
        },
        {
          "id": "api-architect",
          "stakeholderId": "api-architect",
          "title": "API-arkkitehti",
          "summary": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
          "stakeholder": {
            "id": "api-architect",
            "sourceKey": "api-architect",
            "sourceStakeholderId": "api-architect",
            "title": "API-arkkitehti",
            "description": "Vastaa API-arkkitehtuurista, suunnitteluperiaatteista ja rajapintasopimusten laadusta.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            }
          ],
          "stations": [
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            }
          ],
          "decisions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "outputs": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics"
          ],
          "recommendedResources": [
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-metrics-and-analytics",
              "slug": "resources/api-metrics-and-analytics",
              "title": "API-mittarit ja analytiikka",
              "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 119,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "partner-integration-guidelines",
              "slug": "resources/partner-integration-guidelines",
              "title": "Kumppanien integrointiohjeet",
              "description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 164,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
                "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "api-architect:facilitate-station",
            "api-architect:use-resources",
            "api-architect:next-actions"
          ]
        },
        {
          "id": "governance-specialist",
          "stakeholderId": "governance-specialist",
          "title": "API-hallinnan omistaja",
          "summary": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
          "stakeholder": {
            "id": "governance-specialist",
            "sourceKey": "governance-specialist",
            "sourceStakeholderId": "governance-specialist",
            "title": "API-hallinnan omistaja",
            "description": "Vastaa API-hallintaprosesseista, ohjeista ja päätöksenteosta, joka määrittelee, miten API-kehityspäätökset tehdään ja dokumentoidaan.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            }
          ],
          "canvases": [],
          "decisions": [
            "Käytä auditoinnin tarkistuslistaa uudelleenkäytettävänä laatutarkistuslistana rajapintasopimuksen, dokumentaation, tietoturvan, suorituskyvyn ja vaatimustenmukaisuuden valmiudelle.",
            "Käytä tarkistuslistoja, linttereitä ja testausvälineitä johdonmukaisuuden ja standardien noudattamisen varmistamiseen.",
            "Tee yhteistyötä hallintatiimien ja toimialan asiantuntijoiden kanssa varmistaaksesi, että kyvykkyys on valmis tuotantoon.",
            "Käytä auditointi- ja vaatimustenmukaisuusresursseja varmistaaksesi, että kyvykkyys on valmis hallittuun julkaisuun ja uudelleenkäyttöön.",
            "Uudelleenkäytettävät kyvykkyydet luovat operatiivisia, dataan, tietoturvaan, tietosuojaan, vaatimustenmukaisuuteen ja hyödyntäjiin liittyviä riskejä. Valmiustarkastukset vähentävät yllätyksiä ennen julkaisua tai tuotantokäyttöä."
          ],
          "outputs": [
            "Dokumentoitu valmius julkaisuun ja uudelleenkäyttöön",
            "Tunnetut puutteet ja korjaustoimet ennen julkaisua",
            "Näyttö hallintamallin, vaatimustenmukaisuuden, tuen ja operatiivisen hyväksynnän tueksi",
            "Pienempi riski tuotannon ongelmille",
            "audit-report",
            "compliance-report",
            "security-report",
            "test-report"
          ],
          "recommendedResources": [
            {
              "id": "api-audit-checklist",
              "slug": "resources/api-audit-checklist",
              "title": "API-auditoinnin tarkistuslista",
              "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 13,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-audit-checklist.json",
              "sourceUrl": null,
              "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
              "draft": false
            },
            {
              "id": "api-compliance-best-practices",
              "slug": "resources/api-compliance-best-practices",
              "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 104,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "automation-readiness-checklist",
              "slug": "resources/automation-readiness-checklist",
              "title": "Automaation valmiuden tarkistuslista",
              "description": "Tarkistuslista automaation työnkulun, kontrollien, riskien, vaatimustenmukaisuuden, ihmisen valvonnan, testausnäytön, palautuksen, operoinnin ja julkaisuvalmiuden validointiin.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 187,
              "outcomes": [
                "Dokumentoitu automaation valmius",
                "Tunnetut valmiuspuutteet ja lievennykset on tunnistettu ennen julkaisua.",
                "Näyttö laadusta, riskistä, vaatimustenmukaisuudesta, valvonnasta ja operatiivisesta hyväksynnästä."
              ],
              "steps": [
                "Katselmoi työnkulun suunnittelu, liiketoimintasäännöt, kontrollit, pääsy, datankäsittely ja poikkeuspolut.",
                "Varmista testausnäyttö, palautusmenettelyt, valvontamalli ja tuen valmius.",
                "Vahvista omistajuus, runbookit, seuranta, muutosten hallinta ja julkaisuhyväksyntä.",
                "Kirjaa avoimet puutteet, päätökset ja hyväksytyt riskit ennen julkaisua."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "governance-specialist:facilitate-station",
            "governance-specialist:use-resources",
            "governance-specialist:next-actions"
          ]
        },
        {
          "id": "api-consumer-specialist",
          "stakeholderId": "api-consumer-specialist",
          "title": "API-hyödyntäjien edustaja",
          "summary": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
          "stakeholder": {
            "id": "api-consumer-specialist",
            "sourceKey": "api-consumer-specialist",
            "sourceStakeholderId": "api-consumer-specialist",
            "title": "API-hyödyntäjien edustaja",
            "description": "Edustaa kehittäjien, integraattoreiden tai muiden API-hyödyntäjien tarpeita, jotka käyttävät APIa suoraan.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            }
          ],
          "canvases": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            }
          ],
          "decisions": [
            "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
            "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
            "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
            "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
            "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
            "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua."
          ],
          "outputs": [
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
            "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
            "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
            "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta",
            "design-artifact",
            "documentation",
            "consumer-feedback",
            "Validoitu rajapintasopimus valitulle toteutustavalle"
          ],
          "recommendedResources": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "service-agreement-template",
              "slug": "resources/service-agreement-template",
              "title": "Palvelusopimusmalli",
              "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 172,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-metrics-and-analytics",
              "slug": "resources/api-metrics-and-analytics",
              "title": "API-mittarit ja analytiikka",
              "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 119,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-community-engagement-strategies",
              "slug": "resources/api-community-engagement-strategies",
              "title": "API-yhteisön sitouttamisstrategiat",
              "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 103,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "api-consumer-specialist:facilitate-station",
            "api-consumer-specialist:use-resources",
            "api-consumer-specialist:next-actions"
          ]
        },
        {
          "id": "api-designer",
          "stakeholderId": "api-designer",
          "title": "API-suunnittelija",
          "summary": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
          "stakeholder": {
            "id": "api-designer",
            "sourceKey": "api-designer",
            "sourceStakeholderId": "api-designer",
            "title": "API-suunnittelija",
            "description": "Suunnittelee rajapintasopimuksen, vuorovaikutusmallin, johdonmukaisuuden, käytettävyyden ja tarjottavat kyvykkyydet.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            }
          ],
          "canvases": [
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            }
          ],
          "decisions": [
            "Käytä Domain Canvas -pohjaa uudelleen liiketoimintaolioiden, termien, sääntöjen ja omistajuuden vahvistamiseen ennen sopimussuunnittelua.",
            "Kuvaa Interaction Canvas -pohjan avulla, miten hyödyntäjät, järjestelmät tai käyttäjät ovat vuorovaikutuksessa kyvykkyyden kanssa.",
            "Käytä REST-suunnitteluresursseja, kun valittu rajapinta on REST API.",
            "Käytä Event Canvas -resursseja, kun valittu rajapinta on tapahtumapohjainen.",
            "Käytä GraphQL-suunnitteluresursseja, kun valittu rajapinta on GraphQL.",
            "Käytä suunnitteluperiaatteita ja tyyliopasta, jotta suunnittelupäätökset ovat linjassa yhteisten sääntöjen kanssa ja auditointi voi validoida ne johdonmukaisesti."
          ],
          "outputs": [
            "Validoitu rajapintasopimus valitulle toteutustavalle",
            "Johdonmukaiset vuorovaikutus-, data-, tapahtuma-, tiedosto-, työnkulku- tai API-rajapintasopimuspäätökset",
            "Suunnittelun jäljitettävyys kyvykkyyden ja hyödyntäjien vaatimuksiin",
            "Suunnitelmat linjassa toimialamallien ja vuorovaikutusmallien kanssa",
            "spec",
            "contract",
            "design-artifact",
            "documentation"
          ],
          "recommendedResources": [
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-audit-checklist",
              "slug": "resources/api-audit-checklist",
              "title": "API-auditoinnin tarkistuslista",
              "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 13,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-audit-checklist.json",
              "sourceUrl": null,
              "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
              "draft": false
            },
            {
              "id": "api-compliance-best-practices",
              "slug": "resources/api-compliance-best-practices",
              "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 104,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "api-designer:facilitate-station",
            "api-designer:use-resources",
            "api-designer:next-actions"
          ]
        },
        {
          "id": "api-product-owner",
          "stakeholderId": "api-product-owner",
          "title": "API-tuoteomistaja",
          "summary": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
          "stakeholder": {
            "id": "api-product-owner",
            "sourceKey": "api-product-owner",
            "sourceStakeholderId": "api-product-owner",
            "title": "API-tuoteomistaja",
            "description": "Ohjaa API-mahdollisuutta, priorisointia ja tuotetasolla tehtyjä päätöksiä elinkaaren aikana.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            }
          ],
          "stations": [
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            }
          ],
          "decisions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "outputs": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics",
            "Validoitu rajapintasopimus valitulle toteutustavalle"
          ],
          "recommendedResources": [
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "api-product-owner:facilitate-station",
            "api-product-owner:use-resources",
            "api-product-owner:next-actions"
          ]
        },
        {
          "id": "customer-specialist",
          "stakeholderId": "customer-specialist",
          "title": "Asiakas- tai kumppaniedustaja",
          "summary": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
          "stakeholder": {
            "id": "customer-specialist",
            "sourceKey": "customer-specialist",
            "sourceStakeholderId": "customer-specialist",
            "title": "Asiakas- tai kumppaniedustaja",
            "description": "Edustaa asiakkaan tai kumppanin näkökulmaa polkuun, arvoon ja yhteistyömalliin.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiValuePropositionCanvas",
              "slug": "resources/api-value-proposition-canvas",
              "title": "API-arvolupauskanvas",
              "description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2,
              "outcomes": [
                "Keskitetty ominaisuuksien kehittäminen",
                "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
                "Parempi API-hyödyntäjien tyytyväisyys"
              ],
              "steps": [
                "Listaa käyttäjäpolun tehtävät.",
                "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
                "Määritellään haasteisiin vastaavat ominaisuudet",
                "Ominaisuuksien kartoittaminen API-tuotteisiin"
              ],
              "canvasId": "apiValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "apiBusinessModelCanvas",
              "slug": "resources/api-business-model-canvas",
              "title": "API-liiketoimintamallikanvas",
              "description": "Arvioi API-liiketoiminnan elinkelpoisuutta kartoittamalla arvolupaus, API-hyödyntäjäsegmentit ja keskeiset resurssit.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3,
              "outcomes": [
                "Selkeä liiketoimintastrategia rajapintoja varten",
                "Keskeisten resurssien ja kumppaneiden tunnistaminen",
                "API-ominaisuuksien ja liiketoiminnan tavoitteiden yhteensovittaminen"
              ],
              "steps": [
                "Tiivistä APIn arvolupauksen tiivistelmä",
                "Hyödyntäjäsegmenttien määrittely",
                "Kehittäjäsuhdestrategioiden määrittäminen",
                "Kartoita jakelukanavat",
                "Dokumentoi keskeiset resurssit ja toimet",
                "Tunnistetaan tärkeimmät kumppanit ja sidosryhmät",
                "Korosta hyötyjä ja kustannuksia"
              ],
              "canvasId": "apiBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "customer-specialist:facilitate-station",
            "customer-specialist:use-resources",
            "customer-specialist:next-actions"
          ]
        },
        {
          "id": "automation-engineer",
          "stakeholderId": "automation-engineer",
          "title": "Automaatiokehittäjä",
          "summary": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
          "stakeholder": {
            "id": "automation-engineer",
            "sourceKey": "automation-engineer",
            "sourceStakeholderId": "automation-engineer",
            "title": "Automaatiokehittäjä",
            "description": "Toteuttaa, testaa, integroi ja ylläpitää automaatioratkaisuja ja niitä tukevia työnkulkuja.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Perusteltu arkkitehtuurivalinta"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "automation-operational-ownership-guide",
              "slug": "resources/automation-operational-ownership-guide",
              "title": "Automaation operatiivisen omistajuuden opas",
              "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 185,
              "outcomes": [
                "Selkeä automaation toimintamalli",
                "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
              ],
              "steps": [
                "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "process-workflow-design-guide",
              "slug": "resources/process-workflow-design-guide",
              "title": "Prosessin ja työnkulun suunnitteluopas",
              "description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 181,
              "outcomes": [
                "Selkeä automaatiotyönkulun suunnitelma",
                "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
                "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty."
              ],
              "steps": [
                "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
                "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
                "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
                "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "decision-business-rules-guide",
              "slug": "resources/decision-business-rules-guide",
              "title": "Päätösten ja liiketoimintasääntöjen opas",
              "description": "Ohje sääntöjen, kynnysarvojen, päätösten, hyväksyntöjen, kelpoisuustarkistusten ja sääntöjen omistajuuden kuvaamiseen automaation suunnittelua varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 182,
              "outcomes": [
                "Selkeästi kuvatut päätökset ja liiketoimintasäännöt",
                "Säännöt ja kynnysarvot on dokumentoitu omistajineen.",
                "Automaation päätökset ovat jäljitettävissä käytäntöihin, prosessiin tai liiketoimintatarkoitukseen."
              ],
              "steps": [
                "Listaa päätökset, jotka automaation täytyy tehdä tai joita sen täytyy tukea.",
                "Dokumentoi sääntöjen ehdot, kynnysarvot, poikkeukset, hyväksynnät ja eskalointipisteet.",
                "Tunnista sääntöjen omistajat ja muutosten hallintatapa jokaiselle päätösalueelle."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "automation-engineer:facilitate-station",
            "automation-engineer:use-resources",
            "automation-engineer:next-actions"
          ]
        },
        {
          "id": "automation-owner",
          "stakeholderId": "automation-owner",
          "title": "Automaation omistaja",
          "summary": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
          "stakeholder": {
            "id": "automation-owner",
            "sourceKey": "automation-owner",
            "sourceStakeholderId": "automation-owner",
            "title": "Automaation omistaja",
            "description": "Vastaa automaation tavoitteista, liiketoiminta-arvosta, priorisoinnista, kontrolleista ja elinkaaren tuloksista.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "automation-operational-ownership-guide",
              "slug": "resources/automation-operational-ownership-guide",
              "title": "Automaation operatiivisen omistajuuden opas",
              "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 185,
              "outcomes": [
                "Selkeä automaation toimintamalli",
                "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
              ],
              "steps": [
                "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "process-workflow-design-guide",
              "slug": "resources/process-workflow-design-guide",
              "title": "Prosessin ja työnkulun suunnitteluopas",
              "description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 181,
              "outcomes": [
                "Selkeä automaatiotyönkulun suunnitelma",
                "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
                "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty."
              ],
              "steps": [
                "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
                "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
                "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
                "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "automation-owner:facilitate-station",
            "automation-owner:use-resources",
            "automation-owner:next-actions"
          ]
        },
        {
          "id": "api-devrel-specialist",
          "stakeholderId": "api-devrel-specialist",
          "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
          "summary": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
          "stakeholder": {
            "id": "api-devrel-specialist",
            "sourceKey": "api-devrel-specialist",
            "sourceStakeholderId": "api-devrel-specialist",
            "title": "Dokumentoinnin ja kehittäjäsuhteiden omistaja",
            "description": "Varmistaa, että API-dokumentaatio, esimerkit, koulutus ja kehittäjäsuhteiden strategiat tukevat API-hyödyntäjien tarpeita.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            }
          ],
          "canvases": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
            "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
            "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
            "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
            "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
            "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen."
          ],
          "outputs": [
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
            "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
            "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
            "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta",
            "design-artifact",
            "documentation",
            "consumer-feedback",
            "Löydettävä uudelleenkäytettävä kyvykkyys"
          ],
          "recommendedResources": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "service-agreement-template",
              "slug": "resources/service-agreement-template",
              "title": "Palvelusopimusmalli",
              "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 172,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-metrics-and-analytics",
              "slug": "resources/api-metrics-and-analytics",
              "title": "API-mittarit ja analytiikka",
              "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 119,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-community-engagement-strategies",
              "slug": "resources/api-community-engagement-strategies",
              "title": "API-yhteisön sitouttamisstrategiat",
              "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 103,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "apiValuePropositionCanvas",
              "slug": "resources/api-value-proposition-canvas",
              "title": "API-arvolupauskanvas",
              "description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2,
              "outcomes": [
                "Keskitetty ominaisuuksien kehittäminen",
                "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
                "Parempi API-hyödyntäjien tyytyväisyys"
              ],
              "steps": [
                "Listaa käyttäjäpolun tehtävät.",
                "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
                "Määritellään haasteisiin vastaavat ominaisuudet",
                "Ominaisuuksien kartoittaminen API-tuotteisiin"
              ],
              "canvasId": "apiValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "api-devrel-specialist:facilitate-station",
            "api-devrel-specialist:use-resources",
            "api-devrel-specialist:next-actions"
          ]
        },
        {
          "id": "integration-architect",
          "stakeholderId": "integration-architect",
          "title": "Integraatioarkkitehti",
          "summary": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
          "stakeholder": {
            "id": "integration-architect",
            "sourceKey": "integration-architect",
            "sourceStakeholderId": "integration-architect",
            "title": "Integraatioarkkitehti",
            "description": "Suunnittelee integraatiotavat ja toteutustavat, joilla kyvykkyys tai API yhdistetään muihin järjestelmiin.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "outputs": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics",
            "Validoitu rajapintasopimus valitulle toteutustavalle"
          ],
          "recommendedResources": [
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "integration-architect:facilitate-station",
            "integration-architect:use-resources",
            "integration-architect:next-actions"
          ]
        },
        {
          "id": "partner-specialist",
          "stakeholderId": "partner-specialist",
          "title": "Kumppani- ja toimittajavastaava",
          "summary": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
          "stakeholder": {
            "id": "partner-specialist",
            "sourceKey": "partner-specialist",
            "sourceStakeholderId": "partner-specialist",
            "title": "Kumppani- ja toimittajavastaava",
            "description": "Koordinoi ulkoisia kumppani-, toimittaja- ja alihankkijasuhteita, jotka vaikuttavat kyvykkyys- tai API-strategiaan ja toimitukseen.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            }
          ],
          "stations": [
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            }
          ],
          "decisions": [
            "Julkaise kyvykkyyden tiedot asianmukaisiin katalogeihin, portaaleihin, yhdyskäytäviin tai ympäristöihin, jotta useat hyödyntäjät voivat käyttää sitä uudelleen.",
            "Dokumentoi, miten hyödyntäjät löytävät kyvykkyyden ja käyttävät sitä, mukaan lukien käyttöönotto- ja rekisteröintiprosessit.",
            "Varmista, että tietoturvamallit, käyttöoikeuskonfiguraatio ja oikeudelliset ehdot ovat selkeitä ja hyödyntäjien saatavilla.",
            "Julkaise omistajuus, dokumentaatio, käyttöönotto, tukiyhteystiedot, palveluodotukset, elinkaaren tila ja käyttöoikeuspyyntöjen polut.",
            "Uudelleenkäytettävät kyvykkyydet tuottavat arvoa vain, kun hyödyntäjät löytävät ne, ymmärtävät rajapintasopimuksen ja palveluodotukset, voivat pyytää käyttöoikeutta ja tietävät, kuka omistaa tuen ja elinkaaripäätökset.",
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet."
          ],
          "outputs": [
            "Löydettävä uudelleenkäytettävä kyvykkyys",
            "Selkeät käyttöönotto-, käyttöoikeus-, tuki- ja palveluodotukset",
            "Elinkaari- ja omistajuustiedot hyödyntäjien ja hallintatiimien saatavilla",
            "Hyödyntäjät voivat käyttää ja uudelleenkäyttää kyvykkyyttä",
            "gateway-config",
            "developer-portal",
            "documentation",
            "release-record"
          ],
          "recommendedResources": [
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "service-agreement-template",
              "slug": "resources/service-agreement-template",
              "title": "Palvelusopimusmalli",
              "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 172,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "partner-specialist:facilitate-station",
            "partner-specialist:use-resources",
            "partner-specialist:next-actions"
          ]
        },
        {
          "id": "capability-owner",
          "stakeholderId": "capability-owner",
          "title": "Kyvykkyyden omistaja",
          "summary": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
          "stakeholder": {
            "id": "capability-owner",
            "sourceKey": "capability-owner",
            "sourceStakeholderId": "capability-owner",
            "title": "Kyvykkyyden omistaja",
            "description": "Vastaa kyvykkyyden visiosta, arvosta, priorisoinnista, elinkaaresta ja uudelleenkäytöstä eri hyödyntäjille.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "capability-owner:facilitate-station",
            "capability-owner:use-resources",
            "capability-owner:next-actions"
          ]
        },
        {
          "id": "business-owner",
          "stakeholderId": "business-owner",
          "title": "Liiketoiminnan omistaja",
          "summary": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
          "stakeholder": {
            "id": "business-owner",
            "sourceKey": "business-owner",
            "sourceStakeholderId": "business-owner",
            "title": "Liiketoiminnan omistaja",
            "description": "Edustaa liiketoimintatavoitteita, rahoitusta ja odotettuja tuloksia kyvykkyys-, API- tai automaatiohankkeessa.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "service-agreement-template",
              "slug": "resources/service-agreement-template",
              "title": "Palvelusopimusmalli",
              "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 172,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "business-owner:facilitate-station",
            "business-owner:use-resources",
            "business-owner:next-actions"
          ]
        },
        {
          "id": "domain-specialist",
          "stakeholderId": "domain-specialist",
          "title": "Liiketoiminta-asiantuntija",
          "summary": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
          "stakeholder": {
            "id": "domain-specialist",
            "sourceKey": "domain-specialist",
            "sourceStakeholderId": "domain-specialist",
            "title": "Liiketoiminta-asiantuntija",
            "description": "Tuo syvällistä tietoa liiketoiminta-alueesta, käsitteistä, säännöistä ja rajoituksista, joita kyvykkyyden tai rajapinnan täytyy heijastaa.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "domain-specialist:facilitate-station",
            "domain-specialist:use-resources",
            "domain-specialist:next-actions"
          ]
        },
        {
          "id": "process-owner",
          "stakeholderId": "process-owner",
          "title": "Prosessin omistaja",
          "summary": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
          "stakeholder": {
            "id": "process-owner",
            "sourceKey": "process-owner",
            "sourceStakeholderId": "process-owner",
            "title": "Prosessin omistaja",
            "description": "Vastaa automatisoitavasta liiketoimintaprosessista, mukaan lukien tavoitteet, säännöt, tulokset ja kehittämisen prioriteetit.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "process-workflow-design-guide",
              "slug": "resources/process-workflow-design-guide",
              "title": "Prosessin ja työnkulun suunnitteluopas",
              "description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 181,
              "outcomes": [
                "Selkeä automaatiotyönkulun suunnitelma",
                "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
                "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty."
              ],
              "steps": [
                "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
                "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
                "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
                "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "decision-business-rules-guide",
              "slug": "resources/decision-business-rules-guide",
              "title": "Päätösten ja liiketoimintasääntöjen opas",
              "description": "Ohje sääntöjen, kynnysarvojen, päätösten, hyväksyntöjen, kelpoisuustarkistusten ja sääntöjen omistajuuden kuvaamiseen automaation suunnittelua varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 182,
              "outcomes": [
                "Selkeästi kuvatut päätökset ja liiketoimintasäännöt",
                "Säännöt ja kynnysarvot on dokumentoitu omistajineen.",
                "Automaation päätökset ovat jäljitettävissä käytäntöihin, prosessiin tai liiketoimintatarkoitukseen."
              ],
              "steps": [
                "Listaa päätökset, jotka automaation täytyy tehdä tai joita sen täytyy tukea.",
                "Dokumentoi sääntöjen ehdot, kynnysarvot, poikkeukset, hyväksynnät ja eskalointipisteet.",
                "Tunnista sääntöjen omistajat ja muutosten hallintatapa jokaiselle päätösalueelle."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "automation-trigger-handoff-exception-guide",
              "slug": "resources/automation-trigger-handoff-exception-guide",
              "title": "Automaation käynnistinten, luovutusten ja poikkeusten opas",
              "description": "Ohje automaation käynnistinten, ihmisten välisten luovutusten, poikkeusten käsittelyn, uudelleenyritysten, kompensoivien toimien ja tuen eskalointipolkujen määrittelyyn.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 183,
              "outcomes": [
                "Määritellyt automaation käynnistimet ja poikkeuspolut",
                "Ihmisten väliset luovutukset ja tuen eskaloinnit ovat selkeitä.",
                "Poikkeukset, uudelleenyritykset ja kompensoivat toimet on suunniteltu ennen toimitusta."
              ],
              "steps": [
                "Määritä tapahtumat, aikataulut, käyttäjätoimet tai järjestelmätilat, jotka käynnistävät automaation.",
                "Kuvaa luovutukset automaatiolta käyttäjille, operaattoreille tai tukitiimeille.",
                "Dokumentoi poikkeukset, uudelleenyrityssäännöt, aikakatkaisujen toiminta ja varapolut.",
                "Määritä hälytykset ja eskalointikynnykset epäonnistuneille tai epäselville automaation tuloksille."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "automation-testing-guide",
              "slug": "resources/automation-testing-guide",
              "title": "Automaation testausopas",
              "description": "Ohje automatisoitujen työnkulkujen, päätösten, integraatioiden, poikkeusten, palautuksen, valvonnan ja käyttäjävaikutusten testaamiseen ennen julkaisua.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 184,
              "outcomes": [
                "Validoitu automaation toiminta",
                "Työnkulun, sääntöjen, poikkeusten ja integraatioiden testit on määritelty.",
                "Julkaisuluottamus automatisoituihin ja ihmistä tukeviin polkuihin."
              ],
              "steps": [
                "Luo testit onnistuneille poluille, reunatapauksille, poikkeuksille, uudelleenyrityksille ja luovutuksille.",
                "Validoi liiketoimintasäännöt ja päätösten tulokset edustavalla datalla.",
                "Testaa palautus, toipuminen, havainnoitavuus ja manuaalisen puuttumisen polut.",
                "Ota käyttäjät ja operaattorit mukaan hyväksyntätestaukseen, kun automaatio muuttaa työtapoja."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "automation-operational-ownership-guide",
              "slug": "resources/automation-operational-ownership-guide",
              "title": "Automaation operatiivisen omistajuuden opas",
              "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 185,
              "outcomes": [
                "Selkeä automaation toimintamalli",
                "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
                "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
              ],
              "steps": [
                "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
                "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
                "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "process-owner:facilitate-station",
            "process-owner:use-resources",
            "process-owner:next-actions"
          ]
        },
        {
          "id": "api-engineer",
          "stakeholderId": "api-engineer",
          "title": "Toimituskehittäjä",
          "summary": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
          "stakeholder": {
            "id": "api-engineer",
            "sourceKey": "api-engineer",
            "sourceStakeholderId": "api-engineer",
            "title": "Toimituskehittäjä",
            "description": "Vastaa toteutuksesta, automaatiosta, testauksesta ja julkaisun kulusta, joita kyvykkyyden, APIn tai automaation luotettava toimittaminen edellyttää.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
            "Rakenna toteutus validoidun rajapintasopimuksen pohjalta vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla.",
            "Käytä testausohjeistusta toiminnallisuuden, datan laadun, yhteensopivuuden, tietoturvan, suorituskyvyn, resilienssin ja palautumisodotusten varmistamiseen.",
            "Käytä CI/CD-ohjeistusta koonnin, testauksen, julkaisun, konfiguraation ja jäljitettävyyden automatisointiin.",
            "Käytä tietoturvaohjeistusta datan, käyttöoikeuksien, tunnistetietojen ja alustarajojen suojaamiseen.",
            "Käytä auditoinnin tarkistuslistaa varmistaaksesi, että ratkaisu täyttää toiminnalliset ja ei-toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus."
          ],
          "outputs": [
            "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta",
            "Automatisoitu testaus, julkaisu ja ympäristökontrollit",
            "Valittuun malliin sopivat tietoturva-, operointi- ja laatukäytännöt",
            "Jäljitettävät toimitus- ja julkaisukontrollit",
            "implementation",
            "pipeline-config",
            "test-report",
            "security-report"
          ],
          "recommendedResources": [
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-audit-checklist",
              "slug": "resources/api-audit-checklist",
              "title": "API-auditoinnin tarkistuslista",
              "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 13,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-audit-checklist.json",
              "sourceUrl": null,
              "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
              "draft": false
            },
            {
              "id": "api-compliance-best-practices",
              "slug": "resources/api-compliance-best-practices",
              "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 104,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            }
          ],
          "promptIds": [
            "api-engineer:facilitate-station",
            "api-engineer:use-resources",
            "api-engineer:next-actions"
          ]
        },
        {
          "id": "operations-specialist",
          "stakeholderId": "operations-specialist",
          "title": "Tuki- ja operaatioiden omistaja",
          "summary": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
          "stakeholder": {
            "id": "operations-specialist",
            "sourceKey": "operations-specialist",
            "sourceStakeholderId": "operations-specialist",
            "title": "Tuki- ja operaatioiden omistaja",
            "description": "Edustaa tuotannon tukea, häiriönhallintaa, havainnoitavuutta ja operatiivista valmiutta kyvykkyydelle, APIlle tai automaatiolle.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            }
          ],
          "canvases": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            }
          ],
          "decisions": [
            "Käytä Consumer Experience Requirements Canvas -pohjaa hyödyntäjien tavoitteiden, saatavuuden, tuoreuden, volyymin, suorituskyvyn, datan laadun, tietoturvan, käyttöönoton, muutoksen, havainnoitavuuden ja palautumisen odotusten kuvaamiseen.",
            "Kuvaa käyttöönotto-ohjeistuksen avulla, miten hyödyntäjät löytävät kyvykkyyden, pyytävät sen käyttöä, testaavat sitä, saavat hyväksynnän ja aloittavat käytön.",
            "Käytä syntyvää polkua ja vaatimuksia kyvykkyyden hyödyntäjien käyttöönoton, dokumentaation, tuen ja palautesilmukoiden parantamiseen.",
            "Käytä hyödyntäjäkokemuksen ja käyttöönoton ohjeistusta, jotta odotukset ovat selkeitä sekä hyödyntäjille että tuottajille.",
            "Oikea arkkitehtuuri riippuu hyödyntäjien tavoitteista, käyttöönotto-odotuksista, palvelutasoista, datan laatutarpeista, muutosten sietokyvystä, havainnoitavuudesta, tuesta ja tuottajan rajoitteista.",
            "Käytä kehityksen parhaita käytäntöjä validoidun rajapintasopimuksen toteuttamiseen vakiintuneilla kehyksillä, kirjastoilla ja tiimin standardeilla."
          ],
          "outputs": [
            "Dokumentoidut hyödyntäjävaatimukset ja käyttöönotto-odotukset",
            "Selkeät tuottajan vastuut ja tukiin liittyvät odotukset",
            "Arkkitehtuurin kannalta olennaiset rajoitteet valmiina päätöksentekoon",
            "Parempi käyttöönotto hyödyntäjäymmärryksen, standardien ja tuottajan selkeyden kautta",
            "design-artifact",
            "documentation",
            "consumer-feedback",
            "Toimitettu kyvykkyys, joka vastaa validoitua rajapintasopimusta"
          ],
          "recommendedResources": [
            {
              "id": "consumerExperienceRequirementsCanvas",
              "slug": "resources/consumer-experience-requirements-canvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
              "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.2,
              "outcomes": [
                "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
                "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
                "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
              ],
              "steps": [
                "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
                "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
                "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
                "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
              ],
              "canvasId": "consumerExperienceRequirementsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-onboarding-best-practices",
              "slug": "resources/api-onboarding-best-practices",
              "title": "API-käyttöönoton parhaat käytännöt",
              "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 121,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
                "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
                "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-audit-checklist",
              "slug": "resources/api-audit-checklist",
              "title": "API-auditoinnin tarkistuslista",
              "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 13,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-audit-checklist.json",
              "sourceUrl": null,
              "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
              "draft": false
            },
            {
              "id": "api-compliance-best-practices",
              "slug": "resources/api-compliance-best-practices",
              "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
              "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 104,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
                "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
                "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "service-agreement-template",
              "slug": "resources/service-agreement-template",
              "title": "Palvelusopimusmalli",
              "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 172,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
                "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
                "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-metrics-and-analytics",
              "slug": "resources/api-metrics-and-analytics",
              "title": "API-mittarit ja analytiikka",
              "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 119,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
                "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
                "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-community-engagement-strategies",
              "slug": "resources/api-community-engagement-strategies",
              "title": "API-yhteisön sitouttamisstrategiat",
              "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 103,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
                "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
                "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
                "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
                "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "operations-specialist:facilitate-station",
            "operations-specialist:use-resources",
            "operations-specialist:next-actions"
          ]
        },
        {
          "id": "security-specialist",
          "stakeholderId": "security-specialist",
          "title": "Turvallisuusasiantuntija",
          "summary": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
          "stakeholder": {
            "id": "security-specialist",
            "sourceKey": "security-specialist",
            "sourceStakeholderId": "security-specialist",
            "title": "Turvallisuusasiantuntija",
            "description": "Varmistaa, että turvallisuusriskit, kontrollit ja luottamusrajat käsitellään koko elinkaaren aikana.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            }
          ],
          "canvases": [
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            }
          ],
          "decisions": [
            "Käytä Business Impact Canvas -pohjaa saatavuus-, tietoturva- ja datariskien tunnistamiseen, koska ne vaikuttavat arkkitehtuurivaihtoehtoihin.",
            "Käytä Locations Canvas -pohjaa geopoliittisten, sääntelyyn liittyvien, verkko-, datan sijainti- ja luottamusrajarajoitteiden kuvaamiseen.",
            "Käytä Capacity Canvas -pohjaa nykyisten ja tulevien volyymien, huippujen, viiveen, välimuistin, nopeusrajoitusten ja skaalautumisodotusten kuvaamiseen.",
            "Käytä mittari- ja analytiikkaohjeistusta määrittelemään, miten valittua kyvykkyyttä seurataan ja parannetaan.",
            "Vertaa mahdollisia arkkitehtuurityylejä koottuihin vaatimuksiin ja dokumentoi valittu malli sekä sen perustelut.",
            "Arkkitehtuurivalintojen tulee perustua näyttöön liiketoimintavaikutuksesta, sijainneista, luottamusrajoista, kapasiteetista, viiveestä, datan omistajuudesta, yhdenmukaisuudesta, operoitavuudesta, tietoturvasta, tietosuojasta, hallintamallista ja kustannuksista."
          ],
          "outputs": [
            "Perusteltu arkkitehtuurivalinta",
            "Dokumentoidut riskit sekä sijainti-, kapasiteetti-, tietoturva-, tietosuoja- ja operoitavuusrajoitteet",
            "Selkeä perustelu API-, tapahtuma-, tiedosto-, virta-, datatuote-, suora integraatio- tai hybriditoteutukselle",
            "architecture-decision",
            "documentation",
            "platform-config",
            "metrics",
            "Validoitu rajapintasopimus valitulle toteutustavalle"
          ],
          "recommendedResources": [
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "interactionCanvas",
              "slug": "resources/interaction-canvas",
              "title": "Vuorovaikutuskanvas",
              "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 9,
              "outcomes": [
                "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
                "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
                "Sovitut validointisäännöt ja vuorovaikutusodotukset"
              ],
              "steps": [
                "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
                "Määritä päätepisteet kullekin vuorovaikutukselle",
                "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
                "Validointisääntöjen ja -rajoitusten määrittäminen",
                "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
              ],
              "canvasId": "interactionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "contract-first-design",
              "slug": "resources/contract-first-design",
              "title": "Sopimuslähtöinen suunnittelu",
              "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 146,
              "outcomes": [
                "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
                "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
                "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-contract-example.yaml",
              "sourceUrl": null,
              "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
              "draft": true
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "api-audit-checklist",
              "slug": "resources/api-audit-checklist",
              "title": "API-auditoinnin tarkistuslista",
              "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
              "category": "checklist",
              "icon": "check-box-outline",
              "order": 13,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
                "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
                "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/api-audit-checklist.json",
              "sourceUrl": null,
              "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
              "draft": false
            }
          ],
          "promptIds": [
            "security-specialist:facilitate-station",
            "security-specialist:use-resources",
            "security-specialist:next-actions"
          ]
        },
        {
          "id": "compliance-specialist",
          "stakeholderId": "compliance-specialist",
          "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
          "summary": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
          "stakeholder": {
            "id": "compliance-specialist",
            "sourceKey": "compliance-specialist",
            "sourceStakeholderId": "compliance-specialist",
            "title": "Vaatimustenmukaisuus- ja lakiasiantuntija",
            "description": "Selventää juridiset, tietosuojaan liittyvät, sääntelyyn liittyvät ja sopimukselliset vaatimukset, jotka vaikuttavat kyvykkyyteen, APIin, rajapintaan tai automaatioon.",
            "involvement": ""
          },
          "cycles": [
            {
              "id": "capability-productization-cycle",
              "title": "Kyvykkyyden tuotteistamisen sykli",
              "description": "Sykli liiketoiminnan kyvykkyyksien muuttamiseen uudelleenkäytettäviksi digitaalisiksi kyvykkyyksiksi ennen toteutustavan valintaa."
            },
            {
              "id": "api-productization-cycle",
              "title": "API-tuotteistamisen sykli",
              "description": "API-keskeinen APIOps Cycles -polku APIen tuotteistamiseen, suunnitteluun, toimittamiseen, julkaisuun ja parantamiseen."
            },
            {
              "id": "integration-productization-cycle",
              "title": "Integraatiokyvykkyyden tuotteistamisen sykli",
              "description": "Sykli uudelleenkaytettavien integraatiokyvykkyyksien tuotteistamiseen ennen toteutustavan valintaa."
            },
            {
              "id": "automation-cycle",
              "title": "Automaatiosykli",
              "description": "Sykli automaatiomahdollisuuksien tunnistamiseen, suunnitteluun, toimittamiseen, käyttöönoton mahdollistamiseen ja parantamiseen."
            }
          ],
          "stations": [
            {
              "id": "api-product-strategy",
              "title": "Strategia",
              "description": "Kehystä liiketoimintatarve uudelleenkäytettävänä kyvykkyytenä ennen toteutustavan valintaa."
            },
            {
              "id": "api-platform-architecture",
              "title": "Arkkitehtuuri- ja alustapäätökset",
              "description": "Käytä vaatimuksia ja rajoitteita oikean arkkitehtuurimallin ja tarvittavien alustakyvykkyyksien valintaan."
            },
            {
              "id": "api-delivery",
              "title": "Toimitus ja operointi",
              "description": "Toimita valittu toteutustapa asianmukaisilla suunnittelu-, testaus-, tietoturva-, automaatio- ja operointikäytännöillä."
            },
            {
              "id": "api-audit",
              "title": "Laadun ja valmiuden varmistus",
              "description": "Auditoi kyvykkyyden rajapintasopimus, kontrollit, tukimalli, havainnoitavuus, dokumentaatio ja elinkaarivalmius ennen julkaisua."
            },
            {
              "id": "monitoring-and-improving",
              "title": "Seuranta ja parantaminen",
              "description": "Seuraa käyttöä, luotettavuutta, datan laatua, hyödyntäjien tuloksia, operatiivisia kustannuksia ja uudelleenkäytön mahdollisuuksia julkaisun jälkeen."
            },
            {
              "id": "api-design",
              "title": "Ratkaisu- ja rajapintasuunnittelu",
              "description": "Suunnittele rajapintasopimus ja vuorovaikutusmalli sen jälkeen, kun arkkitehtuurivalinta on perusteltu."
            },
            {
              "id": "api-publishing",
              "title": "Julkaisu ja käyttöönoton mahdollistaminen",
              "description": "Julkaise uudelleenkäytettävän kyvykkyyden tiedot, jotta hyödyntäjät voivat löytää sen, pyytää käyttöä, ottaa sen käyttöön, käyttää sitä ja saada tukea."
            },
            {
              "id": "api-consumer-experience",
              "title": "Hyödyntäjien vaatimukset ja käyttöönotto",
              "description": "Kokoa hyödyntäjien käyttöönotto, standardit, ei-toiminnalliset vaatimukset, palveluodotukset, rajoitteet, tietoturvatarpeet, sallitut protokollat, datan tuoreus, palvelutasot, havainnoitavuus, palautuminen, käyttöönoton vaatimukset ja tuottajan vastuut."
            }
          ],
          "canvases": [
            {
              "id": "customerJourneyCanvas",
              "title": "Asiakaspolkukanvas"
            },
            {
              "id": "domainCanvas",
              "title": "Toimialuekanvas"
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "title": "Kyvykkyyden arvolupauskanvas"
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas"
            },
            {
              "id": "businessImpactCanvas",
              "title": "Liiketoimintavaikutuskanvas"
            },
            {
              "id": "locationsCanvas",
              "title": "Sijaintikanvas"
            },
            {
              "id": "capacityCanvas",
              "title": "Kapasiteettikanvas"
            },
            {
              "id": "interactionCanvas",
              "title": "Vuorovaikutuskanvas"
            },
            {
              "id": "consumerExperienceRequirementsCanvas",
              "title": "Hyödyntäjäkokemuksen vaatimuskanvas"
            },
            {
              "id": "apiValuePropositionCanvas",
              "title": "API-arvolupauskanvas"
            },
            {
              "id": "apiBusinessModelCanvas",
              "title": "API-liiketoimintamallikanvas"
            },
            {
              "id": "restCanvas",
              "title": "REST-kanvas"
            },
            {
              "id": "eventCanvas",
              "title": "Tapahtumakanvas"
            },
            {
              "id": "graphqlCanvas",
              "title": "GraphQL-kanvas"
            }
          ],
          "decisions": [
            "Kuvaa asiakkaan tai kumppanin polku, joka synnyttää kyvykkyystarpeen ja paljastaa tehtävät, ongelmat, hyödyt, syötteet, tuotokset ja päätöspisteet.",
            "Määrittele keskeiset oliot, attribuutit, suhteet, omistajuus ja liiketoimintasäännöt, joita kyvykkyyden on noudatettava.",
            "Käytä Capability Value Proposition Canvas -pohjaa hyödyntäjien tehtävien, hyötyjen, ongelmien ja uudelleenkäytettävien kyvykkyysominaisuuksien kuvaamiseen nimeämättä toimitusteknologiaa liian aikaisin.",
            "Käytä Capability Business Model Canvas -pohjaa omistajuuden, kumppaneiden, kanavien, kustannusten, hyötyjen, tuen ja elinkaariodotusten selkeyttämiseen uudelleenkäytettävälle kyvykkyydelle.",
            "Käytä yhteisiä polku-, toimiala-, arvolupaus- ja liiketoimintamallipohjia teknologiariippumattomien vaatimusten kokoamiseen ja päätä, pitäisikö kyvykkyyden olla uudelleenkäytettävä.",
            "Integraatio- ja API-työssä hypätään usein liian nopeasti tekniseen malliin. Tämä asema pitää tiimin keskittyneenä liiketoimintapolkuun, toimialan merkitykseen, arvoon, uudelleenkäyttöpotentiaaliin, omistajuuteen ja elinkelpoisuuteen ennen APIen, tapahtumien, tiedostojen, virtojen, datatuotteiden tai suoran integraation valintaa."
          ],
          "outputs": [
            "Teknologiariippumaton kyvykkyysmahdollisuuden kuvaus",
            "Yhteinen ymmärrys hyödyntäjistä, tuottajista, toimialan käsitteistä ja uudelleenkäyttöpotentiaalista",
            "Kyvykkyyden arvolupaus ja liiketoimintamalli ennen arkkitehtuurin valintaa",
            "design-artifact",
            "documentation",
            "research",
            "roadmap",
            "Perusteltu arkkitehtuurivalinta"
          ],
          "recommendedResources": [
            {
              "id": "customerJourneyCanvas",
              "slug": "resources/customer-journey-canvas",
              "title": "Asiakaspolkukanvas",
              "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 1,
              "outcomes": [
                "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
                "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
                "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
              ],
              "steps": [
                "Määrittele asiakaspersoona",
                "Tunnista matkan käynnistäjät",
                "Kuvaile matkan loppua",
                "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
                "Tunnista asiakkaan kipupisteet",
                "Yhteenveto asiakkaan saamista eduista",
                "Määritellään tarvittavat syötteet ja tuotokset",
                "Määrittele API-vuorovaikutukset kullekin vaiheelle"
              ],
              "canvasId": "customerJourneyCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "domainCanvas",
              "slug": "resources/domain-canvas",
              "title": "Toimialuekanvas",
              "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 152,
              "outcomes": [
                "Parempi ymmärrys toimialueen mallinnuksesta",
                "Vakioitu lähestymistapa Toimialuekanvasin avulla",
                "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
              ],
              "steps": [
                "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
              ],
              "canvasId": "domainCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityValuePropositionCanvas",
              "slug": "resources/capability-value-proposition-canvas",
              "title": "Kyvykkyyden arvolupauskanvas",
              "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 2.1,
              "outcomes": [
                "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
                "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
                "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
              ],
              "steps": [
                "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
                "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
                "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
                "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
              ],
              "canvasId": "capabilityValuePropositionCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capabilityBusinessModelCanvas",
              "slug": "resources/capability-business-model-canvas",
              "title": "Kyvykkyyden liiketoimintamallikanvas",
              "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 3.1,
              "outcomes": [
                "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
                "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
                "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
              ],
              "steps": [
                "Tiivistä kyvykkyyden arvolupaus.",
                "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
                "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
                "Kuvaa kustannukset ja hyödyt.",
                "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
                "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
              ],
              "canvasId": "capabilityBusinessModelCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "businessImpactCanvas",
              "slug": "resources/business-impact-canvas",
              "title": "Liiketoimintavaikutuskanvas",
              "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 4,
              "outcomes": [
                "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
                "Priorisoidut riskit ja lieventämistoimenpiteet",
                "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
              ],
              "steps": [
                "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
                "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
                "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
                "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
                "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
                "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
              ],
              "canvasId": "businessImpactCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "locationsCanvas",
              "slug": "resources/location-canvas",
              "title": "Sijaintikanvas",
              "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 6,
              "outcomes": [
                "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
                "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
                "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
              ],
              "steps": [
                "API-palveluntarjoajien sijainnit kartalla.",
                "Dokumentoi, missä hyödyntäjät sijaitsevat.",
                "Tunnista sovellettavat säädökset.",
                "Dokumentoi, missä tietojen on oltava.",
                "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
                "Validoi verkon suorituskyky eri alueilla."
              ],
              "canvasId": "locationsCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "capacityCanvas",
              "slug": "resources/capacity-canvas",
              "title": "Kapasiteettikanvas",
              "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
              "category": "canvas",
              "icon": "dashboard-outline",
              "order": 7,
              "outcomes": [
                "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
                "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
                "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
              ],
              "steps": [
                "Dokumentoi nykyiset liiketoiminnan volyymit",
                "Ennustaa tulevia kulutussuuntauksia",
                "Suunnittele huippukuormitus ja saatavuusvaatimukset",
                "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
                "Ehdotetaan skaalausstrategioita"
              ],
              "canvasId": "capacityCanvas",
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": false
            },
            {
              "id": "api-development-best-practices",
              "slug": "resources/api-development-best-practices",
              "title": "API-kehityksen parhaat käytännöt",
              "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 112,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
                "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
              ],
              "canvasId": null,
              "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
              "sourceUrl": null,
              "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
              "draft": true
            },
            {
              "id": "api-testing-best-practices",
              "slug": "resources/api-testing-best-practices",
              "title": "API-testauksen parhaat käytännöt",
              "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 133,
              "outcomes": [
                "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
                "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
                "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            },
            {
              "id": "apiops-CI-CD-for-apis",
              "slug": "resources/apiops-CI-CD-for-apis",
              "title": "APIOps CI/CD rajapinnoille",
              "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
              "category": "guideline",
              "icon": "edit-document-outline",
              "order": 140,
              "outcomes": [
                "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
                "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
                "Asiaan liittyvien käytäntöjen parempi soveltaminen"
              ],
              "steps": [
                "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
                "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
                "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
                "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
              ],
              "canvasId": null,
              "sourcePath": null,
              "sourceUrl": null,
              "contentMarkdown": null,
              "draft": true
            }
          ],
          "promptIds": [
            "compliance-specialist:facilitate-station",
            "compliance-specialist:use-resources",
            "compliance-specialist:next-actions"
          ]
        }
      ],
      "resources": [
        {
          "id": "customerJourneyCanvas",
          "slug": "resources/customer-journey-canvas",
          "title": "Asiakaspolkukanvas",
          "description": "Kartoittaa asiakkaan tai käyttäjän polun tarpeiden ja kipupisteiden tunnistamiseksi, jotta kyvykkyyden ja rajapinnan suunnittelu perustuu todelliseen kontekstiin.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 1,
          "outcomes": [
            "Yhteinen ymmärrys asiakkaan, kumppanin tai hyödyntäjän polusta",
            "Dokumentoidut tarpeet, kipupisteet, hyödyt, syötteet ja tuotokset",
            "Polkua koskeva näyttö kyvykkyys-, vaatimus- ja arkkitehtuuripäätösten tueksi"
          ],
          "steps": [
            "Määrittele asiakaspersoona",
            "Tunnista matkan käynnistäjät",
            "Kuvaile matkan loppua",
            "Kartoita matkan vaiheet ja syötteet/lähtötiedot",
            "Tunnista asiakkaan kipupisteet",
            "Yhteenveto asiakkaan saamista eduista",
            "Määritellään tarvittavat syötteet ja tuotokset",
            "Määrittele API-vuorovaikutukset kullekin vaiheelle"
          ],
          "canvasId": "customerJourneyCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "apiValuePropositionCanvas",
          "slug": "resources/api-value-proposition-canvas",
          "title": "API-arvolupauskanvas",
          "description": "Kohdista API-ominaisuudet käyttäjien tarpeisiin kartoittamalla tehtävät, ongelmat ja hyödyt API-tuotteisiin.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 2,
          "outcomes": [
            "Keskitetty ominaisuuksien kehittäminen",
            "Yhdenmukaisuus käyttäjien tarpeiden kanssa",
            "Parempi API-hyödyntäjien tyytyväisyys"
          ],
          "steps": [
            "Listaa käyttäjäpolun tehtävät.",
            "Tunnistetaan ominaisuudet, jotka tuottavat odotettuja hyötyjä",
            "Määritellään haasteisiin vastaavat ominaisuudet",
            "Ominaisuuksien kartoittaminen API-tuotteisiin"
          ],
          "canvasId": "apiValuePropositionCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "capabilityValuePropositionCanvas",
          "slug": "resources/capability-value-proposition-canvas",
          "title": "Kyvykkyyden arvolupauskanvas",
          "description": "Teknologiariippumaton kanvas hyödyntäjien tehtävien, hyötyjen, kipupisteiden ja mahdollisten uudelleenkäytettävien kyvykkyyksien kartoittamiseen ennen toteutustavan valintaa.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 2.1,
          "outcomes": [
            "Selkeä arvolupaus uudelleenkäytettävälle kyvykkyydelle",
            "Hyödyntäjien tehtävät, tavoitellut hyödyt ja kipupisteet on kuvattu ilman oletusta tietystä teknologiasta.",
            "Mahdolliset uudelleenkäytettävät kyvykkyydet on tunnistettu arkkitehtuurin arviointia varten."
          ],
          "steps": [
            "Listaa hyödyntäjien tehtävät ja lopputulokset, joita kyvykkyyden tulee tukea.",
            "Tunnista kyvykkyyden ominaisuudet, jotka mahdollistavat tavoitellut hyödyt.",
            "Tunnista kyvykkyyden ominaisuudet, jotka vähentävät kipupisteitä.",
            "Ryhmittele ominaisuudet mahdollisiksi uudelleenkäytettäviksi kyvykkyyksiksi."
          ],
          "canvasId": "capabilityValuePropositionCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "apiBusinessModelCanvas",
          "slug": "resources/api-business-model-canvas",
          "title": "API-liiketoimintamallikanvas",
          "description": "Arvioi API-liiketoiminnan elinkelpoisuutta kartoittamalla arvolupaus, API-hyödyntäjäsegmentit ja keskeiset resurssit.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 3,
          "outcomes": [
            "Selkeä liiketoimintastrategia rajapintoja varten",
            "Keskeisten resurssien ja kumppaneiden tunnistaminen",
            "API-ominaisuuksien ja liiketoiminnan tavoitteiden yhteensovittaminen"
          ],
          "steps": [
            "Tiivistä APIn arvolupauksen tiivistelmä",
            "Hyödyntäjäsegmenttien määrittely",
            "Kehittäjäsuhdestrategioiden määrittäminen",
            "Kartoita jakelukanavat",
            "Dokumentoi keskeiset resurssit ja toimet",
            "Tunnistetaan tärkeimmät kumppanit ja sidosryhmät",
            "Korosta hyötyjä ja kustannuksia"
          ],
          "canvasId": "apiBusinessModelCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "capabilityBusinessModelCanvas",
          "slug": "resources/capability-business-model-canvas",
          "title": "Kyvykkyyden liiketoimintamallikanvas",
          "description": "Uudelleenkäytettävien kyvykkyyksien liiketoimintamallikanvas, joka käsittelee arvoa, hyödyntäjiä, omistajuutta, vuorovaikutusta, kustannuksia ja hyötyjä olettamatta toteutustapaa.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 3.1,
          "outcomes": [
            "Toteuttamiskelpoinen toimintamalli uudelleenkäytettävälle kyvykkyydelle",
            "Omistajuus, hyödyntäjät, kanavat, kumppanit ja tuen tarpeet on selkeytetty.",
            "Kustannukset ja hyödyt ovat näkyvissä ennen arkkitehtuurisitoumusta."
          ],
          "steps": [
            "Tiivistä kyvykkyyden arvolupaus.",
            "Tunnista hyödyntäjäsegmentit ja osallistamiskanavat.",
            "Määritä keskeiset toiminnot, resurssit ja kumppanit.",
            "Kuvaa kustannukset ja hyödyt.",
            "Selkeytä omistajuus, rahoitus, tuki ja elinkaaren odotukset.",
            "Validoi malli hyödyntäjien, tuottajien ja governance-sidosryhmien kanssa."
          ],
          "canvasId": "capabilityBusinessModelCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "consumerExperienceRequirementsCanvas",
          "slug": "resources/consumer-experience-requirements-canvas",
          "title": "Hyödyntäjäkokemuksen vaatimuskanvas",
          "description": "Vaatimuskanvas hyödyntäjäkokemukselle ja ei-toiminnallisille tarpeille, joiden tulee ohjata myöhempää arkkitehtuuri- ja toteutustapapäätöstä.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 3.2,
          "outcomes": [
            "Teknologiariippumattomat hyödyntäjä- ja palveluvaatimukset",
            "Kokemukseen ja ei-toiminnallisiin tarpeisiin liittyvät vaatimukset on kuvattu ennen suunnittelun aloittamista.",
            "Dokumentoidut arkkitehtuurivaikutukset toteutustavan valintaa varten"
          ],
          "steps": [
            "Kuvaa hyödyntäjien tavoitteet ja käyttökonteksti.",
            "Dokumentoi saatavuuteen, ajantasaisuuteen, volyymiin, suorituskykyyn, datan laatuun ja yhdenmukaisuuteen liittyvät odotukset.",
            "Dokumentoi turvallisuuteen, tietosuojaan, käyttöönottoon, muutoksiin, havainnoitavuuteen, tukeen ja palautumiseen liittyvät odotukset.",
            "Tiivistä, mitä vaatimukset merkitsevät mahdollisten toteutustapojen kannalta."
          ],
          "canvasId": "consumerExperienceRequirementsCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "businessImpactCanvas",
          "slug": "resources/business-impact-canvas",
          "title": "Liiketoimintavaikutuskanvas",
          "description": "Tunnista liiketoimintaan, saatavuuteen, tietoturvaan, dataan, vaatimustenmukaisuuteen ja operointiin liittyvät riskit, joiden tulee ohjata arkkitehtuuri- ja alustapäätöksiä.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 4,
          "outcomes": [
            "Dokumentoitu arvio liiketoiminta- ja operatiivisista vaikutuksista",
            "Priorisoidut riskit ja lieventämistoimenpiteet",
            "Arkkitehtuuri- ja alustapäätöksiä tukeva näyttö"
          ],
          "steps": [
            "Saatavuusriskit: Tunnista riskit ja vaikutukset.",
            "Saatavuusriskien lieventämistavat: Määrittele lieventämistoimenpiteet.",
            "Turvallisuusriskit: Dokumentoi turvallisuuteen liittyvät riskit.",
            "Tapoja vähentää turvallisuusriskejä: Ehdota strategioita turvallisuusriskien lieventämiseksi.",
            "Tietoriskit: Tunnista tietojen tarkkuuteen tai saatavuuteen liittyvät riskit.",
            "Tietoriskien lieventämistavat: Suunnittele strategioita tietoriskien torjumiseksi."
          ],
          "canvasId": "businessImpactCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "locationsCanvas",
          "slug": "resources/location-canvas",
          "title": "Sijaintikanvas",
          "description": "Kartoita API-palveluntarjoajien ja -hyödyntäjien sijainnit vaatimustenmukaisuuden ja suorituskyvyn varmistamiseksi eri alueilla.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 6,
          "outcomes": [
            "Dokumentoidut sijainti-, tiedon sijainti-, verkko- ja sääntelyvaatimukset",
            "Tunnistetut alueelliset suorituskyky- ja saavutettavuusrajoitteet",
            "Selkeytetyt tiedon sijaintivaatimukset, luottamusrajat ja sovellettava sääntely"
          ],
          "steps": [
            "API-palveluntarjoajien sijainnit kartalla.",
            "Dokumentoi, missä hyödyntäjät sijaitsevat.",
            "Tunnista sovellettavat säädökset.",
            "Dokumentoi, missä tietojen on oltava.",
            "Varmista, että rajapinnat ovat käytettävissä kaikilla aiotuilla verkkoalueilla.",
            "Validoi verkon suorituskyky eri alueilla."
          ],
          "canvasId": "locationsCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "capacityCanvas",
          "slug": "resources/capacity-canvas",
          "title": "Kapasiteettikanvas",
          "description": "Suunnittele kapasiteetti nykyistä ja tulevaa kysyntää varten. Huomioi volyymit, kuormitushuiput, viive, saatavuus, skaalaus, välimuistit ja kutsurajoitukset valitulle kyvykkyydelle ja toteutustavalle.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 7,
          "outcomes": [
            "Liiketoiminnan odotettuun kysyntään sovitetut kapasiteettivaatimukset",
            "Dokumentoidut oletukset kuormitushuipuista, saatavuudesta ja kasvusta",
            "Määritellyt skaalaus-, välimuisti- ja kutsurajoitusratkaisut"
          ],
          "steps": [
            "Dokumentoi nykyiset liiketoiminnan volyymit",
            "Ennustaa tulevia kulutussuuntauksia",
            "Suunnittele huippukuormitus ja saatavuusvaatimukset",
            "Määrittele välimuistitallennus- ja nopeudenrajoitusstrategiat.",
            "Ehdotetaan skaalausstrategioita"
          ],
          "canvasId": "capacityCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "interactionCanvas",
          "slug": "resources/interaction-canvas",
          "title": "Vuorovaikutuskanvas",
          "description": "Määrittele API-vuorovaikutukset, työnkulut ja odotetut vastaukset, jotta varmistetaan yhdenmukainen API-kokemus.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 9,
          "outcomes": [
            "Valitun kyvykkyyden määritelty vuorovaikutusmalli",
            "Selkeytetyt syötteet, tuotokset, komennot, kyselyt, tapahtumat ja vastaukset",
            "Sovitut validointisäännöt ja vuorovaikutusodotukset"
          ],
          "steps": [
            "Kartoita rajapinnan vuorovaikutukset käyttäjän tehtäviin.",
            "Määritä päätepisteet kullekin vuorovaikutukselle",
            "Dokumentoi kunkin vuorovaikutuksen syötteet ja tuotokset.",
            "Validointisääntöjen ja -rajoitusten määrittäminen",
            "Luo vuorovaikutusmalleja CRUD-, kysely-, komento- ja tapahtumapohjaista vuorovaikutusta varten."
          ],
          "canvasId": "interactionCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "restCanvas",
          "slug": "resources/rest-canvas",
          "title": "REST-kanvas",
          "description": "Suunnittele rajapinnat RESTful-periaatteiden mukaisesti määrittelemällä resurssit, verbit sekä esimerkkipyynnöt ja -vastaukset.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 10,
          "outcomes": [
            "Johdonmukainen RESTful API-design",
            "Määritellyt resurssit ja niiden vuorovaikutus",
            "Esimerkkipyynnöt ja -vastaukset selkeyden vuoksi"
          ],
          "steps": [
            "Tunnista APIn tarjoamat keskeiset resurssit",
            "API-resurssimallin rakenteen määrittäminen",
            "Määritä HTTP-verbit, joita käytetään vuorovaikutuksessa resurssien kanssa.",
            "Anna esimerkkipyynnöt ja -vastaukset kullekin verbille"
          ],
          "canvasId": "restCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "graphqlCanvas",
          "slug": "resources/graphql-canvas",
          "title": "GraphQL-kanvas",
          "description": "Suunnittele GraphQL APIt määrittelemällä tyypit, kyselyt, mutaatiot ja tilaukset.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 11,
          "outcomes": [
            "Strukturoidun GraphQL APIn suunnittelu",
            "Määritellyt tyypit ja niiden väliset suhteet",
            "Selkeät kyselyt, mutaatiot ja tilaukset"
          ],
          "steps": [
            "Mitä ongelmia API-hyödyntäjät yrittävät ratkaista? Mitä tietoja he tarvitsevat?",
            "Määritä GraphQL-tyypit ja niiden attribuutit: mitkä ovat keskeiset tyypit (esim. käyttäjä, tilaus, tuote)?",
            "Kartoita tyyppien väliset suhteet: Miten tyypit liittyvät toisiinsa sisäkkäisissä kyselyissä?",
            "Määritä kyselyt tiedonhakua varten",
            "Määritä tietojen muuttamista koskevat mutaatiot: Millaisilla operaatioilla tietoja muutetaan (esim. luodaan, päivitetään, poistetaan)?",
            "Reaaliaikaisten päivitysten tilaukset",
            "Määrittele todennus ja valtuutus: Kuka voi käyttää mitä kenttiä tai tyyppejä?",
            "Harkitse, onko olemassa sivutus-, suodatus- tai nopeusrajoituksia."
          ],
          "canvasId": "graphqlCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "eventCanvas",
          "slug": "resources/event-canvas",
          "title": "Tapahtumakanvas",
          "description": "Suunnittele tapahtumapohjaiset rajapinnat ja integraatiot määrittelemällä tapahtumat, laukaisimet, skeemat, tuottajat, hyödyntäjät ja käsittelylogiikka.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 12,
          "outcomes": [
            "Määritelty tapahtumapohjainen vuorovaikutusmalli",
            "Selkeytetyt tapahtumat, laukaisimet, skeemat, tuottajat ja hyödyntäjät",
            "Dokumentoidut käsittely-, kuittaus- ja virhetilanneodotukset"
          ],
          "steps": [
            "Järjestelmän keskeisten tapahtumien tunnistaminen",
            "Määritä laukaisimet kullekin tapahtumalle",
            "Kuvaa tapahtumien käsittely, tilamuutokset ja virhetilanteiden käsittely.",
            "Määritä tuloksena olevat tuotokset tai kuittaukset"
          ],
          "canvasId": "eventCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "api-audit-checklist",
          "slug": "resources/api-audit-checklist",
          "title": "API-auditoinnin tarkistuslista",
          "description": "Elinkaaripohjainen tarkistuslista, jolla varmistetaan APIn valmius suunnittelun, toimituksen, julkaisun ja vaatimustenmukaisuuden osalta määriteltyjen auditointikriteerien ja todisteiden avulla.",
          "category": "checklist",
          "icon": "check-box-outline",
          "order": 13,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-auditoinnin tarkistuslista tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-auditoinnin tarkistuslista",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Varmista API-auditoinnin tarkistuslistan avulla, että API-design täyttää toiminnalliset ja muut kuin toiminnalliset vaatimukset, mukaan lukien tietoturva, suorituskyky ja vaatimustenmukaisuus.",
            "Suorita auditointeja elinkaaren kattavuuden arvioimiseksi ja varmista, että API täyttää liiketoiminta-, suunnittelu- ja toimintastandardit.",
            "Varmista, että dokumentaatio, tietoturvamallit, gateway-konfiguraatio ja lakisääteiset vaatimukset on määritelty selkeästi, validoitu ja tuettu todisteilla."
          ],
          "canvasId": null,
          "sourcePath": "src/snippets/api-audit-checklist.json",
          "sourceUrl": null,
          "contentMarkdown": "{\r\n  \"profiles\": {\r\n    \"read-only\": {\r\n      \"description\": \"API profile that is read-only and does not allow create, update, or delete operations.\"\r\n    },\r\n    \"full-crud\": {\r\n      \"description\": \"General API profile that allows create, update, and delete operations.\"\r\n    }\r\n  },\r\n  \"lifecycleStages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6\r\n    }\r\n  ],\r\n  \"stages\": [\r\n    {\r\n      \"id\": \"strategy\",\r\n      \"title\": \"Strategy\",\r\n      \"readinessLabel\": \"Strategy is Ready When...\",\r\n      \"order\": 1,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"based-on-clear-business-needs\",\r\n          \"label\": \"API is based on clear business needs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiBusinessModelCanvas\",\r\n            \"apiValuePropositionCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"design-artifact\",\r\n            \"documentation\",\r\n            \"research\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\",\r\n            \"specs/canvases/api-product-strategy/apiBusinessModelCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"concept-items-audited\",\r\n          \"label\": \"All concept checklist items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"strategy\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"strategy\",\r\n          \"producedByStation\": [\r\n            \"api-product-strategy\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"business-goals-defined\",\r\n            \"market-research-done\",\r\n            \"stakeholder-approval\",\r\n            \"metrics-feedback-available\",\r\n            \"api-opportunity-documented\",\r\n            \"api-reusability\",\r\n            \"value-prop-validated\",\r\n            \"consumer-segments-identified\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/concept-review-report.json\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"architecture\",\r\n      \"title\": \"Architecture\",\r\n      \"readinessLabel\": \"Architecture is Ready When...\",\r\n      \"order\": 2,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"versioning-decided\",\r\n          \"label\": \"Versioning strategy decided and supported by gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VERSION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-versioning-best-practices\",\r\n            \"apiops-CI-CD-for-apis\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"ci-cd\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"only-via-gateway\",\r\n          \"label\": \"Only accessible via API gateway\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-reusability\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-02\",\r\n            \"REST-CAPACITY-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"businessImpactCanvas\",\r\n            \"locationsCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"infra-config\",\r\n            \"security-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/architecture/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"rate-limits-enforced\",\r\n          \"label\": \"Rate limits are enforced\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"architecture\",\r\n          \"producedByStation\": [\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-roadmap-defined\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CAPACITY-01\",\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"capacityCanvas\",\r\n            \"api-security-best-practices\",\r\n            \"scalable-infrastructure-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"runtime\",\r\n            \"monitoring\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-platform-architecture/capacityCanvas.empty.json\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"design\",\r\n      \"title\": \"Design\",\r\n      \"readinessLabel\": \"Design is Ready When...\",\r\n      \"order\": 3,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"endpoint-descriptions-present\",\r\n          \"label\": \"Endpoints have business value and feature descriptions\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"operationDescriptions\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\",\r\n            \"api-opportunity-documented\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiValuePropositionCanvas\",\r\n            \"customerJourneyCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"specs/canvases/api-product-strategy/apiValuePropositionCanvas.empty.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"hides-raw-backend-data\",\r\n          \"label\": \"API hides raw backend data and is designed for shared use\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"interactionCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-product-strategy/domainCanvas.empty.json\",\r\n            \"specs/canvases/api-design/interactionCanvas.empty.json\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"design-consistent\",\r\n          \"label\": \"API design is consistent with other APIs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-platform-architecture\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-reusability\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DOMAIN-02\",\r\n            \"REST-CX-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"design-artifact\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/canvases/api-design/restCanvas.empty.json\",\r\n            \"docs/api/design/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"descriptive-english-naming\",\r\n          \"label\": \"Data and attribute naming uses descriptive English\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"fieldNamesDescriptive\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"mandatory-fields-specified\",\r\n          \"label\": \"Mandatory fields are specified\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"requiredFieldsPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"dates-use-iso\",\r\n          \"label\": \"Dates use ISO format with timezone\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"dateFormatTimezone\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"general-data-uses-standard-values\",\r\n          \"label\": \"General data uses standard values\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"standardizedEnumsOrPatterns\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-DATA-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"field-names-avoid-acronyms\",\r\n          \"label\": \"Field names avoid acronyms and use full words\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"avoidAcronyms\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-NAMING-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"create-returns-identifiers\",\r\n          \"label\": \"Creating new resources returns identifiers\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is read-only and does not create resources.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"paths-max-two-resources\",\r\n          \"label\": \"Endpoint paths contain max two resources or sub-resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"pathDepthMax\",\r\n            \"maxDepth\": 2\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PATH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"examples-present\",\r\n          \"label\": \"Endpoints and attributes include examples\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CX-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-for-create-update\",\r\n          \"label\": \"POST is used for create or update\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose create or update operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"design-reflects-business-value\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-for-remove\",\r\n          \"label\": \"DELETE is used to remove resources\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose delete operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-no-request-body\",\r\n          \"label\": \"GET has no request body and returns content\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"getNoRequestBody\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"get-empty-returns-204\",\r\n          \"label\": \"GET returns 204 if response body is empty\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current contract returns content for all GET operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-200\",\r\n          \"label\": \"POST returns 200 OK when updating\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST updates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-200-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"post-returns-201\",\r\n          \"label\": \"POST returns 201 Created with ID on create\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose POST creates.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-201-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"delete-returns-204\",\r\n          \"label\": \"DELETE returns 204 on success\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"Read-only profile does not expose DELETE operations.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-RESP-204-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-onboarding-best-practices\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"400-errors-specific\",\r\n          \"label\": \"400 errors provide specific error information\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"errorResponsesSpecific\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-consumer-experience\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\",\r\n            \"value-prop-validated\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-400-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"restCanvas\",\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"401-unauthorized\",\r\n          \"label\": \"401 Unauthorized for wrong credentials\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current public storefront contract is intentionally unauthenticated.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-401-01\",\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"403-forbidden\",\r\n          \"label\": \"403 Forbidden for unauthorized operations\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"The current profile is public read-only and exposes no unauthorized operations.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-ERROR-403-01\",\r\n            \"REST-SEC-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-contains-schemas\",\r\n          \"label\": \"Spec contains request and response schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"schemasPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"restCanvas\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"contract\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"pseudo-identifiers\",\r\n          \"label\": \"UUIDs or pseudo-identifiers instead of DB IDs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"opaqueIdentifiers\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-07\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"domainCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"no-sensitive-data-in-urls\",\r\n          \"label\": \"No sensitive data in URLs\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"noSensitiveDataInPaths\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"hide-backend-discrepancies\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-06\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"contract-first-design\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"http-methods-match-resources\",\r\n          \"label\": \"HTTP methods only for intended resources\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"methodResourceConsistency\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"design\",\r\n          \"producedByStation\": [\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-HTTP-GET-01\",\r\n            \"REST-HTTP-POST-01\",\r\n            \"REST-HTTP-PUT-01\",\r\n            \"REST-HTTP-DELETE-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"restCanvas\",\r\n            \"api-design-principles\",\r\n            \"contract-first-design\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"delivery\",\r\n      \"title\": \"Delivery\",\r\n      \"readinessLabel\": \"Delivery is Ready When...\",\r\n      \"order\": 4,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"design-items-audited\",\r\n          \"label\": \"All prototype and design items are audited\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"aggregate\",\r\n          \"check\": {\r\n            \"type\": \"stageCoverage\",\r\n            \"stageId\": \"design\"\r\n          },\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-design\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"design-reflects-business-value\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"report\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"audit/production-readiness-review.json\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-validated-on-change\",\r\n          \"label\": \"Spec validated on every change\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"validationWorkflowPresent\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-audit-checklist\",\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"schema-and-examples-pass\",\r\n          \"label\": \"Schema and examples pass validation\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"openapi\",\r\n          \"check\": {\r\n            \"type\": \"examplesPassValidation\"\r\n          },\r\n          \"automationLevel\": \"auto\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-design\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-consistency\",\r\n            \"architecture-patterns-validated\",\r\n            \"api-contract-tested\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-AUDIT-01\",\r\n            \"REST-CONTRACT-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"api-audit-checklist\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"test\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"uses-https\",\r\n          \"label\": \"Uses HTTPS or encrypted protocols\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"auth-protection\",\r\n          \"label\": \"Endpoints protected by authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"gateway-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"token-auth\",\r\n          \"label\": \"Token-based authentication\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"csrf-protection\",\r\n          \"label\": \"Protected against CSRF\",\r\n          \"applicableTo\": [\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"This profile is intentionally public read-only.\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-08\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-development-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"inputs-auto-validated\",\r\n          \"label\": \"Inputs auto-validated by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-VALIDATION-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"contract-first-design\",\r\n            \"api-testing-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\",\r\n            \"test\",\r\n            \"spec\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"outputs-auto-escaped\",\r\n          \"label\": \"Outputs auto-escaped by framework\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"n/a\",\r\n          \"defaultStatus\": \"na\",\r\n          \"reason\": \"JSON APIs do not typically require output escaping in the same way as HTML rendering.\",\r\n          \"automationLevel\": \"manual\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-development-best-practices\",\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"code\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"encryption-in-transit\",\r\n          \"label\": \"Encryption for data in transit and storage\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\",\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-SEC-05\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"data-privacy-guidelines\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"infra-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"message-integrity\",\r\n          \"label\": \"Message integrity implemented\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"delivery\",\r\n          \"producedByStation\": [\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"architecture-patterns-validated\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-OBS-01\",\r\n            \"REST-SEC-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-security-best-practices\",\r\n            \"api-compliance-best-practices\",\r\n            \"api-metrics-and-analytics\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"security-config\",\r\n            \"monitoring\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/delivery/README.md\",\r\n            \"docs/api/architecture/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"publishing\",\r\n      \"title\": \"Publishing\",\r\n      \"readinessLabel\": \"Publishing is Ready When...\",\r\n      \"order\": 5,\r\n      \"items\": [\r\n        {\r\n          \"id\": \"published-via-api-management\",\r\n          \"label\": \"Published via API management\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-01\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"gateway-config\",\r\n            \"ci-cd\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"visible-in-dev-portal\",\r\n          \"label\": \"Visible in developer portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-community-engagement-strategies\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"docs-auto-generated\",\r\n          \"label\": \"Docs auto-generated from spec and schema\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"partial\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-documentation-ready\",\r\n            \"api-ready-for-publishing\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\",\r\n            \"REST-PUBLISH-03\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"contract-first-design\",\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"spec\",\r\n            \"documentation\",\r\n            \"ci-cd\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"specs/openapi/api.yaml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"docs/api/audit/design-audit.read-only.md\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"spec-auto-updated\",\r\n          \"label\": \"Spec auto-updated to gateway and dev portal\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\",\r\n            \"api-delivery\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\",\r\n            \"api-consistency\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-CONTRACT-02\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"apiops-CI-CD-for-apis\",\r\n            \"contract-first-design\",\r\n            \"api-onboarding-best-practices\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"ci-cd\",\r\n            \"gateway-config\",\r\n            \"documentation\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \".github/workflows/openapi-lint.yml\",\r\n            \"docs/api/publishing/README.md\",\r\n            \"specs/openapi/api.yaml\"\r\n          ]\r\n        },\r\n        {\r\n          \"id\": \"official-domain\",\r\n          \"label\": \"Published under official organization domain\",\r\n          \"applicableTo\": [\r\n            \"read-only\",\r\n            \"full-crud\"\r\n          ],\r\n          \"kind\": \"manual\",\r\n          \"defaultStatus\": \"gap\",\r\n          \"automationLevel\": \"semi\",\r\n          \"primaryStage\": \"publishing\",\r\n          \"producedByStation\": [\r\n            \"api-publishing\"\r\n          ],\r\n          \"producedByStationCriteria\": [\r\n            \"api-ready-for-publishing\",\r\n            \"audit-passed\"\r\n          ],\r\n          \"guidelines\": [\r\n            \"REST-PUBLISH-04\"\r\n          ],\r\n          \"resourceSource\": [\r\n            \"api-onboarding-best-practices\",\r\n            \"api-audit-checklist\"\r\n          ],\r\n          \"expectedEvidenceTags\": [\r\n            \"documentation\",\r\n            \"runtime\"\r\n          ],\r\n          \"expectedEvidence\": [\r\n            \"docs/api/publishing/README.md\"\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"improving\",\r\n      \"title\": \"Improving\",\r\n      \"readinessLabel\": \"Improving is Ready When...\",\r\n      \"order\": 6,\r\n      \"items\": []\r\n    }\r\n  ],\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"based-on-clear-business-needs\",\r\n        \"hides-raw-backend-data\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}\r\n",
          "draft": false
        },
        {
          "id": "api-design-principles",
          "slug": "resources/api-design-principles",
          "title": "API-suunnitteluperiaatteet",
          "description": "Tiivis opas APIn käytettävyyteen, löydettävyyteen ja johdonmukaisuuteen, joka perustuu yhteisiin suunnittelusääntöihin ja todellisiin hyödyntäjien tarpeisiin.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 14,
          "outcomes": [
            "Yhteinen ymmärrys resurssin APIn suunnitteluperiaatteet tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia APIn suunnitteluperiaatteet",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "**Hyödyntäjä ensin -suunnittelu:** Aloita jokainen APIOps-sykli keräämällä käyttäjien tavoitteet ja toimialan ehdot, jotta APIt ratkaisevat todellisia ongelmia.",
            "**Johdonmukainen nimeäminen ja käyttäytyminen:** Sovelletaan yhteisiä käytäntöjä resursseja, virheitä ja formaatteja varten, jotta rajapinnat olisivat ennakoitavissa.",
            "**Sopimusperusteinen:** kaappaa rajapinta OpenAPIlla tai AsyncAPIlla ennen koodausta tiimien yhdenmukaistamiseksi ja automaation mahdollistamiseksi.",
            "**Käytettävyys ja löydettävyys:** Selkeä dokumentaatio ja esimerkit, jotta kehittäjät ymmärtävät nopeasti, miten APIta käytetään.",
            "**Iteroi turvallisesti:** Kehitä malleja pienissä, versioiduissa vaiheissa, jotta muutokset eivät häiritse nykyisiä API-hyödyntäjiä."
          ],
          "canvasId": null,
          "sourcePath": "src/snippets/api-style-guide.json",
          "sourceUrl": null,
          "contentMarkdown": "{\r\n  \"guidelines\": [\r\n    {\r\n      \"id\": \"REST-CONTRACT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST implement endpoints, parameters, request bodies, response bodies, and error responses as defined in the validated OpenAPI contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-contains-schemas\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CONTRACT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST keep the implementation, published OpenAPI description, gateway configuration, and developer portal documentation aligned on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"docs-auto-generated\",\r\n        \"spec-auto-updated\",\r\n        \"spec-validated-on-change\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VALIDATION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate path parameters, query parameters, headers, and JSON request bodies against the OpenAPI schema before business processing.\",\r\n      \"relatedAuditItems\": [\r\n        \"mandatory-fields-specified\",\r\n        \"400-errors-specific\",\r\n        \"inputs-auto-validated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST expose business-oriented resources and attributes rather than raw backend tables, internal service payloads, or system-specific field names.\",\r\n      \"relatedAuditItems\": [\r\n        \"hides-raw-backend-data\",\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DOMAIN-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST preserve validated meanings of entities, attributes, statuses, and source-of-truth rules across all endpoints and operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\",\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use descriptive English names for resources and attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"descriptive-english-naming\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-NAMING-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST avoid unexplained acronyms in public field and resource names.\",\r\n      \"relatedAuditItems\": [\r\n        \"field-names-avoid-acronyms\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API MUST use ISO date-time values with timezone information where dates are exposed.\",\r\n      \"relatedAuditItems\": [\r\n        \"dates-use-iso\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-DATA-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"domain-modeling\",\r\n      \"requirement\": \"The REST API SHOULD use standard codes, controlled vocabularies, and standardized value sets where applicable.\",\r\n      \"relatedAuditItems\": [\r\n        \"general-data-uses-standard-values\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST describe the business value and feature intent of each endpoint or capability.\",\r\n      \"relatedAuditItems\": [\r\n        \"endpoint-descriptions-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API MUST include examples for endpoints, request bodies, response bodies, and key attributes.\",\r\n      \"relatedAuditItems\": [\r\n        \"examples-present\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CX-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"consumer-experience\",\r\n      \"requirement\": \"The REST API SHOULD use consistent pagination, filtering, sorting, and response conventions across resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"design-consistent\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-GET-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use GET for safe read-only operations and MUST NOT define a request body for GET operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-POST-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use POST for resource creation and other non-idempotent operations.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-PUT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use PUT only for full resource replacement.\",\r\n      \"relatedAuditItems\": [\r\n        \"post-for-create-update\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-HTTP-DELETE-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"http-semantics\",\r\n      \"requirement\": \"The REST API MUST use DELETE to remove resources.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-for-remove\",\r\n        \"http-methods-match-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PATH-01\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"resource-modeling\",\r\n      \"requirement\": \"The REST API SHOULD keep endpoint paths shallow and avoid more than two resource or sub-resource levels unless explicitly justified.\",\r\n      \"relatedAuditItems\": [\r\n        \"paths-max-two-resources\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-200-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 200 OK for successful reads and updates that include a response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-no-request-body\",\r\n        \"post-returns-200\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-201-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 201 Created and the created resource identifier when a new resource is created.\",\r\n      \"relatedAuditItems\": [\r\n        \"create-returns-identifiers\",\r\n        \"post-returns-201\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API MUST return 204 No Content for successful delete operations that do not return a body.\",\r\n      \"relatedAuditItems\": [\r\n        \"delete-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-RESP-204-02\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"status-codes\",\r\n      \"requirement\": \"The REST API SHOULD return 204 No Content for successful operations that intentionally return no response body.\",\r\n      \"relatedAuditItems\": [\r\n        \"get-empty-returns-204\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-400-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST define 400 Bad Request responses with specific and actionable validation error information.\",\r\n      \"relatedAuditItems\": [\r\n        \"400-errors-specific\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-401-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 401 Unauthorized for missing or invalid credentials.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-ERROR-403-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"error-handling\",\r\n      \"requirement\": \"The REST API MUST return 403 Forbidden for authenticated clients lacking sufficient permission.\",\r\n      \"relatedAuditItems\": [\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-VERSION-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"versioning\",\r\n      \"requirement\": \"The REST API MUST define a versioning strategy before production release, and the strategy MUST be supportable by the API gateway.\",\r\n      \"relatedAuditItems\": [\r\n        \"versioning-decided\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST require authentication for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use token-based authentication or another approved modern authentication mechanism for protected endpoints.\",\r\n      \"relatedAuditItems\": [\r\n        \"token-auth\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-03\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST enforce object-level and function-level authorization on every protected operation.\",\r\n      \"relatedAuditItems\": [\r\n        \"401-unauthorized\",\r\n        \"403-forbidden\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST mitigate OWASP API risks including broken object level authorization, broken function level authorization, injection, and unrestricted resource consumption.\",\r\n      \"relatedAuditItems\": [\r\n        \"auth-protection\",\r\n        \"rate-limits-enforced\",\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-05\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST use HTTPS or another approved encrypted protocol for all traffic.\",\r\n      \"relatedAuditItems\": [\r\n        \"uses-https\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-06\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST NOT expose sensitive information in URLs, query strings, logs, or unnecessary response fields.\",\r\n      \"relatedAuditItems\": [\r\n        \"no-sensitive-data-in-urls\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-07\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API SHOULD use UUIDs or other non-sequential public identifiers where direct database identifiers would increase exposure risk.\",\r\n      \"relatedAuditItems\": [\r\n        \"pseudo-identifiers\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-SEC-08\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"security\",\r\n      \"requirement\": \"The REST API MUST implement CSRF protection where relevant to the authentication model and client interaction pattern.\",\r\n      \"relatedAuditItems\": [\r\n        \"csrf-protection\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST define and enforce rate limits, throttling, or quotas according to capacity expectations.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-CAPACITY-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"resilience-capacity\",\r\n      \"requirement\": \"The REST API MUST implement resilience controls such as timeouts, fallback behavior, and degradation handling according to business impact.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\",\r\n        \"encryption-in-transit\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-OBS-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"observability\",\r\n      \"requirement\": \"The REST API MUST implement logs, metrics, and monitoring needed to observe validation failures, auth failures, traffic, latency, and dependency health.\",\r\n      \"relatedAuditItems\": [\r\n        \"rate-limits-enforced\",\r\n        \"message-integrity\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published through an API management platform.\",\r\n      \"relatedAuditItems\": [\r\n        \"published-via-api-management\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be accessible only through approved API gateway paths and managed entry points.\",\r\n      \"relatedAuditItems\": [\r\n        \"only-via-gateway\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-03\",\r\n      \"priority\": \"SHOULD\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API SHOULD be visible in a developer portal with documentation generated from the contract.\",\r\n      \"relatedAuditItems\": [\r\n        \"visible-in-dev-portal\",\r\n        \"docs-auto-generated\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-PUBLISH-04\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"publishing-governance\",\r\n      \"requirement\": \"The REST API MUST be published under an approved organizational domain.\",\r\n      \"relatedAuditItems\": [\r\n        \"official-domain\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-01\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST validate the specification, schema, and examples on every change.\",\r\n      \"relatedAuditItems\": [\r\n        \"spec-validated-on-change\",\r\n        \"schema-and-examples-pass\"\r\n      ]\r\n    },\r\n    {\r\n      \"id\": \"REST-AUDIT-02\",\r\n      \"priority\": \"MUST\",\r\n      \"category\": \"contract-governance\",\r\n      \"requirement\": \"The REST API MUST pass concept, design, security, and production-readiness checks before release.\",\r\n      \"relatedAuditItems\": [\r\n        \"concept-items-audited\",\r\n        \"design-items-audited\"\r\n      ]\r\n    }\r\n  ]\r\n}",
          "draft": false
        },
        {
          "id": "api-community-engagement-strategies",
          "slug": "resources/api-community-engagement-strategies",
          "title": "API-yhteisön sitouttamisstrategiat",
          "description": "Toimintakirja API-käyttöliittymien käyttöönoton edistämiseksi kehittämällä yhteisöjä sisällön, tukikanavien, palautesilmukoiden ja sosiaalisen sitoutumisen strategioiden avulla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 103,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-yhteisön sitouttamisstrategiat tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-yhteisön sitouttamisstrategiat",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Kehitä markkinointistrategioita APIen markkinoimiseksi kohdeyleisöille, mukaan lukien sosiaalinen media, blogit ja webinaarit.",
            "Luo myynninedistämismateriaalia (esim. tapaustutkimuksia, menestystarinoita), jossa korostetaan rajapintojen arvoa ja hyötyjä.",
            "Luo opetusmateriaalia (esim. opetusohjelmia, dokumentaatiota), jossa selitetään APIn ominaisuuksia, hyötyjä ja käyttötapoja.",
            "Kytkeydy API-käyttäjiin palautekierrosten, tukikanavien ja yhteisöfoorumien kautta ymmärtämään heidän tarpeitaan ja parantamaan APIn käyttöönottoa.",
            "Analysoi APIn käyttömittareita ja ota käyttäjien palaute huomioon API-iteraatioissa."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-compliance-best-practices",
          "slug": "resources/api-compliance-best-practices",
          "title": "API-vaatimustenmukaisuuden parhaat käytännöt",
          "description": "Varmista, että rajapinnat täyttävät oikeudelliset, sääntelyyn liittyvät ja sisäiset vaatimukset dokumentoinnin, valvonnan ja automaattisten validointien avulla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 104,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-vaatimustenmukaisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-vaatimustenmukaisuuden parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Dokumentoi vaatimustenmukaisuustoimenpiteet ja varmista, että niistä tiedotetaan sidosryhmille ja hyödyntäjille.",
            "Toteuta toimenpiteitä, joilla varmistetaan, että rajapinnat täyttävät nämä vaatimukset, mukaan lukien tietojen salaus, käyttöoikeuksien valvonta ja kirjausketjut.",
            "Käytä tarkistuslistoja, linereita ja testausvälineitä varmistaaksesi johdonmukaisuuden ja standardien noudattamisen."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-development-best-practices",
          "slug": "resources/api-development-best-practices",
          "title": "API-kehityksen parhaat käytännöt",
          "description": "Toteutusohje, jonka avulla validoitu API-rajapintasopimus muutetaan johdonmukaiseksi ja ylläpidettäväksi API-koodipohjaksi vakiokirjastojen, uudelleenkäytettävien mallien ja yhteensovitettujen kehitystyönkulkujen avulla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 112,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-kehityksen parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-kehityksen parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Sovella näitä käytäntöjä validoituun API-rajapintasopimukseen ja toteutussuunnitelmaan ennen koodaamisen aloittamista.",
            "Käytä vakiintuneita ohjelmistokehyksiä, kirjastoja ja koodausstandardeja sopimuksen johdonmukaiseen ja ylläpidettävään toteutukseen."
          ],
          "canvasId": null,
          "sourcePath": "src/snippets/fi/api-design-principles-guidance.md",
          "sourceUrl": null,
          "contentMarkdown": "## Kuinka aloittaa API Delivery -työskentely aiempien vaiheiden (”asemien”) pohjalta\r\nKäytä tätä ohjetta `API Delivery` -prosessin alussa, kun API-sopimus (esim. OpenAPI) ja aiempien vaiheiden keskeiset tulokset on tarkistettu ja hyväksytty.\r\nTavoitteena ei ole kehittää toteutusta erillään muusta prosessista. Tavoitteena on muuttaa aikaisemmista vaiheista sovitut tulokset konkreettiseksi koodirakenteeksi, validointisäännöiksi, ajonaikaiseksi käyttäytymiseksi ja API-tuotteen toimittamista koskeviksi päätöksiksi.\r\n\r\n---\r\n\r\n### 1. Aloita validoidusta sopimuksesta\r\n- Käsittele validoitua API-sopimusta ensisijaisena lähtökohtana toteutusta koskevissa päätöksissä.\r\n- Pidä sopimus ja toteutus yhdenmukaisina koko API-tuotteen toimittamisen ajan.\r\n- Käytä sopimusta pyyntöjen validoinnin, vastausten kartoituksen, dokumentoinnin ja testien ohjaamiseen.\r\n\r\n---\r\n\r\n### 2. Käytä domain-tuloksia liiketoiminnallisen merkityksen säilyttämiseksi\r\n- Käytä `Domain Canvas` tuloksia ohjaamaan nimeämistä, sitä, miten toteutus jaetaan selkeisiin liiketoiminnallisiin vastuisiin, ja sitä, miten eri taustajärjestelmät kytketään toisiinsa paljastamatta niiden eroja.\r\n- Säilytä entiteettien, attribuuttien, tilojen ja totuuden lähteen (source-of-truth) sääntöjen validoidut merkitykset.\r\n- Vältä taustajärjestelmäkohtaisten mallien tai epäjohdonmukaisuuksien vuotamista julkiseen APIin.\r\n\r\n---\r\n\r\n### 3. Käytä matkan tuloksia kriittisten virtausten säilyttämiseen\r\n- Käytä `Customer Journey Canvas` tuloksia tunnistamaan, mitkä käyttäjävirrat on tärkeintä tukea ensin.\r\n- Käytä `API Consumer Experience` tuloksia pitääksesi APIn ymmärrettävänä, ennustettavana ja helposti integroitavana.\r\n- Anna sovittujen matkan prioriteettien päättää, mitkä toteutustiet vaativat suurinta luotettavuutta, pienintä viivettä, selkeimpiä virheilmoituksia ja vahvinta operatiivista keskittymistä.\r\n\r\n---\r\n\r\n### 4. Käytä arvolupauksen tuloksia kuluttaja-arvon säilyttämiseen\r\n- Käytä `API Value Proposition Canvas` tuloksia pitääksesi toteutuksen keskittyneenä sovittuihin ongelmiin, hyötyihin ja API-ominaisuuksiin.\r\n- Säilytä kenttien merkitykset, käyttäytyminen ja lupaukset, jotka tekivät APIsta arvokkaan aikaisemmissa vaiheissa.\r\n- Varmista, että virheiden käsittely, ajantasaisuus ja nimeäminen tukevat sekä tavoiteltua kehittäjäkokemusta että liiketoimintakäyttötapausta.\r\n\r\n---\r\n\r\n### 5. Käytä arkkitehtuurituloksia ajonaikaisten päätösten muotoiluun\r\n- Käytä `Business Impact Canvas` tuloksia ohjaamaan joustavuutta, aikakatkaisuja, varajärjestelmiä ja suorituskyvyn heikkenemistä koskevia päätöksiä.\r\n- Käytä `Locations Canvas` tuloksia ohjaamaan verkon rajoja, luottamusrajoja, pääsyreittejä ja käyttöönoton rajoituksia.\r\n- Käytä `Capacity Canvas` tuloksia ohjaamaan nopeusrajoituksia, välimuistia, skaalausta ja huippukuormituksen käyttäytymistä.\r\n- Käytä `API Metrics And Analytics` -ohjeistusta päättääksesi, mitä on seurattava ensimmäisestä toteutuksesta lähtien.\r\n\r\n---\r\n\r\n### 6. Käytä vuorovaikutus- ja protokollasuunnittelun tuloksia koodirakenteen muotoiluun\r\n- Käytä `Interaction Canvas` tuloksia välttääksesi tukemattomien vuorovaikutustyyppien liian aikaista toteuttamista.\r\n- Käytä `REST`-, `Event`- tai `GraphQL`-suunnittelutuloksia protokollakohtaisten pyyntöjen, vastausten ja validointikäyttäytymisen muotoiluun.\r\n- Heijasta valittu vuorovaikutustyyli selkeästi koodin rakenteessa, vastuualueissa ja testausstrategiassa.\r\n\r\n---\r\n\r\n### 7. Käytä auditoinnin tuloksia toimituksen parantamiseen ennen kuin koodaus etenee liian pitkälle\r\n- Käytä auditoinnin tuloksia epäselvyyksien poistamiseen ennen kuin toteutus leviää koko koodipohjaan.\r\n- Korjaa epäselvät pyyntösäännöt, puuttuvat validoinnit, heikot virhesopimukset ja toiminnalliset aukot varhaisessa vaiheessa.\r\n- Käsittele auditointia suunnittelun parantamisen kierroksena ennen tuotantoa, ei vain viimeisenä tarkastusporttina.\r\n\r\n---\r\n\r\n### 8. Sovella ohjeita ja tee yhteenveto\r\n- Sovella näitä ohjeita nykyiseen APIhin ja toteutussuunnitelmaan.\r\n- Tee yhteenveto vaikutuksista koodirakenteeseen, pyyntöjen validointiin, lähdeintegraatioon, tietoturvaan, seurantaan ja hälytyksiin sekä testaukseen.\r\n- Älä luo erillistä toimitusartefaktia, ellei tiimi tai käyttäjä nimenomaisesti sitä tarvitse.\r\n",
          "draft": true
        },
        {
          "id": "api-metrics-and-analytics",
          "slug": "resources/api-metrics-and-analytics",
          "title": "API-mittarit ja analytiikka",
          "description": "Resurssi API-suorituskyvyn ja käyttötietojen määrittelyyn, keräämiseen ja analysointiin, jotta tekniset KPI:t voidaan sovittaa yhteen liiketoiminnan tulosten kanssa.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 119,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-mittarit ja analytiikka tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-mittarit ja analytiikka",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määritä keskeiset suorituskykyindikaattorit (KPI), joilla mitataan APIn onnistumista suhteessa liiketoiminnan tavoitteisiin.",
            "Määrittele ja seuraa suorituskykymittareita (esim. API-kutsut, viiveet, virhetasot) ja hyväksyntämittareita (esim. NPS).",
            "Seuraa API-aloitteita varmistaaksesi toimintaohjeiden ja governance-käytäntöjen noudattamisen."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-onboarding-best-practices",
          "slug": "resources/api-onboarding-best-practices",
          "title": "API-käyttöönoton parhaat käytännöt",
          "description": "Parhaat käytännöt API-asiakkaiden käyttöönoton sujuvoittamiseksi vaiheittaisella rekisteröinnillä, tutustumisella ja ensisoitto-opastuksella.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 121,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-käyttöönoton parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-käyttöönoton parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määrittele API-hyödyntäjän matka löytämisestä vianmääritykseen ja tunnista keskeiset kosketuspisteet ja kipupisteet.",
            "Kehitä käyttöönottoprosesseja ja resursseja, joiden avulla API-hyödyntäjät ymmärtävät, miten API-rajapintoja käytetään tehokkaasti.",
            "Dokumentoi, miten hyödyntäjät löytävät ja käyttävät rajapintaä, mukaan lukien käyttöönottoprosessit ja rekisteröinti."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-portfolio-management-guidelines",
          "slug": "resources/api-portfolio-management-guidelines",
          "title": "API-portfolion hallinnan suuntaviivat",
          "description": "Opas organisaation API-sarjan strategiseen hallintaan - APIen priorisointiin, resurssien jakamiseen ja suorituskyvyn seurantaan koko elinkaaren ajan.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 123,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-portfolion hallinnan suuntaviivat tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-portfolion hallinnan suuntaviivat",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määrittele salkunhallintakäytännöt, joissa hahmotellaan API-salkun hallinnointiprosessit, mukaan lukien priorisointi, seuranta ja optimointi.",
            "Määrittele budjetti- ja resurssienhallintakäytännöt, joissa hahmotellaan API-aloitteiden budjettien ja resurssien hallinnointiprosessit.",
            "Laaditaan kriteerit budjettimäärärahojen arvioimiseksi ja priorisoimiseksi liiketoiminta-arvon, vaikutusten ja strategisten aloitteiden mukaisuuden perusteella.",
            "Seuraa API-portfoliota varmistaaksesi, että APIt tuottavat arvoa, täyttävät suorituskykyodotukset ja ovat linjassa liiketoiminnan tavoitteiden kanssa."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-security-best-practices",
          "slug": "resources/api-security-best-practices",
          "title": "API-turvallisuuden parhaat käytännöt",
          "description": "Joukko toimivia valvontatoimia rajapintojen suojaamiseksi, mukaan lukien todennus, valtuutus, salaus, nopeuden rajoittaminen ja putkitason vaatimustenmukaisuustarkastukset.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 130,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-turvallisuuden parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-turvallisuuden parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Varmista, että rajapinnat täyttävät turvallisuus- ja vaatimustenmukaisuusvaatimukset automaattisten tarkastusten ja auditointien avulla.",
            "Toteuta turvatoimia, kuten todennus, valtuutus, salaus ja nopeuden rajoittaminen, suojaamaan rajapintoja uhkilta.",
            "Toteuta automaattiset tietoturvatarkastukset ja vaatimustenmukaisuuden validoinnit CI/CD-putkessa varmistaaksesi, että rajapinnat ovat turvallisia ja vaatimustenmukaisia."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-team-structure-guidelines",
          "slug": "resources/api-team-structure-guidelines",
          "title": "API-tiimin rakennetta koskevat ohjeet",
          "description": "Organisatoriset ohjeet roolien ja vastuualueiden määrittelemiseksi API-tiimeissä selkeyden, yhteistyön ja vastuuvelvollisuuden varmistamiseksi.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 132,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-tiimin rakennetta koskevat ohjeet tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-tiimin rakennetta koskevat ohjeet",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määrittele API-tiimien tiimirakenteet ja roolit, mukaan lukien API-tuotteen omistajat, kehittäjät, arkkitehdit ja toiminnot."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-testing-best-practices",
          "slug": "resources/api-testing-best-practices",
          "title": "API-testauksen parhaat käytännöt",
          "description": "Ohjeet automatisoidun toiminnallisen, suorituskyky- ja tietoturvatestauksen toteuttamiseksi koko rajapinnan elinkaaren ajan.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 133,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-testauksen parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-testauksen parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Testaa rajapintojen toimivuutta, turvallisuutta ja suorituskykyä automaattisten testausvälineiden avulla.",
            "Integroi toiminnallinen ja ei-toiminnallinen testaus CI/CD-putkeen varmistaaksesi, että rajapinnat täyttävät laatuvaatimukset.",
            "Käytä automatisoituja testausvälineitä API-toiminnallisuuden, tietoturvan ja suorituskyvyn validointiin."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-training-programs",
          "slug": "resources/api-training-programs",
          "title": "API-koulutusohjelmat",
          "description": "Etenemissuunnitelma tiimien pätevöittämistä varten, jossa on jäsenneltyjä oppimispolkuja API-designin, hallinnan, suorituskyvyn ja tietoturvan alalla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 134,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-koulutusohjelmat tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-koulutusohjelmat",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Tunnistetaan keskeiset API-taidot ja -tiedot, joita on kehitettävä, kuten API-design, tietoturva ja suorituskyky.",
            "Kannustetaan jatkuvaan oppimiseen verkkokurssien, sertifikaattien ja yhteisöllisen sitoutumisen avulla.",
            "Tarjota koulutusta ja resursseja, jotta tiimit voivat omaksua API-first-ajattelutavan ja ymmärtää APIen edut.",
            "Tarjota koulutusohjelmia, työpajoja ja resursseja, joiden avulla tiimit voivat parantaa API-taitojaan ja -tietämystään."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "api-versioning-best-practices",
          "slug": "resources/api-versioning-best-practices",
          "title": "API-versionoinnin parhaat käytännöt",
          "description": "Strategiat API-versioiden käyttöönottoa, ylläpitoa ja käytöstä poistamista varten siten, että taaksepäin yhteensopivuus ja hyödyntäjien luottamus säilyvät.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 138,
          "outcomes": [
            "Yhteinen ymmärrys resurssin API-versionoinnin parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia API-versionoinnin parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määrittele rajapintojen versiointistrategiat muutosten hallitsemiseksi ja taaksepäin yhteensopivuuden varmistamiseksi."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "apiops-CI-CD-for-apis",
          "slug": "resources/apiops-CI-CD-for-apis",
          "title": "APIOps CI/CD rajapinnoille",
          "description": "Käyttöönotto-ohjeet, jotka integroivat APIn elinkaaren tehtävät - suunnittelun, testauksen ja hallinnan - jatkuvaan integrointiin ja toimitusputkiin.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 140,
          "outcomes": [
            "Yhteinen ymmärrys resurssin APIOps CI/CD rajapinnoille tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia APIOps CI/CD rajapinnoille",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Käytä CI/CD-putkia rakentamis-, testaus- ja käyttöönottoprosessien automatisoimiseksi varmistaen johdonmukaisen laadun ja jäljitettävyyden.",
            "Integroi automatisoidut testit CI/CD-putkeen API-laadun jatkuvan validoinnin varmistamiseksi.",
            "Ota käyttöön käyttöönottostrategioita (esim. sinivihreät käyttöönotot, kanarian julkaisut) API-julkaisuihin liittyvien riskien minimoimiseksi.",
            "Ota tavaksi tarkastella mittareita ja suunnitella jatkuvan parantamisen toimia."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "competitor-analysis-template",
          "slug": "resources/competitor-analysis-template",
          "title": "Kilpailija-analyysimalli",
          "description": "Strukturoitu työlista, jonka avulla voit vertailla API-tarjouksiasi kilpailijoihin kartoittamalla vahvuudet, heikkoudet ja erottavia tekijöitä.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 143,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Kilpailija-analyysimalli tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Kilpailija-analyysimalli",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Suorita kilpailija-analyysi tärkeimpien kilpailijoiden ja niiden API-tarjonnan tunnistamiseksi.",
            "Analysoi kilpailijoiden rajapinnat ymmärtämään niiden vahvuudet, heikkoudet ja ainutlaatuiset myyntivaltit."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "contract-first-design",
          "slug": "resources/contract-first-design",
          "title": "Sopimuslähtöinen suunnittelu",
          "description": "Suuntaviiva, jossa kannatetaan API-lähestymistapaa, jossa käytetään virallisia sopimuksia (esim. OpenAPI) sidosryhmien yhdenmukaistamiseksi ennen kehitystä.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 146,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Sopimuslähtöinen suunnittelu tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Sopimuslähtöinen suunnittelu",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Sovellat sopimuslähtöisiä tai suunnittelulähtöisiä lähestymistapoja varmistaaksesi, että API-sopimukset validoidaan ennen toteutusta.",
            "Määrittele API-sopimukset, joissa hahmotellaan kunkin APIn odotukset, vastuut ja käyttöohjeet.",
            "Käytä standardoituja formaatteja (esim. OpenAPI, AsyncAPI) luodaksesi koneellisesti luettavia API-sopimuksia, joita on helppo jakaa ja validoida."
          ],
          "canvasId": null,
          "sourcePath": "src/snippets/api-contract-example.yaml",
          "sourceUrl": null,
          "contentMarkdown": "openapi: 3.0.3\r\ninfo:\r\n  title: Sample Catalog API\r\n  version: 1.0.0\r\n  description: |\r\n    Starter example for a read-only APIOps Cycles API.\r\n    This example keeps the contract audit-friendly and easy to extend.\r\nservers:\r\n  - url: /v1\r\n    description: Versioned API base path\r\ntags:\r\n  - name: catalog\r\n    description: Browse and search catalog items\r\npaths:\r\n  /items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List catalog items\r\n      description: Returns a paginated list of public catalog items.\r\n      operationId: listItems\r\n      parameters:\r\n        - $ref: \"#/components/parameters/searchTerm\"\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n        - $ref: \"#/components/parameters/page\"\r\n        - $ref: \"#/components/parameters/pageSize\"\r\n      responses:\r\n        \"200\":\r\n          description: Item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n              examples:\r\n                default:\r\n                  value:\r\n                    data:\r\n                      - itemId: item-123\r\n                        slug: blue-widget\r\n                        name: Blue Widget\r\n                        status: published\r\n                    page:\r\n                      number: 1\r\n                      size: 20\r\n                      totalItems: 1\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"429\":\r\n          $ref: \"#/components/responses/TooManyRequests\"\r\n  /items/{itemId}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by id\r\n      description: Returns a single public catalog item by opaque identifier.\r\n      operationId: getItemById\r\n      parameters:\r\n        - $ref: \"#/components/parameters/itemId\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"400\":\r\n          $ref: \"#/components/responses/BadRequest\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /items/by-slug/{slug}:\r\n    get:\r\n      tags: [catalog]\r\n      summary: Get item by slug\r\n      description: Returns a single item by public slug.\r\n      operationId: getItemBySlug\r\n      parameters:\r\n        - $ref: \"#/components/parameters/slug\"\r\n      responses:\r\n        \"200\":\r\n          description: Item details\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemDetail\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\n  /categories/{categoryId}/items:\r\n    get:\r\n      tags: [catalog]\r\n      summary: List items in category\r\n      description: Returns public items in a category.\r\n      operationId: listItemsByCategory\r\n      parameters:\r\n        - $ref: \"#/components/parameters/categoryId\"\r\n      responses:\r\n        \"200\":\r\n          description: Category item list\r\n          content:\r\n            application/json:\r\n              schema:\r\n                $ref: \"#/components/schemas/ItemListResponse\"\r\n        \"404\":\r\n          $ref: \"#/components/responses/NotFound\"\r\ncomponents:\r\n  parameters:\r\n    itemId:\r\n      name: itemId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: item-123\r\n    slug:\r\n      name: slug\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\"\r\n      example: blue-widget\r\n    categoryId:\r\n      name: categoryId\r\n      in: path\r\n      required: true\r\n      schema:\r\n        type: string\r\n        pattern: \"^[a-z0-9][a-z0-9-]{1,63}$\"\r\n      example: home-goods\r\n    searchTerm:\r\n      name: searchTerm\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: string\r\n        minLength: 1\r\n      example: widget\r\n    page:\r\n      name: page\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        default: 1\r\n    pageSize:\r\n      name: pageSize\r\n      in: query\r\n      required: false\r\n      schema:\r\n        type: integer\r\n        minimum: 1\r\n        maximum: 100\r\n        default: 20\r\n  responses:\r\n    BadRequest:\r\n      description: Validation failed\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n          examples:\r\n            default:\r\n              value:\r\n                code: BAD_REQUEST\r\n                message: Invalid request\r\n    NotFound:\r\n      description: Resource not found\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n    TooManyRequests:\r\n      description: Rate limit exceeded\r\n      headers:\r\n        Retry-After:\r\n          schema:\r\n            type: integer\r\n          description: Seconds until the next allowed request.\r\n      content:\r\n        application/json:\r\n          schema:\r\n            $ref: \"#/components/schemas/ErrorResponse\"\r\n  schemas:\r\n    ItemListResponse:\r\n      type: object\r\n      required: [data, page]\r\n      properties:\r\n        data:\r\n          type: array\r\n          items:\r\n            $ref: \"#/components/schemas/ItemSummary\"\r\n        page:\r\n          $ref: \"#/components/schemas/Page\"\r\n    ItemSummary:\r\n      type: object\r\n      required: [itemId, slug, name, status]\r\n      properties:\r\n        itemId:\r\n          type: string\r\n        slug:\r\n          type: string\r\n        name:\r\n          type: string\r\n        status:\r\n          type: string\r\n          enum: [published, hidden]\r\n    ItemDetail:\r\n      allOf:\r\n        - $ref: \"#/components/schemas/ItemSummary\"\r\n        - type: object\r\n          properties:\r\n            description:\r\n              type: string\r\n            categories:\r\n              type: array\r\n              items:\r\n                type: string\r\n            variants:\r\n              type: array\r\n              items:\r\n                $ref: \"#/components/schemas/Variant\"\r\n    Variant:\r\n      type: object\r\n      required: [variantId, sku, price, inventory]\r\n      properties:\r\n        variantId:\r\n          type: string\r\n        sku:\r\n          type: string\r\n        price:\r\n          $ref: \"#/components/schemas/Price\"\r\n        inventory:\r\n          $ref: \"#/components/schemas/Inventory\"\r\n    Price:\r\n      type: object\r\n      required: [amount, currency]\r\n      properties:\r\n        amount:\r\n          type: number\r\n          format: decimal\r\n        currency:\r\n          type: string\r\n          example: EUR\r\n    Inventory:\r\n      type: object\r\n      required: [available]\r\n      properties:\r\n        available:\r\n          type: integer\r\n          minimum: 0\r\n        reserved:\r\n          type: integer\r\n          minimum: 0\r\n        source:\r\n          type: string\r\n    Page:\r\n      type: object\r\n      required: [number, size, totalItems]\r\n      properties:\r\n        number:\r\n          type: integer\r\n        size:\r\n          type: integer\r\n        totalItems:\r\n          type: integer\r\n    ErrorResponse:\r\n      type: object\r\n      required: [code, message]\r\n      properties:\r\n        code:\r\n          type: string\r\n        message:\r\n          type: string\r\n",
          "draft": true
        },
        {
          "id": "cross-functional-collaboration-best-practices",
          "slug": "resources/cross-functional-collaboration-best-practices",
          "title": "Toimialarajat ylittävän yhteistyön parhaat käytännöt",
          "description": "Käytännöt, joilla helpotetaan viestintää ja yhdenmukaistamista liiketoiminta- ja tekniikkatiimien välillä API-rajapintoja suunniteltaessa tai toimitettaessa.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 147,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Toimialarajat ylittävän yhteistyön parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Toimialarajat ylittävän yhteistyön parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Kannustaa API-tiimien, liiketoimintayksiköiden ja sidosryhmien välistä monialaista yhteistyötä, jotta API-aloitteet voidaan sovittaa yhteen liiketoiminnan tavoitteiden kanssa."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "data-privacy-guidelines",
          "slug": "resources/data-privacy-guidelines",
          "title": "Tietosuojaa koskevat ohjeet",
          "description": "Suunnitteluun liittyvät näkökohdat, joilla varmistetaan, että rajapinnat täyttävät tietosuojasäännökset, kuten GDPR:n, anonymisoinnin ja pääsynvalvonnan avulla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 148,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Tietosuojaa koskevat ohjeet tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Tietosuojaa koskevat ohjeet",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Varmista käyttäjien tietojen yksityisyys toteuttamalla tietosuojatoimenpiteitä, kuten anonymisointi ja käyttöoikeuksien valvonta."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "domainCanvas",
          "slug": "resources/domain-canvas",
          "title": "Toimialuekanvas",
          "description": "Mallinnustyökalu toimialueen keskeisten käsitteiden, entiteettien, suhteiden ja sääntöjen määrittelyyn, jotta kyvykkyydet, rajapinnat ja integraatiot pysyvät semanttisesti yhdenmukaisina.",
          "category": "canvas",
          "icon": "dashboard-outline",
          "order": 152,
          "outcomes": [
            "Parempi ymmärrys toimialueen mallinnuksesta",
            "Vakioitu lähestymistapa Toimialuekanvasin avulla",
            "Parannettu asiaan liittyvien API-käytäntöjen täytäntöönpano"
          ],
          "steps": [
            "Määrittele keskeiset oliot, niiden attribuutit ja suhteet yhteisen käsitteellisen ymmärryksen luomiseksi eri rajapinnoille ja kyvykkyyksille."
          ],
          "canvasId": "domainCanvas",
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": false
        },
        {
          "id": "ecosystem-vision-template",
          "slug": "resources/ecosystem-vision-template",
          "title": "Ekosysteemivisiomalli",
          "description": "Strateginen suunnittelutyökalu API-ekosysteemin määrittelemiseksi, mukaan lukien kohdekumppanit, arvoketjut ja integrointimahdollisuudet.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 154,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Ekosysteemivisiomalli tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Ekosysteemivisiomalli",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Markkinatutkimuksen tekeminen API-toimialalla vallitsevien suuntausten, mahdollisuuksien ja uhkien tunnistamiseksi.",
            "Tunnistetaan tärkeimmät ekosysteemikumppanit ja sidosryhmät, jotka hyötyvät ekosysteemistä tai osallistuvat siihen.",
            "Tunnista markkinapuutteet, jotka rajapintasi voivat täyttää kilpailijoiden tarjonnan perusteella.",
            "Tunnista mahdolliset kumppanit, joiden APIt voivat parantaa API-valmiuksiasi ja arvolupaustasi.",
            "Kehitä erottautumisstrategia, jossa korostetaan sovellusrajapintojesi ainutlaatuisia ominaisuuksia ja etuja.",
            "Määrittele sovellusrajapintojesi ekosysteemivisio, mukaan lukien se, miten ne ovat vuorovaikutuksessa muiden järjestelmien ja alustojen kanssa.",
            "Suunnittele rajapinnat, jotka mahdollistavat saumattoman integroinnin ja yhteistyön ekosysteemissä."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "industry-standards-and-best-practices",
          "slug": "resources/industry-standards-and-best-practices",
          "title": "Alan standardit ja parhaat käytännöt",
          "description": "Viiteresurssi API-designin ja -toiminnan mukauttamiseksi laajalti tunnustettuihin alan kehyksiin ja eritelmiin.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 157,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Alan standardit ja parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Alan standardit ja parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Tunnistetaan alan standardit ja parhaat käytännöt, jotta voidaan varmistaa, että rajapinnat ovat kilpailukykyisiä ja yhteensopivia."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "partner-integration-guidelines",
          "slug": "resources/partner-integration-guidelines",
          "title": "Kumppanien integrointiohjeet",
          "description": "Integroinnin tarkistuslistat ja viestintämallit kolmannen osapuolen API-suhteiden teknisten ja oikeudellisten näkökohtien hallintaan.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 164,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Kumppanien integrointiohjeet tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Kumppanien integrointiohjeet",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Luodaan integraatioprosessit ja -ohjeet yhteistyökumppaneiden kanssa tehtävää yhteistyötä varten, mukaan lukien tekninen integraatio, tietojen jakaminen ja tuki.",
            "Seuraa kumppaneiden API-suorituskykyä ja vaatimustenmukaisuutta varmistaaksesi luotettavuuden ja yhteensopivuuden API-strategiasi kanssa."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "role-communication-best-practices",
          "slug": "resources/role-communication-best-practices",
          "title": "Rooliviestinnän parhaat käytännöt",
          "description": "Työkalut, joilla määritetään ja kuvataan API-aloitteiden vastuut sekä varmistetaan selkeä työnjako ja vastuuvelvollisuus.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 167,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Rooliviestinnän parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Rooliviestinnän parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määritä selkeät vastuualueet kullekin roolille, mukaan lukien API-design, kehittäminen, testaus ja toiminta.",
            "Varmistaa, että roolit ja vastuut on ilmoitettu kaikille tiimin jäsenille ja sidosryhmille, jotta varmistetaan yhdenmukaisuus."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "scalable-infrastructure-best-practices",
          "slug": "resources/scalable-infrastructure-best-practices",
          "title": "Skaalautuvan infrastruktuurin parhaat käytännöt",
          "description": "Arkkitehtuuriohjeet sen varmistamiseksi, että rajapinnat otetaan käyttöön infrastruktuurissa, joka pystyy käsittelemään joustavasti käyttöpiikkejä ja -kasvua.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 168,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Skaalautuvan infrastruktuurin parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Skaalautuvan infrastruktuurin parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Suunnittele API-infrastruktuuri skaalautuvaksi ja joustavaksi käyttäen pilvipohjaisia malleja ja teknologioita.",
            "Seuraa infrastruktuurin suorituskykyä ja kapasiteettia sen varmistamiseksi, että se pystyy vastaamaan kasvavaan kysyntään."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "service-agreement-template",
          "slug": "resources/service-agreement-template",
          "title": "Palvelusopimusmalli",
          "description": "Mukautettava sopimusmuoto, jossa määritellään odotukset, SLA:t, vastuut ja käyttöoikeusehdot API-käyttöä varten.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 172,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Palvelusopimusmalli tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Palvelusopimusmalli",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Määrittele palvelusopimukset, joissa hahmotellaan odotukset, palvelutasot ja vastuualueet kutakin rajapintaa varten.",
            "Luo koneellisesti luettavia palvelusopimuksia, joita on helppo jakaa ja validoida, käyttämällä standardoituja muotoja.",
            "Varmista, että sidosryhmät tarkistavat ja hyväksyvät palvelusopimukset, jotta varmistetaan niiden yhdenmukaisuus ja selkeys."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "stakeholder-engagement-best-practices",
          "slug": "resources/stakeholder-engagement-best-practices",
          "title": "Sidosryhmien sitouttamisen parhaat käytännöt",
          "description": "sitouttamistaktiikat sisäisten ja ulkoisten sidosryhmien saattamiseksi yhteisten API-tavoitteiden, -arvon ja -hallinnan piiriin.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 173,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Sidosryhmien sitouttamisen parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Sidosryhmien sitouttamisen parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Sidosryhmien sitouttaminen varmistamaan API-aloitteiden yhdenmukaisuus ja tuki."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "test-automation-frameworks",
          "slug": "resources/test-automation-frameworks",
          "title": "Testausautomaation kehykset",
          "description": "Suositellut työkalut ja mallit API-rajapintasopimus-, regressio- ja integrointitestauksen automatisointiin eri ympäristöissä.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 174,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Testausautomaation kehykset tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Testausautomaation kehykset",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Toteuta testiautomaatiokehykset, jotka tukevat sopimustestausta, integrointitestausta ja päästä päähän -testausta."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "vendor-management-best-practices",
          "slug": "resources/vendor-management-best-practices",
          "title": "Toimittajien hallinnan parhaat käytännöt",
          "description": "Kehys ulkoisten API-toimittajien ja kolmansien osapuolten integraatioiden arviointia ja hallintaa varten riskien, suorituskyvyn ja vaatimustenmukaisuuden perusteella.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 178,
          "outcomes": [
            "Yhteinen ymmärrys resurssin Toimittajien hallinnan parhaat käytännöt tarkoituksesta ja käytöstä",
            "Johdonmukainen tapa soveltaa resurssia Toimittajien hallinnan parhaat käytännöt",
            "Asiaan liittyvien käytäntöjen parempi soveltaminen"
          ],
          "steps": [
            "Ota käyttöön toimittajagovernance-prosessit kolmansien osapuolten API-toimittajien arviointia, käyttöönottoa ja seurantaa varten.",
            "Määrittele kriteerit toimittajien rajapintojen arviointia varten, mukaan lukien luotettavuus, turvallisuus ja vaatimustenmukaisuus."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "integration-style-selection-guide",
          "slug": "resources/integration-style-selection-guide",
          "title": "Integraatiotavan valintaopas",
          "description": "Ohje API-, tapahtuma-, tiedosto-, tietovirta-, datatuote-, suora integraatio- tai hybriditoteutustavan valintaan vaatimusten ja rajoitteiden perusteella.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 180,
          "outcomes": [
            "Perusteltu integraation toteutustapa",
            "Integraatiotapojen keskeiset vaihtoehdot ja kompromissit on dokumentoitu.",
            "Valittu tapa on jäljitettävissä hyödyntäjä-, alusta-, data- ja operatiivisiin vaatimuksiin."
          ],
          "steps": [
            "Vertaa mahdollisia integraatiotapoja viiveen, volyymin, kytkeytymisen, datan omistajuuden, ajantasaisuuden, hallinnan ja operoitavuuden tarpeisiin.",
            "Tunnista, milloin API, tapahtuma, tiedosto, tietovirta, datatuote, suora integraatio tai hybridiratkaisu sopii käyttötapaukseen.",
            "Dokumentoi valitun toteutustavan rajoitteet, riskit ja alustariippuvuudet.",
            "Kirjaa, miksi hylättyjä vaihtoehtoja ei valittu."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "process-workflow-design-guide",
          "slug": "resources/process-workflow-design-guide",
          "title": "Prosessin ja työnkulun suunnitteluopas",
          "description": "Ohje prosessivaiheiden, roolien, luovutusten, päätöspisteiden, tilojen, syötteiden, tuotosten ja poikkeusten mallintamiseen automaatiotyönkulun suunnittelua varten.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 181,
          "outcomes": [
            "Selkeä automaatiotyönkulun suunnitelma",
            "Prosessivaiheet ja luovutukset on dokumentoitu ennen toteutusta.",
            "Työnkulun tilat, syötteet, tuotokset ja poikkeuspolut on ymmärretty."
          ],
          "steps": [
            "Kuvaa nykyinen ja tavoiteltu prosessivirta, mukaan lukien ihmisten ja järjestelmien vastuut.",
            "Tunnista työnkulun käynnistimet, tilat, päätökset, datasyötteet, tuotokset ja valmistumisen kriteerit.",
            "Dokumentoi luovutukset käyttäjien, järjestelmien, operoinnin ja tukiroolien välillä.",
            "Vahvista, mitkä vaiheet kannattaa automatisoida ja mitkä edellyttävät ihmisen harkintaa."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "decision-business-rules-guide",
          "slug": "resources/decision-business-rules-guide",
          "title": "Päätösten ja liiketoimintasääntöjen opas",
          "description": "Ohje sääntöjen, kynnysarvojen, päätösten, hyväksyntöjen, kelpoisuustarkistusten ja sääntöjen omistajuuden kuvaamiseen automaation suunnittelua varten.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 182,
          "outcomes": [
            "Selkeästi kuvatut päätökset ja liiketoimintasäännöt",
            "Säännöt ja kynnysarvot on dokumentoitu omistajineen.",
            "Automaation päätökset ovat jäljitettävissä käytäntöihin, prosessiin tai liiketoimintatarkoitukseen."
          ],
          "steps": [
            "Listaa päätökset, jotka automaation täytyy tehdä tai joita sen täytyy tukea.",
            "Dokumentoi sääntöjen ehdot, kynnysarvot, poikkeukset, hyväksynnät ja eskalointipisteet.",
            "Tunnista sääntöjen omistajat ja muutosten hallintatapa jokaiselle päätösalueelle."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-trigger-handoff-exception-guide",
          "slug": "resources/automation-trigger-handoff-exception-guide",
          "title": "Automaation käynnistinten, luovutusten ja poikkeusten opas",
          "description": "Ohje automaation käynnistinten, ihmisten välisten luovutusten, poikkeusten käsittelyn, uudelleenyritysten, kompensoivien toimien ja tuen eskalointipolkujen määrittelyyn.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 183,
          "outcomes": [
            "Määritellyt automaation käynnistimet ja poikkeuspolut",
            "Ihmisten väliset luovutukset ja tuen eskaloinnit ovat selkeitä.",
            "Poikkeukset, uudelleenyritykset ja kompensoivat toimet on suunniteltu ennen toimitusta."
          ],
          "steps": [
            "Määritä tapahtumat, aikataulut, käyttäjätoimet tai järjestelmätilat, jotka käynnistävät automaation.",
            "Kuvaa luovutukset automaatiolta käyttäjille, operaattoreille tai tukitiimeille.",
            "Dokumentoi poikkeukset, uudelleenyrityssäännöt, aikakatkaisujen toiminta ja varapolut.",
            "Määritä hälytykset ja eskalointikynnykset epäonnistuneille tai epäselville automaation tuloksille."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-testing-guide",
          "slug": "resources/automation-testing-guide",
          "title": "Automaation testausopas",
          "description": "Ohje automatisoitujen työnkulkujen, päätösten, integraatioiden, poikkeusten, palautuksen, valvonnan ja käyttäjävaikutusten testaamiseen ennen julkaisua.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 184,
          "outcomes": [
            "Validoitu automaation toiminta",
            "Työnkulun, sääntöjen, poikkeusten ja integraatioiden testit on määritelty.",
            "Julkaisuluottamus automatisoituihin ja ihmistä tukeviin polkuihin."
          ],
          "steps": [
            "Luo testit onnistuneille poluille, reunatapauksille, poikkeuksille, uudelleenyrityksille ja luovutuksille.",
            "Validoi liiketoimintasäännöt ja päätösten tulokset edustavalla datalla.",
            "Testaa palautus, toipuminen, havainnoitavuus ja manuaalisen puuttumisen polut.",
            "Ota käyttäjät ja operaattorit mukaan hyväksyntätestaukseen, kun automaatio muuttaa työtapoja."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-operational-ownership-guide",
          "slug": "resources/automation-operational-ownership-guide",
          "title": "Automaation operatiivisen omistajuuden opas",
          "description": "Ohje automaatioiden omistajuuden, runbookien, valvonnan, tuen, seurannan, muutosten hallinnan ja jatkuvan parantamisen vastuiden määrittelyyn.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 185,
          "outcomes": [
            "Selkeä automaation toimintamalli",
            "Omistajuus-, tuki- ja eskalointivastuut on määritetty.",
            "Seuranta- ja muutostavat ovat valmiit tuotantokäyttöä varten."
          ],
          "steps": [
            "Määritä automaation liiketoiminta-, tekniset ja operatiiviset omistajat.",
            "Dokumentoi runbookit, tukipolut, seurantasignaalit, palveluodotukset ja eskalointisäännöt.",
            "Määritä muutosten hallinta- ja katselmointikäytännöt työnkulun, alustan ja sääntöjen päivityksille."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-rollback-supervision-guide",
          "slug": "resources/automation-rollback-supervision-guide",
          "title": "Automaation palautuksen ja valvonnan opas",
          "description": "Ohje automaatioiden palautuksen, keskeytyksen, manuaalisen ohituksen, seurannan, valvonnan ja toipumispolkujen suunnitteluun.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 186,
          "outcomes": [
            "Hallittavat automaation toipumispolut",
            "Palautus, keskeytys ja ohitus on dokumentoitu.",
            "Valvontatarpeet ja toipumisvastuut on määritelty."
          ],
          "steps": [
            "Tunnista toimet, jotka täytyy voida palauttaa, keskeyttää tai ohittaa manuaalisesti.",
            "Määritä palautus-, kompensaatio- ja toipumismenettelyt epäonnistuneille tai virheellisille automaation tuloksille.",
            "Dokumentoi valvontakynnykset, hälytykset ja manuaaliset päätöspisteet.",
            "Validoi toipumismenettelyt ennen julkaisua."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-readiness-checklist",
          "slug": "resources/automation-readiness-checklist",
          "title": "Automaation valmiuden tarkistuslista",
          "description": "Tarkistuslista automaation työnkulun, kontrollien, riskien, vaatimustenmukaisuuden, ihmisen valvonnan, testausnäytön, palautuksen, operoinnin ja julkaisuvalmiuden validointiin.",
          "category": "checklist",
          "icon": "check-box-outline",
          "order": 187,
          "outcomes": [
            "Dokumentoitu automaation valmius",
            "Tunnetut valmiuspuutteet ja lievennykset on tunnistettu ennen julkaisua.",
            "Näyttö laadusta, riskistä, vaatimustenmukaisuudesta, valvonnasta ja operatiivisesta hyväksynnästä."
          ],
          "steps": [
            "Katselmoi työnkulun suunnittelu, liiketoimintasäännöt, kontrollit, pääsy, datankäsittely ja poikkeuspolut.",
            "Varmista testausnäyttö, palautusmenettelyt, valvontamalli ja tuen valmius.",
            "Vahvista omistajuus, runbookit, seuranta, muutosten hallinta ja julkaisuhyväksyntä.",
            "Kirjaa avoimet puutteet, päätökset ja hyväksytyt riskit ennen julkaisua."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        },
        {
          "id": "automation-rollout-enablement-guide",
          "slug": "resources/automation-rollout-enablement-guide",
          "title": "Automaation käyttöönoton ja tuen opas",
          "description": "Ohje automaatioiden käyttöönottoon käyttäjäviestinnän, onboardingin, käyttöohjeiden, tukipolkujen, muutoksenhallinnan ja palautesilmukoiden avulla.",
          "category": "guideline",
          "icon": "edit-document-outline",
          "order": 188,
          "outcomes": [
            "Käyttäjät ja operaattorit on tuettu automaation käyttöön",
            "Käyttöönoton viestintä, onboarding ja tukipolut on valmisteltu.",
            "Käyttäjät ja operaattorit ymmärtävät, miten työ muuttuu automaation julkaisun jälkeen."
          ],
          "steps": [
            "Määritä käyttöönoton kohderyhmät, ajoitus, viestintäkanavat ja koulutustarpeet.",
            "Julkaise käyttöohjeet, tukipolut, poikkeusten käsittelyn ohjeet ja eskalointikontaktit.",
            "Suunnittele siirtymän tuki käyttäjille, operaattoreille ja prosessinomistajille.",
            "Kerää palautetta käyttöönoton jälkeen ja vie parannukset kehitysjonoon."
          ],
          "canvasId": null,
          "sourcePath": null,
          "sourceUrl": null,
          "contentMarkdown": null,
          "draft": true
        }
      ],
      "criteria": [
        {
          "id": "metrics-feedback-available",
          "title": "Olennaiset markkinasignaalit, palaute tai toiminnalliset havainnot ovat saatavilla tämän kyvykkyysmahdollisuuden ohjaamiseksi.",
          "description": "Relevant market signals, feedback, or operational insights are available to guide this API opportunity.",
          "category": ""
        },
        {
          "id": "business-goals-defined",
          "title": "Liiketoimintatavoitteet on määritelty.",
          "description": "Business goals are defined.",
          "category": ""
        },
        {
          "id": "market-research-done",
          "title": "Markkinatutkimus tunnistaa kyvykkyysmahdollisuuksia.",
          "description": "Market research identifies API opportunities.",
          "category": ""
        },
        {
          "id": "stakeholder-approval",
          "title": "Olennaiset sidosryhmät ovat yhtä mieltä siitä, että kyvykkyysmahdollisuus kannattaa selvittää ja priorisoida.",
          "description": "Relevant stakeholders agree this API opportunity is worth exploring and prioritizing.",
          "category": ""
        },
        {
          "id": "api-opportunity-documented",
          "title": "Kyvykkyysmahdollisuus on tunnistettu ja dokumentoitu.",
          "description": "Individual API opportunities are identified and documented.",
          "category": ""
        },
        {
          "id": "api-reusability",
          "title": "Kyvykkyys vastaa selkeään liiketoimintatarpeeseen ja on uudelleenkäytettävissä tarkoitetuille hyödyntäjille.",
          "description": "The API meets a clear business need and is reusable for multiple API consumers.",
          "category": ""
        },
        {
          "id": "hide-backend-discrepancies",
          "title": "Valittu rajapinta tarjoaa hyödyntäjille sopivan abstraktion.",
          "description": "The API is intended to shield consumers from backend complexity and inconsistencies.",
          "category": ""
        },
        {
          "id": "value-prop-validated",
          "title": "Kyvykkyyden arvolupaus on validoitu liiketoiminnan ja hyödyntäjien sidosryhmien kanssa.",
          "description": "The API value proposition has been reviewed and validated with the relevant business and consumer stakeholders.",
          "category": ""
        },
        {
          "id": "consumer-segments-identified",
          "title": "Hyödyntäjäsegmentit on tunnistettu.",
          "description": "API consumer segments (internal and external) are identified.",
          "category": ""
        },
        {
          "id": "api-roadmap-defined",
          "title": "Ylätason toteutuksen etenemissuunnitelma on määritelty.",
          "description": "High-level roadmaps for API development are established.",
          "category": ""
        },
        {
          "id": "architecture-patterns-validated",
          "title": "Valittu arkkitehtuuri, alusta ja toteutustapa on validoitu olennaisten arkkitehtuuri-, tietoturva- ja alustasidosryhmien kanssa.",
          "description": "The chosen API architecture and platform patterns have been validated with the relevant architecture, security, and platform stakeholders.",
          "category": ""
        },
        {
          "id": "design-reflects-business-value",
          "title": "Rajapintasuunnittelu ja tarjottavat kyvykkyydet ovat jäljitettävissä liiketoiminta-arvoon ja hyödyntäjien tarpeisiin.",
          "description": "The API design and exposed capabilities clearly trace back to business value and user needs.",
          "category": ""
        },
        {
          "id": "api-consistency",
          "title": "Rajapintasuunnittelu noudattaa sovittuja suunnittelustandardeja ja käytäntöjä.",
          "description": "The API design follows our shared API product and design conventions.",
          "category": ""
        },
        {
          "id": "api-contract-tested",
          "title": "Rajapintasopimus on validoitu ja testattu toiminnallisia ja ei-toiminnallisia vaatimuksia vasten.",
          "description": "The API contract is tested and meets functional and non-functional requirements.",
          "category": ""
        },
        {
          "id": "automation-workflow-validated",
          "title": "Työnkulku, säännöt, integraatiot ja olennaiset rajapintasopimukset on validoitu ja testattu.",
          "description": "The workflow, rules, integrations, and relevant interface contracts have been validated and tested.",
          "category": ""
        },
        {
          "id": "api-description-available",
          "title": "Rajapinta ja sen kyvykkyydet on dokumentoitu riittävän selkeästi katselmointia, auditointia ja käyttöönottoa varten.",
          "description": "The API and its exposed capabilities are described clearly enough for review, audit, and onboarding.",
          "category": ""
        },
        {
          "id": "audit-passed",
          "title": "Ratkaisu läpäisee laatu-, tietoturva-, vaatimustenmukaisuus- ja valmiustarkastukset.",
          "description": "The API passes compliance, security, and audit checks.",
          "category": ""
        },
        {
          "id": "audit-reports-shared",
          "title": "Auditointihavainnot ja korjauspäätökset on jaettu olennaisille sidosryhmille.",
          "description": "Audit findings and remediation decisions are shared with the relevant stakeholders.",
          "category": ""
        },
        {
          "id": "api-ready-for-publishing",
          "title": "Kyvykkyys on valmis julkaistavaksi tai toimitettavaksi valitun toimitusmekanismin kautta.",
          "description": "The API is ready to be deployed and exposed through the intended gateways and environments.",
          "category": ""
        },
        {
          "id": "api-documentation-ready",
          "title": "Hyödyntäjille suunnattu dokumentaatio ja käyttöönottomateriaalit ovat valmiit.",
          "description": "Consumer-facing API documentation is complete enough for publishing and onboarding.",
          "category": ""
        },
        {
          "id": "consumer-support-ready",
          "title": "Hyödyntäjien käyttöönotto-, tuki- ja viestintäprosessit ovat valmiit.",
          "description": "Registration, support, and communication processes are ready for API consumers.",
          "category": ""
        },
        {
          "id": "legal-compliance-clear",
          "title": "Julkaisun tai toimituksen oikeudelliset, tietosuoja- ja vaatimustenmukaisuusvaatimukset on määritelty ja ymmärretty.",
          "description": "Legal, privacy, and compliance requirements for publishing are defined and understood.",
          "category": ""
        }
      ]
    }
  }
}
