---
title: "Build a version timeline across 2+ apk-teardown jobs"
method: GET
path: "/apk-teardown/timeline"
tags: ["AppInsights"]
---

# Build a version timeline across 2+ apk-teardown jobs

`GET /apk-teardown/timeline`

## Request

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

Compares 2+ completed jobs the caller asserts are versions of the same app and returns the consecutive pairwise diff for each version transition, sorted by version code.

## Query parameters

- `job_ids` string, required

## Headers

- `x-api-key` string, required

## Response `200`

OK

- ApkteardownTimelineResponseDoc
  - `code` integer
  - `data` ApkteardownTimelineResult
    - `package_name` string
    - `transitions` 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
    - `versions` string[]: version_name, in the sorted order compared
  - `msg` string

## Other responses

- `400`: Fewer than 2 job ids, or a job 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/afac9b012a27?raw)
