openapi: 3.2.0 info: title: Pagopa Purpose Templates API contact: name: API Support url: https://github.com/pagopa/pdnd-interop-frontend/issues termsOfService: https://selfcare.interop.pagopa.it/ui/it/termini-di-servizio x-summary: PDND Interoperability API version: '1.0' description: 'Operations tagged purposeTemplates across 3 of this provider''s published API definitions: interop-api-v3.yaml, pagopa-pdnd-interop-v2-openapi.yml, pagopa-pdnd-interop-v3-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.interop.pagopa.it/v3 description: Production environment - url: https://api.interop.pagopa.it/v2 description: PROD environment tags: - name: purposeTemplates description: Purpose Templates routes paths: /purposeTemplates: get: tags: - purposeTemplates summary: List Purpose Templates description: Retrieve a list of Purpose Templates based on filters operationId: getPurposeTemplates parameters: - in: query name: purposeTitle description: Filter Purpose Templates by title. If not specified, return Purpose Templates for any title. schema: type: string - in: query name: creatorIds description: Filter Purpose Templates by Creator IDs. If not specified, return Purpose Templates for any Creator. schema: type: array items: type: string format: uuid default: [] explode: false - $ref: '#/components/parameters/EserviceIdsParam' - in: query name: states description: 'Filter Purpose Templates by states. If not specified, return Purpose Templates for any state. Purpose Templates in Draft state are visible only to their creator. ' schema: type: array items: $ref: '#/components/schemas/PurposeTemplateState' default: [] explode: false - in: query name: targetTenantKind description: Filter Purpose Templates by target tenant kind. If not specified, return Purpose Templates for any tenant kind. schema: $ref: '#/components/schemas/TargetTenantKind' - in: query name: handlesPersonalData description: Filter Purpose Templates by whether they handle personal data. If not specified, return Purpose Templates that both handle and do not handle personal data. schema: type: boolean - $ref: '#/components/parameters/OffsetParam' - $ref: '#/components/parameters/LimitParam' responses: '200': description: Purpose Templates retrieved content: application/json: schema: $ref: '#/components/schemas/PurposeTemplates' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] post: tags: - purposeTemplates summary: Create a new Purpose Template description: Create a new Purpose Template in Draft state operationId: createPurposeTemplate requestBody: content: application/json: schema: $ref: '#/components/schemas/PurposeTemplateSeed' required: true responses: '201': description: Purpose Template created content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '409': description: Name Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' get: tags: - purposeTemplates summary: Retrieve a Purpose Template operationId: getPurposeTemplate responses: '200': description: Purpose Template retrieved content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] patch: tags: - purposeTemplates summary: Update a Draft Purpose Template description: Update a Purpose Template in Draft state operationId: updateDraftPurposeTemplate requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/PurposeTemplateDraftUpdateSeed' required: true responses: '200': description: Draft Purpose Template updated content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Name Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] delete: tags: - purposeTemplates summary: Delete a Purpose Template in Draft state description: Delete a Purpose Template that is in Draft state operationId: deletePurposeTemplate responses: '200': description: Purpose Template deleted content: application/json: schema: $ref: '#/components/schemas/VoidObject' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: The Purpose Template is not in Draft state content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/riskAnalysis: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' get: tags: - purposeTemplates summary: Retrieve the Risk Analysis of a Purpose Template operationId: getPurposeTemplateRiskAnalysis responses: '200': description: Purpose Template Risk Analysis retrieved content: application/json: schema: $ref: '#/components/schemas/RiskAnalysisFormTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] put: tags: - purposeTemplates summary: Replace the Risk Analysis of a Purpose Template description: Replace the Risk Analysis of a Purpose Template in Draft state operationId: replacePurposeTemplateRiskAnalysis requestBody: content: application/json: schema: $ref: '#/components/schemas/RiskAnalysisFormTemplateSeed' required: true responses: '200': description: Risk Analysis Form Template updated content: application/json: schema: $ref: '#/components/schemas/RiskAnalysisFormTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Name Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/riskAnalysis/annotationDocuments: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' get: tags: - purposeTemplates summary: Retrieve a list of Risk Analysis Template Annotation Documents description: Retrieve a list of Risk Analysis Template Annotation Documents for the specified Purpose Template operationId: getRiskAnalysisTemplateAnnotationDocuments parameters: - $ref: '#/components/parameters/OffsetParam' - $ref: '#/components/parameters/LimitParam' responses: '200': description: Risk Analysis Template Annotation Documents retrieved headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' content: application/json: schema: $ref: '#/components/schemas/RiskAnalysisTemplateAnnotationDocuments' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] post: tags: - purposeTemplates summary: Upload a Risk Analysis Form Template Answer Annotation Document description: Upload a Document for the specified Risk Analysis Form Template Answer Annotation operationId: uploadRiskAnalysisTemplateAnswerAnnotationDocument requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/RiskAnalysisTemplateAnnotationDocumentUploadMultipart' required: true responses: '201': description: Risk Analysis Form Template Answer Annotation Document uploaded successfully content: application/json: schema: $ref: '#/components/schemas/Document' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/riskAnalysis/annotationDocuments/{documentId}: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' - name: documentId in: path description: The Document ID of the Answer Annotation required: true schema: type: string format: uuid get: tags: - purposeTemplates summary: Retrieve the Document of a Risk Analysis Form Template Answer Annotation operationId: getRiskAnalysisTemplateAnswerAnnotationDocument responses: '200': description: Risk Analysis Form Template Answer Annotation Document retrieved, a multipart containing the file and its metadata content: multipart/form-data: schema: $ref: '#/components/schemas/FileDownloadMultipart' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] delete: tags: - purposeTemplates summary: Delete the Document of a Risk Analysis Form Template Answer Annotation operationId: deleteRiskAnalysisTemplateAnswerAnnotationDocument responses: '200': description: Risk Analysis Form Template Answer Annotation Document deleted content: application/json: schema: $ref: '#/components/schemas/VoidObject' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/eservices: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' get: tags: - purposeTemplates summary: List E-Services linked to a Purpose Template description: Retrieve a list of E-Services linked to a specific Purpose Template operationId: getPurposeTemplateEServices parameters: - in: query name: producerIds description: Filter Purpose Template linked E-Services by E-Service Producer IDs. If not specified, return linked E-Services for any Producer. schema: type: array items: type: string format: uuid default: [] explode: false - in: query name: eserviceName description: Filter Purpose Template linked E-Services by E-Service name. If not specified, return linked E-Services for any name. schema: type: string - $ref: '#/components/parameters/OffsetParam' - $ref: '#/components/parameters/LimitParam' responses: '200': description: Purpose Template E-Services retrieved content: application/json: schema: $ref: '#/components/schemas/EServices' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] post: tags: - purposeTemplates summary: Link an E-Service to a Purpose Template description: Link an E-Service to a Purpose Template that is in Draft or Active state operationId: addPurposeTemplateEService requestBody: content: application/json: schema: $ref: '#/components/schemas/PurposeTemplateLinkEService' required: true responses: '200': description: E-Services linked to Purpose Template content: application/json: schema: $ref: '#/components/schemas/VoidObject' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/eservices/{eserviceId}: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' - name: eserviceId in: path description: The Eservice ID to unlink required: true schema: $ref: '#/components/schemas/EServiceId' delete: tags: - purposeTemplates summary: Unlink an E-Service From Purpose Template description: Unlink an E-Service From a Purpose Template that is in Draft or Active state operationId: removePurposeTemplateEService responses: '200': description: E-Service unlinked from Purpose Template content: application/json: schema: $ref: '#/components/schemas/VoidObject' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/publish: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' post: summary: Publish a Purpose Template in Draft state description: Publish a Purpose Template that is in Draft state, transitioning it to Published state operationId: publishPurposeTemplate tags: - purposeTemplates responses: '200': description: Purpose Template published content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/archive: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' post: summary: Archive a Purpose Template in Published or Suspended state description: Archive a Purpose Template that is in Published or Suspended state, transitioning it to Archived state operationId: archivePurposeTemplate tags: - purposeTemplates responses: '200': description: Purpose Template archived content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/unsuspend: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' post: summary: Unsuspend a Purpose Template in Suspended state description: Unsuspend a Purpose Template that is in Suspended state, transitioning it to Published state operationId: unsuspendPurposeTemplate tags: - purposeTemplates responses: '200': description: Purpose Template unsuspended content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment /purposeTemplates/{purposeTemplateId}/suspend: parameters: - name: purposeTemplateId in: path description: The Purpose Template ID required: true schema: $ref: '#/components/schemas/PurposeTemplateId' post: summary: Suspend a Purpose Template in Published state description: Suspend a Purpose Template that is in Published state, transitioning it to Suspended state operationId: suspendPurposeTemplate tags: - purposeTemplates responses: '200': description: Purpose Template suspended content: application/json: schema: $ref: '#/components/schemas/PurposeTemplate' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' '429': $ref: '#/components/responses/TooManyRequests' security: - DPoPAuth: [] DPoPProofHeader: [] servers: - url: https://api.interop.pagopa.it/v3 description: Production environment components: schemas: PurposeTemplateId: type: string format: uuid description: The unique identifier of the Purpose Template PurposeTemplates: type: object additionalProperties: false properties: results: type: array items: $ref: '#/components/schemas/PurposeTemplate' pagination: $ref: '#/components/schemas/Pagination' required: - results - pagination RiskAnalysisFormTemplate: type: object additionalProperties: false properties: version: type: string minLength: 1 maxLength: 250 answers: description: 'Key-value pairs of risk analysis form template answers. Key: question ID; value: template of the answer ' additionalProperties: $ref: '#/components/schemas/RiskAnalysisTemplateAnswer' required: - version - answers Problem: properties: type: description: URI reference of type definition type: string status: description: The HTTP status code generated by the origin server for this occurrence of the problem example: 503 format: int32 minimum: 100 type: integer exclusiveMaximum: 600 title: description: A short, summary of the problem type. Written in english and readable example: Service Unavailable maxLength: 64 pattern: ^[ -~]{0,64}$ type: string correlationId: description: Unique identifier of the request example: 53af4f2d-0c87-41ef-a645-b726a821852b maxLength: 64 type: string detail: description: A human readable explanation of the problem example: Request took too long to complete maxLength: 4096 pattern: ^.{0,1024}$ type: string errors: type: array minItems: 1 items: $ref: '#/components/schemas/ProblemError' additionalProperties: false required: - type - status - title ProblemError: properties: code: description: Internal code of the error example: 123-4567 minLength: 8 maxLength: 8 pattern: ^[0-9]{3}-[0-9]{4}$ type: string detail: description: A human readable explanation specific to this occurrence of the problem example: Parameter not valid maxLength: 4096 pattern: ^.{0,1024}$ type: string required: - code - detail Pagination: type: object additionalProperties: false properties: offset: type: integer format: int32 minimum: 0 limit: type: integer format: int32 minimum: 1 maximum: 50 totalCount: type: integer format: int32 minimum: 0 required: - offset - limit - totalCount RiskAnalysisTemplateAnnotationDocument: type: object additionalProperties: false properties: document: $ref: '#/components/schemas/Document' answerId: type: string format: uuid required: - document - answerId RiskAnalysisFormTemplateSeed: type: object additionalProperties: false properties: version: type: string minLength: 1 maxLength: 250 answers: description: 'Key-value pairs of risk analysis form template answers. Key: question ID; value: template of the answer ' additionalProperties: $ref: '#/components/schemas/RiskAnalysisTemplateAnswerSeed' required: - version - answers EServiceTechnology: type: string description: API Technology enum: - REST - SOAP TargetTenantKind: type: string description: The Target Tenant Kind of a Purpose Template enum: - PA - PRIVATE EServices: type: object additionalProperties: false properties: results: type: array items: $ref: '#/components/schemas/EService' pagination: $ref: '#/components/schemas/Pagination' required: - results - pagination PurposeTemplateState: type: string description: Purpose Template State enum: - PUBLISHED - DRAFT - SUSPENDED - ARCHIVED RiskAnalysisTemplateAnnotationDocuments: type: object additionalProperties: false properties: results: type: array items: $ref: '#/components/schemas/RiskAnalysisTemplateAnnotationDocument' pagination: $ref: '#/components/schemas/Pagination' required: - results - pagination Document: type: object additionalProperties: false required: - id - name - prettyName - contentType - createdAt properties: id: type: string format: uuid description: Unique identifier of the file name: type: string description: The name of the file prettyName: type: string description: A human-readable name for the file contentType: type: string description: The content type of the file createdAt: type: string format: date-time description: The date and time when the file was uploaded VoidObject: type: object additionalProperties: false description: An empty object PurposeTemplateSeed: type: object additionalProperties: false description: contains the expected payload for purpose template creation properties: targetDescription: type: string minLength: 10 maxLength: 250 targetTenantKind: $ref: '#/components/schemas/TargetTenantKind' purposeTitle: type: string minLength: 5 maxLength: 60 purposeDescription: type: string minLength: 10 maxLength: 250 purposeIsFreeOfCharge: type: boolean purposeFreeOfChargeReason: type: string purposeDailyCalls: description: Maximum number of daily calls that the purpose can perform type: integer format: int32 minimum: 1 maximum: 1000000000 handlesPersonalData: type: boolean required: - targetDescription - targetTenantKind - purposeTitle - purposeDescription - purposeIsFreeOfCharge - handlesPersonalData TemplateId: type: string format: uuid description: The unique identifier of the Template EServiceMode: type: string description: Indicates if the E-Service is intended for receiving or delivering data enum: - RECEIVE - DELIVER EServiceId: type: string format: uuid description: The unique identifier of the E-Service RiskAnalysisTemplateAnswerSeed: type: object additionalProperties: false properties: values: type: array items: type: string minLength: 1 maxLength: 2000 editable: type: boolean annotationText: type: string minLength: 1 maxLength: 2000 suggestedValues: type: array items: type: string minLength: 1 maxLength: 250 required: - values - editable - suggestedValues PurposeTemplateLinkEService: type: object additionalProperties: false properties: eserviceId: $ref: '#/components/schemas/EServiceId' required: - eserviceId EService: type: object additionalProperties: false properties: id: type: string format: uuid producerId: type: string format: uuid name: type: string description: type: string technology: $ref: '#/components/schemas/EServiceTechnology' mode: $ref: '#/components/schemas/EServiceMode' isSignalHubEnabled: type: boolean isConsumerDelegable: type: boolean isClientAccessDelegable: type: boolean templateId: $ref: '#/components/schemas/TemplateId' personalData: type: boolean required: - id - producerId - name - description - technology - descriptors - mode PurposeTemplate: type: object additionalProperties: false properties: id: type: string format: uuid targetDescription: type: string targetTenantKind: $ref: '#/components/schemas/TargetTenantKind' creatorId: type: string format: uuid description: The ID of the Tenant that created the Purpose Template state: $ref: '#/components/schemas/PurposeTemplateState' createdAt: type: string format: date-time updatedAt: type: string format: date-time purposeTitle: type: string purposeDescription: type: string purposeIsFreeOfCharge: type: boolean purposeFreeOfChargeReason: type: string purposeDailyCalls: description: Maximum number of daily calls that the purpose can perform type: integer format: int32 minimum: 1 maximum: 1000000000 handlesPersonalData: type: boolean required: - id - targetDescription - targetTenantKind - creatorId - state - createdAt - purposeTitle - purposeDescription - purposeIsFreeOfCharge - handlesPersonalData FileDownloadMultipart: type: object additionalProperties: false required: - file - filename - contentType - id properties: file: type: string format: binary description: The file to download filename: type: string description: The name of the file contentType: type: string description: The content type of the file id: type: string format: uuid description: Unique identifier of the file prettyName: type: string description: A human-readable name for the file RiskAnalysisTemplateAnswer: type: object additionalProperties: false properties: id: type: string format: uuid values: type: array items: type: string minLength: 1 maxLength: 2000 editable: type: boolean annotationText: type: string minLength: 1 maxLength: 2000 suggestedValues: type: array items: type: string minLength: 1 maxLength: 250 required: - id - values - editable - suggestedValues PurposeTemplateDraftUpdateSeed: type: object additionalProperties: false properties: targetDescription: type: string minLength: 10 maxLength: 250 targetTenantKind: $ref: '#/components/schemas/TargetTenantKind' purposeTitle: type: string minLength: 5 maxLength: 60 purposeDescription: type: string minLength: 10 maxLength: 250 purposeIsFreeOfCharge: type: boolean purposeFreeOfChargeReason: type: - string - 'null' purposeDailyCalls: type: - integer - 'null' format: int32 minimum: 1 maximum: 1000000000 handlesPersonalData: type: boolean RiskAnalysisTemplateAnnotationDocumentUploadMultipart: type: object additionalProperties: false required: - file - prettyName - answerId properties: file: type: string format: binary description: The file to upload prettyName: type: string description: A human-readable name for the file answerId: type: string description: The ID of the answer containing the annotation PurposeTemplateLinkEService_2: type: object additionalProperties: false properties: eserviceId: type: string format: uuid required: - eserviceId EService_2: type: object additionalProperties: false properties: id: type: string format: uuid producerId: type: string format: uuid name: type: string description: type: string technology: $ref: '#/components/schemas/EServiceTechnology' mode: $ref: '#/components/schemas/EServiceMode' isSignalHubEnabled: type: boolean isConsumerDelegable: type: boolean isClientAccessDelegable: type: boolean templateId: type: string format: uuid personalData: type: boolean required: - id - producerId - name - description - technology - descriptors - mode headers: IntegrityRest02AgidJwtSignatureHeader: description: 'The `Agid-JWT-Signature` header contains a JSON Web Signature (JWS) signed with the PDND API private key. It ensures payload integrity and non-repudiation across all responses (both success and error), in compliance with: 1) Linee Guida sull''interoperabilità tecnica delle Pubbliche Amministrazioni - Pattern di sicurezza, 2) RFC 7515 and 3) RFC 7519. ' schema: type: string RateLimitRemainingHeader: schema: type: integer format: int32 minimum: 0 description: Remaining requests within time interval RateLimitIntervalHeader: schema: type: integer format: int32 minimum: 0 description: Time interval in milliseconds. Allowed requests will be constantly replenished during the interval. At the end of the interval the max allowed requests will be available RateLimitLimitHeader: schema: type: integer format: int32 minimum: 0 description: Max allowed requests within time interval IntegrityRest02DigestHeader: schema: type: string pattern: ^SHA-256=[a-zA-Z0-9+/]{43}=$ description: 'Digest of the body using the canonical JSON representation of the response body. The digest is calculated using the SHA-256 algorithm on the response body exactly as it is sent to the client, encoded in Base64 as per RFC 3230 ' responses: Forbidden: description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' Unauthorized: description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' BadRequest: description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' NotFound: description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' TooManyRequests: description: Too Many Requests content: application/problem+json: schema: $ref: '#/components/schemas/Problem' headers: X-Rate-Limit-Limit: $ref: '#/components/headers/RateLimitLimitHeader' X-Rate-Limit-Remaining: $ref: '#/components/headers/RateLimitRemainingHeader' X-Rate-Limit-Interval: $ref: '#/components/headers/RateLimitIntervalHeader' Digest: $ref: '#/components/headers/IntegrityRest02DigestHeader' Agid-JWT-Signature: $ref: '#/components/headers/IntegrityRest02AgidJwtSignatureHeader' parameters: LimitParam: in: query name: limit description: Maximum number of results to return required: true schema: type: integer format: int32 minimum: 1 maximum: 50 EserviceIdsParam: in: query name: eserviceIds description: Filter by E-Service IDs. If not specified, return results for any E-Service required: false explode: false schema: type: array items: type: string format: uuid default: [] OffsetParam: in: query name: offset description: Pagination starting position required: true schema: type: integer format: int32 minimum: 0 securitySchemes: DPoPAuth: type: http scheme: DPoP description: 'This Authorization header must be used alongside the DPoP Proof JWT. Use: Authorization: DPoP The access token generated must also have a cnf field. ' DPoPProofHeader: type: apiKey in: header name: DPoP description: 'DPoP proof JWT for sender-constrained access. Must accompany the DPoP Authorization header. ' bearerAuth: type: http scheme: bearer bearerFormat: JWT x-refined-from: - interop-api-v3.yaml - pagopa-pdnd-interop-v2-openapi.yml - pagopa-pdnd-interop-v3-openapi.yml