---
id: config-create-digital-wallet-open-id-trust-source
title: "Add trust source"
description: "Adds a trust source to the organisation: CA certificates that you give (`trust_anchor`), or a published list that the wallet downloads (`etsi_trusted_list`, `etsi_lote`). Each trust source has one `usedFor` role, and a check reads only the trust sources of its accepted list."
sidebar_label: "Add trust source"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/openid4vc-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Add trust source</h1>

<MethodEndpoint method={"post"} path={"/v4/config/ows/trust/sources"}></MethodEndpoint>



Adds a trust source to the organisation: CA certificates that you give (`trust_anchor`), or a published list that the wallet downloads (`etsi_trusted_list`, `etsi_lote`). Each trust source has one `usedFor` role, and a check reads only the trust sources of its accepted list.

| Kind | Required | Optional | Not allowed |
| --- | --- | --- | --- |
| `trust_anchor` | `certificates`, `usedFor` | `name` | `url`, `signerCertificates` |
| `etsi_trusted_list`, `etsi_lote` | `url` (https), `usedFor` | `name`, `signerCertificates` | `certificates` |

The wallet reads a list once in the request, within the limits of a download, so the answer has its state and the first check has the copy. When the platform downloaded the URL a short time ago, the wallet reads that copy. The content must be a list of the kind of the source with at least one entry, and its signature must verify when you give `signerCertificates`. A list with the `usedFor` `status_issuer` must be an `etsi_lote` list with a service that gives this role (a revocation service of a PID or PuB-EAA provider). Else the answer is `400` with `errorId` `trust_source.list_not_usable` (`The list cannot be used: <reason>`; the reason is the HTTP status, the read failure or the signature failure), and nothing is saved. Without `signerCertificates`, `list.signatureVerified` is `false`.

A national list that serves several roles needs one trust source for each role; the wallet still downloads each URL once. To use a trust source in a check, name it in an accepted list (for example `acceptedCredentialSigners` of a presentation definition). API key scope: `trust-sources:create` (the older `trust-anchors:create` still works for a period).


## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-schema"}><details style={{}} className={"openapi-markdown__details mime"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-mime"}><h3 className={"openapi-markdown__details-summary-header-body"}>Body</h3><strong className={"openapi-schema__required"}>required</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}><div style={{"marginTop":"1rem","marginBottom":"1rem"}}>

The trust source to add. A member that the operation does not declare is refused (`<name>: unknown field`).

</div></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"kind"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`trust_anchor`, `etsi_trusted_list`, `etsi_lote`]"} schema={{"type":"string","enum":["trust_anchor","etsi_trusted_list","etsi_lote"],"description":"Required. `trust_anchor`: CA certificates in PEM. `etsi_trusted_list`: an ETSI TS 119 612 trusted list (XML), for example a national trusted list. `etsi_lote`: an ETSI TS 119 602 list of trusted entities (XML or JSON), for example an EU list of wallet providers.","example":"trust_anchor"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Name of the trust source, for the dashboard. Default: for a list, the last segment of the path of its URL; for a trust anchor, the common name of its first certificate.","example":"Wallet provider root (development CA)"}}></SchemaItem><SchemaItem collapsible={false} name={"url"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The https URL of the list, at most 2048 characters. Required for a list; refused for a trust anchor.","example":"https://example.eu/lists/wallet-providers.xml"}}></SchemaItem><SchemaItem collapsible={false} name={"certificates"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"PEM text with 1 to 10 CA certificates (basicConstraints `cA=TRUE`, not expired) and up to 10 CRLs that these CAs signed, at most 65536 characters. A private key is refused. Required for a trust anchor; refused for a list.","example":"-----BEGIN CERTIFICATE-----\nMIIB...\n-----END CERTIFICATE-----"}}></SchemaItem><SchemaItem collapsible={false} name={"signerCertificates"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"PEM text with the certificates that sign the list, at least one. The wallet then refuses a copy of the list whose signature does not verify. Optional for a list; refused for a trust anchor.","example":"-----BEGIN CERTIFICATE-----\nMIIC...\n-----END CERTIFICATE-----"}}></SchemaItem><SchemaItem collapsible={false} name={"usedFor"} required={false} schemaName={"object"} qualifierMessage={undefined} schema={{"type":"string","title":"TrustRole","description":"A role of a trust source entry: what the entry vouches for. A list gives the roles of its entries (by its list type and the service type of each entry); the `usedFor` of its trust source can only narrow them. An entry whose list gives it no role has the `usedFor` role of its trust source, except `status_issuer`, which only a service type gives. A trust anchor has the role that the organisation gives (its `usedFor`). A PID needs a `pid_provider`, an mDL an `mdl_issuer`, another credential any issuer role.\n\n- `wallet_provider`: signs Wallet Unit Attestations and key attestations (LoTE list type `EUWalletProvidersList`).\n- `pid_provider`: signs a PID (LoTE list type `EUPIDProvidersList`).\n- `qeaa_provider`: signs a QEAA (an ETSI TS 119 612 trusted list service of type `EAA/Q`).\n- `pub_eaa_provider`: signs a PuB-EAA (LoTE list type `EUPubEAAProvidersList`, or a trusted list service of type `EAA/Pub-EAA`).\n- `eaa_provider`: signs a non-qualified EAA (a trusted list service of type `EAA`, or a trust anchor that the organisation marks).\n- `mdl_issuer`: the IACA of an mDL Document Signer (a trust anchor that the organisation marks).\n- `status_issuer`: signs the Status List Token of a credential (ETSI services `SvcType/PID/Revocation` and `SvcType/PubEAA/Revocation`, or a trust anchor that the organisation marks). It is not an issuer role.\n- `access_certificate_provider`: issues the access certificates of relying parties, which sign their presentation requests and signed metadata (LoTE list type `EUWRPACProvidersList`, or a trusted list service of type `WRPAC`).\n- `registration_certificate_provider`: issues the registration certificates of relying parties (LoTE list type `EUWRPRCProvidersList`).\n\nThe issuer roles are `pid_provider`, `qeaa_provider`, `pub_eaa_provider`, `eaa_provider` and `mdl_issuer`; the filter value `issuer` names them all.","enum":["wallet_provider","pid_provider","qeaa_provider","pub_eaa_provider","eaa_provider","mdl_issuer","status_issuer","access_certificate_provider","registration_certificate_provider"],"example":"wallet_provider"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

The new trust source, with the state of its list.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>trustSource</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The new trust source.

</div><SchemaItem collapsible={false} name={"id"} required={true} schemaName={"uuid"} qualifierMessage={undefined} schema={{"type":"string","format":"uuid","description":"Identifier of the trust source: the value for an accepted list and for the `trustSourceId` of the path.","example":"6d2c0b8e-3f4a-4c1d-9e2b-7a5f1c3d8e90"}}></SchemaItem><SchemaItem collapsible={false} name={"kind"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`trust_anchor`, `etsi_trusted_list`, `etsi_lote`]"} schema={{"type":"string","enum":["trust_anchor","etsi_trusted_list","etsi_lote"],"description":"`trust_anchor`: one or more CA certificates, with optional CRLs. `etsi_trusted_list`: an ETSI TS 119 612 trusted list (XML), for example a national trusted list. `etsi_lote`: an ETSI TS 119 602 list of trusted entities (XML or JSON), for example the EU list of wallet providers.","example":"etsi_lote"}}></SchemaItem><SchemaItem collapsible={false} name={"name"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Name of the trust source, for the dashboard.","example":"EU wallet providers"}}></SchemaItem><SchemaItem collapsible={false} name={"usedFor"} required={false} schemaName={"object"} qualifierMessage={undefined} schema={{"type":"string","title":"TrustRole","description":"A role of a trust source entry: what the entry vouches for. A list gives the roles of its entries (by its list type and the service type of each entry); the `usedFor` of its trust source can only narrow them. An entry whose list gives it no role has the `usedFor` role of its trust source, except `status_issuer`, which only a service type gives. A trust anchor has the role that the organisation gives (its `usedFor`). A PID needs a `pid_provider`, an mDL an `mdl_issuer`, another credential any issuer role.\n\n- `wallet_provider`: signs Wallet Unit Attestations and key attestations (LoTE list type `EUWalletProvidersList`).\n- `pid_provider`: signs a PID (LoTE list type `EUPIDProvidersList`).\n- `qeaa_provider`: signs a QEAA (an ETSI TS 119 612 trusted list service of type `EAA/Q`).\n- `pub_eaa_provider`: signs a PuB-EAA (LoTE list type `EUPubEAAProvidersList`, or a trusted list service of type `EAA/Pub-EAA`).\n- `eaa_provider`: signs a non-qualified EAA (a trusted list service of type `EAA`, or a trust anchor that the organisation marks).\n- `mdl_issuer`: the IACA of an mDL Document Signer (a trust anchor that the organisation marks).\n- `status_issuer`: signs the Status List Token of a credential (ETSI services `SvcType/PID/Revocation` and `SvcType/PubEAA/Revocation`, or a trust anchor that the organisation marks). It is not an issuer role.\n- `access_certificate_provider`: issues the access certificates of relying parties, which sign their presentation requests and signed metadata (LoTE list type `EUWRPACProvidersList`, or a trusted list service of type `WRPAC`).\n- `registration_certificate_provider`: issues the registration certificates of relying parties (LoTE list type `EUWRPRCProvidersList`).\n\nThe issuer roles are `pid_provider`, `qeaa_provider`, `pub_eaa_provider`, `eaa_provider` and `mdl_issuer`; the filter value `issuer` names them all.","enum":["wallet_provider","pid_provider","qeaa_provider","pub_eaa_provider","eaa_provider","mdl_issuer","status_issuer","access_certificate_provider","registration_certificate_provider"],"example":"wallet_provider"}}></SchemaItem><SchemaItem collapsible={false} name={"enabled"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"`true` when the checks can use the source. A source that an accepted list or a stored `etsi_tl` URL uses cannot be turned off (`trust_source.in_use`).","example":true}}></SchemaItem><SchemaItem collapsible={false} name={"url"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"The https URL of the list. `null` for a trust anchor.","example":"https://example.eu/lists/wallet-providers.xml"}}></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>certificates</strong><span className={"openapi-schema__name"}> object[]</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The CA certificates of a trust anchor. An empty array for a list.

</div><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem","paddingBottom":".5rem"}}>Array [</div></li><SchemaItem collapsible={false} name={"subject"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Subject distinguished name of the certificate (RFC 4514).","example":"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE"}}></SchemaItem><SchemaItem collapsible={false} name={"issuer"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Issuer distinguished name of the certificate (RFC 4514).","example":"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE"}}></SchemaItem><SchemaItem collapsible={false} name={"serialNumber"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Serial number of the certificate, as a decimal integer.","example":"690874031736977368252587783617202191683118010803"}}></SchemaItem><SchemaItem collapsible={false} name={"notValidBefore"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"Start of the validity of the certificate (ISO 8601 date-time, UTC).","example":"2025-10-28T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"notValidAfter"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"End of the validity of the certificate (ISO 8601 date-time, UTC).","example":"2027-10-28T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"ski"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"The SubjectKeyIdentifier of the certificate, base64url without padding: an `aki` value of the DCQL `trusted_authorities` for the credentials that this CA signed. `null` when the certificate has none.","example":"s9tIpPmhxdiuNkHMEWNpYim8S8Y"}}></SchemaItem><SchemaItem collapsible={false} name={"sha256Fingerprint"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"SHA-256 fingerprint of the DER encoding of the certificate, in lowercase hexadecimal.","example":"4f0c2a9e1b7d6c3a8e5f2b1d9c7a6e4f3b2a1c0d9e8f7a6b5c4d3e2f1a0b9c8d"}}></SchemaItem><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem"}}>]</div></li></div></details></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>signerCertificates</strong><span className={"openapi-schema__name"}> object[]</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The certificates that sign the list: the wallet verifies the signature of each copy with them. An empty array when the organisation gave none (then `list.signatureVerified` is `false`), and for a trust anchor.

</div><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem","paddingBottom":".5rem"}}>Array [</div></li><SchemaItem collapsible={false} name={"subject"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Subject distinguished name of the certificate (RFC 4514).","example":"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE"}}></SchemaItem><SchemaItem collapsible={false} name={"issuer"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Issuer distinguished name of the certificate (RFC 4514).","example":"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE"}}></SchemaItem><SchemaItem collapsible={false} name={"serialNumber"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Serial number of the certificate, as a decimal integer.","example":"690874031736977368252587783617202191683118010803"}}></SchemaItem><SchemaItem collapsible={false} name={"notValidBefore"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"Start of the validity of the certificate (ISO 8601 date-time, UTC).","example":"2025-10-28T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"notValidAfter"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"End of the validity of the certificate (ISO 8601 date-time, UTC).","example":"2027-10-28T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"ski"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"The SubjectKeyIdentifier of the certificate, base64url without padding: an `aki` value of the DCQL `trusted_authorities` for the credentials that this CA signed. `null` when the certificate has none.","example":"s9tIpPmhxdiuNkHMEWNpYim8S8Y"}}></SchemaItem><SchemaItem collapsible={false} name={"sha256Fingerprint"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"SHA-256 fingerprint of the DER encoding of the certificate, in lowercase hexadecimal.","example":"4f0c2a9e1b7d6c3a8e5f2b1d9c7a6e4f3b2a1c0d9e8f7a6b5c4d3e2f1a0b9c8d"}}></SchemaItem><li><div style={{"fontSize":"var(--ifm-code-font-size)","opacity":"0.6","marginLeft":"-.5rem"}}>]</div></li></div></details></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>list</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__nullable"}>nullable</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The state of the copy of a list that the checks use. The wallet reads the list when you add the source or change its URL, and downloads it on its schedule (at the next update of the list, and at least once each 24 hours), and when you refresh the source. A check never downloads a list: it reads the stored copy. A failed download keeps the last good copy.

</div><SchemaItem collapsible={false} name={"listType"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","nullable":true,"description":"The list type URI of the list, for example `http://uri.etsi.org/19602/LoTEType/EUWalletProvidersList`. `null` before the first good download, or when the list gives none.","example":"http://uri.etsi.org/19602/LoTEType/EUWalletProvidersList"}}></SchemaItem><SchemaItem collapsible={false} name={"sequenceNumber"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","nullable":true,"description":"Sequence number of the copy, as the list gives it. `null` before the first good download.","example":12}}></SchemaItem><SchemaItem collapsible={false} name={"issuedAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"Issue time of the copy of the list (ISO 8601 date-time, UTC).","example":"2026-11-01T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"nextUpdate"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"The latest time of the next list, as the list gives it (ISO 8601 date-time, UTC). A publisher can issue a new list before this time.","example":"2026-12-01T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"state"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`not_downloaded`, `current`, `out_of_date`, `expired`]"} schema={{"type":"string","enum":["not_downloaded","current","out_of_date","expired"],"description":"`not_downloaded`: there is no good copy (a save needs a good copy, so this state comes from a source from before that rule, or from a stored copy that is gone); a check of the roles of the source gives `error`. `current`: now is before `nextUpdate`. `out_of_date`: `nextUpdate` is in the past, but less than the grace time of the platform (default 3 days); the checks use the copy, and the dashboard shows a warning. `expired`: `nextUpdate` is more than the grace time in the past; the checks still use the last stored copy: a match gives `trusted` with the warning `list_expired`, and no match gives `not_found`.","example":"current"}}></SchemaItem><SchemaItem collapsible={false} name={"signatureVerified"} required={true} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","description":"`true` when the wallet verified the signature of the copy with the `signerCertificates` of the source. `false` when the source has none. With `signerCertificates`, a copy whose signature does not verify is refused, and the last good copy stays.","example":true}}></SchemaItem><SchemaItem collapsible={false} name={"entryCount"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Number of trust source entries in the copy.","example":37}}></SchemaItem><SchemaItem collapsible={false} name={"lastFetchedAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"Time of the last good download (ISO 8601 date-time, UTC).","example":"2026-11-07T09:00:02Z"}}></SchemaItem><SchemaItem collapsible={false} name={"lastChangedAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"Time of the last download that changed the content of the list (ISO 8601 date-time, UTC).","example":"2026-11-07T09:00:02Z"}}></SchemaItem><SchemaItem collapsible={false} name={"nextRefreshAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"Time of the next scheduled download (ISO 8601 date-time, UTC).","example":"2026-11-08T09:00:02Z"}}></SchemaItem><SchemaItem collapsible={false} name={"usedUntil"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","nullable":true,"description":"The end of validity of the copy: `nextUpdate` plus the grace time of the platform. After it the list is expired, and a match has the warning `list_expired`. `null` when the list gives no `nextUpdate`.","example":"2026-12-04T00:00:00Z"}}></SchemaItem><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>lastError</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__nullable"}>nullable</span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The last failed download, or `null` when the last download did not fail.

</div><SchemaItem collapsible={false} name={"at"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"Time of the failed download (ISO 8601 date-time, UTC).","example":"2026-11-07T10:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Why the download failed.","example":"HTTP 503 from the list server"}}></SchemaItem></div></details></SchemaItem></div></details></SchemaItem><SchemaItem collapsible={false} name={"createdAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"When the organisation added the source (ISO 8601 date-time, UTC).","example":"2026-11-07T09:00:00Z"}}></SchemaItem><SchemaItem collapsible={false} name={"updatedAt"} required={true} schemaName={"date-time"} qualifierMessage={undefined} schema={{"type":"string","format":"date-time","description":"When the source or the state of its list last changed (ISO 8601 date-time, UTC).","example":"2026-11-07T09:00:02Z"}}></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"trustSource\": {\n    \"id\": \"6d2c0b8e-3f4a-4c1d-9e2b-7a5f1c3d8e90\",\n    \"kind\": \"etsi_lote\",\n    \"name\": \"EU wallet providers\",\n    \"usedFor\": \"wallet_provider\",\n    \"enabled\": true,\n    \"url\": \"https://example.eu/lists/wallet-providers.xml\",\n    \"certificates\": [\n      {\n        \"subject\": \"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE\",\n        \"issuer\": \"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE\",\n        \"serialNumber\": \"690874031736977368252587783617202191683118010803\",\n        \"notValidBefore\": \"2025-10-28T00:00:00Z\",\n        \"notValidAfter\": \"2027-10-28T00:00:00Z\",\n        \"ski\": \"s9tIpPmhxdiuNkHMEWNpYim8S8Y\",\n        \"sha256Fingerprint\": \"4f0c2a9e1b7d6c3a8e5f2b1d9c7a6e4f3b2a1c0d9e8f7a6b5c4d3e2f1a0b9c8d\"\n      }\n    ],\n    \"signerCertificates\": [\n      {\n        \"subject\": \"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE\",\n        \"issuer\": \"CN=Wallet provider root,O=Example Wallet Provider AB,C=SE\",\n        \"serialNumber\": \"690874031736977368252587783617202191683118010803\",\n        \"notValidBefore\": \"2025-10-28T00:00:00Z\",\n        \"notValidAfter\": \"2027-10-28T00:00:00Z\",\n        \"ski\": \"s9tIpPmhxdiuNkHMEWNpYim8S8Y\",\n        \"sha256Fingerprint\": \"4f0c2a9e1b7d6c3a8e5f2b1d9c7a6e4f3b2a1c0d9e8f7a6b5c4d3e2f1a0b9c8d\"\n      }\n    ],\n    \"list\": {\n      \"listType\": \"http://uri.etsi.org/19602/LoTEType/EUWalletProvidersList\",\n      \"sequenceNumber\": 12,\n      \"issuedAt\": \"2026-11-01T00:00:00Z\",\n      \"nextUpdate\": \"2026-12-01T00:00:00Z\",\n      \"state\": \"current\",\n      \"signatureVerified\": true,\n      \"entryCount\": 37,\n      \"lastFetchedAt\": \"2026-11-07T09:00:02Z\",\n      \"lastChangedAt\": \"2026-11-07T09:00:02Z\",\n      \"nextRefreshAt\": \"2026-11-08T09:00:02Z\",\n      \"usedUntil\": \"2026-12-04T00:00:00Z\",\n      \"lastError\": {\n        \"at\": \"2026-11-07T10:00:00Z\",\n        \"message\": \"HTTP 503 from the list server\"\n      }\n    },\n    \"createdAt\": \"2026-11-07T09:00:00Z\",\n    \"updatedAt\": \"2026-11-07T09:00:02Z\"\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"trustSource\": {\n    \"id\": \"929bb7d1-f654-4f10-bb57-8eb42cc2d969\",\n    \"kind\": \"trust_anchor\",\n    \"name\": \"Test provider root CA\",\n    \"usedFor\": \"wallet_provider\",\n    \"enabled\": true,\n    \"url\": null,\n    \"certificates\": [\n      {\n        \"subject\": \"CN=Example Bank AB Test Provider CA (NOT FOR PRODUCTION),O=Example Bank AB,C=SE\",\n        \"issuer\": \"CN=Example Bank AB Test Provider CA (NOT FOR PRODUCTION),O=Example Bank AB,C=SE\",\n        \"serialNumber\": \"108477698159149186209338756128210766651\",\n        \"notValidBefore\": \"2026-10-29T03:36:35Z\",\n        \"notValidAfter\": \"2035-10-29T03:36:35Z\",\n        \"ski\": \"6z-7WgOEQkaGn4SlF_msn_qFfRM\",\n        \"sha256Fingerprint\": \"466682264cc16550fbd13ac7a30d21def374e1d2603a0cea2507ddc9e86ac8b2\"\n      }\n    ],\n    \"signerCertificates\": [],\n    \"list\": null,\n    \"createdAt\": \"2026-11-08T14:46:45Z\",\n    \"updatedAt\": \"2026-11-08T14:46:45Z\"\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The body has a member that the operation does not declare (`<name>: unknown field`), or a value is not valid: `kind must be one of trust_anchor, etsi_trusted_list, etsi_lote`, `url is required for a list`, `url must be an https URL of at most 2048 characters`, `url is not allowed for a trust anchor`, `certificates is required for a trust anchor`, `certificates is not allowed for a list`, `signerCertificates is not allowed for a trust anchor`, `signerCertificates must have at least one PEM certificate`, `usedFor is required: one role that the trust source is used for` (`trust_source.used_for_required`), `usedFor: <role> is not a role; the roles are <roles>`, or a text of the check of the CA certificates (for example `The value contains no CA certificate`, `The certificate <subject> expired`, `At most 10 certificates are allowed`). A list that cannot be read as a list of the kind of the source gives `trust_source.list_not_usable`. Also when the organisation is unknown or has no deployed wallet.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The `Authorization` header is missing, or the API key or token is not valid.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"403"} value={"403"}><div>

The API key or token does not allow this call. An API key without the scope of the operation gets the older body `{"Code", "Message"}`. An `X-SandboxOrgId` header that names another sandbox organisation than the one of the API key gets `{"errorCode", "errorDescription"}`. When a platform admin has turned off the feature of the operation for the organisation, the answer has `errorKey` `feature_disabled` and the member `feature` (the name of the feature).

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><div><span className={"badge badge--info"}>anyOf</span><SchemaTabs><TabItem label={"MOD1"} value={"0-item-properties"}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></TabItem><TabItem label={"Older error body"} value={"1-item-properties"}><SchemaItem collapsible={false} name={"Code"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The HTTP status.","example":403}}></SchemaItem><SchemaItem collapsible={false} name={"Message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"What went wrong.","example":"Unauthorized access;User doesn't have enough permissions;"}}></SchemaItem></TabItem></SchemaTabs></div></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"Code\": 403,\n  \"Message\": \"Unauthorized access;User doesn't have enough permissions;\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Unexpected server error.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      