---
title: "Vendor-attested off-network transaction (vendor key auth)"
method: POST
path: "/v1/attestations"
---

# Vendor-attested off-network transaction (vendor key auth)

`POST /v1/attestations`

## Request

- Base URL: `https://agenticfabricationnetwork.ai`
- URL: `https://agenticfabricationnetwork.ai/v1/attestations`
- Auth: HTTP bearer

Vendors report transactions that happened outside this network — direct agent-to-vendor over the UFP vendor binding, or any other channel — to earn reputation credit and feed demand-gap routing. Auth is a vendor attestation key (ufp_vk_…), never an agent key; vendor identity comes from the key, a vendor_id in the payload is ignored. Idempotent on attestation_id: resubmitting updates (quoted_only → fulfilled). Credit is a ladder: bare attestation = partial, always labeled attested_transaction; evidence makes it spot-checkable; buyer confirmation = full (an unverified token never earns full). Full doc: /docs/attestations.md.

## Request body

- TransactionAttestation
  - `attestation_id` string, required: Vendor-generated idempotency key — resubmitting the same id updates the attestation (quoted_only → fulfilled), never duplicates
  - `ufp_version` string, required
  - `request` object, required: What the buyer asked for — raw, pre-resolution (demand-signal grade)
    - `process` 'fdm_print' | 'resin_print' | 'powder_print' | 'metal_print' | 'elastomer_print' | 'cnc' | 'sheetmetal' | 'laser_cut' | 'decal' | 'print' | 'apparel'
    - `spec` object
    - `constraints` object
  - `offer` object: What was offered/made. Prices may be omitted if commercially sensitive (less credit)
    - `spec_resolved` object
    - `quantity` integer
    - `subtotal_cents` integer
  - `outcome` 'quoted_only' | 'ordered' | 'fulfilled' | 'cancelled' | 'refunded' | 'lost_capability_gap', required
  - `gaps` object[]: What could not be delivered as asked — e.g. {field:"quantity", requested:3, provided:10, reason:"vendor_minimum"}. Feeds the network's demand-gap routing.
    - `field` string
    - `requested` unknown
    - `provided` unknown
    - `reason` 'vendor_minimum' | 'vendor_maximum' | 'out_of_stock' | 'capability_gap' | 'lead_time' | 'price' | 'other'
    - `note` string
  - `occurred_at` string, date-time, required
  - `fulfilled_at` string, date-time
  - `evidence` object: Evidence bundle — mandatory when available, never necessitated: tracking (or a declared-untracked marker), request/offer/file payload hashes, result photos, invoice_ref, delivered_at, buyer_hash (HMAC — no PII), buyer_confirmation_token

## Response `200`

Attestation receipt — graded credit plus a detail string saying exactly what would have earned more

- AttestationReceipt
  - `attestation_id` string
  - `status` 'accepted' | 'pending_buyer_confirmation' | 'rejected'
  - `reputation_credit` 'none' | 'partial' | 'full'
  - `detail` string: The feedback loop: exactly what would have earned more credit

## Other responses

- `400`: Malformed attestation (per-field issues in the body)
- `401`: Missing or unknown vendor attestation key

---

[API](https://skmtc.dev/agenticfabricationnetwork/apis/afn-agentic-fabrication-network.md) · [All operations](https://skmtc.dev/agenticfabricationnetwork/apis/afn-agentic-fabrication-network/llms.txt) · [OpenAPI document](https://skmtc.dev/agenticfabricationnetwork/apis/afn-agentic-fabrication-network/revisions/42c16babcd2b?raw)
