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.
Services
Section titled “Services”AdminService
Section titled “AdminService”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.
| RPC | Request | Response | Description |
|---|---|---|---|
SetTenantFeeRate | SetTenantFeeRateRequest | SetTenantFeeRateResponse | Sets the tenant's fee rate (basis points) and optional operator note. Full replace: the previous rate and note are overwritten. |
SetReportingPolicy | SetReportingPolicyRequest | SetReportingPolicyResponse | Replaces 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. |
Messages — Tenant Fee Rate
Section titled “Messages — Tenant Fee Rate”TenantFeeRate
Section titled “TenantFeeRate”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.
| Field | Type | Number | Description |
|---|---|---|---|
tenant_id | string | 1 | The tenant whose fee rate is being set. |
fee_rate_bps | int32 | 2 | Fee 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. |
notes | optional string | 3 | Operator commentary on the rate (why it was set, by whom, ticket link). Omitted clears any existing note. |
SetTenantFeeRateRequest
Section titled “SetTenantFeeRateRequest”A thin {ver, rate} envelope carrying the required TenantFeeRate to apply.
| Field | Type | Number | Description |
|---|---|---|---|
ver | string | 1 | FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto. |
rate | TenantFeeRate | 2 | The fee rate to apply. Required — an absent payload would otherwise skip validation of its fields. |
SetTenantFeeRateResponse
Section titled “SetTenantFeeRateResponse”Echoes the TenantFeeRate as persisted.
| Field | Type | Number | Description |
|---|---|---|---|
ver | string | 1 | FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto. |
rate | TenantFeeRate | 2 | The fee rate as persisted. |
Messages — Reporting Policy
Section titled “Messages — Reporting Policy”ReportingPolicy
Section titled “ReportingPolicy”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.
| Field | Type | Number | Description |
|---|---|---|---|
tenant_id | string | 1 | The tenant whose reporting policy is being replaced. |
required_fields | repeated string | 2 | Report 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_tolerance | optional double | 3 | DEPRECATED, 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_seconds | optional int32 | 4 | Reporting 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. |
SetReportingPolicyRequest
Section titled “SetReportingPolicyRequest”A thin {ver, policy} envelope carrying the required ReportingPolicy to apply.
| Field | Type | Number | Description |
|---|---|---|---|
ver | string | 1 | FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto. |
policy | ReportingPolicy | 2 | The reporting policy to apply. Required — an absent payload would otherwise skip validation of its fields. |
SetReportingPolicyResponse
Section titled “SetReportingPolicyResponse”Echoes the ReportingPolicy as persisted.
| Field | Type | Number | Description |
|---|---|---|---|
ver | string | 1 | FORA protocol version — "1.0". Stamped by the sender from a single constant; advisory on receive. See "Protocol version" in fora.proto. |
policy | ReportingPolicy | 2 | The reporting policy as persisted. |