> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload proof of ownership PDF

> Uploads a proof-of-ownership PDF for a company that is being
registered in the Peppol network.

The document must be a valid PDF (`application/pdf`). Once uploaded
the service validates the document and, if accepted, completes the
registration flow for the silo entry.

This endpoint is idempotent: uploading a new document for an entry
that has already completed registration replaces the previous one
and re-triggers completion.

This endpoint allows you to upload a proof of ownership PDF document for Peppol registration. Upload it to Invopop so that it will be stored as an attachment to the silo entry. This document serves as verification of company ownership and is required for Peppol participant registration compliance.

The uploaded PDF will be reviewed by Invopop as part of the validation process, which can take up to 72 hours. The approval status can be monitored through the silo entry's metadata.


## OpenAPI

````yaml POST /apps/peppol/v1/entry/{silo_entry_id}/ownership
openapi: 3.1.0
info:
  contact:
    email: dev@invopop.com
    name: Invopop Developers
  description: >-
    Set of end-points that help you register companies for Peppol network
    participation and manage ownership documentation.
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  title: Peppol Service API
  version: 0.1.0
servers:
  - description: production
    url: https://api.invopop.com
security:
  - InvopopAuth: []
paths:
  /apps/peppol/v1/entry/{silo_entry_id}/ownership:
    post:
      summary: Upload proof of ownership document
      description: |-
        Uploads a proof-of-ownership PDF for a company that is being
        registered in the Peppol network.

        The document must be a valid PDF (`application/pdf`). Once uploaded
        the service validates the document and, if accepted, completes the
        registration flow for the silo entry.

        This endpoint is idempotent: uploading a new document for an entry
        that has already completed registration replaces the previous one
        and re-triggers completion.
      operationId: uploadOwnership
      parameters:
        - name: silo_entry_id
          in: path
          required: true
          description: >-
            UUID of the Invopop silo entry associated with the company being
            registered.
          schema:
            type: string
            format: uuid
            example: 01952667-f2a0-7a66-a3c9-8f4c3c7e5c0b
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OwnershipUploadRequest'
      responses:
        '204':
          description: Document uploaded and registration completed successfully.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    OwnershipUploadRequest:
      type: object
      required:
        - data
      properties:
        data:
          type: string
          format: byte
          description: |-
            Base64-encoded binary content of the ownership document.
            Must be a valid PDF (`application/pdf`). This document proves
            authorization to represent the company in Peppol network
            transactions.
          example: JVBERi0xLjQK...
    Error:
      type: object
      required:
        - status
        - message
      properties:
        status:
          type: string
          enum:
            - error
          example: error
        message:
          type: string
          description: Human-readable description of the error.
          example: peppol_id or vat required
  responses:
    BadRequest:
      description: The request is malformed or missing required parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: error
            message: peppol_id or vat required
    Unauthorized:
      description: Missing or invalid authentication token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: error
            message: unauthorized
    UnprocessableEntity:
      description: |-
        The request was well-formed but failed business validation —
        e.g. the uploaded file is not a valid PDF.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: error
            message: ownership file must be a PDF
    InternalServerError:
      description: An unexpected server-side error occurred.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: error
            message: internal server error
  securitySchemes:
    InvopopAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |-
        Authenticate using a valid Invopop enrollment token in the `Bearer`
        scheme.

        Example: `Authorization: Bearer <token>`

````