> For the complete documentation index, see [llms.txt](https://docs.zetrix.com/en/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zetrix.com/en/developer-resources/blockchain-as-a-services-baas/tradetrust-api/trade-trust-finality.md).

# Trade Trust Finality

How final an L2 transaction is, via core-engine.

## Get transaction finality

> Confirmation depth and L1 settlement for one transaction. Read \<code>confirmations\</code> and\
> &#x20;\<code>l1Settled\</code>; \<code>final\</code> means only "mined" here.

```json
{"openapi":"3.1.0","info":{"title":"myeg-z2-service - TradeTrust","version":"0.0.1"},"tags":[{"name":"TradeTrust Finality","description":"How final an L2 transaction is, via core-engine."}],"servers":[{"url":"https://api-sandbox.zetrix.com/z2","description":"Testnet / UAT, through AWS API Gateway. Needs X-API-Key in addition to the bearer token."}],"security":[{"bearerAuth":[],"apiKeyAuth":[]},{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"OAuth2 bearer token from the shared BaaS auth server.\n\nEvery endpoint in this subset requires one. Note the security filter runs BEFORE routing, so an unauthenticated request to a path that does not exist also answers 401, not 404 - a 404 is only visible to an authenticated caller.","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ResponseWrapperFinalityRespDto":{"type":"object","description":"Standard BaaS response envelope. Mirrors the shape used across the microservices so\n callers get a consistent contract on L2 as on L1.","properties":{"success":{"type":"boolean"},"errorCode":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/FinalityRespDto"}}},"FinalityRespDto":{"type":"object","description":"Response of <code>GET /tradetrust/finality/{txHash</code>} — how final an L2 transaction is.\n\n <p><strong>On Z2, <code>final</code> adds little to <code>/tx/status</code>'s <code>SUCCESS</code>.</strong> Zetrix\n L2 runs QBFT, which is deterministic and does not reorg, so a transaction is final the moment it is\n mined: <code>final</code> is exactly <code>confirmations &gt;= 1</code>, not a threshold anyone can tune. The two\n fields worth reading are <code>confirmations</code> (which <code>/tx/status</code> cannot give you without a\n second call for the chain head) and <code>l1Settled</code>.\n\n <p>Takes any transaction hash, including one this service never submitted.","properties":{"l2Block":{"type":"integer","format":"int32","description":"<code>null</code> when the node has no receipt for this hash — still pending, or never existed."},"confirmations":{"type":"integer","format":"int32"},"l1Settled":{"type":"boolean","description":"Whether the batch containing this transaction has settled on L1. <code>null</code> means not\n checked, which is not the same as false: core-engine only answers this when an L1 settlement\n checker is configured on its side."},"final":{"type":"boolean","description":"The wire field is <code>final</code>, which cannot be a Java identifier — bound explicitly rather\n than relying on Jackson deriving it from the <code>isFinal()</code> getter."}}}}},"paths":{"/tradetrust/finality/{txHash}":{"get":{"tags":["TradeTrust Finality"],"summary":"Get transaction finality","description":"Confirmation depth and L1 settlement for one transaction. Read <code>confirmations</code> and\n <code>l1Settled</code>; <code>final</code> means only \"mined\" here.","operationId":"finality","parameters":[{"name":"txHash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperFinalityRespDto"}}}}}}}}}
```
