---
title: "Diff two completed apk-teardown jobs"
method: GET
path: "/apk-teardown/diff"
tags: ["AppInsights"]
---

# Diff two completed apk-teardown jobs

`GET /apk-teardown/diff`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/apk-teardown/diff`
- Auth: API key in header `x-api-key`

Compares two already-completed jobs -- typically two versions of the same app -- and returns what changed (permissions, signing, SDKs, size, and more).

## Query parameters

- `job_id_a` string, required
- `job_id_b` string, required

## Headers

- `x-api-key` string, required

## Response `200`

OK

- ApkteardownDiffResponseDoc
  - `code` integer
  - `data` ApkteardownDiffResult
    - `job_id_a` string
    - `job_id_b` string
    - `package_name` string
    - `permissions_added` string[]
    - `permissions_removed` string[]
    - `sdks_added` ApkteardownSDKFinding[]
      - `category` 'payment' | 'analytics' | 'advertising' | 'crash_reporting' | 'push_notification' | 'social_auth' | 'other'
      - `confidence` 'high' | 'medium'
      - `evidence` string[]
      - `name` string
      - `source` string: Source records which tier produced this finding ("tier1_signature" or "tier2_mobsf"), so a caller (and this package's own tests) can tell where a given result came from when both tiers ran.
      - `version` string: Version is a best-effort SDK version, populated only when a matching META-INF/<group>_<artifact>.version file was found for an SDK whose known Maven group prefix is recorded in this package's own seed list (see packageSignature.mavenGroupPrefix) — most SDKFindings will have no version (empty string), and this is never inferred from package names alone.
    - `sdks_removed` ApkteardownSDKFinding[]
      - `category` 'payment' | 'analytics' | 'advertising' | 'crash_reporting' | 'push_notification' | 'social_auth' | 'other'
      - `confidence` 'high' | 'medium'
      - `evidence` string[]
      - `name` string
      - `source` string: Source records which tier produced this finding ("tier1_signature" or "tier2_mobsf"), so a caller (and this package's own tests) can tell where a given result came from when both tiers ran.
      - `version` string: Version is a best-effort SDK version, populated only when a matching META-INF/<group>_<artifact>.version file was found for an SDK whose known Maven group prefix is recorded in this package's own seed list (see packageSignature.mavenGroupPrefix) — most SDKFindings will have no version (empty string), and this is never inferred from package names alone.
    - `signing_changed` boolean
    - `signing_schemes_a` string[]
    - `signing_schemes_b` string[]
    - `tech_stack_a` 'flutter' | 'react_native' | 'cordova_ionic' | 'xamarin' | 'unity' | 'native_kotlin_java'
    - `tech_stack_b` 'flutter' | 'react_native' | 'cordova_ionic' | 'xamarin' | 'unity' | 'native_kotlin_java'
    - `tech_stack_changed` boolean
    - `version_name_a` string
    - `version_name_b` string
  - `msg` string

## Other responses

- `400`: Missing job ids, or one/both jobs not found or not done

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/0497899e2016?raw)
