Omfang og status
EUCC er et vanlig bevis. EBWOID er fortsatt virksomhetsidentitet og styrer tilgang.
Malen heter EUCC, har slug eucc og tilhører Brregs eksisterende utstederprofil.
Både malen og signeringen ligger i Brregs Paradym-prosjekt.
Kontrakten bygger på vedlegget WE BUILD – EU Company Certificate 0.9.0.
Valideringsprofilen er eucc/0.9.0. Sandkassestandarden er én kalendermåneds
gyldighet fra utstedelse, med tilbakekalling og prosjektets P-256-utstedersertifikat.
Dette angir ikke at sandkasseutstederen er kvalifisert; testeksempelet bruker EAA.
Live-testen 9. september 2026 passerte for begge representantvariantene og en blandet liste, inkludert mottak, presentasjon og tilbakekalling. Symfoni har akseptert følgende to forskjeller for piloten:
- Status følger
status.status_list: { idx, uri }, mens skjema 0.9.0 krevertype,status_list_credential,status_list_indexogstatus_purposeunderstatus. - Utstederen identifiseres med X.509-sertifikatet;
issfra eksempelvedlegget er ikke inkludert.isser valgfritt i selve JSON-skjemaet.
Forskjellene blokkerer ikke pilotbruk. Originalskjemaet og beviset beholdes uendret. Koden og pilotbindingen må deployes
før adressen under brukes mot pilot. Se docs/eucc-brreg.md for testbevis og oppsett.
Utstedelse
POST https://www.symfoni.dev/api/issuers/brreg/credentials/eucc/issue?offerUrlFormat=symfoni
Authorization: Bearer <Brregs Symfoni-API-nøkkel>
Content-Type: application/json Nøkkelen i denne requesten er Brregs Symfoni-API-nøkkel. Symfoni bruker Paradym-nøkkelen på serveren for å utstede i Brregs prosjekt.
Eksempelet bruker syntetiske virksomhets- og representantdata fra vedleggene.
Feltene for utstedermyndighet og autentisk kilde sendes av Brreg som virksomhetsdata.
iss er et teknisk felt som ikke kan sendes av klienten. I det testede
sertifikatoppsettet identifiseres utstederen gjennom X.509-sertifikatet; Paradym
utsteder uten et eget iss-felt.
{
"attributes": {
"attestation_legal_category": "EAA",
"issuing_authority": "Brønnøysundregistrene",
"issuing_authority_id": "NOFOR.974760673",
"issuing_country": "NO",
"authentic_source_id": "NOFOR.974760673",
"authentic_source_name": "Brønnøysundregistrene",
"legal_person_name": "EUDI WALLET SOLUTIONS AS",
"legal_person_id": "NOFOR.987654321",
"legal_form_type": "Aksjeselskap (AS)",
"registration_member_state": "NO",
"registered_address": {
"full_address": "Storgata 1; 9008; Tromsø; NO",
"thorough_fare": "Storgata",
"locator_designator": "1",
"post_code": "9008",
"post_name": "Tromsø",
"admin_unit_level_1": "NO",
"admin_unit_level_2": "Troms"
},
"registration_date": "2020-05-20",
"share_capital": {
"amount": "30000",
"currency": "NOK"
},
"legal_person_status": "active",
"legal_person_activity": {
"code": "62.010",
"description": "Computer programming activities"
},
"digital_contact_point": {
"website": "https://www.example-eudi-wallet.no",
"email": "[email protected]"
},
"legal_representative": [
{
"natural_person": {
"full_name": "Lysende Blomst",
"date_of_birth": "1980-01-01",
"nationality": "Norwegian",
"signatory_rule": "sole"
}
},
{
"legal_person": {
"name": "PARENT HOLDING AS",
"id": "NOFOR.123456789",
"legal_form_type": "Aksjeselskap (AS)",
"signatory_rule": "sole"
}
}
],
"trust_anchor": "https://trust.example.org/anchors/eidas"
}
} Dette eksempelet finnes også i docs/examples/eucc/issue-request.json:
curl --fail-with-body 'https://www.symfoni.dev/api/issuers/brreg/credentials/eucc/issue?offerUrlFormat=symfoni' -H "Authorization: Bearer $SYMFONI_BRREG_API_KEY" -H 'Content-Type: application/json' --data-binary @docs/examples/eucc/issue-request.json Illustrerende respons; adressen er ikke et aktivt tilbud:
{
"issuanceId": "issuance-example",
"offerUri": "https://www.symfoni.dev/app/credential/offer?credential_offer_uri=https%3A%2F%2Fissuer.example%2Foffers%2Feucc-example",
"status": "offered",
"templateSlug": "eucc",
"offerUrlFormat": "symfoni"
} Brreg bruker offerUri uendret som lenke for «Åpne beviset i Symfoni».
offered betyr at tilbudet er opprettet; beviset er ennå ikke nødvendigvis mottatt.
Et POST-kall oppretter et nytt tilbud. Endepunktet har ingen idempotensnøkkel;
x-request-id er kun korrelasjon i historikken.
Felt og validering
Ingen verdier konverteres til tekst eller andre datatyper. Ukjente felt avvises,
også inne i objekter og listeelementer. Valgfrie felt utelates når de ikke finnes;
null er ikke en gyldig erstatning. Land- og valutakoder kontrolleres mot mønstrene
i vedlegget (henholdsvis to og tre store bokstaver), ikke mot et eksternt koderegister.
Skjemaet definerer ikke ytterligere formatkontroll for EUID, NACE-kode eller beløp.
Hvert element i legal_representative må inneholde nøyaktig én av
natural_person og legal_person. Begge varianter kan forekomme i samme liste.
Listen må ha minst ett element.
«Ja» på et underfelt betyr påkrevd når det overordnede objektet er til stede.
| Felt | Type | Påkrevd | Format eller tillatte verdier |
|---|---|---|---|
issuing_authority | string | Ja | |
issuing_authority_id | string | Ja | |
issuing_country | string | Ja | ^[A-Z]2$ |
authentic_source_id | string | Ja | |
authentic_source_name | string | Ja | |
attestation_legal_category | string | Ja | EAA, PUB-EAA, QEAA |
legal_person_name | string | Ja | |
legal_person_id | string | Ja | |
legal_form_type | string | Ja | |
registration_member_state | string | Ja | ^[A-Z]2$ |
registered_address | object | Ja | |
registered_address.care_of | string | Nei | |
registered_address.full_address | string | Ja | |
registered_address.thorough_fare | string | Nei | |
registered_address.locator_designator | string | Nei | |
registered_address.post_code | string | Nei | |
registered_address.post_name | string | Nei | |
registered_address.post_office_box | string | Nei | |
registered_address.locator_name | string | Nei | |
registered_address.admin_unit_level_1 | string | Nei | |
registered_address.admin_unit_level_2 | string | Nei | |
registration_date | string | Ja | date |
share_capital | object | Nei | |
share_capital.amount | string | Ja | |
share_capital.currency | string | Ja | ^[A-Z]3$ |
legal_person_status | string | Ja | active, inactive |
legal_person_activity | object | Ja | |
legal_person_activity.code | string | Ja | |
legal_person_activity.description | string | Ja | |
legal_person_duration | string | Nei | date |
digital_contact_point | object | Nei | |
digital_contact_point.website | string | Nei | uri |
digital_contact_point.email | string | Nei | |
legal_representative | array | Ja | Minst ett element; nøyaktig én representantvariant per element |
trust_anchor | string | Nei | uri |
legal_representative[].natural_person | object | Én variant | |
legal_representative[].natural_person.full_name | string | Ja | |
legal_representative[].natural_person.date_of_birth | string | Ja | date |
legal_representative[].natural_person.nationality | string | Nei | |
legal_representative[].natural_person.signatory_rule | string | Ja | sole, joint, joint_two, joint_all, limited |
legal_representative[].legal_person | object | Én variant | |
legal_representative[].legal_person.name | string | Ja | |
legal_representative[].legal_person.id | string | Ja | |
legal_representative[].legal_person.legal_form_type | string | Ja | |
legal_representative[].legal_person.signatory_rule | string | Ja | sole, joint, joint_two, joint_all, limited |
Systemfelter
Brreg skal ikke sende vct, issuance_date, iss, sub, jti, cnf, iat,
nbf, exp eller status i attributes. Disse avvises fremfor å overstyres.
Symfoni genererer issuance_date som UTC-tid når tilbudet opprettes. Paradym
håndterer signatur, faktisk JWT-utstedelsestid og utløp, holderbinding og status.
Derfor kan issuance_date være litt tidligere enn iat når tilbudet innløses senere.
Eventuelle sub, jti og nbf må vurderes ut fra det faktisk utstedte beviset;
vedleggets eksempelnøkler og faste tidspunkter kopieres aldri.
Malen må ha eksakt vct = uri:eu:eudi:eucc:1. Oppsett og utstedelse stopper ved
avvik; en automatisk Paradym-type brukes ikke som erstatning.
Feil
Ugyldige virksomhetsdata gir HTTP 400 før Paradym kalles:
{
"error": {
"code": "invalid_payload",
"message": "registered_address.full_address must have required property 'full_address'",
"path": "registered_address.full_address"
}
} HTTP 409 med error.code = "issuance_profile_mismatch" betyr at den versjonsfestede
profilen eller Paradym-malen avviker fra oppsettet. Ingen tilbud opprettes.
Eksisterende 401/404-feil for API-nøkkel, utsteder, mal og utstedelse er uendret.
Status og tilbakekalling
GET https://www.symfoni.dev/api/issuers/brreg/issuances/<issuanceId>?offerUrlFormat=symfoni
Authorization: Bearer <Brregs Symfoni-API-nøkkel> POST https://www.symfoni.dev/api/issuers/brreg/issuances/<issuanceId>/revoke
Authorization: Bearer <Brregs Symfoni-API-nøkkel> Tilbakekalling krever et faktisk utstedt bevis. Respons:
{ "issuanceId": "issuance-example", "status": "revoked" } Statuser omfatter offered, completed, partiallyIssued, failed og revoked.
Statusendepunktet og tilbakekallingsendepunktet bruker eksisterende tilgangskontroll.