Get API key

Reputation Scores

How Magma scores sellers and buyers from 0 to 100, what moves the score, who can see it, and how to improve it.

Every node on Magma has two reputation scores, one as a seller and one as a buyer. Each runs from 0 to 100 and is built only from that node's Magma orders over the last 90 days, with recent orders counting most.

Automatic matching favours sellers with higher scores and passes over sellers whose score is too low, so a seller's score directly affects how many orders they get.

We changed how scores work in November 2026. The old score mixed in network-wide signals such as node centrality and could drop to zero after a single bad order. The new score is based only on how you trade on Magma, recovers as you complete orders, and comes with a breakdown so you can see why it is what it is.


What goes into the score

Both scores have two parts:

  • Completion: the share of your orders that went through. This matters most.
  • Quality: how well the completed orders went. Quality can lower the score, but never by more than a quarter.

Seller score

PartWhat counts
CompletionOrders you completed, against orders you rejected, let time out, failed to open, or opened incorrectly.
Response timeHow quickly you accept or reject new orders.
Open timeHow quickly you open the channel after the buyer pays.
Kept openWhether channels stay open for the full lease you promised.
Fee promiseWhether you keep your channel fees within the cap in your offer.

Buyer score

PartWhat counts
CompletionOrders you paid, against orders you let expire, cancelled, or that sellers could not open because your node was unreachable.
Payment timeHow quickly you pay once the seller accepts.
Kept openWhether you leave the channel open for the full lease.

How the score behaves

  • New nodes start in the middle. A node with no orders is neither perfect nor zero, and its first few orders move the score gradually rather than all at once.
  • Recent orders count most. An order's weight drops steadily as it ages, so a bad stretch fades within weeks rather than months.
  • One bad order is not the end. A failure lowers the score in proportion to how many orders you have; it no longer wipes it out.
  • One buyer counts once. However many orders a single buyer places with you, at most one failed order from that buyer counts against you. A buyer placing order after order cannot drag your score down.
  • Rejections need a buyer others could serve. A rejection only counts against you once the buyer has completed an order with another seller. Orders you let time out, or fail to open after the buyer paid, always count.
  • Missing data is not held against you. If there is nothing to judge a quality part on yet, it is left out rather than scored as zero.

When the buyer's node is the problem

Sometimes a seller cannot complete an order because the buyer's node cannot be reached, or will not accept the channel size. Sellers can say so when they reject an order by passing a cancellation_reason:

cancellation_reasonUse when
UNABLE_TO_CONNECT_TO_NODEYou could not connect to the buyer's node.
SELLER_UNAVAILABLEYou can no longer serve orders, for example because your node is going offline.

A reason that puts the failure on the buyer is only accepted once another seller has reported the same buyer. When it is accepted, the order counts against the buyer instead of you and shows up in your breakdown under excluded. Without that confirmation the order counts as an ordinary rejection, so the reason cannot be used to shield a seller's score from orders they simply chose not to fill. SELLER_UNAVAILABLE always counts as a rejection; it tells the buyer why.

Either way, repeated orders from the same buyer only count once, and rejecting a buyer that no other seller has completed an order with does not count at all. If an unreachable buyer keeps ordering from you, reject each order with UNABLE_TO_CONNECT_TO_NODE rather than letting it time out.

See Sell Liquidity for the reject mutation.


Who sees what

WhereWhat is shownVisible to
MarketOffer.seller_scoreThe seller's score, as a number.Everyone
MarketOrder.seller_reputationThe seller's full breakdown.The order's buyer
MarketOrder.buyer_reputationThe buyer's full breakdown.The order's seller
AccountNode.reputationYour own seller and buyer breakdowns.You

Read your own breakdown from your account's nodes:

query MyReputation {
  user {
    nodes {
      pubkey
      reputation {
        seller {
          score
          completion
          quality
          sample_size
          counts { completed rejected no_response failed_to_open invalid_opening excluded }
          components { key value score sample }
        }
        buyer {
          score
          counts { paid failed_to_pay unreachable }
          components { key value score sample }
        }
      }
    }
  }
}

Each entry in components has a key (for example responseTime), the measured value (a rate from 0 to 1, or a median in seconds), its score from 0 to 1, and the number of orders it is based on.


Improving your score

As a seller:

  • Accept or reject new orders quickly. Automating this through the API helps most.
  • Only list offers you can fill. Disable an offer or lower its size when your on-chain funds run low instead of rejecting the orders it attracts.
  • Open the channel promptly after payment, and keep it open for the full lease.
  • Keep your fees within the cap you advertised.
  • When a buyer's node is unreachable, reject with UNABLE_TO_CONNECT_TO_NODE rather than letting the order time out.

As a buyer:

  • Make sure your node is online and reachable before you buy, and accepts channels of the size you order.
  • Pay promptly once the seller accepts.
  • Keep the channel open for the full lease.

Next steps