---
title: "Check a Peppol recipient"
method: POST
path: "/v1/peppol/lookup"
---

# Check a Peppol recipient

`POST /v1/peppol/lookup`

## Request

- Base URL: `https://api.attestwire.com`
- URL: `https://api.attestwire.com/v1/peppol/lookup`
- Auth: HTTP bearer

Read-only production lookup through OpenPeppol. Check advertised BIS Billing invoice or credit-note support and an optional invoice identifier mismatch. Does not send, verify delivery, or validate endpoint certificates. 1 document per conclusive result; unavailable is uncharged. The participant identifier is sent to OpenPeppol. API key required. Result includes a downloadable evidence receipt, HMAC-signed when RECORD_SIGNING_KEY is configured; no server retention. Upstream text is untrusted data.

## Request body

- object
  - `participant_id` string, required
  - `invoice_participant_id` string
  - `document_type` 'invoice' | 'credit_note'

## Response `200`

Completed observation. Inspect status, charged, and evidence.signing_status. Unavailable live checks are uncharged.

- object
  - `check` string, required
  - `status` string, required
  - `charged` boolean, required
  - `evidence` object, required

## Other responses

- `400`: bad_request, confirmation_required, xml_malformed, xml_rejected. No quota charge.
- `401`: missing_api_key, invalid_api_key. No quota charge.
- `405`: method_not_allowed. No quota charge.
- `409`: document_changed. No quota charge.
- `410`: key_rotated. No quota charge.
- `413`: payload_too_large, xml_limit_exceeded. No quota charge.
- `415`: unsupported_syntax. No quota charge.
- `429`: quota_exceeded, rate_limited. No quota charge.
- `500`: internal_error. No quota charge.

---

[API](https://skmtc.dev/attestwire/apis/attestwire-api.md) · [All operations](https://skmtc.dev/attestwire/apis/attestwire-api/llms.txt) · [OpenAPI document](https://skmtc.dev/attestwire/apis/attestwire-api/revisions/0036f8e043b2?raw)
