Sylphx Commerce product site

Contract

The public contract is Protobuf 3, not a second JSON SDK.

Semantic SSOT: proto/sylphx/commerce/v1. Canonical API base: https://api.commerce.sylphx.com/v1. Generated SDK and CLI default only to that base. A handwritten public request model is a defect.

Service families

FamilyOperations (selected)Invariant
MeteringCreateMeterVersion, RecordUsage, CorrectUsage, GetUsageImmutable facts; corrections are linked deltas
CatalogCreateProductVersion, CreatePriceVersionEffective-dated immutable versions; explicit currency and rounding
RatingRateUsage, ReRateChargeOne digest for the same meter, price, usage set, and formula
InvoicingDraftInvoice, FinalizeInvoice, IssueCreditNoteFinalized history is frozen; credits cannot exceed a line
PaymentsCreatePaymentAttempt, RequestRefund, ListPaymentRecordsVerified provider receipts; HTTP 200 is not capture
JournalGetJournalEntry, ListJournalEntriesEvery entry balances per currency
EntitlementsAppendEntitlementDecision, EvaluateEntitlementReplay as-of; limit cannot reactivate after revoke
ReconciliationIngestProviderStatement, RunReconciliationUnmatched provider and Commerce amounts stay explicit

Money on the wire

message Money {
  string currency = 1;     // ^[A-Z]{3}$
  sint64 units_minor = 2;  // integer minor units; never float
}

Authority headers

Authorization: Bearer <sylphx-delegation+jwt>
Sylphx-Project-Binding: <sylphx-project-binding+jwt>

Audience is https://api.commerce.sylphx.com/v1. Nested delegation binding is binding.id plus exact binding.revision. TTL ≤ 300s. Tenant/project headers and static secrets do not authorize a write. Missing or forged is 401; insufficient capability is 403; idempotent digest conflict is 409.

Fail closed. A second public schema, a predecessor Ledger route, a Consumer compatibility path, or defaulting a client to localhost is not this contract.