Software
The seal is software.
The machine looks. The software signs, keeps and answers for what it saw. Through an API, webhooks, and speaking directly with your AI agents.

KYP Seal
Sign. Seal. Keep.
Every capture becomes a record: size, weight, images and label reading, bound together by a cryptographic fingerprint.
The fingerprint is sealed with a time certified by a qualified provider and stored in a ledger that only grows. If anything changes, it shows. We cannot touch it either.
- Fingerprint
- SHA-256 of the full record
- Time
- Qualified timestamp (eIDAS)
- Custody
- Append-only ledger, EU copy
- Output
- PDF with QR + signed JSON
KYP Verify
Anyone can check it.
Every record carries a public link and QR code. Whoever opens it sees what you see: what was measured, when, with which device, and whether the fingerprint is still intact.
No account. No cost. No need to ask us. That is the difference between a capture and a proof.
Native AI
It speaks to AI. Natively.
Know Your Parcel does not just have an API. It has an MCP server and described tools so any compatible AI assistant or agent can search, verify and compare records, and build a claim file, without anyone writing a line of integration.
And something more important: an AI can make up an answer, but not a Know Your Parcel proof. Either the fingerprint matches or it does not. Your agents cite sealed facts, with a link, instead of guessing.
Tools for agents
kyp_find_recordsFinds records by order, tracking, customer or date.kyp_get_recordReturns the record: size, weight, images, label and seal.kyp_verifyChecks that a record or a file is still intact.kyp_compareSets two records side by side, such as outbound and return.kyp_check_declarationCross-checks what was declared against what was measured.kyp_build_dossierBuilds a claim file ready to send.
The customer says order ORD-88213 arrived broken. How did it leave?
kyp_find_records · reference: "ORD-88213" → 1 outbound record
kyp_verify · KYP-2026-000123 → intact
It left on 7 October at 09:41 UTC: 32.0 × 24.5 × 18.0 cm and 2.340 kg, with no visible packaging damage in either image. The record is intact. Shall I prepare the file for the carrier?
Yes, in Spanish.
kyp_build_dossier · claim: damage, lang: es → ready
Claim file ready, with a public verification link. Attaching it to the claim.
Connect it in a minute
- MCP server with key authentication and per-tool permissions
- OpenAPI 3.1 schemas ready for function calling
- Machine-readable documentation (llms.txt)
- Records as signed JSON with content credentials
{
"mcpServers": {
"kyp": {
"url": "https://mcp.knowyourparcel.com",
"headers": { "Authorization": "Bearer kyp_sk_…" }
}
}
}API
Everything is a call.
REST, JSON and webhooks. One key per environment, per-resource permissions and a log of every request. Open an endpoint to see the shape of the response.
Records
POST/v1/recordsCreates and seals a record from a capture.
{
"device": "pns-0007",
"reference": "ORD-88213",
"capture": "cap_9f1a…",
"declared": {
"weight_kg": 2.3,
"contents": "Laptop"
}
}{
"id": "KYP-2026-000123",
"status": "sealed",
"sealed_at": "2026-10-07T09:41:18Z",
"sha256": "…a91f",
"verify_url": "https://verify.knowyourparcel.com/KYP-2026-000123"
}GET/v1/records/{id}Returns the full record: signed JSON, PDF and images.
{
"id": "KYP-2026-000123",
"reference": "ORD-88213",
"measured": {
"l_cm": 32,
"w_cm": 24.5,
"h_cm": 18,
"weight_kg": 2.34
},
"images": [
"top",
"perspective"
],
"label": {
"carrier": "UPS",
"tracking": "1Z…"
},
"device": {
"id": "pns-0007",
"integrity": "ok"
},
"seal": {
"timestamp": "qualified",
"sha256": "…a91f"
},
"files": {
"pdf": "…/KYP-2026-000123.pdf",
"json": "…/KYP-2026-000123.json"
}
}GET/v1/records?reference=ORD-88213Searches by order, tracking, customer, station or date.
{
"data": [
{
"id": "KYP-2026-000123",
"reference": "ORD-88213",
"sealed_at": "2026-10-07T09:41:18Z",
"kind": "outbound"
},
{
"id": "KYP-2026-000481",
"reference": "ORD-88213",
"sealed_at": "2026-10-19T15:02:44Z",
"kind": "return"
}
],
"next": null
}Verification
GET/v1/verify/{id}Checks fingerprint, timestamp and device signature. Public, no key.
{
"id": "KYP-2026-000123",
"intact": true,
"sealed_at": "2026-10-07T09:41:18Z",
"timestamp_authority": "qualified (eIDAS)",
"device": "pns-0007",
"checks": {
"fingerprint": "match",
"timestamp": "valid",
"device_signature": "valid"
}
}POST/v1/verify/fileUpload a PDF or image and learn whether it is an intact record.
multipart/form-data file=@acta.pdf{
"is_kyp_record": true,
"id": "KYP-2026-000123",
"intact": false,
"reason": "fingerprint_mismatch"
}Analysis
POST/v1/compareSets two records side by side: weight, size and packaging. Returns differences, not verdicts.
{
"a": "KYP-2026-000123",
"b": "KYP-2026-000481"
}{
"weight_kg": {
"a": 2.34,
"b": 0.41,
"delta": -1.93
},
"dims_cm": {
"a": [
32,
24.5,
18
],
"b": [
32,
24.5,
18
],
"delta": [
0,
0,
0
]
},
"packaging": "changed",
"differences": [
"weight",
"packaging"
],
"verdict": null
}POST/v1/declarations/checkCross-checks declared against measured, including dimensional weight.
{
"reference": "ORD-88213",
"declared": {
"weight_kg": 1.2,
"dims_cm": [
30,
20,
10
],
"contents": "Book"
}
}{
"record": "KYP-2026-000123",
"mismatches": [
{
"field": "weight_kg",
"declared": 1.2,
"measured": 2.34
},
{
"field": "dims_cm",
"declared": [
30,
20,
10
],
"measured": [
32,
24.5,
18
]
}
],
"dim_weight_kg": {
"declared": 1.2,
"measured": 2.82
}
}Claims
POST/v1/dossiersBuilds the claim file: records, timeline, seals and a public link.
{
"records": [
"KYP-2026-000123"
],
"claim": {
"type": "damage",
"counterparty": "carrier",
"reference": "1Z…"
},
"lang": "es"
}{
"id": "dos_7c2e…",
"status": "ready",
"pdf": "…/dossier.pdf",
"zip": "…/evidence.zip",
"share_url": "https://verify.knowyourparcel.com/d/dos_7c2e…"
}Operations
GET/v1/devices/{id}Status and integrity of each station: calibration, activity and alerts.
{
"id": "pns-0007",
"online": true,
"integrity": "ok",
"calibration": {
"status": "valid",
"last": "2026-10-01"
},
"records_today": 412,
"alerts": []
}POST/v1/exportsExports records and evidence for audit.
{
"from": "2026-10-01",
"to": "2026-10-31",
"format": "zip"
}{
"id": "exp_31b0…",
"status": "processing",
"format": "zip",
"records": 18240,
"notify": "webhook"
}Webhooks
record.sealedrecord.verifiedcompare.mismatchdeclaration.mismatchdossier.readydevice.integrity_alert
SDK
TypeScript and Python. Sandbox with a simulated station.
API v1 being designed with pilot partners. Routes and fields are illustrative.
For those who do not read code.
Everything the API does also has a dashboard. This is the day to day.
- 01
One-click claim file
Pick the order and download the claim, ready for the carrier or insurer, in their language.
- 02
Outbound versus return
What left and what came back, side by side. If it weighs 1.9 kg less, you see it before refunding.
- 03
Declared versus measured
Every weight, size or contents discrepancy flagged before customs or the carrier flags it.
- 04
Evidence search
By order, tracking, customer, date or station. Every result with its verifiable link.
- 05
Alerts
Differences, stations out of calibration or tampering attempts, instantly, wherever you work.
- 06
Audit
Export months of records with their seals for an auditor, a judge or a customer. Without asking us.
KYP Lite · In development
No machine. Just a phone.
For those who do not need a station: capture with a phone against printed rulers, with the image signed on the device itself so nobody can inject one along the way.
Less precision than PackNSign, the same chain of custody. It comes after the pilot.

What we keep to ourselves.
Some things are not published. They are told in a meeting, with a confidentiality agreement on the table.
- How the station signs each image before it leaves the device.
- How we detect an injected or generated image trying to bypass the camera.
- How we calibrate the measurement so the photo is proof, not an estimate.
- How we score each parcel’s risk without deciding for you.
What we do not do.
- We do not let artificial intelligence decide whether a photo is fake. We certify that it came from a real camera, on an intact device, at a sealed instant.
- We do not issue verdicts. We issue evidence. Whoever decides keeps deciding.
- We do not touch your customer data. The record carries what is needed to prove the parcel, and nothing else.