IssuerCallbackService

Issuer-implemented endpoint t-0 calls to reserve deposit addresses and obtain the renderable QR payloads for an intent.

Method NameRequest TypeResponse TypeDescription
CreatePaymentInstructionsCreatePaymentInstructionsRequestCreatePaymentInstructionsResponseReserves one deposit address per supported chain and returns the renderable QR payloads.

IssuerService

t-0 endpoints the Issuer calls to report on-chain recognition, settlement, and reservation expiry.

Method NameRequest TypeResponse TypeDescription
PaymentReceivedPaymentReceivedRequestPaymentReceivedResponseReports the customer’s payment seen on-chain and KYT-cleared; the Issuer now owns on-chain risk.
SettlementSentSettlementSentRequestSettlementSentResponseReports a USDt settlement sent on-chain to the registered destination, for t-0 to verify.
PaymentExpiredIssuerPaymentExpiredRequestIssuerPaymentExpiredResponseConfirms the reservation closed with no valid payment and the deposit addresses are released.

Requests And Response Types

CreatePaymentInstructionsRequest

FieldTypeLabelDescription
payment_intent_iduint64
acquirer_iduint64t-0’s stable id for the Acquirer; the Issuer resolves its settlement wallet from it.
amount_usdttzero.v1.common.DecimalAmount the reserved addresses should accept.
expires_atgoogle.protobuf.TimestampAbsolute moment t-0 requires the reservation held until, on t-0’s clock (t-0 sets a 60–120 second window in the MVP).

CreatePaymentInstructionsResponse

FieldTypeLabelDescription
successCreatePaymentInstructionsResponse.Success
failureCreatePaymentInstructionsResponse.Failure

CreatePaymentInstructionsResponse.Failure

FieldTypeLabelDescription
reasonCreatePaymentInstructionsResponse.Failure.Reason

CreatePaymentInstructionsResponse.Success

FieldTypeLabelDescription
qr_optionsQrOptionrepeatedOne option per chain the Issuer supports for this intent.
expires_atgoogle.protobuf.TimestampAbsolute expiry of the reservation.

IssuerPaymentExpiredRequest

PaymentExpired is also a method on AcquirerCallbackService in this flat package, so the request/response carry a role prefix to avoid a colliding PaymentExpiredRequest. Interim name: buf STANDARD RPC_REQUEST_STANDARD_NAME accepts only bare PaymentExpiredRequest or the full IssuerServicePaymentExpiredRequest, so this short form needs a lint ignore at graduation (or rename the method).

FieldTypeLabelDescription
payment_intent_iduint64
expired_atgoogle.protobuf.TimestampMoment the Issuer released the deposit addresses.

IssuerPaymentExpiredResponse

FieldTypeLabelDescription
acceptedIssuerPaymentExpiredResponse.Accepted
rejectedIssuerPaymentExpiredResponse.Rejected

IssuerPaymentExpiredResponse.Accepted

This message has no fields defined.

IssuerPaymentExpiredResponse.Rejected

FieldTypeLabelDescription
reasonIssuerPaymentExpiredResponse.Rejected.Reason

PaymentReceivedRequest

FieldTypeLabelDescription
payment_intent_iduint64
amount_usdttzero.v1.common.DecimalAmount credited; must equal the intent’s stored amount_usdt exactly.
usdt_on_chainUsdtOnChainPayment
received_atgoogle.protobuf.TimestampMoment the Issuer treated the payment as final.

PaymentReceivedResponse

FieldTypeLabelDescription
acceptedPaymentReceivedResponse.Accepted
rejectedPaymentReceivedResponse.Rejected

PaymentReceivedResponse.Accepted

This message has no fields defined.

PaymentReceivedResponse.Rejected

FieldTypeLabelDescription
reasonPaymentReceivedResponse.Rejected.Reason

SettlementSentRequest

FieldTypeLabelDescription
settlement_refstringIssuer’s id for this USDt settlement; idempotency key, unique per Issuer.
amount_usdttzero.v1.common.Decimal
settlementOnChainSettlementDetailsOn-chain transaction, chain, and registered destination wallet for this settlement.
settled_payment_intent_idsuint64repeatedIntents this settlement clears; per-intent amounts are read from t-0’s ledger.
settled_atgoogle.protobuf.Timestamp

SettlementSentResponse

FieldTypeLabelDescription
acceptedSettlementSentResponse.Accepted
rejectedSettlementSentResponse.Rejected

SettlementSentResponse.Accepted

This message has no fields defined.

SettlementSentResponse.Rejected

FieldTypeLabelDescription
reasonSettlementSentResponse.Rejected.Reason
failing_intent_idsuint64repeatedIntents that failed verification within the batch.

CreatePaymentInstructionsResponse.Failure.Reason

NameNumberDescription
REASON_UNSPECIFIED0
REASON_ISSUER_UNAVAILABLE10The Issuer is unavailable to allocate.
REASON_ADDRESS_POOL_EMPTY20No free one-time deposit addresses.
REASON_AMOUNT_OUT_OF_RANGE40The amount falls outside the acceptable range.

IssuerPaymentExpiredResponse.Rejected.Reason

NameNumberDescription
REASON_UNSPECIFIED0
REASON_UNKNOWN_INTENT10payment_intent_id is one t-0 never opened.

PaymentReceivedResponse.Rejected.Reason

NameNumberDescription
REASON_UNSPECIFIED0
REASON_INTENT_EXPIRED10Received after expires_at on t-0’s clock.
REASON_UNKNOWN_INTENT20No such intent exists.
REASON_AMOUNT_MISMATCH30amount_usdt is not exactly the intent’s stored amount.

SettlementSentResponse.Rejected.Reason

NameNumberDescription
REASON_UNSPECIFIED0
REASON_ON_CHAIN_UNCONFIRMED10The on-chain transaction is not yet confirmed.
REASON_AMOUNT_MISMATCH20The confirmed amount does not equal amount_usdt or the covered intents’ sum.
REASON_WRONG_DESTINATION30destination_address (or its chain) is not the expected registered (chain, address) pair for the mode.
REASON_INTENT_NOT_SETTLEABLE40A listed intent is not in a settleable state (USDt mode: SETTLEMENT_PENDING; fiat mode: authorized).