# components.responses.PartnerRateLimited.description
Distributed partner rate limit exceeded.

# components.responses.PartnerUnavailable.description
A partner authentication dependency is unavailable.

# components.responses.Unauthorized.description
Missing or invalid authentication credential.

# components.schemas.PartnerCancellationAcceptedEvent.allOf[].properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerCancellationUnavailableEvent.allOf[].properties.reason_code.description
Allowlisted operational code only; never embed customer or personal data.

# components.schemas.PartnerCancellationUnavailableEvent.allOf[].properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerCredentialChange.properties.credential_secret.description
Returned only by the first successful create/rotate execution response.

# components.schemas.PartnerCredentialChange.properties.step_up_subjects.description
Stage-keyed exact subjects applicable to the current caller and state.

# components.schemas.PartnerInventoryUpdateRequest.properties.valid_until.description
Must be later than observed_at and now, with at most a 24-hour observation window.

# components.schemas.PartnerOfferFacts.properties.supplier_cost_tax_mode.description
Explicit supplier-invoice tax treatment, independent of customer-facing VAT. Omission remains backward compatible as unspecified, but payable-enabled checkout rejects unspecified terms.

# components.schemas.PartnerOfferFacts.properties.supplier_tax_rate_bps.description
Required for tax_exclusive and tax_inclusive; omitted for non_taxable.

# components.schemas.PartnerProductFacts.properties.media.description
Optional checksum-pinned public image sources. Acceptance and asynchronous import are separately default-off.

# components.schemas.PartnerProductMediaSource.properties.source_url.description
Canonical public HTTPS URL without credentials, query or fragment. Redirects are not followed.

# components.schemas.PartnerRemedyCommercialTerms.description
Immutable negotiated-term snapshot. Unknown terms remain explicit instead of receiving platform defaults.

# components.schemas.PartnerRemedyCommercialTerms.properties.restocking_fee_mode.description
Monetary or conditional modes require a future versioned commercial-policy contract.

# components.schemas.PartnerRemedyEventBase.properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerReturnInTransitEvent.allOf[].properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerReturnInspectedEvent.allOf[].properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerReturnReceivedEvent.allOf[].properties.source_event_id.description
Opaque partner operational identifier retained as evidence; treat as sensitive and never embed customer or personal data.

# components.schemas.PartnerShipmentEventCreate.properties.source_event_id.description
Partner-supplied opaque operational identifier; treat as potentially sensitive despite the safe-character contract.

# components.schemas.PartnerWebhookEndpoint.properties.secret.description
Returned once on successful creation or rotation.

# components.securitySchemes.PartnerCommerceToken.description
Five-minute Anchor RS256 commerce token with iss=anchor (configurable), aud=bazaar, typ=commerce, principal_type=partner_user, canonical UUID subject/partner tenant/partner membership, current positive tenant and membership authorization epochs, and concrete partner scopes.

# components.securitySchemes.PartnerKeyID.description
Public partner credential identifier; not a secret.

# components.securitySchemes.PartnerSignature.description
Unpadded base64url HMAC-SHA256 over the reachx-partner-v1 canonical request. See docs/partner-machine-auth.md for the complete contract.

# components.x-partner-credential-transition-responses.200.description
Current credential-change state; secret fields appear only on first successful create/rotate execution.

# components.x-partner-webhook-transition-responses.200.description
Current endpoint state without secret material.

# info.description
Canonical pre-release contract for suppliers submitting catalogue, offer and inventory evidence and operating routed fulfilment. Reach-X remains merchant of record. Publication, customer payment, refunds and settlement remain Reach-X-controlled. No current real-production endpoint is represented by this document.

# paths./partner/v1/catalogue/items.put.description
Dark by default. This operation writes only partner ingestion evidence, an external mapping and an append-only staged revision. It cannot create or update a canonical product, variant, listing, price, inventory row or search document. Reuse the signed Idempotency-Key for safe transport retries; source_sequence is monotonic once supplied for a resource.

# paths./partner/v1/catalogue/items.put.responses.200.description
Existing semantic revision returned for an exact replay.

# paths./partner/v1/catalogue/items.put.summary
Validate and append a staged product or variant revision

# paths./partner/v1/catalogue/items.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/catalogue/revisions/{id}.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/catalogue/revisions/{id}/submit.post.description
The request body must be empty. A product has no dependency; a variant requires the latest product revision to be submitted, approved or published; an offer has the same requirement for its latest variant. Submission never approves, materializes or publishes the revision.

# paths./partner/v1/catalogue/revisions/{id}/submit.post.responses.200.description
Revision is submitted or was already submitted.

# paths./partner/v1/catalogue/revisions/{id}/submit.post.summary
Submit a validated revision for Reach-X moderation

# paths./partner/v1/catalogue/revisions/{id}/submit.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/context.get.description
Dark by default. A human uses Anchor's five-minute RS256 partner commerce token; a machine uses the canonical HMAC-SHA256 request. Supplying both credential families is rejected. Each mode has an independent environment gate and tenant policy, and both require a current active Anchor identity projection. Returns no secret material.

# paths./partner/v1/context.get.parameters[].description
Required for machine HMAC authentication.

# paths./partner/v1/context.get.parameters[].description
Required for machine HMAC authentication.

# paths./partner/v1/context.get.parameters[].description
Required for machine HMAC authentication.

# paths./partner/v1/context.get.responses.200.description
Current human or machine partner authority.

# paths./partner/v1/context.get.summary
Resolve the authenticated partner principal

# paths./partner/v1/context.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/credential-change-requests.post.responses.201.description
Change is pending approval from a different membership.

# paths./partner/v1/credential-change-requests.post.summary
Submit the immutable maker-approved credential change

# paths./partner/v1/credential-change-requests.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/credential-change-requests/preview.post.responses.200.description
Canonical preview; no state was written.

# paths./partner/v1/credential-change-requests/preview.post.summary
Canonicalize a credential change and derive its maker step-up subject

# paths./partner/v1/credential-change-requests/preview.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/credential-change-requests/{id}.get.summary
Read safe credential-change state (never plaintext secret material)

# paths./partner/v1/credential-change-requests/{id}.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/credential-change-requests/{id}/approve.post.summary
Approve as a different active partner membership

# paths./partner/v1/credential-change-requests/{id}/execute.post.description
Create and rotate return credential_secret only on the first successful response. A repeated execution returns safe applied state without it.

# paths./partner/v1/credential-change-requests/{id}/execute.post.summary
Execute as the original maker with a new stage-bound step-up

# paths./partner/v1/credential-change-requests/{id}/reject.post.summary
Reject as a different active partner membership

# paths./partner/v1/inventory/positions.get.summary
List resource-bounded partner inventory position state

# paths./partner/v1/inventory/positions.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/inventory/reconciliation-cases.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/inventory/reconciliation-cases/{caseID}/acknowledge.post.responses.200.description
Case acknowledged or exact acknowledgement replayed.

# paths./partner/v1/inventory/reconciliation-cases/{caseID}/acknowledge.post.summary
Attach bounded partner evidence to an open reconciliation case

# paths./partner/v1/inventory/reconciliation-cases/{caseID}/acknowledge.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/inventory/updates.post.description
Updates only the supplier advisory quantity and freshness window for a staff-created binding. Source event and sequence identities provide domain replay/conflict semantics in addition to the transport receipt.

# paths./partner/v1/inventory/updates.post.responses.200.description
Applied, applied with a reconciliation gap, stale, or exact replay.

# paths./partner/v1/inventory/updates.post.summary
Apply one absolute, ordered partner inventory observation

# paths./partner/v1/inventory/updates.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/offers.put.description
The supplied amount is supplier cost, never Reach-X customer selling price. Only ZAR is accepted in v1. This operation cannot create or approve a canonical supplier offer or publish a listing.

# paths./partner/v1/offers.put.responses.200.description
Existing semantic revision returned for an exact replay.

# paths./partner/v1/offers.put.summary
Validate and append a staged supplier-offer revision

# paths./partner/v1/offers.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/orders.get.description
Returns no customer/contact/address, price, tax, payment, attribution, commission or refund fields.

# paths./partner/v1/orders.get.summary
Poll minimum, resource-bounded partner order projections

# paths./partner/v1/orders.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/orders/{orderID}.get.description
Shipment details are included only when the caller also has partner:fulfilment:read; order-only clients retain the previous response shape.

# paths./partner/v1/orders/{orderID}.get.summary
Read one minimum partner order and its reservation-bound lines

# paths./partner/v1/orders/{orderID}.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/orders/{orderID}/acknowledge.post.description
Rejection opens a Reach-X remedy case and never mutates the commercial order, payment or refund state.

# paths./partner/v1/orders/{orderID}/acknowledge.post.responses.200.description
Acknowledged or exact domain receipt replayed.

# paths./partner/v1/orders/{orderID}/acknowledge.post.summary
Accept or reject a guaranteed partner order exactly once

# paths./partner/v1/orders/{orderID}/acknowledge.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/orders/{orderID}/remedies.get.description
Returns data-minimized operational work with no first-class customer, address, price, payment, refund, commission or settlement fields. Opaque partner identifiers and codes may still be sensitive and must not embed customer data.

# paths./partner/v1/orders/{orderID}/remedies.get.summary
Read cancellation and physical-return work for one tenant-bounded partner order

# paths./partner/v1/orders/{orderID}/remedies.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/orders/{orderID}/shipments.post.description
Requires a current fulfilment policy, route, certification and supplier/location authority. It never accepts customer PII or commercial fields.

# paths./partner/v1/orders/{orderID}/shipments.post.responses.201.description
Package created or exact domain receipt replayed.

# paths./partner/v1/orders/{orderID}/shipments.post.summary
Create an immutable, quantity-bounded package for an accepted partner order

# paths./partner/v1/orders/{orderID}/shipments.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/remedies/{remedyID}/events.post.description
Exact repeats are no-ops, unseen stale sequences cannot regress state, and conflicts fail closed into reconciliation. Partner facts never directly cancel, refund or settle the commerce order. Source identifiers and reason codes are retained operational evidence; treat them as sensitive and never place customer or personal data in them.

# paths./partner/v1/remedies/{remedyID}/events.post.responses.200.description
Event applied, ignored as stale or replayed exactly.

# paths./partner/v1/remedies/{remedyID}/events.post.summary
Record one ordered supplier cancellation or return fact

# paths./partner/v1/remedies/{remedyID}/events.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/shipments/{shipmentID}/events.post.description
Exact repeats are no-ops, unseen stale sequences are recorded without regression, and same-sequence conflicts fail closed with reconciliation evidence.

# paths./partner/v1/shipments/{shipmentID}/events.post.responses.200.description
Event applied, ignored as stale, or replayed exactly.

# paths./partner/v1/shipments/{shipmentID}/events.post.summary
Record an ordered package fact and project safe aggregate fulfilment state

# paths./partner/v1/shipments/{shipmentID}/events.servers[].description
Planned partner API hostname; not activated by this change.

# paths./partner/v1/webhook-deliveries.get.summary
List delivery, retry and dead-letter evidence for this tenant

# paths./partner/v1/webhook-deliveries.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-deliveries/{deliveryID}/replay.post.responses.200.description
Exact replay request already created this delivery.

# paths./partner/v1/webhook-deliveries/{deliveryID}/replay.post.responses.201.description
New ordered delivery referencing the dead letter.

# paths./partner/v1/webhook-deliveries/{deliveryID}/replay.post.summary
Create an audited replay of a dead-letter delivery

# paths./partner/v1/webhook-deliveries/{deliveryID}/replay.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints.get.summary
List this tenant's safe webhook endpoint configuration

# paths./partner/v1/webhook-endpoints.post.description
Requires the exact configuration digest returned by preview and a fresh Anchor security-action step-up. The plaintext secret is returned only on the first successful response; exact replays return safe state only.

# paths./partner/v1/webhook-endpoints.post.summary
Create a pending endpoint and one-time signing secret

# paths./partner/v1/webhook-endpoints.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/preview.post.responses.200.description
Canonical preview; no endpoint or key was created.

# paths./partner/v1/webhook-endpoints/preview.post.summary
Canonicalize a webhook endpoint and derive its creation step-up subject

# paths./partner/v1/webhook-endpoints/preview.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/{endpointID}.get.summary
Get safe endpoint state and exact step-up subjects

# paths./partner/v1/webhook-endpoints/{endpointID}.patch.summary
Replace the endpoint's subscribed event set with optimistic concurrency

# paths./partner/v1/webhook-endpoints/{endpointID}.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/{endpointID}/revoke.post.summary
Permanently revoke an endpoint and cancel outstanding deliveries

# paths./partner/v1/webhook-endpoints/{endpointID}/revoke.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/{endpointID}/rotate.post.responses.200.description
Rotated endpoint and one-time new secret.

# paths./partner/v1/webhook-endpoints/{endpointID}/rotate.post.summary
Rotate the signing key with a bounded dual-signature overlap

# paths./partner/v1/webhook-endpoints/{endpointID}/rotate.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/{endpointID}/suspend.post.summary
Suspend an endpoint and cancel all in-flight or queued deliveries

# paths./partner/v1/webhook-endpoints/{endpointID}/suspend.servers[].description
Planned partner API hostname; dark by default.

# paths./partner/v1/webhook-endpoints/{endpointID}/verify.post.summary
Queue a signed challenge; activation occurs only after exact echo

# paths./partner/v1/webhook-endpoints/{endpointID}/verify.servers[].description
Planned partner API hostname; dark by default.

# servers[].description
Planned canonical partner API hostname. It is not provisioned or activated by this contract.