> ## 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.

# Look up a Peppol participant

> Checks whether a company is registered and reachable in the Peppol
network. Exactly one of `peppol_id` or `vat` must be provided.

When `vat` is used, the service derives the Peppol participant
identifier using the country-specific scheme rules (e.g. `9920:` for
Spain, `0208:` for Belgium). If no scheme can be determined for
the given country the request will fail with `400 Bad Request`.

A `200` response with `found: false` means the participant ID was
resolved but is not yet registered in the network — this is **not**
an error condition.

Check whether a company is registered and reachable in the Peppol network. Provide either a `peppol_id` or a `vat` number — not both.

A `200` response with `found: false` means the participant ID was resolved but is not yet registered in the network. This is not an error.


## OpenAPI

````yaml GET /apps/peppol/v1/lookup
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/lookup:
    get:
      summary: Look up a Peppol participant
      description: |-
        Checks whether a company is registered and reachable in the Peppol
        network. Exactly one of `peppol_id` or `vat` must be provided.

        When `vat` is used, the service derives the Peppol participant
        identifier using the country-specific scheme rules (e.g. `9920:` for
        Spain, `0208:` for Belgium). If no scheme can be determined for
        the given country the request will fail with `400 Bad Request`.

        A `200` response with `found: false` means the participant ID was
        resolved but is not yet registered in the network — this is **not**
        an error condition.
      operationId: lookupParticipant
      parameters:
        - name: peppol_id
          in: query
          description: |-
            Full Peppol participant identifier in `scheme:value` format,
            e.g. `0002:123456789`.
            Mutually exclusive with `vat`.
          schema:
            type: string
            example: '0002:123456789'
        - name: vat
          in: query
          description: |-
            VAT number prefixed with the ISO 3166-1 alpha-2 country code,
            e.g. `FR123456789` or `DE123456789`.
            Mutually exclusive with `peppol_id`.
          schema:
            type: string
            example: FR123456789
      responses:
        '200':
          description: Lookup completed — check `found` to determine network presence.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupResponse'
              examples:
                found:
                  summary: Participant is registered
                  value:
                    peppol_id: '0002:123456789'
                    found: true
                not_found:
                  summary: Participant is not registered
                  value:
                    peppol_id: '0002:123456789'
                    found: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    LookupResponse:
      type: object
      required:
        - peppol_id
        - found
      properties:
        peppol_id:
          type: string
          description: |-
            Resolved Peppol participant identifier in `scheme:value` format.
            Populated even when `found` is `false`.
          example: '0002:123456789'
        found:
          type: boolean
          description: >-
            Whether the participant is currently registered in the Peppol
            network.
          example: true
    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
    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>`

````