├── .gitignore ├── README.md ├── api-doc ├── README.md ├── UPDATE_README.md ├── api-doc.json └── api-docs.yaml ├── presentations ├── 20210520_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210527_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210603 - Presentation technology and integration.pdf ├── 20210610_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210617_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210624_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210701_CovidZertifikat_Presentation_System_Integration.pdf ├── 20210826_CovidZertifikat_Presentation_System_Integration.pdf └── README.md ├── release-notes └── README.md └── ui-doc ├── README.md ├── archive ├── README.md ├── template-cc_antibody-delivery_appTransfer.xlsx ├── template-cc_antibody-delivery_post.xlsx ├── template-cc_antibody.xlsx ├── template-cc_recovery-rat-delivery_appTransfer.xlsx ├── template-cc_recovery-rat-delivery_post.xlsx ├── template-cc_recovery-rat.xlsx ├── template-cc_vaccination_tourist-delivery_appTransfer.xlsx └── template-cc_vaccination_tourist.xlsx ├── template-bulk_revocation.xlsx ├── template-cc_recovery-delivery_appTransfer.xlsx ├── template-cc_recovery-delivery_post.xlsx ├── template-cc_recovery-rat-delivery_appTransfer.xlsx ├── template-cc_recovery-rat-delivery_post.xlsx ├── template-cc_recovery-rat.xlsx ├── template-cc_recovery.xlsx ├── template-cc_test-delivery_appTransfer.xlsx ├── template-cc_test.xlsx ├── template-cc_vaccination-delivery_appTransfer.xlsx ├── template-cc_vaccination-delivery_post.xlsx └── template-cc_vaccination.xlsx /.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /.idea/ 4 | 5 | ### IntelliJ IDEA ### 6 | .idea/* 7 | *.iws 8 | *.iml 9 | *.ipr 10 | 11 | # ignore update_api_doc (only for local use, contains personal GitHub Tokens) 12 | update_api_doc.sh 13 | 14 | # confidential 15 | *.key 16 | *.cer 17 | *.p12 18 | 19 | # python 20 | __pycache__ 21 | *.pyc 22 | 23 | # created output 24 | *.pdf 25 | *.png 26 | 27 | # macOS 28 | .DS_Store 29 | 30 | .vscode/ 31 | 32 | # API-CLI 33 | *-debug.log 34 | *-error.log 35 | /.nyc_output 36 | /dist 37 | /lib 38 | /tmp 39 | /yarn.lock 40 | node_modules 41 | /out/ 42 | .env 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ⚠️ **_IMPORTANT UPDATE_** ⚠️ 2 | 3 | Since 1st September 2023, the entire Swiss certificate system has definitively ceased operations. It is no longer possible to issue COVID certificates. The COVID Certificate app and COVID Certificate Check app are not being developed further. Therefore, the project’s source code was archived on GitHub. It remains available as a read-only project. 4 | 5 | # Swiss Covid Certificate - Documents 6 | 7 | ### Table of contents 8 | * [API Doc](/api-doc) 9 | * [Web Management UI Doc](/ui-doc) 10 | * [Release notes](/release-notes) 11 | * [Meeting documents](/presentations) 12 | 13 | 14 | ### Additional external documentation 15 | * [API Scripts](https://github.com/admin-ch/CovidCertificate-Api-Scripts) 16 | * [API CLI](https://github.com/admin-ch/CovidCertificate-Api-Cli) 17 | * [Data examples](https://github.com/admin-ch/CovidCertificate-Examples) 18 | 19 | 20 | ## Global architecture 21 | 22 | Here the global architecture of the COVID certificate system: 23 | 24 | ![image](https://user-images.githubusercontent.com/319676/125180136-afa59180-e1f6-11eb-8f26-f819d75d9760.png) 25 | 26 | ## Source code of COVID certificate system 27 | 28 | ### Mobile apps 29 | 30 | - [CovidCertificate-App-Android](https://github.com/admin-ch/CovidCertificate-App-Android) 31 | - [CovidCertificate-App-iOS](https://github.com/admin-ch/CovidCertificate-App-iOS) 32 | - [CovidCertificate-SDK-Android](https://github.com/admin-ch/CovidCertificate-SDK-Android) 33 | - [CovidCertificate-SDK-iOS](https://github.com/admin-ch/CovidCertificate-SDK-iOS) 34 | 35 | ### COVID certificate services 36 | 37 | - [CovidCertificate-App-Config-Service](https://github.com/admin-ch/CovidCertificate-App-Config-Service) 38 | - [CovidCertificate-Api-Gateway-Service](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service) 39 | - [CovidCertificate-Management-UI](https://github.com/admin-ch/CovidCertificate-Management-UI) 40 | - [CovidCertificate-Management-Service](https://github.com/admin-ch/CovidCertificate-Management-Service) 41 | - [CovidCertificate-Signing-Service](https://github.com/admin-ch/CovidCertificate-Signing-Service) 42 | - [CovidCertificate-Notification-Service](https://github.com/admin-ch/CovidCertificate-Notification-Service) 43 | - [CovidCertificate-Light-Certificate-Generation-Service](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service) 44 | - [CovidCertificate-Printing-Service](https://github.com/admin-ch/CovidCertificate-Printing-Service) 45 | 46 | 47 | ## References 48 | 49 | * [Information about covid certificate delivered by swiss Federal Office of Public Health (FOPH)](https://www.bag.admin.ch/covid-zertifikat) 50 | 51 | -------------------------------------------------------------------------------- /api-doc/README.md: -------------------------------------------------------------------------------- 1 | # Swiss Covid Certificate - API documentation 2 | 3 | ## :warning: The use of the API is reserved for companies operating within Switzerland. Furthermore, the API is exclusively authorized for the verification of Covid certificates within Switzerland and according to the regulations valid in Switzerland. :warning: 4 | 5 | - [Swiss Covid Certificate - API documentation](#swiss-covid-certificate---api-documentation) 6 | * [Introduction](#introduction) 7 | * [Api docs](#api-docs) 8 | + [Generation, revocation and value set API doc](#generation-revocation-and-value-set-api-doc) 9 | + [Verification API doc](#verification-api-doc) 10 | * [Certificate Generation and Revocation API](#certificate-generation-and-revocation-api) 11 | + [HOWTO become a system integrator using the API](#howto-become-a-system-integrator-using-the-api) 12 | + [Third party system integration](#third-party-system-integration) 13 | - [Prerequisites in order to access the API](#prerequisites-in-order-to-access-the-api) 14 | - [Integration architecture](#integration-architecture) 15 | * [Integration with one-time password](#integration-with-one-time-password) 16 | * [Sequence diagram](#sequence-diagram) 17 | - [Security architecture](#security-architecture) 18 | * [Authorized user](#authorized-user) 19 | * [TLS tunnel](#tls-tunnel) 20 | * [Content signature](#content-signature) 21 | + [Java signature sample](#java-signature-sample) 22 | + [.NET signature sample](#net-signature-sample) 23 | + [Node.js TypeScript signature sample](#nodejs-typescript-signature-sample) 24 | + [More samples](#more-samples) 25 | + [Request - Certificate data](#request---certificate-data) 26 | - [Configuration data](#configuration-data) 27 | - [Personal data](#personal-data) 28 | - [Address data](#address-data) 29 | - [Transfer data - appCode](#transfer-data---appcode) 30 | * [Transfer code validation](#transfer-code-validation) 31 | - [Specific vaccination data](#specific-vaccination-data) 32 | * [vaccinationInfo](#vaccinationinfo) 33 | * [vaccination certificate data](#vaccination-certificate-data) 34 | - [Specific vaccination-tourist data](#specific-vaccination-tourist-data) 35 | * [vaccinationTouristInfo](#vaccinationtouristinfo) 36 | * [vaccination-tourist certificate data](#vaccination-tourist-certificate-data) 37 | - [Specific test data](#specific-test-data) 38 | * [testInfo](#testinfo) 39 | * [testCertificateData](#testcertificatedata) 40 | - [Specific recovery data](#specific-recovery-data) 41 | * [recoveryInfo](#recoveryinfo) 42 | * [recovery certificate data](#recovery-certificate-data) 43 | - [Specific recovery-rat data](#specific-recovery-rat-data) 44 | * [testInfo 2](#testInfo-2) 45 | * [testCertificateData 2](#testcertificatedata-2) 46 | - [Specific antibody data](#specific-antibody-data) 47 | * [antibodyInfo](#antibodyinfo) 48 | * [antibody certificate data](#antibody-certificate-data) 49 | + [Response - Covid certificate](#response---covid-certificate) 50 | * [Verification API](#verification-api) 51 | * [References](#references) 52 | + [Links to EU digital green certificate documentation](#links-to-eu-digital-green-certificate-documentation) 53 | 54 | Table of contents generated with markdown-toc 55 | 56 | 57 | ## Introduction 58 | 59 | The swiss covid certificate system can be used by authorized third party systems in order to generate, revoke and verify covid certificates compatible with the EU digital green certificate. This repository contains technical information about how to integrate third party systems. 60 | 61 | The swiss covid certificate system is hosted and maintained by the [FOITT](https://www.bit.admin.ch/bit/en/home.html). 62 | 63 | The issuing of certificates according to type can be toggled according to the decision of the Federal Office of Public Health (FOPH). 64 | Consequently, the API endpoints and options in the UI will be enabled/disabled. The table below shows the certificates that can currently be generated. For more information, please contact support @ covid-zertifikat@bag.admin.ch. 65 | 66 | | Certificate type | State | 67 | | ----------- | ----------- | 68 | | Vaccination | :heavy_check_mark: | 69 | | Vaccination for tourists | :no_entry: | 70 | | Test (based on negative PCR or Rapid Antigen Test) | :heavy_check_mark: | 71 | | Recovery (based on positive PCR test) | :heavy_check_mark: | 72 | | Recovery (based on positive Rapid Antigen Test) | :heavy_check_mark: | 73 | | Recovery (based on antibody test) | :no_entry: | 74 | 75 | :heavy_check_mark:: the certificate and its corresponding endpoints are active 76 | :no_entry:: the certificate and its corresponding endpoints are no longer active 77 | ## Api docs 78 | 79 | ### Generation, revocation and value set API doc 80 | - [API File](api-docs.yaml) 81 | - [SwaggerUI](https://editor.swagger.io/?url=https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/main/api-doc/api-docs.yaml) 82 | 83 | ### Verification API doc 84 | We do not recommend the use of the API. To save the effort of implementing the API, a Docker image of a verification service is provided. This one contains an endpoint that allows you to check, through its QR-Code, the validity of a certificate. 85 | For mobile solutions, an Android and iOS SDK are available. 86 | 87 | The SDKs and the Docker image of the verification service are developed and updated by our teams. 88 | - [CovidCertificate-SDK-Android](https://github.com/admin-ch/CovidCertificate-SDK-Android) 89 | - [CovidCertificate-SDK-iOS](https://github.com/admin-ch/CovidCertificate-SDK-iOS) 90 | - [CovidCertificate-App-Verification-Check-Service](https://github.com/admin-ch/CovidCertificate-App-Verification-Check-Service) 91 | 92 | ## Certificate Generation and Revocation API 93 | 94 | ### HOWTO become a system integrator using the API 95 | 96 | If you are a primary system integrator, you can follow the following steps in order to use the generation and revocation API: 97 | 98 | 1. Indicate your interest to [Covid-Zertifikat@bag.admin.ch](mailto:Covid-Zertifikat@bag.admin.ch). 99 | 2. Receive a test PKI certificate of the type ["SwissGov Regular CA 01"](https://www.bit.admin.ch/bit/en/home/subsites/allgemeines-zur-swiss-government-pki/rootzertifikate/swiss-government-root-ca-ii.html) from [FOITT](https://www.bit.admin.ch/bit/en/home.html) so that the primary system integration can be developed and tested. 100 | 3. Sign an agreement with [FOITT](https://www.bit.admin.ch/bit/en/home.html). This is a condition for receiving a production PKI certificate of the type ["SwissGov Regular CA 01"](https://www.bit.admin.ch/bit/en/home/subsites/allgemeines-zur-swiss-government-pki/rootzertifikate/swiss-government-root-ca-ii.html). 101 | 4. If the test is successful and an agreement is signed, receive a production PKI certificate of the type ["SwissGov Regular CA 01"](https://www.bit.admin.ch/bit/en/home/subsites/allgemeines-zur-swiss-government-pki/rootzertifikate/swiss-government-root-ca-ii.html) from [FOITT](https://www.bit.admin.ch/bit/en/home.html) in order to generate official swiss covid certificates. 102 | 5. REST API is free of charge. 103 | 6. Batch processing is possible, but please avoid to request more than 2 covid certificates per second. In case of doubts, contact us with [Covid-Zertifikat@bag.admin.ch](mailto:Covid-Zertifikat@bag.admin.ch). 104 | 105 | ### Third party system integration 106 | 107 | There are two methods to generate and revoke covid certificates: 108 | 109 | 1. Use the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)). Only authorized users determined by the cantons can use the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)). 110 | 2. Integrate the REST API within a primary system (system used by health professionals to manage vaccine, test and recovery information). Only authorized users determined by the cantons can use the REST API. Only primary systems determined by [FOITT](https://www.bit.admin.ch/bit/en/home.html) can access the REST API. 111 | 112 | This documentation applies to the second use case presented above. 113 | 114 | #### Prerequisites in order to access the API 115 | 116 | 1. Only authorized users (natural persons) can access the generation and revocation API. Authorized users are determined by the swiss cantons or [FOPH](https://www.bag.admin.ch/bag/en/home.html). 117 | 2. Third party systems have to sign an agreement with [FOITT](https://www.bit.admin.ch/bit/en/home.html) in order to access the generation and revocation API. 118 | 119 | #### Integration architecture 120 | 121 | ##### Integration with one-time password 122 | 123 | To use the generation and revocation API a one-time password is required that can be obtained form the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)). 124 | This one-time password needs to be included in every REST API request. It is valid for 12 hours. 125 | After expiry a new one-time password has to be generated. 126 | 127 | ![image](https://user-images.githubusercontent.com/319676/118590161-32374500-b7a2-11eb-8cb6-9395aacfa9de.png) 128 | 129 | 1. The authorized user previously registered and recognized by [eIAM](https://www.eiam.admin.ch/pages/eiam_en.html?c=eiam&l=en&ll=1) can obtain a one-time password by signing in to the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)) page. 130 | 2. Upon signing in to the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)), the authorized users rights are verified by [eIAM](https://www.eiam.admin.ch/pages/eiam_en.html?c=eiam&l=en&ll=1). 131 | 3. The authorized user must insert the one-time password in the primary system so that it is transmitted when calling the REST API. 132 | 4. One-way authentication is used to create the TLS tunnel and therefor protect the data transfer. 133 | 5. The one-time password is transferred in the requests JSON payload. [See: API doc](https://editor.swagger.io/?url=https://raw.githubusercontent.com/admin-ch/CovidCertificate-Apidoc/main/api-docs.yaml) 134 | 6. The content is hashed and signed with the primary key of the "SwissGov Regular CA 01" certificate distributed to the primary system. [See: Content signature](#content-signature). 135 | 7. The dataset structured as JSON Schema is created and transported within the secured TLS tunnel. 136 | 8. The Management Service REST API checks the integrity of the data with the received signature and verifies the the one-time password. 137 | 138 | ##### Sequence diagram 139 | 140 | ![image](https://user-images.githubusercontent.com/319676/118361751-0db64f80-b58d-11eb-8f5a-fc7e193a1a00.png) 141 | 142 | #### Security architecture 143 | 144 | ##### Authorized user 145 | 146 | The authorized users are onboarded in [eIAM](https://www.eiam.admin.ch/pages/eiam_en.html?c=eiam&l=en&ll=1) and can use a [CHLogin](https://www.eiam.admin.ch/?c=f!chlfaq!pub&l=en) or a [HIN](https://www.hin.ch/hin-anschluss/elektronische-identitaeten/) identity. They access the API by sending an OneTime password (OTP as [JSON Web Token - JWT](https://jwt.io/)) generated from the Web management UI ([prod](https://www.covidcertificate.admin.ch/) - [test](https://www.covidcertificate-a.admin.ch/)). 147 | 148 | ##### TLS tunnel 149 | 150 | A TLS tunnel (single way authentication) is made between the primary system and the API gateway. One "SwissGov Regular CA 01" certificate is delivered to each primary system for this purpose. 151 | 152 | ##### Content signature 153 | 154 | The content transferred to the REST API is signed with the private key of the certificate issued by "SwissGov Regular CA 01". 155 | 156 | Given the JSON payload to be sent (data used to create the covid certificate or revocation data including the one-time password)), the process is as follows: 157 | 158 | 1. Primary system create a canonicalized text representation by removing all spaces, tabs, carriage returns and newlines from the payload. The regex `/[\n\r\t ]/gm` can be used. 159 | 2. Primary system encodes gets a UTF8 byte representation of that canonicalized text. 160 | 3. Primary system signs that byte representation using the algorithm "RSASSA-PKCS1-v1_5" from [RFC](https://datatracker.ietf.org/doc/html/rfc3447). Most implementations name the algorithm `SHA256withRSA`. 161 | 4. Primary system encodes the signature as base64 string. 162 | 5. Primary system places the base64 encoded signature in the request header `X-Signature`. 163 | 164 | ###### Java signature sample 165 | 166 | ```java 167 | // load the key 168 | PrivateKey privateKey = this.getCertificate(); 169 | // canonicalize 170 | String normalizedJson = payload.replaceAll("[\\n\\r\\t ]", ""); 171 | byte[] bytes = normalizedJson.getBytes(StandardCharsets.UTF_8); 172 | // sign 173 | Signature signature = Signature.getInstance("SHA256withRSA"); 174 | signature.initSign(privateKey); 175 | signature.update(bytes); 176 | String signatureString = Base64.getEncoder().encodeToString(signature.sign()); 177 | ``` 178 | 179 | ###### .NET signature sample 180 | 181 | ```c# 182 | // create RSA from certificate 183 | X509Certificate2 cert = GetCertificate(); 184 | RSA rsaSignature = cert.GetRSAPrivateKey(); 185 | 186 | // normalize json 187 | Regex normalizedJsonReplaceRegex = new Regex("[\\n\\r\\t ]"); 188 | string normalizedJson = normalizedJsonReplaceRegex.Replace(payload, string.Empty); 189 | 190 | // sign 191 | byte[] signatureBytes = rsaSignature.SignData(Encoding.UTF8.GetBytes(normalizedJson), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); 192 | 193 | // convert signature to Base64 string 194 | string signatureString = Convert.ToBase64String(signatureBytes); 195 | ``` 196 | 197 | ###### Node.js TypeScript signature sample 198 | 199 | ```typescript 200 | // load the key 201 | const pemEncodedKey = fs.readFileSync(privateKeyFile) 202 | const privateKeyObject = crypto.createPrivateKey(pemEncodedKey) 203 | // canonicalize 204 | const regex = /[\n\r\t ]/gm 205 | const canonicalPayload = payload.replace(regex, '') 206 | const bytes = Buffer.from(canonicalMessage, 'utf8') 207 | // sign 208 | const sign = crypto.createSign('RSA-SHA256') 209 | sign.update(bytes) 210 | const signature = sign.sign(privateKeyObject) 211 | const base64encodedSignature = signature.toString('base64') 212 | // set request header 213 | headers['X-Signature'] = base64encodedSignature 214 | ``` 215 | 216 | ###### More samples 217 | 218 | There are samples scripts at . 219 | 220 | ### Request - Certificate data 221 | 222 | 4 types of covid certificate can be produced: ***vaccination***, ***test***, ***recovery*** or ***antibody***. One covid certificate contains only one type. 223 | The configuration and personal data sections are the same for all covid certificates. The other data sections are specific to the type of certificate. 224 | 225 | One generation request generates always one single covid certificate. 226 | 227 | #### Configuration data 228 | 229 | Mandatory data necessary for all types of certificates: 230 | 231 | - **otp**: the one time password which has to be generated in the [Web management UI (test environment)](https://www.covidcertificate-a.admin.ch/). 232 | - Format: string 233 | 234 | #### Personal data 235 | 236 | Mandatory data appearing in all types of certificates: 237 | 238 | - **familyName**: family name of the covid certificate owner. 239 | - Format: string, maxLength: 80 CHAR. 240 | - Example: "Rochat" 241 | - Invalid chars: "!", "@", "#", "\r", "\n", "\\", "$", "%", "¶", "*", "(", ")", "_", ":", "/", "+", "=", "|", "<", ">", "?", "{", "}", "[", "]", "~" 242 | - **givenName**: first name of the covid certificate owner. 243 | - Format: string, maxLength: 80 CHAR. 244 | - Example: "Céline" 245 | - Invalid chars: "!", "@", "#", "\r", "\n", "\\", "$", "%", "¶", "*", "(", ")", "_", ":", "/", "+", "=", "|", "<", ">", "?", "{", "}", "[", "]", "~" 246 | - **dateOfBirth**: date of birth of the covid certificate owner. 247 | - Format: ISO 8601 date without time **or** YYYY-MM **or** YYYY 248 | - Examples: "1964-03-14", "1985-07", "2001" 249 | - **language**: the national language used to create the covid certificate PDF. 250 | The PDF always contains English translations. 251 | - Accepted languages are: `de`, `it`, `fr`, `rm`. 252 | 253 | #### Address data 254 | 255 | Optional data for paper-based delivery of the certificate. 256 | If this data is passed, a printout of the certificate will be sent to the specified address. 257 | The first line of the address is derived from the personal data. 258 | Therefore, the attributes givenName and familyName are concatenated to build this line. 259 | Only one delivery method can be used in an API request: address data can't used together with transfer data. 260 | 261 | - **streetAndNr**: street and house number of the recipient. 262 | - Format: string. 263 | - Example: "Musterweg 4b" 264 | - **zipCode**: zip code of the recipient. 265 | - Format: integer, maxLength: 4 CHAR, minLength: 4 CHAR. 266 | - Example: 3000 267 | - **city**: city the recipient lives in. 268 | - Format: string. 269 | - Example: "Bern" 270 | - **cantonCodeSender**: abbreviation of the canton *issuing* the certificate. This can be different from the canton the recipient of the certificiate lives in. The abbreviation is mapped to a predefined address and used as the sender of the letter when sending the printout by mail. 271 | - Format: string. 272 | - Example: "BE" 273 | 274 | #### Transfer data - appCode 275 | 276 | Transfer data is used to securely deliver the covid certificate into the Covid Cert app via the InApp delivery mechanism. 277 | Only one delivery method can be used in an API request: transfer data cannot be combined with address data. 278 | 279 | - **appCode**: code generated by the app allowing the secure direct transfer of the covid certificate to the Covid Cert app. 280 | - Format: string with 9 characters 281 | - Example: "Y8P8ECFN8" 282 | 283 | In case of problem with the InApp delivery backend, the system still sets the http response status code 200 and returns the QRCode and the PDF. 284 | Additionally, the response contains the optional attribute **appDeliveryError**. 285 | If this attribut exists in the response, then the covid certificate has not been transferred to the Covid Cert app. 286 | 287 | **appDeliveryError** may contain the following errorCode / errorMessage combination. 288 | 289 | - `errorCode:476, "errorMessage": "Unknown app code."` 290 | Reasons might be that the appCode is not valid any more, was already used or did not exist at all. 291 | - `errorCode:558, "errorMessage": "App delivery failed due to a technical error."` 292 | Technical issue in the InApp delivery backend. 293 | You can try to submit the same request later. 294 | 295 | ##### Transfer code validation 296 | 297 | A transfer code consists of 9 characters. 298 | 299 | The first 8 are randomly chosen from the following 29-character alphabet (code points): **`1234567890ABCDEFHKMNPRSTUWXYZ`**. 300 | Note that the following characters are left out to reduce confusion: "0, G, I, J, L, O, Q, V". 301 | 302 | The final 9th character is a check character (a.k.a checksum, check digit). 303 | It is computed using the [Luhn mod N algorithm](https://en.wikipedia.org/wiki/Luhn_mod_N_algorithm). 304 | Please use the alphabet defined above for the computation. 305 | 306 | The following are examples of valid transfer codes: 307 | 308 | ``` 309 | Y8P8ECFN8 310 | HDTYRB66W 311 | YS6R7H88T 312 | K42K6F7R2 313 | 3BY8DAZYS 314 | ADWYF11SY 315 | 453S6HUA6 316 | WR7UPHB4A 317 | 37WDPRSKM 318 | 01AWUUB2M 319 | MA4S9CNUK 320 | SY7M684WA 321 | X216WN3YF 322 | 3C2YFKCNP 323 | TNKBZ0TSK 324 | ``` 325 | 326 | The following codes are invalid transfer codes: 327 | 328 | ``` 329 | Y8P8ECFN9 330 | HDTYRC66W 331 | YS6RH788T 332 | K43K6F7R2 333 | 3B8YDAZYS 334 | ADWFY11SY 335 | 453S6HU6A 336 | WR7UHPB4A 337 | 37WDRPSKM 338 | 10AWUUB2M 339 | MAS49CNUK 340 | SY7M864WA 341 | $%(*(!@#$_!@*# 342 | ``` 343 | 344 | #### Specific vaccination data 345 | 346 | ##### vaccinationInfo 347 | 348 | array containing the vaccination certificate data. 349 | There must be exactly one element containing the data of the latest vaccination. 350 | 351 | ##### vaccination certificate data 352 | 353 | object containing the following fields. All fields are mandatory. 354 | 355 | - **medicinalProductCode**: name of the medicinal product as registered in the country. 356 | - Format: string. Use the defined [endpoint](#generation-revocation-and-value-set-api-doc) for the value set. 357 | The value of the code has to be sent to the API 358 | - Example: "EU/1/20/1507" for a "COVID-19 Vaccine Moderna" vaccine 359 | - **numberOfDoses**: number in a series of doses. 360 | - Format: integer, range: from 1 to 9. 361 | - **totalNumberOfDoses**: total series of doses. 362 | - Format: integer, range: from 1 to 9. 363 | --- 364 | **Important** 365 | Information on the vaccine doses received (X) and required (Y) must be entered in accordance with one of the following rules: 366 | - Last dose of a 2-dose vaccine (e.g. mRNA) without prior infection: 367 | - 1/2: Incomplete vaccination (not usable for travel or areas subject to certification) 368 | - 2/2: Full vaccination (initial immunisation) 369 | - 3/3, 4/4, ...: Booster 370 | - Last dose of a 2-dose vaccine (e.g. mRNA) after prior infection (“required doses”: Y must always be 1): 371 | - 1/1: Full vaccination after recovery 372 | - 2/1, 3/1, 4/1, ...: Booster after recovery 373 | - Last dose of a 1-dose vaccine (e.g. Janssen) without prior infection: 374 | - 1/1: Full vaccination 375 | - 2/1: Booster 376 | --- 377 | - **vaccinationDate**: date of vaccination. 378 | - Format: ISO 8601 date without time. 379 | - Example: "2021-05-14" 380 | - **countryOfVaccination**: the country in which the covid certificate owner has been vaccinated. 381 | - Format: string (2 chars according to ISO 3166 Country Codes). 382 | - Example: "CH" (for switzerland). 383 | 384 | #### Specific vaccination-tourist data 385 | 386 | ##### vaccinationTouristInfo 387 | 388 | array containing the vaccination-tourist certificate data. 389 | There must be exactly one element containing the data of the latest vaccination. 390 | 391 | ##### vaccination-tourist certificate data 392 | 393 | object containing the following fields. All fields are mandatory. 394 | 395 | - **medicinalProductCode**: name of the medicinal product as registered in the country. 396 | - Format: string. Use the defined [endpoint](#generation-revocation-and-value-set-api-doc) for the value set. 397 | The value of the code has to be sent to the API 398 | - Value-set: ["BBIBP-CorV", "Covaxin", "CoronaVac"] 399 | - **numberOfDoses**: number in a series of doses. 400 | - Format: integer, range: from 1 to 9. 401 | - **totalNumberOfDoses**: total series of doses. 402 | - Format: integer, range: from 1 to 9. 403 | --- 404 | **Important** 405 | Information on the vaccine doses received (X) and required (Y) must be entered in accordance with one of the following rules: 406 | - Last dose of a 2-dose vaccine (e.g. mRNA) without prior infection: 407 | - 1/2: Incomplete vaccination (not usable for travel or areas subject to certification) 408 | - 2/2: Full vaccination (initial immunisation) 409 | - 3/3, 4/4, ...: Booster 410 | - Last dose of a 2-dose vaccine (e.g. mRNA) after prior infection (“required doses”: Y must always be 1): 411 | - 1/1: Full vaccination after recovery 412 | - 2/1, 3/1, 4/1, ...: Booster after recovery 413 | - Last dose of a 1-dose vaccine (e.g. Janssen) without prior infection: 414 | - 1/1: Full vaccination 415 | - 2/1: Booster 416 | --- 417 | - **vaccinationDate**: date of vaccination. 418 | - Format: ISO 8601 date without time. 419 | - Example: "2021-05-14" 420 | - **countryOfVaccination**: the country (exculding CH) in which the person has been vaccinated. 421 | - Format: string (2 chars according to ISO 3166 Country Codes). 422 | - Example: "DZ" (for Algeria). 423 | - Note: 'CH' is excluded from the value-set for this endpoint since the vaccination-tourist certificate is only intended for tourists (non-CH residents). 424 | 425 | #### Specific test data 426 | 427 | ##### testInfo 428 | 429 | array containing the test certificate data. 430 | There must be exactly one element containing the data of the latest test. 431 | 432 | ##### testCertificateData 433 | 434 | object containing the following fields. All fields are mandatory if not noted otherwise. 435 | 436 | - **typeCode**: type of test. This field is only mandatory when it is a PCR test. 437 | If given with manufacturerCode as well, they must match otherwise there will be a 400 BAD REQUEST. 438 | - Format: string. 439 | The value of the code has to be sent to the API 440 | - Accepted: "LP217198-3" for a "Rapid immunoassay" type of test 441 | - Accepted: "LP6464-4" for a "Nucleic acid amplification with probe detection" (PCR) type of test 442 | - **manufacturerCode**: test manufacturer code. 443 | This should only be sent when it is not a PCR test, otherwise there will be a 400 BAD REQUEST. 444 | - Format: string. 445 | Use the defined [endpoint](#generation-revocation-and-value-set-api-doc) for the value set. 446 | The value of the code has to be sent to the API 447 | - Example: "1232" for a "Abbott Rapid Diagnostics, Panbio Covid-19 Ag Rapid Test" manufacturer and name 448 | - **sampleDateTime**: date and time of the test sample collection. 449 | - Format: ISO 8601 date incl. time. 450 | - Example: "2020-09-24T17:29:41Z". "Z" means that the time is defined in the UTC timezone. "2021-07-12T16:00:00+02:00" can be used for the swiss timezone in summer. 451 | - **testingCentreOrFacility**: name of centre or facility. 452 | - Format: string, maxLength: 50 CHAR. 453 | - Example: "Walk-in-Lyss AG" 454 | - **memberStateOfTest**: the country in which the covid certificate owner has been tested. 455 | - Format: string (2 chars according to ISO 3166 Country Codes). 456 | - Example: "CH" (for switzerland). 457 | 458 | #### Specific recovery data 459 | 460 | ##### recoveryInfo 461 | 462 | array containing the recovery certificate data. 463 | There must be exactly one element containing the data of first positive test. 464 | 465 | ##### recovery certificate data 466 | 467 | object containing the following fields. All fields are mandatory. 468 | 469 | - **dateOfFirstPositiveTestResult**: date when test result was known that led to positive test obtained through a procedure established by a public health authority. 470 | - Format: ISO 8601 date without time. 471 | - Example: "2021-10-03" 472 | - **countryOfTest**: the country in which the covid certificate owner has been tested. 473 | - Format: string (2 chars according to ISO 3166 Country Codes). 474 | - Example: "CH" (for switzerland). 475 | 476 | #### Specific recovery-rat data 477 | 478 | ##### testInfo 2 479 | 480 | array containing the recovery-rat certificate data. 481 | There must be exactly one element containing the data of the latest test. 482 | 483 | ##### testCertificateData 2 484 | 485 | object containing the following fields. All fields are mandatory if not noted otherwise. 486 | 487 | - **sampleDateTime**: date and time of the positive test sample collection. 488 | - Format: ISO 8601 date incl. time. 489 | - Example: "2022-01-25T17:29:41Z". "Z" means that the time is defined in the UTC timezone. 'sampleDateTime' must be greater or equal to 2021-01-10T00:00:00Z. 490 | - **memberStateOfTest**: the country in which the covid certificate owner has been tested. 491 | This field must always have the value: 'CH'. 492 | - Format: string (2 chars according to ISO 3166 Country Codes). 493 | - Example: "CH" (for switzerland). 494 | 495 | #### Specific antibody data 496 | 497 | ##### antibodyInfo 498 | 499 | array containing the antibody certificate data. 500 | There must be exactly one element containing the data of the positive serology test. 501 | 502 | ##### antibody certificate data 503 | 504 | object containing the following fields. All fields are mandatory. 505 | 506 | - **sampleDate**: date when the sample collection for the serology test was known that led to positive test obtained through a procedure established by a public health authority. 507 | - Format: ISO 8601 date without time. 508 | - Example: "2021-10-03" 509 | - **testingCenterOrFacility**: the ***Swissmedic*** authorization number (**mandatory**) of the laboratory + name of the laboratory (**optional**) 510 | - Format: string, maxLength: 50 CHAR. 511 | - Examples: 512 | - "512345-123456789 SwissLabTest Center Zürich" 513 | - "512345-123456789, SwissLabTest Center Zürich" 514 | - "512345-123456789" 515 | 516 | ##### :bulb: For your information :bulb: 517 | The Antibody Certificate specification is not part of the [EU-DCC Schema Specification](https://github.com/ehn-dcc-development/ehn-dcc-schema), this is also the reason why this certificate is only valid in Switzerland. 518 | However, in order to ensure compatibility with the mobile applications ***COVID Certificate*** ([Android](https://play.google.com/store/apps/details?id=ch.admin.bag.covidcertificate.wallet) / [iOS](https://apps.apple.com/ch/app/covid-certificate/id1565917320)) and ***COVID Certificate Check*** ([Android](https://apps.apple.com/ch/app/covid-certificate/id1565917320) / [iOS](https://apps.apple.com/ch/app/covid-certificate-check/id1565917510)), the QR-Code of this certificate has been established upon the specification of the Test Certificate with some adaptation regarding the values of the attributes which are in back-end hardcoded: 519 | 520 | - Type of Test-**tt** : (from typeCode in Test Certificate request.) : [94504-8](https://loinc.org/94504-8) 521 | - Test Result-**tr** : [260373001](https://github.com/ehn-dcc-development/ehn-dcc-schema/blob/main/valuesets/test-result.json) 522 | - Date/Time of Sample Collection-**sc** : **sampleDate** at start of day (midnight: 00:00:00) 523 | 524 | ### Response - Covid certificate 525 | 526 | The response delivered by the API contains 3 fields: 527 | 528 | - **pdf**: the pdf encoded with base64 529 | - **qrCode**: the tamper-proof signed QRCode as PNG image encoded with base64 530 | - **uvci**: the unique identifier of the certificate as string. 531 | 532 | ## Verification API 533 | 534 | You need an API token to access the verification API. Please contact us at [Covid-Zertifikat@bag.admin.ch](mailto:Covid-Zertifikat@bag.admin.ch). 535 | 536 | ## References 537 | 538 | ### Links to EU digital green certificate documentation 539 | 540 | - [Specification of EU digital green certificate](https://ec.europa.eu/health/ehealth/covid-19_en) 541 | - [Code repository of EU digital green certificate](https://github.com/eu-digital-green-certificates) 542 | -------------------------------------------------------------------------------- /api-doc/UPDATE_README.md: -------------------------------------------------------------------------------- 1 | # Guide to update the API documentation 2 | The update of the API documentation is needed if endpoints get modified, added or removed. The update is based on the 3 | `api-doc.yaml` that can be looked up from swagger. As the API documentation is for the TEST and PROD environment, the 4 | servers are coded inside the OpenApiConfig class of the CovidCertificate-Api-Gateway-Service. 5 | 6 | To update the API we have some steps to do that got mostly automated in the shell script `update_api_doc_template.sh`. 7 | 8 | ## Prepare the update 9 | Get a clone of the GitHub Project CovidCertificate-Apidoc and ensue that you are able to call the URL: 10 | `cc-api-gateway-service.abn.app.cfap02.atlantica.admin.ch` or ensure that you have a running instance of 11 | the GitHub project CovidCertificate-Api-Gateway-Service. 12 | 13 | Create a local copy of `update_api_doc_template.sh` and rename it to `update_api_doc.sh`. 14 | In your local copy change the url attribute of the `define_variables` method. 15 | Also place your individual `git_access_token` into the corresponding variable for pushing the changes. 16 | Make sure you have a clean working directory by executing `git status`. You should be informed that `nothing to commit, working tree clean`. 17 | 18 | ## Execute the script 19 | ### Getting help 20 | - execute `./update_api_doc.sh -h`, to list a simple help 21 | 22 | ### Step by step - recommended for the first time 23 | - execute `./update_api_doc.sh -u`, to update git files 24 | - execute `./update_api_doc.sh -t`, to take new api doc from ABN 25 | - update the `README.md` where needed 26 | - execute `./update_api_doc.sh -c`, to commit updated files to git 27 | - execute `./update_api_doc.sh -p`, to push changes to remote branch 28 | - open a pull request using the git hub web interface 29 | - let the pull request be reviewed by other members 30 | - merge it at the day of release 31 | 32 | ### As is if you are familiar with the script and no update of README.md is needed 33 | - execute `./update_api_doc.sh`, to execute all 4 steps above in one row 34 | - open a pull request using the git hub web interface 35 | - let the pull request be reviewed by other members 36 | - merge it at the day of release 37 | -------------------------------------------------------------------------------- /api-doc/api-docs.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.1 2 | info: 3 | title: Covid Certificate API Gateway Service 4 | description: Rest API for Covid Certificate API Gateway Service. 5 | license: 6 | name: Apache 2.0 7 | version: 2.0.0 8 | servers: 9 | - url: https://ws.covidcertificate.bag.admin.ch 10 | description: prod 11 | - url: https://ws.covidcertificate-a.bag.admin.ch 12 | description: test 13 | paths: 14 | /api/v1/covidcertificate/vaccination: 15 | post: 16 | tags: 17 | - covid-certificate-generation-controller 18 | summary: Creates a vaccine certificate for the given data. 19 | description: Creates a vaccine certificate as an QR-Code and PDF. Performs an 20 | integrity check for each request based on headers and body. 21 | operationId: createVaccinationCertificate 22 | parameters: 23 | - name: X-Signature 24 | in: header 25 | description: "Base64 encoded hash of the canonicalized body, generated with\ 26 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 27 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 28 | \ on Github." 29 | required: true 30 | schema: 31 | type: string 32 | format: Base64 33 | requestBody: 34 | content: 35 | application/json: 36 | schema: 37 | $ref: '#/components/schemas/VaccinationCertificateCreateDto' 38 | required: true 39 | responses: 40 | "403": 41 | description: "All certificate creation endpoints can be toggled, when an\ 42 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 43 | content: 44 | application/json: 45 | schema: 46 | $ref: '#/components/schemas/RestError' 47 | examples: 48 | INVALID_BEARER: 49 | description: INVALID_BEARER 50 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 51 | MISSING_BEARER_JSON: 52 | description: MISSING_BEARER_JSON 53 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 54 | INVALID_SIGNATURE: 55 | description: INVALID_SIGNATURE 56 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 57 | \ the body hash does not match the hash in the header}" 58 | SIGNATURE_PARSE_ERROR: 59 | description: SIGNATURE_PARSE_ERROR 60 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 61 | \ be parsed}" 62 | INVALID_IDENTITY_USER: 63 | description: INVALID_IDENTITY_USER 64 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 65 | \ user}" 66 | INVALID_IDENTITY_USER_ROLE: 67 | description: INVALID_IDENTITY_USER_ROLE 68 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 69 | \ user role}" 70 | INVALID_OTP_LENGTH: 71 | description: INVALID_OTP_LENGTH 72 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 73 | "400": 74 | description: Bad Request 75 | content: 76 | application/json: 77 | schema: 78 | $ref: '#/components/schemas/RestError' 79 | examples: 80 | NO_PERSON_DATA: 81 | description: NO_PERSON_DATA 82 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 83 | \ specified}" 84 | INVALID_DATE_OF_BIRTH: 85 | description: INVALID_DATE_OF_BIRTH 86 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 87 | \ Must be younger than 1900-01-01}" 88 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 89 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 90 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 91 | \ Date cannot be in the future}" 92 | INVALID_MEDICINAL_PRODUCT: 93 | description: INVALID_MEDICINAL_PRODUCT 94 | value: "{\"errorCode\": 454, \"errorMessage\": Invalid medicinal\ 95 | \ product}" 96 | INVALID_DOSES: 97 | description: INVALID_DOSES 98 | value: "{\"errorCode\": 455, \"errorMessage\": Invalid number of\ 99 | \ doses}" 100 | INVALID_VACCINATION_DATE: 101 | description: INVALID_VACCINATION_DATE 102 | value: "{\"errorCode\": 456, \"errorMessage\": Invalid vaccination\ 103 | \ date! Date cannot be in the future}" 104 | INVALID_COUNTRY_OF_VACCINATION: 105 | description: INVALID_COUNTRY_OF_VACCINATION 106 | value: "{\"errorCode\": 457, \"errorMessage\": Invalid country of\ 107 | \ vaccination}" 108 | INVALID_GIVEN_NAME: 109 | description: INVALID_GIVEN_NAME 110 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 111 | \ Must not exceed 80 chars}" 112 | INVALID_STANDARDISED_GIVEN_NAME: 113 | description: INVALID_STANDARDISED_GIVEN_NAME 114 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 115 | \ The standardised given name exceeds 80 chars}" 116 | INVALID_FAMILY_NAME: 117 | description: INVALID_FAMILY_NAME 118 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 119 | \ Must not exceed 80 chars}" 120 | INVALID_STANDARDISED_FAMILY_NAME: 121 | description: INVALID_STANDARDISED_FAMILY_NAME 122 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 123 | \ The standardised family name exceeds 80 chars}" 124 | INVALID_VACCINATION_INFO: 125 | description: INVALID_VACCINATION_INFO 126 | value: "{\"errorCode\": 451, \"errorMessage\": Invalid vaccination\ 127 | \ info! Exactly one element is expected in the array.}" 128 | INVALID_ADDRESS: 129 | description: INVALID_ADDRESS 130 | value: "{\"errorCode\": 474, \"errorMessage\": Paper-based delivery\ 131 | \ requires a valid address.}" 132 | DUPLICATE_DELIVERY_METHOD: 133 | description: DUPLICATE_DELIVERY_METHOD 134 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 135 | \ either be InApp or Mail, but not both.}" 136 | INVALID_APP_CODE: 137 | description: INVALID_APP_CODE 138 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 139 | \ invalid format.}" 140 | "200": 141 | description: OK 142 | content: 143 | application/json: 144 | schema: 145 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 146 | /api/v1/covidcertificate/vaccination-tourist: 147 | post: 148 | tags: 149 | - covid-certificate-generation-controller 150 | summary: Creates a WHO vaccination-tourist certificate for the given data. 151 | description: Creates a WHO vaccination-tourist certificate as an QR-Code and 152 | PDF. Performs an integrity check for each request based on headers and body. 153 | operationId: createVaccinationTouristCertificate 154 | parameters: 155 | - name: X-Signature 156 | in: header 157 | description: "Base64 encoded hash of the canonicalized body, generated with\ 158 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 159 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 160 | \ on Github." 161 | required: true 162 | schema: 163 | type: string 164 | format: Base64 165 | requestBody: 166 | content: 167 | application/json: 168 | schema: 169 | $ref: '#/components/schemas/VaccinationTouristCertificateCreateDto' 170 | required: true 171 | responses: 172 | "403": 173 | description: "All certificate creation endpoints can be toggled, when an\ 174 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 175 | content: 176 | application/json: 177 | schema: 178 | $ref: '#/components/schemas/RestError' 179 | examples: 180 | INVALID_BEARER: 181 | description: INVALID_BEARER 182 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 183 | MISSING_BEARER_JSON: 184 | description: MISSING_BEARER_JSON 185 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 186 | INVALID_SIGNATURE: 187 | description: INVALID_SIGNATURE 188 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 189 | \ the body hash does not match the hash in the header}" 190 | SIGNATURE_PARSE_ERROR: 191 | description: SIGNATURE_PARSE_ERROR 192 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 193 | \ be parsed}" 194 | INVALID_IDENTITY_USER: 195 | description: INVALID_IDENTITY_USER 196 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 197 | \ user}" 198 | INVALID_IDENTITY_USER_ROLE: 199 | description: INVALID_IDENTITY_USER_ROLE 200 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 201 | \ user role}" 202 | INVALID_OTP_LENGTH: 203 | description: INVALID_OTP_LENGTH 204 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 205 | "400": 206 | description: Bad Request 207 | content: 208 | application/json: 209 | schema: 210 | $ref: '#/components/schemas/RestError' 211 | examples: 212 | NO_PERSON_DATA: 213 | description: NO_PERSON_DATA 214 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 215 | \ specified}" 216 | INVALID_DATE_OF_BIRTH: 217 | description: INVALID_DATE_OF_BIRTH 218 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 219 | \ Must be younger than 1900-01-01}" 220 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 221 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 222 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 223 | \ Date cannot be in the future}" 224 | INVALID_MEDICINAL_PRODUCT: 225 | description: INVALID_MEDICINAL_PRODUCT 226 | value: "{\"errorCode\": 454, \"errorMessage\": Invalid medicinal\ 227 | \ product}" 228 | INVALID_DOSES: 229 | description: INVALID_DOSES 230 | value: "{\"errorCode\": 455, \"errorMessage\": Invalid number of\ 231 | \ doses}" 232 | INVALID_VACCINATION_DATE: 233 | description: INVALID_VACCINATION_DATE 234 | value: "{\"errorCode\": 456, \"errorMessage\": Invalid vaccination\ 235 | \ date! Date cannot be in the future}" 236 | INVALID_COUNTRY_OF_VACCINATION: 237 | description: INVALID_COUNTRY_OF_VACCINATION 238 | value: "{\"errorCode\": 457, \"errorMessage\": Invalid country of\ 239 | \ vaccination}" 240 | INVALID_GIVEN_NAME: 241 | description: INVALID_GIVEN_NAME 242 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 243 | \ Must not exceed 80 chars}" 244 | INVALID_STANDARDISED_GIVEN_NAME: 245 | description: INVALID_STANDARDISED_GIVEN_NAME 246 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 247 | \ The standardised given name exceeds 80 chars}" 248 | INVALID_FAMILY_NAME: 249 | description: INVALID_FAMILY_NAME 250 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 251 | \ Must not exceed 80 chars}" 252 | INVALID_STANDARDISED_FAMILY_NAME: 253 | description: INVALID_STANDARDISED_FAMILY_NAME 254 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 255 | \ The standardised family name exceeds 80 chars}" 256 | INVALID_VACCINATION_INFO: 257 | description: INVALID_VACCINATION_INFO 258 | value: "{\"errorCode\": 451, \"errorMessage\": Invalid vaccination\ 259 | \ info! Exactly one element is expected in the array.}" 260 | INVALID_ADDRESS: 261 | description: INVALID_ADDRESS 262 | value: "{\"errorCode\": 474, \"errorMessage\": Paper-based delivery\ 263 | \ requires a valid address.}" 264 | DUPLICATE_DELIVERY_METHOD: 265 | description: DUPLICATE_DELIVERY_METHOD 266 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 267 | \ either be InApp or Mail, but not both.}" 268 | INVALID_APP_CODE: 269 | description: INVALID_APP_CODE 270 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 271 | \ invalid format.}" 272 | "200": 273 | description: OK 274 | content: 275 | application/json: 276 | schema: 277 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 278 | /api/v1/covidcertificate/test: 279 | post: 280 | tags: 281 | - covid-certificate-generation-controller 282 | summary: Creates a test certificate for the given data. 283 | description: Creates a test certificate as an QR-Code and PDF. Performs an integrity 284 | check for each request based on headers and body. 285 | operationId: createTestCertificate 286 | parameters: 287 | - name: X-Signature 288 | in: header 289 | description: "Base64 encoded hash of the canonicalized body, generated with\ 290 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 291 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 292 | \ on Github." 293 | required: true 294 | schema: 295 | type: string 296 | format: Base64 297 | requestBody: 298 | content: 299 | application/json: 300 | schema: 301 | $ref: '#/components/schemas/TestCertificateCreateDto' 302 | required: true 303 | responses: 304 | "400": 305 | description: Bad Request 306 | content: 307 | application/json: 308 | schema: 309 | $ref: '#/components/schemas/RestError' 310 | examples: 311 | NO_PERSON_DATA: 312 | description: NO_PERSON_DATA 313 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 314 | \ specified}" 315 | INVALID_DATE_OF_BIRTH: 316 | description: INVALID_DATE_OF_BIRTH 317 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 318 | \ Must be younger than 1900-01-01}" 319 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 320 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 321 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 322 | \ Date cannot be in the future}" 323 | INVALID_GIVEN_NAME: 324 | description: INVALID_GIVEN_NAME 325 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 326 | \ Must not exceed 80 chars}" 327 | INVALID_STANDARDISED_GIVEN_NAME: 328 | description: INVALID_STANDARDISED_GIVEN_NAME 329 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 330 | \ The standardised given name exceeds 80 chars}" 331 | INVALID_FAMILY_NAME: 332 | description: INVALID_FAMILY_NAME 333 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 334 | \ Must not exceed 80 chars}" 335 | INVALID_STANDARDISED_FAMILY_NAME: 336 | description: INVALID_STANDARDISED_FAMILY_NAME 337 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 338 | \ The standardised family name exceeds 80 chars}" 339 | INVALID_MEMBER_STATE_OF_TEST: 340 | description: INVALID_MEMBER_STATE_OF_TEST 341 | value: "{\"errorCode\": 461, \"errorMessage\": Invalid member state\ 342 | \ of test}" 343 | INVALID_TYP_OF_TEST: 344 | description: INVALID_TYP_OF_TEST 345 | value: "{\"errorCode\": 462, \"errorMessage\": Invalid type of test\ 346 | \ and manufacturer code combination! Must either be a PCR Test\ 347 | \ type and no manufacturer code or give a manufacturer code and\ 348 | \ the antigen test type code.}" 349 | INVALID_TEST_CENTER: 350 | description: INVALID_TEST_CENTER 351 | value: "{\"errorCode\": 463, \"errorMessage\": Invalid testing center\ 352 | \ or facility}" 353 | INVALID_SAMPLE_OR_RESULT_DATE_TIME: 354 | description: INVALID_SAMPLE_OR_RESULT_DATE_TIME 355 | value: "{\"errorCode\": 464, \"errorMessage\": Invalid sample or\ 356 | \ result date time! Sample date must be before current date and\ 357 | \ before result date}" 358 | INVALID_LANGUAGE: 359 | description: INVALID_LANGUAGE 360 | value: "{\"errorCode\": 469, \"errorMessage\": The given language\ 361 | \ does not match any of the supported languages: de, it, fr!}" 362 | INVALID_TEST_INFO: 363 | description: INVALID_TEST_INFO 364 | value: "{\"errorCode\": 460, \"errorMessage\": Invalid test info!\ 365 | \ Exactly one element is expected in the array.}" 366 | DUPLICATE_DELIVERY_METHOD: 367 | description: DUPLICATE_DELIVERY_METHOD 368 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 369 | \ either be InApp or Mail, but not both.}" 370 | INVALID_APP_CODE: 371 | description: INVALID_APP_CODE 372 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 373 | \ invalid format.}" 374 | INVALID_PRINT_FOR_TEST: 375 | description: INVALID_PRINT_FOR_TEST 376 | value: "{\"errorCode\": 488, \"errorMessage\": Print is not available\ 377 | \ for test certificates}" 378 | "403": 379 | description: "All certificate creation endpoints can be toggled, when an\ 380 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 381 | content: 382 | application/json: 383 | schema: 384 | $ref: '#/components/schemas/RestError' 385 | examples: 386 | INVALID_BEARER: 387 | description: INVALID_BEARER 388 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 389 | MISSING_BEARER_JSON: 390 | description: MISSING_BEARER_JSON 391 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 392 | INVALID_SIGNATURE: 393 | description: INVALID_SIGNATURE 394 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 395 | \ the body hash does not match the hash in the header}" 396 | SIGNATURE_PARSE_ERROR: 397 | description: SIGNATURE_PARSE_ERROR 398 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 399 | \ be parsed}" 400 | INVALID_IDENTITY_USER: 401 | description: INVALID_IDENTITY_USER 402 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 403 | \ user}" 404 | INVALID_IDENTITY_USER_ROLE: 405 | description: INVALID_IDENTITY_USER_ROLE 406 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 407 | \ user role}" 408 | INVALID_OTP_LENGTH: 409 | description: INVALID_OTP_LENGTH 410 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 411 | "200": 412 | description: OK 413 | content: 414 | application/json: 415 | schema: 416 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 417 | /api/v1/covidcertificate/revoke: 418 | post: 419 | tags: 420 | - covid-certificate-revocation-controller 421 | summary: Revokes the certificate for the given UVCI. 422 | description: Revokes a Covid certificate with a given UVCI. Performs an integrity 423 | check for each request based on headers and body. 424 | operationId: revokeCertificate 425 | parameters: 426 | - name: X-Signature 427 | in: header 428 | description: "Base64 encoded hash of the canonicalized body, generated with\ 429 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 430 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 431 | \ on Github." 432 | required: true 433 | schema: 434 | type: string 435 | format: Base64 436 | requestBody: 437 | content: 438 | application/json: 439 | schema: 440 | $ref: '#/components/schemas/RevocationDto' 441 | required: true 442 | responses: 443 | "403": 444 | description: Forbidden 445 | content: 446 | application/json: 447 | schema: 448 | $ref: '#/components/schemas/RestError' 449 | examples: 450 | INVALID_BEARER: 451 | description: INVALID_BEARER 452 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 453 | MISSING_BEARER_JSON: 454 | description: MISSING_BEARER_JSON 455 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 456 | INVALID_SIGNATURE: 457 | description: INVALID_SIGNATURE 458 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 459 | \ the body hash does not match the hash in the header}" 460 | SIGNATURE_PARSE_ERROR: 461 | description: SIGNATURE_PARSE_ERROR 462 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 463 | \ be parsed}" 464 | INVALID_IDENTITY_USER: 465 | description: INVALID_IDENTITY_USER 466 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 467 | \ user}" 468 | INVALID_IDENTITY_USER_ROLE: 469 | description: INVALID_IDENTITY_USER_ROLE 470 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 471 | \ user role}" 472 | INVALID_OTP_LENGTH: 473 | description: INVALID_OTP_LENGTH 474 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 475 | "409": 476 | description: Conflict 477 | content: 478 | application/json: 479 | schema: 480 | $ref: '#/components/schemas/RestError' 481 | examples: 482 | DUPLICATE_UVCI: 483 | description: DUPLICATE_UVCI 484 | value: "{\"errorCode\": 480, \"errorMessage\": Duplicate UVCI.}" 485 | "400": 486 | description: Bad Request 487 | content: 488 | application/json: 489 | schema: 490 | $ref: '#/components/schemas/RestError' 491 | examples: 492 | INVALID_UVCI: 493 | description: INVALID_UVCI 494 | value: "{\"errorCode\": 470, \"errorMessage\": Invalid UVCI format.}" 495 | "201": 496 | description: CREATED 497 | /api/v1/covidcertificate/revoke/mass-revocation: 498 | post: 499 | tags: 500 | - covid-certificate-revocation-controller 501 | summary: Executes a mass-revocation of the given UVCIs. 502 | description: "Revokes all revokable UVCIs of list of UVCIs. Performs checks\ 503 | \ if the UVCI is well formatted, known and not yet revoked." 504 | operationId: certificateMassRevocationCheck 505 | parameters: 506 | - name: X-Signature 507 | in: header 508 | description: "Base64 encoded hash of the canonicalized body, generated with\ 509 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 510 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 511 | \ on Github." 512 | required: true 513 | schema: 514 | type: string 515 | format: Base64 516 | requestBody: 517 | content: 518 | application/json: 519 | schema: 520 | $ref: '#/components/schemas/RevocationListDto' 521 | required: true 522 | responses: 523 | "403": 524 | description: Forbidden 525 | content: 526 | application/json: 527 | schema: 528 | $ref: '#/components/schemas/RestError' 529 | examples: 530 | INVALID_BEARER: 531 | description: INVALID_BEARER 532 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 533 | MISSING_BEARER_JSON: 534 | description: MISSING_BEARER_JSON 535 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 536 | INVALID_SIGNATURE: 537 | description: INVALID_SIGNATURE 538 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 539 | \ the body hash does not match the hash in the header}" 540 | SIGNATURE_PARSE_ERROR: 541 | description: SIGNATURE_PARSE_ERROR 542 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 543 | \ be parsed}" 544 | INVALID_IDENTITY_USER: 545 | description: INVALID_IDENTITY_USER 546 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 547 | \ user}" 548 | INVALID_IDENTITY_USER_ROLE: 549 | description: INVALID_IDENTITY_USER_ROLE 550 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 551 | \ user role}" 552 | INVALID_OTP_LENGTH: 553 | description: INVALID_OTP_LENGTH 554 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 555 | "400": 556 | description: Bad Request 557 | content: 558 | application/json: 559 | schema: 560 | $ref: '#/components/schemas/RestError' 561 | examples: 562 | INVALID_SIZE_OF_UVCI_LIST: 563 | description: INVALID_SIZE_OF_UVCI_LIST 564 | value: "{\"errorCode\": 472, \"errorMessage\": Size of uvci list\ 565 | \ is not valid. Max 100 uvcis allowed.}" 566 | "200": 567 | description: OK 568 | content: 569 | application/json: 570 | schema: 571 | $ref: '#/components/schemas/RevocationListResponseDto' 572 | /api/v1/covidcertificate/recovery: 573 | post: 574 | tags: 575 | - covid-certificate-generation-controller 576 | summary: Creates a recovery certificate for the given data. 577 | description: Creates a recovery certificate as an QR-Code and PDF. Performs 578 | an integrity check for each request based on headers and body. 579 | operationId: createRecoveryCertificate 580 | parameters: 581 | - name: X-Signature 582 | in: header 583 | description: "Base64 encoded hash of the canonicalized body, generated with\ 584 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 585 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 586 | \ on Github." 587 | required: true 588 | schema: 589 | type: string 590 | format: Base64 591 | requestBody: 592 | content: 593 | application/json: 594 | schema: 595 | $ref: '#/components/schemas/RecoveryCertificateCreateDto' 596 | required: true 597 | responses: 598 | "400": 599 | description: Bad Request 600 | content: 601 | application/json: 602 | schema: 603 | $ref: '#/components/schemas/RestError' 604 | examples: 605 | NO_PERSON_DATA: 606 | description: NO_PERSON_DATA 607 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 608 | \ specified}" 609 | INVALID_DATE_OF_BIRTH: 610 | description: INVALID_DATE_OF_BIRTH 611 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 612 | \ Must be younger than 1900-01-01}" 613 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 614 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 615 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 616 | \ Date cannot be in the future}" 617 | INVALID_GIVEN_NAME: 618 | description: INVALID_GIVEN_NAME 619 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 620 | \ Must not exceed 80 chars}" 621 | INVALID_STANDARDISED_GIVEN_NAME: 622 | description: INVALID_STANDARDISED_GIVEN_NAME 623 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 624 | \ The standardised given name exceeds 80 chars}" 625 | INVALID_FAMILY_NAME: 626 | description: INVALID_FAMILY_NAME 627 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 628 | \ Must not exceed 80 chars}" 629 | INVALID_STANDARDISED_FAMILY_NAME: 630 | description: INVALID_STANDARDISED_FAMILY_NAME 631 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 632 | \ The standardised family name exceeds 80 chars}" 633 | INVALID_DATE_OF_FIRST_POSITIVE_TEST_RESULT: 634 | description: INVALID_DATE_OF_FIRST_POSITIVE_TEST_RESULT 635 | value: "{\"errorCode\": 466, \"errorMessage\": Invalid date of first\ 636 | \ positive test result}" 637 | INVALID_COUNTRY_OF_TEST: 638 | description: INVALID_COUNTRY_OF_TEST 639 | value: "{\"errorCode\": 467, \"errorMessage\": Invalid country of\ 640 | \ test}" 641 | INVALID_LANGUAGE: 642 | description: INVALID_LANGUAGE 643 | value: "{\"errorCode\": 469, \"errorMessage\": The given language\ 644 | \ does not match any of the supported languages: de, it, fr!}" 645 | INVALID_RECOVERY_INFO: 646 | description: INVALID_RECOVERY_INFO 647 | value: "{\"errorCode\": 465, \"errorMessage\": Invalid recovery\ 648 | \ info! Exactly one element is expected in the array.}" 649 | INVALID_ADDRESS: 650 | description: INVALID_ADDRESS 651 | value: "{\"errorCode\": 474, \"errorMessage\": Paper-based delivery\ 652 | \ requires a valid address.}" 653 | DUPLICATE_DELIVERY_METHOD: 654 | description: DUPLICATE_DELIVERY_METHOD 655 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 656 | \ either be InApp or Mail, but not both.}" 657 | INVALID_APP_CODE: 658 | description: INVALID_APP_CODE 659 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 660 | \ invalid format.}" 661 | "403": 662 | description: "All certificate creation endpoints can be toggled, when an\ 663 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 664 | content: 665 | application/json: 666 | schema: 667 | $ref: '#/components/schemas/RestError' 668 | examples: 669 | INVALID_BEARER: 670 | description: INVALID_BEARER 671 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 672 | MISSING_BEARER_JSON: 673 | description: MISSING_BEARER_JSON 674 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 675 | INVALID_SIGNATURE: 676 | description: INVALID_SIGNATURE 677 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 678 | \ the body hash does not match the hash in the header}" 679 | SIGNATURE_PARSE_ERROR: 680 | description: SIGNATURE_PARSE_ERROR 681 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 682 | \ be parsed}" 683 | INVALID_IDENTITY_USER: 684 | description: INVALID_IDENTITY_USER 685 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 686 | \ user}" 687 | INVALID_IDENTITY_USER_ROLE: 688 | description: INVALID_IDENTITY_USER_ROLE 689 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 690 | \ user role}" 691 | INVALID_OTP_LENGTH: 692 | description: INVALID_OTP_LENGTH 693 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 694 | "200": 695 | description: OK 696 | content: 697 | application/json: 698 | schema: 699 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 700 | /api/v1/covidcertificate/recovery-rat: 701 | post: 702 | tags: 703 | - covid-certificate-generation-controller 704 | summary: Creates a Rapid-Antigen-Test (RAT) based recovery certificate for the 705 | given data. 706 | description: Creates a Rapid-Antigen-Test (RAT) based recovery certificate for 707 | the given data in form of a Pdf document and a QR-Code image. 708 | operationId: createRecoveryRatCertificate 709 | parameters: 710 | - name: X-Signature 711 | in: header 712 | description: "Base64 encoded hash of the canonicalized body, generated with\ 713 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 714 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 715 | \ on Github." 716 | required: true 717 | schema: 718 | type: string 719 | format: Base64 720 | requestBody: 721 | content: 722 | application/json: 723 | schema: 724 | $ref: '#/components/schemas/RecoveryRatCertificateCreateDto' 725 | required: true 726 | responses: 727 | "403": 728 | description: "All certificate creation endpoints can be toggled, when an\ 729 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 730 | content: 731 | application/json: 732 | schema: 733 | $ref: '#/components/schemas/RestError' 734 | examples: 735 | INVALID_BEARER: 736 | description: INVALID_BEARER 737 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 738 | MISSING_BEARER_JSON: 739 | description: MISSING_BEARER_JSON 740 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 741 | INVALID_SIGNATURE: 742 | description: INVALID_SIGNATURE 743 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 744 | \ the body hash does not match the hash in the header}" 745 | SIGNATURE_PARSE_ERROR: 746 | description: SIGNATURE_PARSE_ERROR 747 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 748 | \ be parsed}" 749 | INVALID_IDENTITY_USER: 750 | description: INVALID_IDENTITY_USER 751 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 752 | \ user}" 753 | INVALID_IDENTITY_USER_ROLE: 754 | description: INVALID_IDENTITY_USER_ROLE 755 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 756 | \ user role}" 757 | INVALID_OTP_LENGTH: 758 | description: INVALID_OTP_LENGTH 759 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 760 | "400": 761 | description: Bad Request 762 | content: 763 | application/json: 764 | schema: 765 | $ref: '#/components/schemas/RestError' 766 | examples: 767 | NO_PERSON_DATA: 768 | description: NO_PERSON_DATA 769 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 770 | \ specified}" 771 | INVALID_DATE_OF_BIRTH: 772 | description: INVALID_DATE_OF_BIRTH 773 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 774 | \ Must be younger than 1900-01-01}" 775 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 776 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 777 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 778 | \ Date cannot be in the future}" 779 | INVALID_GIVEN_NAME: 780 | description: INVALID_GIVEN_NAME 781 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 782 | \ Must not exceed 80 chars}" 783 | INVALID_STANDARDISED_GIVEN_NAME: 784 | description: INVALID_STANDARDISED_GIVEN_NAME 785 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 786 | \ The standardised given name exceeds 80 chars}" 787 | INVALID_FAMILY_NAME: 788 | description: INVALID_FAMILY_NAME 789 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 790 | \ Must not exceed 80 chars}" 791 | INVALID_STANDARDISED_FAMILY_NAME: 792 | description: INVALID_STANDARDISED_FAMILY_NAME 793 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 794 | \ The standardised family name exceeds 80 chars}" 795 | INVALID_DATE_OF_FIRST_POSITIVE_TEST_RESULT: 796 | description: INVALID_DATE_OF_FIRST_POSITIVE_TEST_RESULT 797 | value: "{\"errorCode\": 466, \"errorMessage\": Invalid date of first\ 798 | \ positive test result}" 799 | INVALID_LANGUAGE: 800 | description: INVALID_LANGUAGE 801 | value: "{\"errorCode\": 469, \"errorMessage\": The given language\ 802 | \ does not match any of the supported languages: de, it, fr!}" 803 | MISSING_RECOVERY_RAT_INFO: 804 | description: MISSING_RECOVERY_RAT_INFO 805 | value: "{\"errorCode\": 432, \"errorMessage\": Property recoveryRatInfo\ 806 | \ is missing!}" 807 | INVALID_ADDRESS: 808 | description: INVALID_ADDRESS 809 | value: "{\"errorCode\": 474, \"errorMessage\": Paper-based delivery\ 810 | \ requires a valid address.}" 811 | DUPLICATE_DELIVERY_METHOD: 812 | description: DUPLICATE_DELIVERY_METHOD 813 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 814 | \ either be InApp or Mail, but not both.}" 815 | INVALID_APP_CODE: 816 | description: INVALID_APP_CODE 817 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 818 | \ invalid format.}" 819 | "200": 820 | description: OK 821 | content: 822 | application/json: 823 | schema: 824 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 825 | /api/v1/covidcertificate/antibody: 826 | post: 827 | tags: 828 | - covid-certificate-generation-controller 829 | summary: Creates an antibody certificate for the given data. 830 | description: Creates an antibody certificate as a QR-Code and PDF. Performs 831 | an integrity check for each request based on headers and body. 832 | operationId: createAntibodyCertificate 833 | parameters: 834 | - name: X-Signature 835 | in: header 836 | description: "Base64 encoded hash of the canonicalized body, generated with\ 837 | \ the `SHA256withRSA` algorithm signed with the private key of the certificate\ 838 | \ issued by \"SwissGov Regular CA 01\". See [documentation](https://github.com/admin-ch/CovidCertificate-Apidoc#content-signature)\ 839 | \ on Github." 840 | required: true 841 | schema: 842 | type: string 843 | format: Base64 844 | requestBody: 845 | content: 846 | application/json: 847 | schema: 848 | $ref: '#/components/schemas/AntibodyCertificateCreateDto' 849 | required: true 850 | responses: 851 | "400": 852 | description: Bad Request 853 | content: 854 | application/json: 855 | schema: 856 | $ref: '#/components/schemas/RestError' 857 | examples: 858 | NO_PERSON_DATA: 859 | description: NO_PERSON_DATA 860 | value: "{\"errorCode\": 452, \"errorMessage\": No person data was\ 861 | \ specified}" 862 | INVALID_DATE_OF_BIRTH: 863 | description: INVALID_DATE_OF_BIRTH 864 | value: "{\"errorCode\": 453, \"errorMessage\": Invalid dateOfBirth!\ 865 | \ Must be younger than 1900-01-01}" 866 | INVALID_DATE_OF_BIRTH_IN_FUTURE: 867 | description: INVALID_DATE_OF_BIRTH_IN_FUTURE 868 | value: "{\"errorCode\": 489, \"errorMessage\": Invalid dateOfBirth!\ 869 | \ Date cannot be in the future}" 870 | INVALID_GIVEN_NAME: 871 | description: INVALID_GIVEN_NAME 872 | value: "{\"errorCode\": 458, \"errorMessage\": Invalid given name!\ 873 | \ Must not exceed 80 chars}" 874 | INVALID_STANDARDISED_GIVEN_NAME: 875 | description: INVALID_STANDARDISED_GIVEN_NAME 876 | value: "{\"errorCode\": 477, \"errorMessage\": Invalid given name!\ 877 | \ The standardised given name exceeds 80 chars}" 878 | INVALID_FAMILY_NAME: 879 | description: INVALID_FAMILY_NAME 880 | value: "{\"errorCode\": 459, \"errorMessage\": Invalid family name!\ 881 | \ Must not exceed 80 chars}" 882 | INVALID_STANDARDISED_FAMILY_NAME: 883 | description: INVALID_STANDARDISED_FAMILY_NAME 884 | value: "{\"errorCode\": 478, \"errorMessage\": Invalid family name!\ 885 | \ The standardised family name exceeds 80 chars}" 886 | INVALID_SAMPLE_OR_RESULT_DATE_TIME: 887 | description: INVALID_SAMPLE_OR_RESULT_DATE_TIME 888 | value: "{\"errorCode\": 464, \"errorMessage\": Invalid sample or\ 889 | \ result date time! Sample date must be before current date and\ 890 | \ before result date}" 891 | INVALID_LANGUAGE: 892 | description: INVALID_LANGUAGE 893 | value: "{\"errorCode\": 469, \"errorMessage\": The given language\ 894 | \ does not match any of the supported languages: de, it, fr!}" 895 | INVALID_ANTIBODY_INFO: 896 | description: INVALID_ANTIBODY_INFO 897 | value: "{\"errorCode\": 497, \"errorMessage\": Invalid antibody\ 898 | \ info! Exactly one element is expected in the array.}" 899 | INVALID_ADDRESS: 900 | description: INVALID_ADDRESS 901 | value: "{\"errorCode\": 474, \"errorMessage\": Paper-based delivery\ 902 | \ requires a valid address.}" 903 | DUPLICATE_DELIVERY_METHOD: 904 | description: DUPLICATE_DELIVERY_METHOD 905 | value: "{\"errorCode\": 475, \"errorMessage\": Delivery method can\ 906 | \ either be InApp or Mail, but not both.}" 907 | INVALID_APP_CODE: 908 | description: INVALID_APP_CODE 909 | value: "{\"errorCode\": 479, \"errorMessage\": App code is in an\ 910 | \ invalid format.}" 911 | "403": 912 | description: "All certificate creation endpoints can be toggled, when an\ 913 | \ endpoint is disabled, the backend respond with a HTTP 403 Forbidden" 914 | content: 915 | application/json: 916 | schema: 917 | $ref: '#/components/schemas/RestError' 918 | examples: 919 | INVALID_BEARER: 920 | description: INVALID_BEARER 921 | value: "{\"errorCode\": 492, \"errorMessage\": Invalid OTP}" 922 | MISSING_BEARER_JSON: 923 | description: MISSING_BEARER_JSON 924 | value: "{\"errorCode\": 493, \"errorMessage\": Missing OTP}" 925 | INVALID_SIGNATURE: 926 | description: INVALID_SIGNATURE 927 | value: "{\"errorCode\": 490, \"errorMessage\": Integrity check failed,\ 928 | \ the body hash does not match the hash in the header}" 929 | SIGNATURE_PARSE_ERROR: 930 | description: SIGNATURE_PARSE_ERROR 931 | value: "{\"errorCode\": 491, \"errorMessage\": Signature could not\ 932 | \ be parsed}" 933 | INVALID_IDENTITY_USER: 934 | description: INVALID_IDENTITY_USER 935 | value: "{\"errorCode\": 494, \"errorMessage\": Invalid identity\ 936 | \ user}" 937 | INVALID_IDENTITY_USER_ROLE: 938 | description: INVALID_IDENTITY_USER_ROLE 939 | value: "{\"errorCode\": 495, \"errorMessage\": Invalid identity\ 940 | \ user role}" 941 | INVALID_OTP_LENGTH: 942 | description: INVALID_OTP_LENGTH 943 | value: "{\"errorCode\": 496, \"errorMessage\": Invalid OTP length}" 944 | "200": 945 | description: OK 946 | content: 947 | application/json: 948 | schema: 949 | $ref: '#/components/schemas/CovidCertificateCreateResponseDto' 950 | /api/v1/valuesets/vaccines: 951 | get: 952 | tags: 953 | - value-sets-controller 954 | summary: Gets a list of all vaccines. 955 | description: Gets a list of all vaccines based on the official list of the EU. 956 | Performs an integrity check for each request based on headers and body. 957 | operationId: vaccines 958 | responses: 959 | "200": 960 | description: OK 961 | content: 962 | application/json: 963 | schema: 964 | type: array 965 | items: 966 | $ref: '#/components/schemas/VaccineDto' 967 | /api/v1/valuesets/rapid-tests: 968 | get: 969 | tags: 970 | - value-sets-controller 971 | summary: Gets a list of all rapid tests. 972 | description: Gets a list of all rapid tests based on the official list of the 973 | EU. Performs an integrity check for each request based on headers and body. 974 | operationId: rapidTests 975 | responses: 976 | "200": 977 | description: OK 978 | content: 979 | application/json: 980 | schema: 981 | type: array 982 | items: 983 | $ref: '#/components/schemas/RapidTestDto' 984 | /api/v1/valuesets/issuable-vaccines: 985 | get: 986 | tags: 987 | - value-sets-controller 988 | summary: Gets a list of all issuable vaccines. 989 | description: Gets a list of all issuable vaccines accepted by the BAG based 990 | on the official list of the EU. Performs an integrity check for each request 991 | based on headers and body. 992 | operationId: issuableVaccines 993 | responses: 994 | "200": 995 | description: OK 996 | content: 997 | application/json: 998 | schema: 999 | type: array 1000 | items: 1001 | $ref: '#/components/schemas/IssuableVaccineDto' 1002 | /api/v1/valuesets/issuable-vaccines/{systemSource}: 1003 | get: 1004 | tags: 1005 | - value-sets-controller 1006 | summary: Gets a list of all issuable vaccines. 1007 | description: Gets a list of all issuable vaccines accepted by the BAG based 1008 | on the official list of the EU. Performs an integrity check for each request 1009 | based on headers and body. 1010 | operationId: issuableVaccines_1 1011 | parameters: 1012 | - name: systemSource 1013 | in: path 1014 | required: true 1015 | schema: 1016 | type: string 1017 | responses: 1018 | "200": 1019 | description: OK 1020 | content: 1021 | application/json: 1022 | schema: 1023 | type: array 1024 | items: 1025 | $ref: '#/components/schemas/IssuableVaccineDto' 1026 | /api/v1/valuesets/issuable-rapid-tests: 1027 | get: 1028 | tags: 1029 | - value-sets-controller 1030 | summary: Gets a list of all issuable rapid tests. 1031 | description: Gets a list of all issuable rapid tests accepted by the BAG based 1032 | on the official list of the EU. Performs an integrity check for each request 1033 | based on headers and body. 1034 | operationId: issuableRapidTests 1035 | responses: 1036 | "200": 1037 | description: OK 1038 | content: 1039 | application/json: 1040 | schema: 1041 | type: array 1042 | items: 1043 | $ref: '#/components/schemas/IssuableRapidTestDto' 1044 | /api/v1/valuesets/countries: 1045 | get: 1046 | tags: 1047 | - value-sets-controller 1048 | summary: Gets a list of all countryCodes for every language. 1049 | description: Gets a list of all countryCodes for every supported language. Performs 1050 | an integrity check for each request based on headers and body. 1051 | operationId: countryCodes 1052 | responses: 1053 | "200": 1054 | description: OK 1055 | content: 1056 | application/json: 1057 | schema: 1058 | type: array 1059 | items: 1060 | $ref: '#/components/schemas/CountryCodesDto' 1061 | /api/v1/valuesets/countries/{language}: 1062 | get: 1063 | tags: 1064 | - value-sets-controller 1065 | summary: Gets a list of all countryCodes for a specific language. 1066 | description: Gets a list of all countryCodes for a specific supported language. 1067 | Performs an integrity check for each request based on headers and body. 1068 | operationId: countryCodesByLanguage 1069 | parameters: 1070 | - name: language 1071 | in: path 1072 | required: true 1073 | schema: 1074 | type: string 1075 | responses: 1076 | "200": 1077 | description: OK 1078 | content: 1079 | application/json: 1080 | schema: 1081 | type: array 1082 | items: 1083 | $ref: '#/components/schemas/CountryCodeDto' 1084 | /api/v1/ping: 1085 | get: 1086 | tags: 1087 | - app-controller 1088 | operationId: hello 1089 | responses: 1090 | "200": 1091 | description: OK 1092 | content: 1093 | '*/*': 1094 | schema: 1095 | type: string 1096 | components: 1097 | schemas: 1098 | CovidCertificateAddressDto: 1099 | required: 1100 | - cantonCodeSender 1101 | - city 1102 | - streetAndNr 1103 | - zipCode 1104 | type: object 1105 | properties: 1106 | streetAndNr: 1107 | maxLength: 128 1108 | minLength: 1 1109 | type: string 1110 | description: Street and number of the certificate holder. 1111 | example: Musterweg 4b 1112 | zipCode: 1113 | maxLength: 4 1114 | minLength: 4 1115 | type: integer 1116 | format: int32 1117 | example: 3000 1118 | city: 1119 | maxLength: 128 1120 | minLength: 1 1121 | type: string 1122 | example: Bern 1123 | cantonCodeSender: 1124 | type: string 1125 | description: Abbreviation of the canton issuing the certificate. This will 1126 | be used as the sender of the paper based delivery. 1127 | example: BE 1128 | description: Address of the recipient. A printout of the certificate will be 1129 | sent to the certificate holder if this parameter is passed. The first line 1130 | of the address is automatically filled with the givenName and familyName from 1131 | the name attribute. Can not be combined with inAppDeliveryCode. 1132 | CovidCertificatePersonNameDto: 1133 | type: object 1134 | properties: 1135 | familyName: 1136 | type: string 1137 | description: "family name of the covid certificate owner. Format: maxLength:\ 1138 | \ 80 CHAR" 1139 | example: Rochat 1140 | givenName: 1141 | type: string 1142 | description: "first name of the covid certificate owner. Format: maxLength:\ 1143 | \ 80 CHAR" 1144 | example: Céline 1145 | VaccinationCertificateCreateDto: 1146 | type: object 1147 | properties: 1148 | name: 1149 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1150 | dateOfBirth: 1151 | type: string 1152 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1153 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1154 | \ (e.g. 1985)." 1155 | example: 1985-09-20 1156 | language: 1157 | type: string 1158 | description: "language for the PDF (together with english). Accepted languages\ 1159 | \ are: de, it, fr, rm" 1160 | example: de 1161 | otp: 1162 | type: string 1163 | address: 1164 | $ref: '#/components/schemas/CovidCertificateAddressDto' 1165 | appCode: 1166 | maxLength: 9 1167 | minLength: 9 1168 | type: string 1169 | description: Code to deliver the certificate directly to the app. Can not 1170 | be combined with address. 1171 | vaccinationInfo: 1172 | type: array 1173 | items: 1174 | $ref: '#/components/schemas/VaccinationCertificateDataDto' 1175 | VaccinationCertificateDataDto: 1176 | type: object 1177 | properties: 1178 | medicinalProductCode: 1179 | type: string 1180 | description: name of the medicinal product as registered in the country. 1181 | example: EU/1/20/1507 1182 | numberOfDoses: 1183 | type: integer 1184 | description: number in a series of doses. 1185 | format: int32 1186 | example: 2 1187 | totalNumberOfDoses: 1188 | type: integer 1189 | description: total series of doses. 1190 | format: int32 1191 | example: 2 1192 | vaccinationDate: 1193 | type: string 1194 | description: "date of vaccination. Format: ISO 8601 date without time." 1195 | format: date 1196 | example: 2021-05-14 1197 | countryOfVaccination: 1198 | type: string 1199 | description: "the country in which the covid certificate owner has been\ 1200 | \ vaccinated. Format: string (2 chars according to ISO 3166 Country Codes)." 1201 | example: CH 1202 | RestError: 1203 | type: object 1204 | properties: 1205 | errorCode: 1206 | type: integer 1207 | format: int32 1208 | errorMessage: 1209 | type: string 1210 | CovidCertificateCreateResponseDto: 1211 | type: object 1212 | properties: 1213 | pdf: 1214 | type: string 1215 | format: byte 1216 | qrCode: 1217 | type: string 1218 | format: byte 1219 | uvci: 1220 | type: string 1221 | appDeliveryError: 1222 | $ref: '#/components/schemas/RestError' 1223 | VaccinationTouristCertificateCreateDto: 1224 | type: object 1225 | properties: 1226 | name: 1227 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1228 | dateOfBirth: 1229 | type: string 1230 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1231 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1232 | \ (e.g. 1985)." 1233 | example: 1985-09-20 1234 | language: 1235 | type: string 1236 | description: "language for the PDF (together with english). Accepted languages\ 1237 | \ are: de, it, fr, rm" 1238 | example: de 1239 | otp: 1240 | type: string 1241 | address: 1242 | $ref: '#/components/schemas/CovidCertificateAddressDto' 1243 | appCode: 1244 | maxLength: 9 1245 | minLength: 9 1246 | type: string 1247 | description: Code to deliver the certificate directly to the app. Can not 1248 | be combined with address. 1249 | vaccinationTouristInfo: 1250 | type: array 1251 | items: 1252 | $ref: '#/components/schemas/VaccinationTouristCertificateDataDto' 1253 | VaccinationTouristCertificateDataDto: 1254 | type: object 1255 | properties: 1256 | medicinalProductCode: 1257 | type: string 1258 | description: name of the medicinal product as registered in the country. 1259 | example: EU/1/20/1507 1260 | numberOfDoses: 1261 | type: integer 1262 | description: number in a series of doses. 1263 | format: int32 1264 | example: 2 1265 | totalNumberOfDoses: 1266 | type: integer 1267 | description: total series of doses. 1268 | format: int32 1269 | example: 2 1270 | vaccinationDate: 1271 | type: string 1272 | description: "date of vaccination. Format: ISO 8601 date without time." 1273 | format: date 1274 | example: 2021-05-14 1275 | countryOfVaccination: 1276 | type: string 1277 | description: "the country in which the covid certificate owner has been\ 1278 | \ vaccinated. Format: string (2 chars according to ISO 3166 Country Codes)." 1279 | example: CH 1280 | TestCertificateCreateDto: 1281 | type: object 1282 | properties: 1283 | name: 1284 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1285 | dateOfBirth: 1286 | type: string 1287 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1288 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1289 | \ (e.g. 1985)." 1290 | example: 1985-09-20 1291 | language: 1292 | type: string 1293 | description: "language for the PDF (together with english). Accepted languages\ 1294 | \ are: de, it, fr, rm" 1295 | example: de 1296 | otp: 1297 | type: string 1298 | appCode: 1299 | maxLength: 9 1300 | minLength: 9 1301 | type: string 1302 | description: Code to deliver the certificate directly to the app. Can not 1303 | be combined with address. 1304 | testInfo: 1305 | type: array 1306 | items: 1307 | $ref: '#/components/schemas/TestCertificateDataDto' 1308 | TestCertificateDataDto: 1309 | type: object 1310 | properties: 1311 | typeCode: 1312 | type: string 1313 | description: "type of test. This field is only mandatory when it is a PCR\ 1314 | \ test. If given with manufacturerCode as well, they must match otherwise\ 1315 | \ there will be a 400 BAD REQUEST." 1316 | example: LP217198-3 1317 | manufacturerCode: 1318 | type: string 1319 | description: "test manufacturer code. This should only be sent when it is\ 1320 | \ not a PCR test, otherwise there will be a 400 BAD REQUEST." 1321 | example: "1232" 1322 | sampleDateTime: 1323 | type: string 1324 | description: "date and time of the test sample collection. Format: ISO 8601\ 1325 | \ date incl. time." 1326 | format: date-time 1327 | example: 2020-09-24T17:29:41Z 1328 | testingCentreOrFacility: 1329 | type: string 1330 | description: "name of centre or facility. Format: string, maxLength: 80\ 1331 | \ CHAR." 1332 | example: Walk-in-Lyss AG 1333 | memberStateOfTest: 1334 | type: string 1335 | description: "the country in which the covid certificate owner has been\ 1336 | \ tested. Format: string (2 chars according to ISO 3166 Country Codes)." 1337 | example: CH 1338 | RevocationDto: 1339 | type: object 1340 | properties: 1341 | uvci: 1342 | type: string 1343 | description: UVCI of certificate to be revoked. 1344 | example: urn:uvci:01:CH:97DAB5E31B589AF3CAE2F53F 1345 | fraud: 1346 | type: boolean 1347 | otp: 1348 | type: string 1349 | RevocationListDto: 1350 | type: object 1351 | properties: 1352 | uvcis: 1353 | type: array 1354 | description: Multiple UVCI with fraud flag of certificate to be revoked. 1355 | items: 1356 | $ref: '#/components/schemas/UvciForRevocationDto' 1357 | otp: 1358 | type: string 1359 | UvciForRevocationDto: 1360 | type: object 1361 | properties: 1362 | uvci: 1363 | type: string 1364 | description: UVCI of certificate to be revoked. 1365 | fraud: 1366 | type: boolean 1367 | description: Flag to indicate if certificate is revoked due to fraud reasons. 1368 | description: Multiple UVCI with fraud flag of certificate to be revoked. 1369 | RevocationListResponseDto: 1370 | type: object 1371 | properties: 1372 | uvcisToErrorMessage: 1373 | type: object 1374 | additionalProperties: 1375 | type: string 1376 | revokedUvcis: 1377 | type: array 1378 | items: 1379 | type: string 1380 | RecoveryCertificateCreateDto: 1381 | type: object 1382 | properties: 1383 | name: 1384 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1385 | dateOfBirth: 1386 | type: string 1387 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1388 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1389 | \ (e.g. 1985)." 1390 | example: 1985-09-20 1391 | language: 1392 | type: string 1393 | description: "language for the PDF (together with english). Accepted languages\ 1394 | \ are: de, it, fr, rm" 1395 | example: de 1396 | otp: 1397 | type: string 1398 | address: 1399 | $ref: '#/components/schemas/CovidCertificateAddressDto' 1400 | appCode: 1401 | maxLength: 9 1402 | minLength: 9 1403 | type: string 1404 | description: Code to deliver the certificate directly to the app. Can not 1405 | be combined with address. 1406 | recoveryInfo: 1407 | type: array 1408 | items: 1409 | $ref: '#/components/schemas/RecoveryCertificateDataDto' 1410 | RecoveryCertificateDataDto: 1411 | type: object 1412 | properties: 1413 | dateOfFirstPositiveTestResult: 1414 | type: string 1415 | description: "date when the sample for the test was collected that led to\ 1416 | \ positive test obtained through a procedure established by a public health\ 1417 | \ authority. Format: ISO 8601 date without time." 1418 | format: date 1419 | example: 2021-10-03 1420 | countryOfTest: 1421 | type: string 1422 | description: "the country in which the covid certificate owner has been\ 1423 | \ tested. Format: string (2 chars according to ISO 3166 Country Codes)." 1424 | example: CH 1425 | RecoveryRatCertificateCreateDto: 1426 | type: object 1427 | properties: 1428 | name: 1429 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1430 | dateOfBirth: 1431 | type: string 1432 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1433 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1434 | \ (e.g. 1985)." 1435 | example: 1985-09-20 1436 | language: 1437 | type: string 1438 | description: "language for the PDF (together with english). Accepted languages\ 1439 | \ are: de, it, fr, rm" 1440 | example: de 1441 | otp: 1442 | type: string 1443 | appCode: 1444 | maxLength: 9 1445 | minLength: 9 1446 | type: string 1447 | description: Code to deliver the certificate directly to the app. Can not 1448 | be combined with address. 1449 | testInfo: 1450 | type: array 1451 | items: 1452 | $ref: '#/components/schemas/RecoveryRatCertificateDataDto' 1453 | RecoveryRatCertificateDataDto: 1454 | type: object 1455 | properties: 1456 | typeCode: 1457 | type: string 1458 | description: type of test. This field is optional if manufacturer code is 1459 | present otherwise it must be LP217198-3 (RAPID-ANTIGEN-TEST). 1460 | example: LP217198-3 1461 | manufacturerCode: 1462 | type: string 1463 | description: "test manufacturer code. This should only be sent when it is\ 1464 | \ not a PCR test, otherwise there will be a 400 BAD REQUEST." 1465 | example: "1232" 1466 | sampleDateTime: 1467 | type: string 1468 | description: "date and time of the test sample collection, can't be before\ 1469 | \ 2022-01-24. Format: ISO 8601 date incl. time." 1470 | format: date-time 1471 | example: 2022-01-24T17:29:41Z 1472 | testingCentreOrFacility: 1473 | type: string 1474 | description: "name of centre or facility. Format: string, maxLength: 80\ 1475 | \ CHAR." 1476 | example: Walk-in-Lyss AG 1477 | memberStateOfTest: 1478 | type: string 1479 | description: "the country in which the covid certificate owner has been\ 1480 | \ tested. Format: string (2 chars according to ISO 3166 Country Codes)." 1481 | example: CH 1482 | AntibodyCertificateCreateDto: 1483 | type: object 1484 | properties: 1485 | name: 1486 | $ref: '#/components/schemas/CovidCertificatePersonNameDto' 1487 | dateOfBirth: 1488 | type: string 1489 | description: "birthdate of the covid certificate owner. Format: ISO 8601\ 1490 | \ date without time (e.g. 1985-09-20) OR YYYY-MM (e.g. 1985-09) OR YYYY\ 1491 | \ (e.g. 1985)." 1492 | example: 1985-09-20 1493 | language: 1494 | type: string 1495 | description: "language for the PDF (together with english). Accepted languages\ 1496 | \ are: de, it, fr, rm" 1497 | example: de 1498 | otp: 1499 | type: string 1500 | address: 1501 | $ref: '#/components/schemas/CovidCertificateAddressDto' 1502 | appCode: 1503 | maxLength: 9 1504 | minLength: 9 1505 | type: string 1506 | description: Code to deliver the certificate directly to the app. Can not 1507 | be combined with address. 1508 | antibodyInfo: 1509 | type: array 1510 | items: 1511 | $ref: '#/components/schemas/AntibodyCertificateDataDto' 1512 | AntibodyCertificateDataDto: 1513 | type: object 1514 | properties: 1515 | sampleDate: 1516 | type: string 1517 | description: "date when the sample for the test was collected that led to\ 1518 | \ serology positive test obtained through a procedure established by a\ 1519 | \ public health authority. Format: ISO 8601 date without time." 1520 | format: date 1521 | example: 2021-10-03 1522 | testingCenterOrFacility: 1523 | maxLength: 80 1524 | type: string 1525 | description: ' the Swissmedic authorization number (mandatory) of the laboratory 1526 | + name of the laboratory (optional).' 1527 | example: "512345-123456789, SwissLabTest Center Zürich" 1528 | VaccineDto: 1529 | type: object 1530 | properties: 1531 | productCode: 1532 | type: string 1533 | description: Code of vaccination as string. 1534 | example: EU/1/20/1507 1535 | productDisplay: 1536 | type: string 1537 | description: Display name of vaccination as string. 1538 | example: Spikevax (previously COVID-19 Vaccine Moderna) 1539 | prophylaxisCode: 1540 | type: string 1541 | description: Code of prophylaxis type as string. 1542 | example: "1119349007" 1543 | prophylaxisDisplay: 1544 | type: string 1545 | description: Display name of prophylaxis type as string. 1546 | example: SARS-CoV-2 mRNA vaccine 1547 | authHolderCode: 1548 | type: string 1549 | description: Code of authorization holder as string. 1550 | example: ORG-100031184 1551 | authHolderDisplay: 1552 | type: string 1553 | description: Display name of authorization holder as string. 1554 | example: Moderna Biotech Spain S.L. 1555 | issuable: 1556 | type: string 1557 | description: "This attribute tells us if a vaccine is issuable in CH_ONLY,\ 1558 | \ CH_AND_ABROAD or ABROAD_ONLY." 1559 | example: CH_AND_ABROAD 1560 | active: 1561 | type: boolean 1562 | description: If vaccination is accepted by the BAG and the EU. 1563 | example: true 1564 | RapidTestDto: 1565 | type: object 1566 | properties: 1567 | code: 1568 | type: string 1569 | description: Code of rapid test as string. 1570 | example: "1232" 1571 | display: 1572 | type: string 1573 | description: Manufacturer and display name of rapid test as string. 1574 | example: "Abbott Rapid Diagnostics, Panbio Covid-19 Ag Rapid Test" 1575 | validUntil: 1576 | type: string 1577 | description: Deadline after which the rapid-test can no longer be used to 1578 | establish a certificate. 1579 | format: date-time 1580 | example: 2022-01-06T00:00:00+01:00 1581 | active: 1582 | type: boolean 1583 | description: If rapid test is accepted by the BAG and the EU. 1584 | example: true 1585 | IssuableVaccineDto: 1586 | type: object 1587 | properties: 1588 | productCode: 1589 | type: string 1590 | description: Code of vaccination as string. 1591 | example: EU/1/20/1507 1592 | productDisplay: 1593 | type: string 1594 | description: Display name of vaccination as string. 1595 | example: Spikevax (previously COVID-19 Vaccine Moderna) 1596 | prophylaxisCode: 1597 | type: string 1598 | description: Code of prophylaxis type as string. 1599 | example: "1119349007" 1600 | prophylaxisDisplay: 1601 | type: string 1602 | description: Display name of prophylaxis type as string. 1603 | example: SARS-CoV-2 mRNA vaccine 1604 | authHolderCode: 1605 | type: string 1606 | description: Code of authorization holder as string. 1607 | example: ORG-100031184 1608 | authHolderDisplay: 1609 | type: string 1610 | description: Display name of authorization holder as string. 1611 | example: Moderna Biotech Spain S.L. 1612 | issuable: 1613 | type: string 1614 | description: "This attribute tells us if a vaccine is issuable in CH_ONLY,\ 1615 | \ CH_AND_ABROAD or ABROAD_ONLY." 1616 | example: CH_AND_ABROAD 1617 | IssuableRapidTestDto: 1618 | type: object 1619 | properties: 1620 | code: 1621 | type: string 1622 | description: Code of rapid test as string. 1623 | example: "1232" 1624 | display: 1625 | type: string 1626 | description: Manufacturer and display name of rapid test as string. 1627 | example: "Abbott Rapid Diagnostics, Panbio Covid-19 Ag Rapid Test" 1628 | validUntil: 1629 | type: string 1630 | description: Deadline after which the rapid-test can no longer be used to 1631 | establish a certificate. 1632 | format: date-time 1633 | example: 2022-01-06T00:00:00+01:00 1634 | CountryCodeDto: 1635 | type: object 1636 | properties: 1637 | display: 1638 | type: string 1639 | lang: 1640 | type: string 1641 | active: 1642 | type: boolean 1643 | version: 1644 | type: string 1645 | system: 1646 | type: string 1647 | short: 1648 | type: string 1649 | CountryCodesDto: 1650 | type: object 1651 | properties: 1652 | de: 1653 | type: array 1654 | items: 1655 | $ref: '#/components/schemas/CountryCodeDto' 1656 | en: 1657 | type: array 1658 | items: 1659 | $ref: '#/components/schemas/CountryCodeDto' 1660 | fr: 1661 | type: array 1662 | items: 1663 | $ref: '#/components/schemas/CountryCodeDto' 1664 | it: 1665 | type: array 1666 | items: 1667 | $ref: '#/components/schemas/CountryCodeDto' 1668 | rm: 1669 | type: array 1670 | items: 1671 | $ref: '#/components/schemas/CountryCodeDto' 1672 | -------------------------------------------------------------------------------- /presentations/20210520_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210520_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210527_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210527_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210603 - Presentation technology and integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210603 - Presentation technology and integration.pdf -------------------------------------------------------------------------------- /presentations/20210610_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210610_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210617_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210617_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210624_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210624_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210701_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210701_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/20210826_CovidZertifikat_Presentation_System_Integration.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/presentations/20210826_CovidZertifikat_Presentation_System_Integration.pdf -------------------------------------------------------------------------------- /presentations/README.md: -------------------------------------------------------------------------------- 1 | ## Meeting documents 2 | 3 | [2021-05-20 - Presentation technology and integration](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210520_CovidZertifikat_Presentation_System_Integration.pdf) 4 | 5 | [2021-05-27 - Presentation technology and integration - update 1](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210527_CovidZertifikat_Presentation_System_Integration.pdf) 6 | 7 | [2021-06-03 - Presentation technology and integration - update 2](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210603%20-%20Presentation%20technology%20and%20integration.pdf) 8 | 9 | [2021-06-10 - Presentation technology and integration - update 3](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210610_CovidZertifikat_Presentation_System_Integration.pdf) 10 | 11 | [2021-06-17 - Presentation technology and integration - update 4](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210617_CovidZertifikat_Presentation_System_Integration.pdf) 12 | 13 | [2021-06-24 - Presentation technology and integration - update 5](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210624_CovidZertifikat_Presentation_System_Integration.pdf) 14 | 15 | [2021-07-01 - Presentation technology and integration - update 6](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210701_CovidZertifikat_Presentation_System_Integration.pdf) 16 | 17 | [2021-08-26 - Presentation technology and integration - update 7](https://github.com/admin-ch/CovidCertificate-Documents/blob/main/20210826_CovidZertifikat_Presentation_System_Integration.pdf) 18 | -------------------------------------------------------------------------------- /release-notes/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Release overview 3 | ## History 4 | |release|environment|date|note| 5 | |----|----|----|----| 6 | |[4.12](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#412x)|prod|27.03.2023@07:30|:rocket:| 7 | |[4.12](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#412x)|test|13.03.2023@12:00|:rocket:| 8 | |[4.11](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#411x)|prod|27.02.2023@08:30|| 9 | |[4.11](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#411x)|test|09.01.2023@14:00|| 10 | |[4.10](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#410x)|prod|30.01.2023@08:00|| 11 | |[4.10](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#410x)|test|09.01.2023@14:00|| 12 | |[4.9](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#49x)|prod|19.12.2022@08:00|| 13 | |[4.9](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#49x)|test|30.11.2022@12:00|| 14 | |[4.8](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#48x)|prod|14.11.2022@06:00|| 15 | |[4.8](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#48x)|test|09.11.2022@09:00|| 16 | |[4.7](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#47x)|prod|17.10.2022@07:00|| 17 | |[4.7](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#47x)|test|12.10.2022@20:00|| 18 | |[4.6](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#46x)|prod|19.09.2022@07:30|| 19 | |[4.6](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#46x)|test|15.09.2022@13:30|| 20 | |[4.5](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#45x)|prod|22.08.2022@07:00|| 21 | |[4.5](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#45x)|test|19.08.2022@16:00|| 22 | |[4.4](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#44x)|prod|25.07.2022@07:00|| 23 | |[4.4](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#44x)|test|04.07.2022@14:30|| 24 | |[4.3](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#43x)|prod|27.06.2022@07:00|| 25 | |[4.3](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#43x)|test|23.06.2022@14:00|| 26 | |[4.2](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#42x)|prod|13.06.2022@07:00|| 27 | |[4.2](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#42x)|test|08.06.2022@07:00|| 28 | |[4.1](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#41x)|prod|30.05.2022@07:00|| 29 | |[4.1](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#41x)|test|23.05.2022@09:00|| 30 | |[4.0](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#40x)|prod|02.05.2022@07:00|| 31 | |[4.0](https://github.com/admin-ch/CovidCertificate-Documents/tree/main/release-notes#40x)|test|11.05.2022@09:00|| 32 | 33 | :rocket: : currently deployed 34 | ## Planned 35 | |environment|release|date| 36 | |----|----|----| 37 | |test|4.12|13.03.2023@12:00| 38 | |prod|4.12|27.03.2023@07:30| 39 | 40 | # 4.12.x 41 | * Implementation of the removal of KPI data after two years of storage 42 | * Adjustment of reporting to data storage 43 | 44 | #### Services release details 45 | |service|release|last modified| 46 | |----|----|----| 47 | |cc-management-service|[4.12.2](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.12.2)|23.03.2023@13:00| 48 | |cc-management-ui|[4.12.0](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.12.0)|20.03.2023@14:00| 49 | |cc-printing-service|[4.12.0](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/4.12.0)|07.03.2023@11:00| 50 | |cc-report-service|4.12.3|29.03.2023@18:15| 51 | 52 | # 4.11.x 53 | * New Report A13 to check printing KPI 54 | * Removal of legacy roles 55 | * Leveraging role mapping to cc-backend-authorization library 56 | 57 | #### Services release details 58 | |service|release|last modified| 59 | |----|----|----| 60 | |cc-api-gateway-service|[4.11.2](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.11.2)|16.02.2023@09:00| 61 | |cc-light-generation-service|[4.11.0](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/4.11.0)|10.02.2023@10:30| 62 | |cc-management-service|[4.11.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.11.4)|22.02.2023@15:00| 63 | |cc-management-ui|[4.11.4](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.11.4)|22.02.2023@16:00| 64 | |cc-notification-service|[4.11.1](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.11.1)|16.02.2023@09:00| 65 | |cc-printing-service|[4.11.1](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/4.11.1)|08.02.2023@16:00| 66 | |cc-report-service|4.11.4|23.02.2023@12:00| 67 | 68 | # 4.10.x 69 | * New Vaccine VidPrevtyn Beta 70 | * Administrative functionality 71 | * Code quality according sonar 72 | 73 | 74 | #### Services release details 75 | |service|release|last modified| 76 | |----|----|----| 77 | |cc-api-gateway-service|[4.10.2](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.10.2)|23.01.2023@09:45| 78 | |cc-light-generation-service|[4.10.0](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/4.10.0)|04.01.2023@14:00| 79 | |cc-management-service|[4.10.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.10.4)|20.01.2023@10:00| 80 | |cc-management-ui|[4.10.2](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.10.2)|26.01.2023@12:00| 81 | |cc-notification-service|[4.10.2](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.10.2)|17.01.2023@09:00| 82 | |cc-printing-service|[4.10.2](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/4.10.1)|20.01.2023@10:00| 83 | |cc-report-service|4.10.6|27.01.2023@12:00| 84 | 85 | # 4.9.x 86 | * Java 17 und Spring Update 2.7.5 87 | * Oblique 9 Update and Angular 14 Update 88 | * Report Anpassungen A3 / A5, Ergänzung Details zu Testprodukt 89 | * Report Anpassungen A4 / A6, Ergänzung Details zu Testprodukt 90 | * Report Anpassungen A7 / A10, Ergänzung Details zu Testprodukt 91 | * Report Bugfix A12, Suche von Trace IDs 92 | 93 | 94 | #### Services release details 95 | |service|release|last modified| 96 | |----|----|----| 97 | |cc-api-gateway-service|[4.9.2](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.9.2)|15.12.2022@16:30| 98 | |cc-light-generation-service|[4.9.3](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/4.9.3)|15.12.2022@16:30| 99 | |cc-management-service|[4.9.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.9.4)|15.12.2022@16:30| 100 | |cc-management-ui|[4.9.1](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.9.1)|08.12.2022@14:30| 101 | |cc-signing-service|[4.9.2](https://github.com/admin-ch/CovidCertificate-Signing-Service/releases/tag/4.9.1)|15.12.2022@16:30| 102 | |cc-notification-service|[4.9.2](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.9.2)|15.12.2022@16:30| 103 | |cc-printing-service|[4.9.3](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/4.9.3)|15.12.2022@16:30| 104 | |cc-report-service|4.9.12|16.12.2022@12:00| 105 | 106 | # 4.8.x 107 | * DB migration to new instances 108 | * Maintenance notifications editable in UI 109 | * Text improvements for french 110 | 111 | 112 | #### Services release details 113 | |service|release|last modified| 114 | |----|----|----| 115 | |cc-management-service|[4.8.3](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.8.3)|09.11.2022@10:00| 116 | |cc-management-ui|[4.8.3](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.8.3)|10.11.2022@13:00| 117 | |cc-notification-service|[4.8.2](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.8.2)|10.11.2022@10:40| 118 | 119 | # 4.7.x 120 | * Improvements A12 report 121 | * Bug birth date validation solved 122 | * Correction of valneva vaccine to EU standard 2.9.0 123 | * Third party library update and spring version 2.6.10 124 | * Reduction of revocation list 125 | 126 | #### Services release details 127 | |service|release|last modified| 128 | |----|----|----| 129 | |cc-api-gateway-service|[4.7.2](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.7.2)|03.10.2022@16:45| 130 | |cc-light-generation-service|[2.16.0](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/2.16.0)|07.10.2022@13:30| 131 | |cc-management-service|[4.7.8](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.7.8)|12.10.2022@18:00| 132 | |cc-management-ui|[4.7.2](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.7.2)|14.10.2022@10:30| 133 | |cc-signing-service|[4.7.3](https://github.com/admin-ch/CovidCertificate-Signing-Service/releases/tag/4.7.2)|07.10.2022@13:30| 134 | |cc-notification-service|[4.7.1](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.7.0)|07.10.2022@13:30| 135 | |cc-printing-service|[4.7.1](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/4.7.1)|07.10.2022@13:30| 136 | |cc-report-service|4.7.5|07.10.2022@13:30| 137 | 138 | # 4.6.x 139 | * Reporting im Self Service 140 | 141 | #### Services release details 142 | |service|release|last modified| 143 | |----|----|----| 144 | |cc-management-service|[4.6.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.6.4)|09.09.2022@15:15| 145 | |cc-management-ui|[4.6.6](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.6.6)|09.09.2022@14:15| 146 | |cc-report-service|4.6.8|15.09.2022@13:30| 147 | 148 | # 4.5.x 149 | * Reporting im Self Service 150 | * New vaccines VLA2001 and Convidecia 151 | 152 | #### Services release details 153 | |service|release|last modified| 154 | |----|----|----| 155 | |cc-management-service|[4.5.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.5.4)|19.08.2022@16:00| 156 | |cc-management-ui|[4.5.6](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.5.6)|16.08.2022@20:45| 157 | |cc-report-service|4.5.7|18.08.2022@14:15| 158 | 159 | # 4.4.x 160 | * Reporting im Self Service 161 | * Korrektur CSV Upload bzgl. Sample Date 162 | * Überarbeitung signing-service 163 | 164 | #### Services release details 165 | |service|release|last modified| 166 | |----|----|----| 167 | |cc-api-gateway-service|[4.4.1](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.4.1)|19.07.2022@15:00| 168 | |cc-management-service|[4.4.6](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.4.6)|19.07.2022@11:00| 169 | |cc-management-ui|[4.4.16](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.4.16)|22.07.2022@10:00| 170 | |cc-signing-service|[4.4.3](https://github.com/admin-ch/CovidCertificate-Signing-Service/releases/tag/4.4.3)|18.07.2022@16:00| 171 | |cc-report-service|4.4.5|21.07.2022@11:50| 172 | |cc-notification-service|[4.4.1](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.4.1)|20.07.2022@14:30| 173 | 174 | # 4.3.x 175 | * Umwandlung technisch ablaufender Impfzertifikate 176 | * Vereinfachungen EU RAT 177 | #### Services release details 178 | |service|release|last modified| 179 | |----|----|----| 180 | |cc-management-service|[4.3.3](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.3.3)|23.06.2022@09:00| 181 | |cc-management-ui|[4.3.3](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.3.3)|23.06.2022@12:00| 182 | |cc-report-service|1.0.3|21.06.2022@15:00| 183 | 184 | # 4.2.x 185 | * A2 Report generation 186 | #### Services release details 187 | |service|release|last modified| 188 | |----|----|----| 189 | |cc-management-service|[4.2.2](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.2.2)|09.06.2022@15:00| 190 | |cc-api-notification-service|[4.0.9](https://github.com/admin-ch/CovidCertificate-Notification-Service/releases/tag/4.0.9)|24.05.2022@09:00| 191 | |cc-management-ui|[4.2.6](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.2.6)|09.06.2022@15:00| 192 | |cc-report-service|1.0.0|01.06.2022@17:00| 193 | 194 | # 4.1.x 195 | * Mass revocation 196 | * Maintenance messages 197 | * Bugfixes role concept 198 | * Text modifications recovery form 199 | #### Services release details 200 | |service|release|last modified| 201 | |----|----|----| 202 | |cc-management-service|[4.1.4](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.1.4)|25.05.2022@14:00| 203 | |cc-api-gateway-service|[4.1.0](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/4.1.0)|13.05.2022@07:40| 204 | |cc-management-ui|[4.1.9](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.1.9)|25.05.2022@15:25| 205 | 206 | # 4.0.x 207 | * A EU compatible recovery certificate based on the result of a rapid antigen test is supported by the software. 208 | * TypeCode and ManufacturerCode are no longer mandatories properties. 209 | #### Services release details 210 | |service|release|last modified| 211 | |----|----|----| 212 | |cc-management-service|[4.0.5](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/4.0.5)|16.05.2022@07:16| 213 | |cc-management-ui|[4.0.8](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/4.0.8)|16.05.2022@07:22| 214 | 215 | # 3.9.x 216 | * The permission functionality support the new and the legacy roles. 217 | #### Services release details 218 | |service|release|last modified| 219 | |----|----|----| 220 | |cc-management-service|[3.9.14](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.9.14)|30.03.2022@13:47| 221 | |cc-api-gateway-service|[3.9.8](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.9.8)|30.03.2022@10:20| 222 | |cc-management-ui|[3.9.4](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/3.9.4)|25.03.2022@09:56| 223 | 224 | # 3.7.x 225 | * The environment where the productive CovidCertificate System is hosted required some that are reflected with new truststore.jks files. 226 | * KPI's related to Certificate creation are centralized in management service and moved into management data base. 227 | * KPI's for in-app-delivery function are enhanced with transfer code, UVCI, issuer and delivery time. 228 | #### Services release details 229 | |service|release|last modified| 230 | |----|----|----| 231 | |cc-api-gateway-service|[3.7.1](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.7.1)|02.03.2022@16:09| 232 | |cc-management-service|[3.7.6](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.7.6)|07.03.2022@18:00| 233 | |cc-light-generation-service|[2.14.0](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/20220303_144759)|03.03.2022@13:49| 234 | |cc-management-ui|[3.7.4](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/3.7.4)|01.03.2022@11:35| 235 | |cc-printing-service|[3.7.0](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/3.7.0)|02.03.2022@16:07| 236 | 237 | # 3.6.x 238 | * UVCI revocation can be flaged as "fraud". The revoked "fraud" flaged UVCI will be sync with the EU system. 239 | * Certificates endpoints can be toggled (enable/disable). 240 | * A log is created for certificate delivered by app transfer. 241 | #### Services release details 242 | |service|release|last modified| 243 | |----|----|----| 244 | |cc-api-gateway-service|[3.6.3](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.6.3)|18.02.2022@17:06| 245 | |cc-management-service|[3.6.9](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.6.9)|18.02.2022@23:33| 246 | 247 | # 3.3.x 248 | * New Recovery (Rapid Antigen Test Positive)-Certificate (WebUI inclusive CSV and API) 249 | * Disable Exceptional-Certificate creation through CSV 250 | * Support for booster vaccination 251 | #### Services release details 252 | |service|release|last modified| 253 | |----|----|----| 254 | |cc-api-gateway-service|[3.3.0](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.3.1)|19.01.2022@17:37| 255 | |cc-management-service|[3.3.7](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.3.7)|21.01.2022@16:32| 256 | |cc-management-ui|[3.3.10](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/3.3.10)|24.01.2022@13:24| 257 | 258 | # 3.2.x 259 | * WebUi: New Exceptional-Certificate 260 | * API-Doc: birthday description enhanced 261 | #### Services release details 262 | |service|release|last modified| 263 | |----|----|----| 264 | |cc-api-gateway-service|[3.2.0](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.2.0)|04.01.2022@11:52| 265 | |cc-management-service|[3.2.1](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.2.1)|04.01.2022@11:41| 266 | |cc-management-ui|[3.2.1](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/3.2.1)|04.01.2022@15:47| 267 | 268 | # 3.1.x 269 | * Upgrade of dependencies 270 | #### Services release details 271 | |service|release|last modified| 272 | |----|----|----| 273 | |cc-api-gateway-service|[3.1.0](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.1.0)|17.12.2021@14:49| 274 | |cc-management-service|[3.1.0](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/3.1.0)|17.12.2021@14:45| 275 | |cc-printing-service|[3.1.0](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/3.1.0)|17.12.2021@14:46| 276 | 277 | # 3.0.x 278 | * Product grace period for rapid tests 279 | * Splitting of Astra Zeneca vaccines 280 | #### Services release details 281 | |service|release|last modified| 282 | |----|----|----| 283 | |cc-api-gateway-service|[3.0.1](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/3.0.1)|09.12.2021@10:41| 284 | |cc-management-service|[3.0.3](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/20211210_110141)|10.12.2021@11:01| 285 | |cc-management-ui|[3.0.3](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/3.0.3)|10.12.2021@13:50| 286 | |cc-printing-service|[3.0.1](https://github.com/admin-ch/CovidCertificate-Printing-Service/releases/tag/20211210_105309)|10.12.2021@09:52| 287 | 288 | # 2.10.x 289 | * In-app light certificate QR-Code maximal duration is reduced from 48h to 24h. 290 | * Rapid-test based Test-Certificate validity is reduced from 48h to 24h. 291 | #### Services release details 292 | |service|release|last modified| 293 | |----|----|----| 294 | |light-certificate-generation-service|[2.10.0](https://github.com/admin-ch/CovidCertificate-Light-Certificate-Generation-Service/releases/tag/2.10.0)|01.12.2021@15:12| 295 | 296 | # 2.9.x 297 | * New vaccination certificate for tourists (interfaces: UI/[CSV](https://github.com/admin-ch/CovidCertificate-UIdoc)/[API](https://github.com/admin-ch/CovidCertificate-Apidoc)) 298 | * Recovery (antibody test positive) certificate can only be generate with sample date >= 16.11.2021) 299 | * The PDF is compatibel to the Swiss Confederation documentation style guide. 300 | #### Services release details 301 | |service|release|last modified| 302 | |----|----|----| 303 | |api-gateway-service|[2.9.2](https://github.com/admin-ch/CovidCertificate-Api-Gateway-Service/releases/tag/2.9.2)|25.11.2021@11:51| 304 | |management-service|[2.9.7](https://github.com/admin-ch/CovidCertificate-Management-Service/releases/tag/2.9.7)|26.11.2021@11:41| 305 | |management-ui|[2.9.5](https://github.com/admin-ch/CovidCertificate-Management-UI/releases/tag/2.9.5)|26.11.2021@08:28| 306 | 307 | # 2.8.x 308 | ### APPS 309 | 310 | #### Android 311 | ##### COVID Certificate 312 | - Warning message if Covid Cert App is incorrectly used to bulk check Covid certificates. 313 | Verification rules adapted: New and existing certificates of recovery (based on positive PCR test) now have a validity of 365 days after the start of vaccination protection in Switzerland. Existing certificates inside the app, in the form of an electronic document or on paper do not need to be reissued, because their validity is calculated at the time of testing. The testing rules abroad generally limit the use of Covid certificates to a maximum of 180 days. 314 | - Prepared for new recovery certificates based on positive antibody tests (seropositive), which can be carried out and issued by approved laboratories starting 16.11.2021. 315 | - Certificates which are valid and verifiable only in Switzerland display a corresponding information. 316 | - Covid Cert App and Covid Check App (for verifiers) are more resistant to temporary failures of the EU gateway serving the mutual provision of national verification keys. 317 | - Incorrectly displayed validities in case of deviations of the system time from the local time have been corrected. 318 | - Further optimisations, translations and bug fixes. 319 | ##### COVID Certificate Check 320 | - Verification rules adapted: All recovery certificates (based on a positive PCR test) now are valid for 365 days after the start of vaccination protection. Existing certificate documents (paper or PDF) with a fixed "valid until" date of less than 180 days after vaccination protection can now also be verified as being valid during the extended 365-day period, because the validity is only calculated during verification and starting from the day of vaccination. 321 | - Prepared for verifying the new certificates of recovery based on positive antibody tests (seropositive), which can be conducted and issued by approved laboratories starting 16.11.2021. 322 | - Covid Cert App and Covid Check App (for verifiers) are more resistant to temporary downtimes of the EU gateway serving the mutual provision of national verification keys. 323 | - Further optimisations, translations and bug fixes. 324 | #### iOS 325 | ##### COVID Certificate 326 | - Warning message if Covid Cert App is incorrectly used to bulk check Covid certificates. 327 | Verification rules adapted: New and existing certificates of recovery (based on positive PCR test) now have a validity of 365 days after the start of vaccination protection in Switzerland. Existing certificates inside the app, in the form of an electronic document or on paper do not need to be reissued, because their validity is calculated at the time of testing. The testing rules abroad generally limit the use of Covid certificates to a maximum of 180 days. 328 | - Prepared for new recovery certificates based on positive antibody tests (seropositive), which can be carried out and issued by approved laboratories starting 16.11.2021. 329 | - Certificates which are valid and verifiable only in Switzerland display a corresponding information. 330 | - Covid Cert App and Covid Check App (for verifiers) are more resistant to temporary failures of the EU gateway serving the mutual provision of national verification keys. 331 | - Incorrectly displayed validities in case of deviations of the system time from the local time have been corrected. 332 | - Further optimisations, translations and bug fixes. 333 | ##### COVID Certificate Check 334 | - Verification rules adapted: All recovery certificates (based on a positive PCR test) now are valid for 365 days after the start of vaccination protection. Existing certificate documents (paper or PDF) with a fixed "valid until" date of less than 180 days after vaccination protection can now also be verified as being valid during the extended 365-day period, because the validity is only calculated during verification and starting from the day of vaccination. 335 | - Prepared for verifying the new certificates of recovery based on positive antibody tests (seropositive), which can be conducted and issued by approved laboratories starting 16.11.2021. 336 | - Covid Cert App and Covid Check App (for verifiers) are more resistant to temporary downtimes of the EU gateway serving the mutual provision of national verification keys. 337 | - Further optimisations, translations and bug fixes. 338 | ### [API](https://ws.covidcertificate.bag.admin.ch) 339 | - New endpoint for certificate based on positive antibody test (only valid in Switzerland). 340 | - 'Covaxin' is accepted as medicinalProductCode for the establishment of vaccination certificate. 341 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 342 | - New menu for certificate based on positive antibody test (only valid in Switzerland). 343 | 344 | ## Release 20211002 - Saturday, October 2nd 2021 345 | 346 | ### APPS 347 | 348 | #### Android 349 | ##### COVID Certificate 350 | - Performance of QR code scanner optimised 351 | - Further improvements and bug fixes 352 | ##### COVID Certificate Check 353 | - Performance of QR code scanner optimised 354 | - Integration of external hardware scanners 355 | - Further improvements and bug fixes 356 | #### iOS 357 | ##### COVID Certificate 358 | - Further improvements and bug fixes 359 | ##### COVID Certificate Check 360 | - Further improvements and bug fixes 361 | 362 | ### [API](https://ws.covidcertificate.bag.admin.ch) 363 | - Vaccination and Recovery certificates are restricted to Switzerland as country of vaccination (**countryOfVaccination: 'CH'**) or test (**countryOfTest: 'CH'**). 364 | 365 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 366 | 367 | - New vaccine products. 368 | - Generate multiple certificates (CSV): Vaccination and Recovery certificates are restricted to Switzerland as country of vaccination or test. Vaccination certificates are restricted to medicinalProductCode EU/1/20/1507, EU/1/20/1525, EU/1/20/1528. 369 | 370 | ## Release 20210913 - Monday, September 13th 2021 371 | 372 | ### APPS 373 | 374 | - Bugfixing 375 | 376 | ### [API](https://ws.covidcertificate.bag.admin.ch) 377 | 378 | - ValueSet-API 379 | - Optimizations 380 | - Bugfixing 381 | 382 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 383 | 384 | - New ValueSet for Rapid tests 385 | - Bugfixing 386 | 387 | ## Release 20210823 - Monday, August 23th 2021 388 | 389 | ### APPS 390 | 391 | - Bugfixing 392 | - Language selection in the android app 393 | 394 | ### [API](https://ws.covidcertificate.bag.admin.ch) 395 | 396 | - ValueSet-API available on TEST 397 | - Optimizations 398 | - Bugfixing 399 | 400 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 401 | 402 | - Bugfixing 403 | 404 | ## Release 20210809 - Monday, August 9th 2021 405 | 406 | ### APPS 407 | 408 | - Bugfixing 409 | 410 | ### [API](https://ws.covidcertificate.bag.admin.ch) 411 | 412 | - Bugfixing 413 | 414 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 415 | 416 | - Bugfixing 417 | 418 | ## Release 20210726 - Monday, July 26th 2021 419 | 420 | ### APPS 421 | 422 | - Covid Cert app - AX improvement 423 | - Covid Cert app - Certificate pdf sharing 424 | - Covid Check app - AX improvement 425 | - Bugfixing 426 | 427 | ### [API](https://ws.covidcertificate.bag.admin.ch) 428 | 429 | - Bugfixing 430 | 431 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 432 | 433 | - Bugfixing 434 | 435 | ## Release 20210712 - Monday, July 12th 2021 436 | 437 | ### APPS 438 | 439 | - Covid Cert app - Certificate light 440 | - Covid Check app - Certificate light support 441 | 442 | ### [API](https://ws.covidcertificate.bag.admin.ch) 443 | 444 | - EU Gateway connected since 08.07.2021 445 | - Bugfixing 446 | 447 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 448 | 449 | - Bugfixing 450 | 451 | ## Release 20210628 - Monday, June 28th 2021 452 | 453 | ### APPS 454 | 455 | - Covid Cert app InApp delivery 456 | - Covid Cert app PDF import 457 | 458 | ### [API](https://ws.covidcertificate.bag.admin.ch) 459 | 460 | - [InApp delivery API](https://github.com/admin-ch/CovidCertificate-Apidoc#transfer-data) to deliver Covid certificate securely and directly to the Covid Cert app 461 | 462 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 463 | 464 | - [Print](https://github.com/admin-ch/CovidCertificate-Apidoc#address-data) or [InApp](https://github.com/admin-ch/CovidCertificate-Apidoc#transfer-data) delivery can be selected for Covid certificates delivery 465 | - CSV Upload to create several covid certificates - [Doc](https://github.com/admin-ch/CovidCertificate-UIdoc) 466 | 467 | ## Release 20210621 - Monday, June 21th 2021 468 | 469 | ### APPS 470 | 471 | - Covid Cert app uses Verification API 472 | - Covid Check app uses Verification API 473 | 474 | ### [API](https://ws.covidcertificate.bag.admin.ch) 475 | 476 | - Printing API to send covid certificates per Post 477 | - Verification API to deliver EU trust list, revocation list and business rules 478 | 479 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 480 | 481 | - CSV Upload (BETA) to create several covid certificates - [Doc](https://github.com/admin-ch/CovidCertificate-UIdoc) 482 | 483 | ### [Covid Certificate Form](https://covidcertificate-form.admin.ch/) 484 | 485 | - CSV Upload to generate SMS notification for the users for whom no certificate can be issued 486 | 487 | ## Release 20210614 - Monday, June 14th 2021 488 | 489 | ### [API](https://ws.covidcertificate.bag.admin.ch) 490 | 491 | - Covid Certificate API (generation & revocation) 492 | 493 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 494 | 495 | - Bugfixing 496 | 497 | ### [Covid Certificate Form](https://covidcertificate-form.admin.ch/) 498 | 499 | - COVID certificate application form for people who have recovered 500 | 501 | ## Release 20210607 - Monday, June 7th 2021 502 | 503 | ### APPS 504 | 505 | - Covid Cert app (store covid certificates) 506 | - Covid Check app (verify covid certificates) 507 | 508 | ### API - Pilot 509 | 510 | - Covid Certificate API (generation & revocation) 511 | 512 | ### [Web management UI](https://www.covidcertificate.admin.ch/) 513 | 514 | - Covid Certificate Web management UI (generation & revocation and generation of OneTime password) 515 | 516 | ## Release 20210528 - Friday, May 28th 2021 517 | 518 | ### API - TEST 519 | 520 | - Remove attribute "date and time test result" for test covid certificate due to EU specification change 521 | - Add revocation API 522 | - New UVCI prefix: urn:uvci: 523 | - Bug fixes 524 | 525 | ### Web Management UI - TEST 526 | 527 | - Remove attribute "date and time test result" for test covid certificate due to EU specification change 528 | - Bug fixes 529 | -------------------------------------------------------------------------------- /ui-doc/README.md: -------------------------------------------------------------------------------- 1 | # Web Management UI documentation 2 | Documentation for the Web management UI ([prod]( 3 | https://www.covidcertificate.admin.ch/ 4 | ) - [test]( 5 | https://www.covidcertificate-a.admin.ch/ 6 | )) 7 | 8 | # Table of contents 9 | - [Web Management UI documentation](#web-management-ui-documentation) 10 | - [How to generate multiple COVID certificates ?](#how-to-generate-multiple-covid-certificates-) 11 | * [General informations](#general-informations) 12 | * [Certificate types](#certificate-types) 13 | * [Delivery methods](#delivery-methods) 14 | * [Templates](#templates) 15 | + [Supported encoding for familyName and givenName](#supported-encoding-for-familyname-and-givenname) 16 | + [Supported date format for all dates](#supported-date-format-for-all-dates) 17 | + [Supported date format for birthdates only](#supported-date-format-for-birthdates-only) 18 | + [Supported vaccine (vaccination certificate)](#supported-vaccine-vaccination-certificate) 19 | + [Supported rapid antigen tests (test certificate)](#supported-rapid-antigen-tests) 20 | + [Supported country](#supported-country) 21 | * [Troubleshooting](#troubleshooting) 22 | - [How to revoke multiple COVID certificates ?](#how-to-revoke-multiple-covid-certificates-) 23 | + [Supported format for uvci](#supported-format-for-uvci) 24 | + [Supported values for fraud](#supported-values-for-fraud) 25 | - [Create a CSV with Microsoft Excel](#create-a-csv-with-microsoft-excel) 26 | 27 | # How to generate multiple COVID certificates ? 28 | ## General informations 29 | 30 | The **Generate multiple certificates** function allows you to create and deliver several certificates by importing a CSV file. The import file can be produced using one of the available [templates](#templates). 31 | 32 | ⚠️ The CSV file supports until 100 entries and can't exceed a size of 40kB. If you have more data, we recommend to script the process with the [API]( 33 | https://github.com/admin-ch/CovidCertificate-Api-Scripts 34 | ). 35 | 36 | ## Certificate types 37 | Four (4) types of certificate can be created with the bulk method (CSV upload): 38 | - vaccination 39 | - test 40 | - recovery 41 | - recovery-rat (rapid antigen test) 42 | 43 | The issuing of certificates according to type can be toggled according to the decision of the Federal Office of Public Health (FOPH). 44 | Consequently, the API endpoints and options in the UI will be enabled/disabled. The table below shows the certificates that can currently be generated. For more information, please contact support @ covid-zertifikat@bag.admin.ch. 45 | 46 | | Certificate type | State | 47 | | ----------- | ----------- | 48 | | Vaccination | :heavy_check_mark: | 49 | | Vaccination for tourists | :no_entry: | 50 | | Test (based on negative PCR or Rapid Antigen Test) | :heavy_check_mark: | 51 | | Recovery (based on positive PCR test) | :heavy_check_mark: | 52 | | Recovery (based on positive Rapid Antigen Test) | :heavy_check_mark: | 53 | | Recovery (based on antibody test) | :no_entry: | 54 | 55 | :heavy_check_mark:: the certificate and its corresponding endpoints are active 56 | :no_entry:: the certificate and its corresponding endpoints are no longer active 57 | 58 | ## Delivery methods 59 | Three (3) types of delivery method can be used: 60 | - sent per post 61 | - **only** available for **vaccination certificates**, **recovery certificates**, **recovery-rat certificates** and **antibody certificates** 62 | - the certificates will be printed and sent per post 63 | - the patient [address]( 64 | https://github.com/admin-ch/CovidCertificate-Apidoc#address-data 65 | ) is required 66 | - only available for addresses in Switzerland 67 | - certificates in PDF format will be compressed in a ZIP archive and downloaded 68 | - transfer to the mobile app 69 | - available for all certificate types 70 | - the certificate is delivered directly in the mobile application (minimum v. 2.2.0) of the patient 71 | - the patient has to provide an app transfer code 72 | - *inAppDeliveryCode* can be generated in the mobile application (min. v. 2.2.0) 73 | - app tranfer code expire 30 days after generation of the code 74 | - only one certificate is delivered per app transfer code 75 | - certificates in PDF format will be compressed in a ZIP archive and downloaded 76 | - PDF only 77 | - available for all certificate types 78 | - certificates in PDF format will be compressed in a ZIP archive and downloaded 79 | 80 | The specifications regarding the field values of the CSV are the same as for the API. Use the [API documentation]( 81 | https://github.com/admin-ch/CovidCertificate-Apidoc#request---certificate-data 82 | ) to choose the appropriate values sets for the fields of the CSV. 83 | 84 | ## Templates 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 |
  post appTransfer PDF only
 vaccination template-cc_vaccination-delivery_post template-cc_vaccination-delivery_appTransfer template-cc_vaccination
 test not available template-cc_test-delivery_appTransfer template-cc_test
 recovery template-cc_recovery-delivery_post template-cc_recovery-delivery_appTransfer template-cc_recovery
 recovery-rat template-cc_recovery-rat-delivery_post template-cc_recovery-rat-delivery_appTransfer template-cc_recovery-rat
119 | 120 | ### Supported encoding for familyName and givenName 121 | UTF-8 | ISO-8859-1 is used for the familyName and givenName except the following characters: 122 | "!", "@", "#", "$", "%", "¶", "*", "(", ")", "_", ":", "/", "+", "=", "|", "<", ">", "?", "{", "}", "[", "]", "~" 123 | 124 | ### Supported date format for all dates 125 | It is not possible to mix formats, only one of the following formats must be used in a document: 126 | - yyyy-MM-dd (e.g. 2021-06-17) 127 | - dd.MM.yyyy (e.g. 17.06.2021) 128 | 129 | ### Supported date format for birthdates only 130 | It is not possible to mix formats, only one of the following formats must be used in a document: 131 | - yyyy-MM-dd (e.g. 2021-06-17) 132 | - dd.MM.yyyy (e.g. 17.06.2021) 133 | - yyyy-MM (e.g. 2021-09) 134 | - yyyy (e.g. 2021) 135 | 136 | ### Supported vaccine (vaccination certificate) 137 | The *medicinalProductCode* has to be one one of the following code: 138 | #### Vaccination certificate 139 | | description (productName / productManufacturer) | medicinalProductCode | 140 | |--------------------------------------------------------------|--------------| 141 | | BBIBP-CorV (Vero Cells) / China Sinopharm International Corp. - Beijing location | **BBIBP-CorV** | 142 | | Comirnaty / Biontech Manufacturing GmbH | **EU/1/20/1528** | 143 | | Covaxin (also known as BBV152 A, B, C) / Bharat Biotech | **Covaxin** | 144 | | COVID-19 Vaccine Janssen / Janssen-Cilag International | **EU/1/20/1525** | 145 | | COVID-19 Vaccine (Vero Cell), Inactivated/ Coronavac / Sinovac Biotech | **CoronaVac** | 146 | | other AstraZeneca vaccines: COVISHIELD / AZD1222 / ChAdOx1 nCoV-19/ChAdOx1-S/… / Serum Institute Of India Private Limited | **Covishield** | 147 | | Spikevax (previously COVID-19 Vaccine Moderna) / Moderna Biotech Spain S.L. | **EU/1/20/1507** | 148 | | Vaxzevria / AstraZeneca AB | **EU/1/21/1529** | 149 | --- 150 | **Important** 151 | Information on the vaccine doses received (X) and required (Y) must be entered in accordance with one of the following rules: 152 | - Last dose of a 2-dose vaccine (e.g. mRNA) without prior infection: 153 | - 1/2: Incomplete vaccination (not usable for travel or areas subject to certification) 154 | - 2/2: Full vaccination (initial immunisation) 155 | - 3/3, 4/4, ...: Booster 156 | - Last dose of a 2-dose vaccine (e.g. mRNA) after prior infection (“required doses”: Y must always be 1): 157 | - 1/1: Full vaccination after recovery 158 | - 2/1, 3/1, 4/1, ...: Booster after recovery 159 | - Last dose of a 1-dose vaccine (e.g. Janssen) without prior infection: 160 | - 1/1: Full vaccination 161 | - 2/1: Booster 162 | --- 163 | ### Supported rapid antigen tests 164 | The application supports a dedicated list of rapid antigen tests. **manufacturerCode** and **typeCode** can be found [here](https://github.com/admin-ch/CovidCertificate-Examples/blob/main/cumulated/covid-19-tests_1.0.0.json) (use only those where property ch_accepted = true). Issuable tests can be found in [supported rapid antigen tests](https://corona-fachinformationen.bagapps.ch/documents/sars-cov-2-antigen-schnelltests-fachanwendung-mit-covid-zertifikat.pdf). 165 | 166 | ### Supported country 167 | Accepted value-set: **ISO 3166-1 Alpha-2 Code** 168 | 169 | | type | description| 170 | |--------------------------|--------------------| 171 | | vaccination | **countryOfVaccination**: all countries | 172 | | test | **memberStateOfTest**: all countries | 173 | | recovery | **countryOfTest**: only Switzerland (**CH**) | 174 | | recovery-rat | **memberStateOfTest**: only Switzerland (**CH**) | 175 | 176 | ## Troubleshooting 177 | If the imported CSV file can't be processed because of an error, then an error file will be sent back and no COVID certificates will be produced and delivered. 178 | In this case, fix the errors in the CSV file according to the error description in the returned file. 179 | 180 | # How to revoke multiple COVID certificates ? 181 | The **Revoke multiple certificates** function allows you to revoke several certificates by importing a CSV file. The import file can be produced using the template-bulk_revocation.xlsx template. 182 | 183 | ### Supported format for uvci 184 | Description: UVCI is the certificate unique identifier. 185 | Regex: ^urn:uvci:01:CH:[A-Z0-9]{24}$ 186 | Explanation: The **uvci** must start with 'urn:uvci:01:CH:' and is followed by 24 alpha-numeric characters (A to Z and 0 to 9) 187 | 188 | ### Supported values for fraud 189 | Description: Determine if the certificate to be revoked has been fraudulently issued (set **true** if so). 190 | Values: [**true**, **false**] 191 | 192 | # Create a CSV with Microsoft Excel 193 | 194 | We recommend Microsoft Excel to edit the template. 195 | 1. Open the template with Microsoft Excel. 196 | 2. Fill the cells under the titled column with the respectives informations of your patients. 197 | 3. Generate the CSV: 198 | - Windows: ***File*** -> ***Save As*** -> ***Browse*** -> ***Save as type: CSV (Comma delimited)*** 199 | - Mac: ***File*** -> ***Save As...*** -> ***File Format: CSV UTF-8 (Comma-delimited (.csv)*** 200 | 201 | ⚠️ It is possible that when you edit the file with Excel, the date formats are modified. Please note that the date format must follow the specification. You can open the csv file with a text editor in order to check that everything is ok. 202 | -------------------------------------------------------------------------------- /ui-doc/archive/README.md: -------------------------------------------------------------------------------- 1 | # Archive 2 | 3 | The archive contains the templates for currently disabled certificate types. 4 | 5 | These templates are not currently supported. -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_antibody-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_antibody-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_antibody-delivery_post.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_antibody-delivery_post.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_antibody.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_antibody.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_recovery-rat-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_recovery-rat-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_recovery-rat-delivery_post.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_recovery-rat-delivery_post.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_recovery-rat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_recovery-rat.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_vaccination_tourist-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_vaccination_tourist-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/archive/template-cc_vaccination_tourist.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/archive/template-cc_vaccination_tourist.xlsx -------------------------------------------------------------------------------- /ui-doc/template-bulk_revocation.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-bulk_revocation.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery-delivery_post.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery-delivery_post.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery-rat-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery-rat-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery-rat-delivery_post.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery-rat-delivery_post.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery-rat.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery-rat.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_recovery.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_recovery.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_test-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_test-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_test.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_test.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_vaccination-delivery_appTransfer.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_vaccination-delivery_appTransfer.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_vaccination-delivery_post.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_vaccination-delivery_post.xlsx -------------------------------------------------------------------------------- /ui-doc/template-cc_vaccination.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/admin-ch/CovidCertificate-Documents/d465cd8a3d532d548238c4862331194e1f0af501/ui-doc/template-cc_vaccination.xlsx --------------------------------------------------------------------------------