Skip to content

Proto: Admin v1

Source: proto/fora/admin/v1/admin.proto

All three SDKs ship a client for this service and the two domain-verification RPCs of ExchangeService: connect.NewAdminClient (Go), createAdminClient (TypeScript) and AdminClient (Python). It stamps ver, checks each request against its generated model and sends it to the configured base URL; see Testing a FORA Service Through the SDK.

Exchange operator overrides: the tenant fee rate and the tenant reporting policy. SetOfferPrice and SetDeliveryWitnessMode are planned extensions of this service and are tracked separately.

RPCRequestResponseDescription
SetTenantFeeRateSetTenantFeeRateRequestSetTenantFeeRateResponseSets the tenant's fee rate (basis points) and optional operator note. Full replace: the previous rate and note are overwritten.
SetReportingPolicySetReportingPolicyRequestSetReportingPolicyResponseReplaces the tenant's reporting policy (required report fields, reporting window). Full replace: omitted optional fields clear their value so the receiving Exchange's defaults apply. The deprecated quantity_tolerance is accepted and ignored: a usage report is never refused for its quantity.

The fee-rate payload shared by the SetTenantFeeRate request and response, so its rules are stated once. The fee is in basis points of gross — floor(gross * bps / 10000), so a value below 10000 keeps it strictly under 100%, and integer basis points avoid float drift when aggregating many charges. 0 is a legitimate explicit value (“no fee”), not an unset sentinel. Omitting notes clears any existing note.

FieldTypeNumberDescription
tenant_idstring1The tenant whose fee rate is being set.
fee_rate_bpsint322Fee rate in basis points of gross: fee = floor(gross * bps / 10000). Below 10000 keeps the fee strictly under 100%; integer basis points avoid float drift when aggregating many charges. 0 is a legitimate explicit value ("no fee"), not an unset sentinel.
notesoptional string3Operator commentary on the rate (why it was set, by whom, ticket link). Omitted clears any existing note.

A thin {ver, rate} envelope carrying the required TenantFeeRate to apply.

FieldTypeNumberDescription
verstring1FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto.
rateTenantFeeRate2The fee rate to apply. Required — an absent payload would otherwise skip validation of its fields.

Echoes the TenantFeeRate as persisted.

FieldTypeNumberDescription
verstring1FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto.
rateTenantFeeRate2The fee rate as persisted.

The reporting-policy payload shared by the SetReportingPolicy request and response, so its rules are stated once: the report field names the usage-report validator requires, and the reporting window in seconds (capped at one year). quantity_tolerance is deprecated and ignored: a usage report is never refused for its quantity, so an Exchange MUST NOT refuse a report on this setting. The field and its 0–1 bounds stay only for wire compatibility. Omitted optional fields clear their value so the receiving Exchange’s defaults apply. The wire constrains only the token shape of required_fields; which names are meaningful is defined by the receiving Exchange and may change without a contract change, and names are a set (repeats are rejected). The window applies to obligations minted after the call — obligations already issued keep the window they were minted with.

FieldTypeNumberDescription
tenant_idstring1The tenant whose reporting policy is being replaced.
required_fieldsrepeated string2Report field names the usage-report validator requires. The wire constrains only the token shape; which names are meaningful is defined by the receiving Exchange and may change without a contract change. Names are a set: repeats are rejected. Empty means no required fields.
quantity_toleranceoptional double3DEPRECATED, ignored. This used to set the accepted relative deviation between the estimated and the reported quantity, and a report outside it was refused. A usage report is never refused for its quantity: the reported quantity is unrestricted, and monitoring how far reports fall from estimates is the Exchange operator's own business, not part of the protocol. An Exchange MUST NOT refuse a report on this setting. The field and its bounds are retained because removing them would break the wire contract.
window_secondsoptional int324Reporting window in seconds. Applies to obligations minted after this call; obligations already issued keep the window they were minted with. Capped at one year. Omitted: the receiving Exchange's default applies.

A thin {ver, policy} envelope carrying the required ReportingPolicy to apply.

FieldTypeNumberDescription
verstring1FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto.
policyReportingPolicy2The reporting policy to apply. Required — an absent payload would otherwise skip validation of its fields.

Echoes the ReportingPolicy as persisted.

FieldTypeNumberDescription
verstring1FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto.
policyReportingPolicy2The reporting policy as persisted.