> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Transaction (SDK Token)

> Device-facing read endpoint, authenticated with the same `X-Transaction-Token` used to submit. The SDKs poll it after an auto-launched action flow completes or its window closes, so the final state never depends on a single notification. Returns the same transaction detail as the submit response, including the current `action_required` block (`null` once the action is resolved).

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

<AgentPromptAccordion
  title="Get Transaction (SDK Token) API Prompt"
  prompt={`Re-read a transaction from an end-user device using the same scoped SDK token that submitted it. The Didit SDKs call this automatically after a launched action flow completes or its window closes; call it yourself when handling flows manually.

Endpoint:
GET https://verification.didit.me/v1/transactions/{transaction_id}/

Authentication:
X-Transaction-Token header with the sdk_token used at submission (still within TTL). {transaction_id} is the Didit transaction uuid returned at creation.

When to call:
- After the user finishes (or abandons) a wallet-ownership or verification flow, to pick up the refreshed status.
- To poll status and action_required while the token is valid, instead of depending on any single event or notification.

What to read from the response:
- status - APPROVED | IN_REVIEW | DECLINED | AWAITING_USER.
- travel_rule.status - the Travel Rule exchange state (COMPLETED means data matched; the transfer can settle).
- action_required - null once the pending action is resolved; otherwise the same block returned at submission.

Failure modes:
- 401 - token missing, unknown, revoked, over max_uses, or expired ("expired" appears in the detail).
- 404 - the transaction does not belong to the token's application.

From your backend, GET /v3/transactions/{transaction_id}/ (x-api-key) returns the same record without any token constraints.

Full guide: /transaction-monitoring/sdk-transaction-submission.`}
/>


## OpenAPI

````yaml GET /v1/transactions/{transaction_id}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v1/transactions/{transaction_id}/:
    get:
      tags:
        - Transactions
      summary: Get a transaction from an SDK
      description: >-
        Device-facing read endpoint, authenticated with the same
        `X-Transaction-Token` used to submit. The SDKs poll it after an
        auto-launched action flow completes or its window closes, so the final
        state never depends on a single notification. Returns the same
        transaction detail as the submit response, including the current
        `action_required` block (`null` once the action is resolved).
      operationId: getTransactionFromSdk
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: >-
            Didit-stable transaction UUID (the `uuid` from the submit response,
            **not** your `txnId`).
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: >-
            The full transaction detail, including `action_required` (`null`
            once the pending action is resolved).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
        '401':
          description: >-
            The transaction token was rejected: missing, unknown, revoked, over
            its `max_uses`, or expired.
          content:
            application/json:
              examples:
                Expired token:
                  value:
                    detail: Transaction token expired.
        '404':
          description: >-
            No transaction with this UUID exists for the token's application, or
            the path segment is not a valid UUID.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
      security:
        - TransactionTokenAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v1/transactions/22222222-3333-4444-5555-666666666666/'
            \
              -H 'X-Transaction-Token: SDK_TOKEN'
components:
  schemas:
    TransactionDetail:
      type: object
      description: >-
        Full monitoring record for one transaction, as returned by `GET
        /v3/transactions/{transaction_id}/` and `POST /v3/transactions/`.
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Didit-stable transaction identifier. Use as `{transaction_id}` for
            follow-up calls.
        transaction_number:
          type: integer
          description: >-
            Application-scoped sequential transaction number shown in Console
            (e.g. `4123`).
        txn_id:
          type: string
          description: >-
            The `transaction_id` you supplied at create time (max 128 chars).
            Unique per application.
        txn_date:
          type: string
          format: date-time
          description: >-
            When the transaction occurred (from `transaction_at`; defaults to
            submission time).
        zone_id:
          type: string
          nullable: true
          description: IANA time zone identifier provided at create time.
        transaction_type:
          type: string
          description: >-
            Top-level category as stored: `finance`, `kyc`, `travelRule`,
            `userPlatformEvent`, `gamblingBet`, `gamblingLimitChange`,
            `gamblingBonusChange`, `auditTrailEvent`. Note multi-word values are
            echoed back in camelCase even when submitted in snake_case.
        action_type:
          type: string
          description: >-
            Sub-type within the category (e.g. `deposit`, `withdrawal`,
            `transfer`). Defaults to the category when not supplied.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            Direction relative to the subject. Stored uppercase regardless of
            the casing submitted (`in`/`out`/`inbound`/`outbound` are accepted
            on input).
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            Current monitoring verdict. Transactions are created `APPROVED`;
            rules may flip them to `IN_REVIEW`/`DECLINED` synchronously.
        amount:
          type: string
          description: >-
            Transaction amount as a decimal string with trailing zeros stripped
            (e.g. `"1500"`, `"0.5"`, `"0.123456789012345678"`). Up to 18 decimal
            places.
        currency:
          type: string
          description: Currency code of `amount` (e.g. `EUR`, `USD`, `BTC`).
        currency_type:
          type: string
          nullable: true
          description: '`fiat` or `crypto`, as submitted in `currency_kind`.'
        amount_in_default_currency:
          type: string
          nullable: true
          description: >-
            Pre-converted amount you supplied, as a decimal string with trailing
            zeros stripped.
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: >-
            `amount` converted to the application's preferred currency, when
            available.
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: Free-text payment reference or memo from the submission.
        payment_txn_id:
          type: string
          nullable: true
          description: >-
            External payment system reference (e.g. blockchain transaction hash)
            from `payment_reference_id`.
        score:
          type: integer
          description: Risk score accumulated by rules (typically 0–100). Higher = riskier.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Categorical risk severity set by rules/providers (`UNKNOWN`, `LOW`,
            `MEDIUM`, `HIGH`, `CRITICAL`). `null` until something sets it.
        decision_reason_code:
          type: string
          nullable: true
          description: Machine-readable reason for the current `status`.
        decision_reason_label:
          type: string
          nullable: true
          description: Human-readable label for `decision_reason_code`.
        vendor_data:
          type: string
          nullable: true
          description: Convenience copy of the applicant's `vendor_data`.
        metadata:
          type: object
          description: >-
            Snapshot of the `subject` and `counterparty` payloads as submitted
            at create time.
        props:
          type: object
          description: >-
            The `custom_properties` you supplied at create time. Each key is
            addressable in rule conditions as `custom_values.<key>`.
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
              description:
                type: string
                nullable: true
              source:
                type: string
                enum:
                  - didit
                  - custom
                description: Whether the tag is a Didit preset or a custom tag.
          description: Tags attached to the transaction (manually or by rules).
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: >-
                  Party role. The create endpoint assigns `APPLICANT` (the
                  subject) and `COUNTERPARTY`.
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  `USER`/`BUSINESS` parties link back to a Didit-owned entity
                  via `vendor_data`. `EXTERNAL` parties have no Didit entity
                  behind them.
              vendor_data:
                type: string
                nullable: true
                description: Your internal user/business identifier.
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: >-
                  Country code from the submitted `address.country` (typically
                  ISO 3166-1 alpha-3).
              dob:
                type: string
                format: date
                nullable: true
                description: Date of birth from the submitted `date_of_birth`.
              address:
                type: object
                description: Address object as submitted. `{}` when omitted.
              institution_info:
                type: object
                description: Institution details as submitted. `{}` when omitted.
              device:
                type: object
                description: >-
                  Normalized device context, including server-side IP enrichment
                  under `network_context` (geolocation, VPN/data-center flags)
                  when an IP was provided.
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  Frozen copy of the party data for `EXTERNAL` parties (or after
                  the linked entity was deleted). `null` while linked to a live
                  entity.
          description: Transaction parties (applicant, counterparty).
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  SHA-256 over `type:account_id:issuing_country` — stable
                  identifier to correlate reuse of the same instrument.
              account_id:
                type: string
                nullable: true
                description: Account identifier (IBAN, wallet address, card token, …).
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: Your identifier for the owning user/business.
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: Raw `payment_method` object as submitted.
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  How this method was used in the transaction. The create
                  endpoint assigns `SOURCE`/`DESTINATION` from the direction
                  (outbound: subject = SOURCE; inbound: subject = DESTINATION).
          description: Payment methods linked to the transaction.
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  E.g. `TRANSACTION_CREATED`, `TRANSACTION_NOTE_ADDED`,
                  `TRANSACTION_STATUS_CHANGED`.
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: >-
            Activity log entries (creation, notes, manual reviews, status
            changes).
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: Alerts raised by rules and providers.
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: UUID of the rule that ran.
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: Whether the rule's conditions matched this transaction.
              is_test:
                type: boolean
                description: >-
                  True when the rule ran in TEST mode (no effect on
                  status/score).
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: Score added by this rule's `add_score` actions.
              status_target:
                type: string
                nullable: true
                description: Status set by a `change_status` action, if any.
              action_summary:
                type: object
                description: Summary of the actions the rule executed.
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
          description: >-
            Per-rule execution results — which rule fired, with what score
            impact.
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: Raw provider response payload.
              created_at:
                type: string
                format: date-time
          description: Raw provider payloads (AML screening, blockchain analytics, etc.).
        travel_rule:
          type: object
          nullable: true
          description: >-
            Travel Rule compliance check, present when `travel_rule_details` was
            submitted.
          properties:
            uuid:
              type: string
              format: uuid
            status:
              type: string
            protocol:
              type: string
              nullable: true
            required:
              type: boolean
            obligations_count:
              type: integer
            originator_data:
              type: object
            beneficiary_data:
              type: object
            metadata:
              type: object
        network_snapshot:
          type: object
          nullable: true
          description: >-
            Graph snapshot of related transactions/parties used by the rules
            engine, present when submitted.
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            Remediation session offered to the user when re-verification is
            required. Superseded by `action_required`, which is the canonical
            block; kept for backward compatibility.
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            Pending end-user action required to complete this transaction, or
            null when there is none. The Didit SDKs auto-launch the action by
            default and refresh the transaction when it finishes. Two variants,
            discriminated by `type`: `verification_session` (a hosted
            verification session created by a rule action) and
            `wallet_ownership` (a wallet-ownership widget session auto-minted
            for a Travel Rule transfer that needs proof of wallet control, gated
            by the `auto_wallet_verification` Travel Rule setting). When both
            could apply, `wallet_ownership` takes precedence because it blocks
            the Travel Rule exchange.
          oneOf:
            - title: Verification session
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - verification_session
                url:
                  type: string
                  format: uri
                  description: Hosted verification URL to open for the end user.
                session_id:
                  type: string
                  format: uuid
                  description: Verification session id.
                session_token:
                  type: string
                  description: >-
                    Session token, used by the mobile SDKs to launch the flow
                    natively.
                status:
                  type: string
                  description: Verification session status.
              required:
                - type
                - url
            - title: Wallet ownership
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - wallet_ownership
                url:
                  type: string
                  format: uri
                  description: >-
                    Hosted wallet-ownership widget URL. Open it in a real
                    browser surface - on mobile use SFSafariViewController or a
                    Chrome Custom Tab, never an embedded webview.
                widget_session_id:
                  type: string
                  format: uuid
                  description: Wallet-ownership widget session id.
                expires_at:
                  type: string
                  format: date-time
                  description: When the widget session expires.
              required:
                - type
                - url
        cost_breakdown:
          type: object
          nullable: true
          description: Per-feature credit cost breakdown for this transaction.
  securitySchemes:
    TransactionTokenAuth:
      type: apiKey
      in: header
      name: X-Transaction-Token
      description: >-
        Short-lived scoped token minted by your backend via POST
        /v3/transactions/sdk-token/. Used by the Didit SDKs on the device-facing
        /v1/transactions/ endpoints.

````