> For the complete documentation index, see [llms.txt](https://docs.vida.id/identity-stack/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vida.id/identity-stack/verify/kyc-mobile-sdk/integration-overview/backend-integration/transaction-details-api.md).

# Transaction Details API

{% hint style="info" %}
**Purpose of This Page**

Documents <mark style="color:$primary;">**`GET`**</mark> `/api/v2/transaction?transactionId=UUID` - used to retrieve the full payload for a specific operation attempt for audit, billing, and dispute resolution.
{% endhint %}

## Step 3 - Transaction Details API

Use this API to retrieve the full result payload for any individual operation attempt. This is essential for billing reconciliation - VIDA sends you a list of transaction IDs for billing, and this API lets you match and verify each one.

#### Endpoint

<mark style="color:blue;">**`GET`**</mark> `/api/v2/transaction?transactionId=UUID`

#### When to Call

* When you need the full OCR result, ID verification scores, or face match details for a specific attempt
* When reconciling billed transaction IDs against your own records
* When auditing a specific operation for a support or dispute case
* When fetching a document image URL (note: URL expires in 60 seconds)

{% hint style="info" %}
**This API only serves My-Verify transactions**

This endpoint serves OCR, ID Verification, and Face Match transactions only.

Liveness transaction details are NOT available here. For liveness details, use the Liveness Service's own GET transaction API with the `transactionId` from `livenessDetails`.
{% endhint %}

#### Request

<table><thead><tr><th width="169.43359375">Parameter</th><th width="111.5625">Location</th><th width="118.54296875">Type</th><th width="106.7734375">Required</th><th>Description</th></tr></thead><tbody><tr><td>transactionId</td><td>Path</td><td>string (uuid)</td><td>Yes</td><td>A <code>transactionId</code> from the SDK response or from any <code>latestExecution</code> / <code>previousTransactionIds</code> in <code>GET</code> <code>/verify/status</code></td></tr><tr><td>includeDocuments</td><td>Query string</td><td>boolean</td><td>No</td><td>Default: <code>false</code>. When <code>true</code>, includes a <code>documents</code> object with presigned S3 URLs for ID front, ID back, and portrait images (each expires 60 seconds after the response).</td></tr></tbody></table>

#### Supported by this API

<table><thead><tr><th width="143.2109375">Operation</th><th width="157.0546875">Supported</th><th>Where to Get transactionId</th></tr></thead><tbody><tr><td>OCR</td><td>Yes</td><td>SDK: <code>frontCardVerificationDetails.transactionId</code>  or  <code>backCardVerificationDetails.transactionId</code></td></tr><tr><td>ID Verification</td><td>Yes</td><td>Same <code>transactionId</code> as OCR (same call)</td></tr><tr><td>Face Match</td><td>Yes</td><td>SDK: <code>faceMatchDetails.transactionId</code></td></tr><tr><td>Liveness</td><td>No - use Liveness Service</td><td>SDK: <code>livenessDetails.transactionId</code> </td></tr></tbody></table>

#### Querying a Liveness transaction

Liveness runs on a separate service, so `GET /api/v2/transaction` does not accept a liveness `transactionId`. If you send one, the transaction will not be found. To get liveness results, take `livenessDetails.transactionId` from the SDK response and call the Liveness Service API instead:

<mark style="color:blue;">**`GET`**</mark>`<LIVENESS_SERVICE_ENDPOINT>`

<table><thead><tr><th width="191.109375">What you need</th><th>Where to get it</th></tr></thead><tbody><tr><td><code>transactionId</code></td><td><code>livenessDetails.transactionId</code> in the SDK response</td></tr></tbody></table>

{% hint style="info" %}
The liveness score is also returned directly in the SDK response, in `livenessDetails.livenessScore` and `livenessDetails.manipulationScore`. If you only need the score, you do not need to call this API at all. For full details, see the [Liveness Service](https://docs.vida.id/identity-stack/~/revisions/ACX1qXdKyP7WQvVhqczN/verify/liveness/integration/api/api-reference) page.
{% endhint %}

#### Response Fields

<table><thead><tr><th width="216.48828125">Field</th><th>Description</th></tr></thead><tbody><tr><td>transactionId</td><td>The queried transaction ID</td></tr><tr><td>partnerTrxId</td><td>Your own reference for this operation. Not identical to the value you sent - the SDK adds the operation name and attempt number.</td></tr><tr><td>groupId</td><td>The verificationId this transaction belongs to</td></tr><tr><td>card</td><td>Document country, type, and ISO codes</td></tr><tr><td>ocrResult</td><td>Extracted text fields (name, ID number, DOB, address, etc.)</td></tr><tr><td>idVerificationResult</td><td>Spoofing check scores, landmark detection results, and forgery detection scores</td></tr><tr><td>imageQualityResult</td><td>Blur (blurriness) and low-light scores for front and/or back</td></tr><tr><td>documents</td><td>Only present when <code>includeDocuments</code>=<code>true</code>. Contains <code>documents.idFrontSide</code>, <code>documents.idBackSide</code>, and <code>documents.portrait</code> - each with a url and expiresAt. Fields are omitted if not captured for this transaction.</td></tr></tbody></table>

{% hint style="info" %}
**Presigned image URLs expire after 60 seconds**

Each URL in the documents object is a short-lived presigned S3 URL that expires 60 seconds after the API response is received.

Fetch and store the image bytes immediately. Cached URLs will return HTTP 403 from S3 after expiry.

Call the API again with `includeDocuments`=`true` to get a fresh set of URLs.
{% endhint %}

#### Sample Response (with includeDocuments=true)

<details>

<summary>JSON Response</summary>

{% code expandable="true" %}

```json
{
  "transactionId": "70f5e8df-45ca-4142-bb44-6a3879fcd532",
  "partnerTrxId":  "f8072750-1475-3a52-9ad6-7d6d3193ac89",
  "groupId":       "005e9def-c93a-3703-af5b-424a42f7c08a",
  "card": {
    "country": "MALAYSIA", "type": "MyKad",
    "isoAlpha3CountryCode": "MYS", "isoAlpha2CountryCode": "MY"
  },
  "ocrResult": {
    "front": { "data": {
      "idNumber":    { "value": "020326-14-0525",      "score": 0.992589, "threshold": 0.95 },
      "name":        { "value": "SAGAR CHANDRAKANT",  "score": 0.998204, "threshold": 0.95 },
      "dob":         { "value": "20020326",            "score": 0.992589, "threshold": 0.95 },
      "gender":      { "value": "M",                   "score": 1,        "threshold": 0.95 },
      "citizenship": { "value": "WARGANEGARA",         "score": 1,        "threshold": 0.95 },
      "address":     { "value": "NO 41 JALAN SERI TAMING 6 ...", "score": 0.999596, "threshold": 0.95 }
    }},
    "back": { "data": {
      "extendedIdNumber": { "value": "020326-14-0525-02-01", "score": 0.999577, "threshold": 0.95 }
    }}
  },
  "idVerificationResult": {
    "front": {
      "spoofingResult": { "code": 5000, "message": "Success",
        "recapScore":  { "score": 0.144171, "threshold": 0.95 },
        "blackWhite":  { "score": 0.003719, "threshold": 0.95 },
        "colorPrint":  { "score": 0.363406, "threshold": 0.95 }
      },
      "landmarkResult": { "code": 5000, "message": "Success",
        "containerResult": [
          { "name": "portrait",       "score": 0.9736 },
          { "name": "hibiscus_logo",  "score": 0      },  // ← 0 = occluded
          { "name": "chip",           "score": 0.9778 }
        ]
      },
      "forgeryResult": { "code": 5000,
        "summary": { "score": 0.245567, "threshold": 0.95 }
      }
    }
  },
  "imageQualityResult": {
    "front": {
      "blurriness": { "score": 0.00015,  "threshold": 0.95 },
      "lowLight":   { "score": 0.014529, "threshold": 0.95 }
    }
  },
  // Only present when includeDocuments=true
  "documents": {
    "idFrontSide": { "url": "https://<bucket>.s3.amazonaws.com/...?X-Amz-Signature=..."},
    "idBackSide":  { "url": "https://<bucket>.s3.amazonaws.com/...?X-Amz-Signature=..."},
    "portrait":    { "url": "https://<bucket>.s3.amazonaws.com/...?X-Amz-Signature=..."}
    // Fields are omitted if not captured (e.g. passport: idBackSide absent)
  }
}


```

{% endcode %}

</details>
