Get data-collection status (v1)

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.usehearsay.com/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "integrations MCP server": {
    "url": "https://docs.usehearsay.com/mcp"
  }
}

Close
GET /case/{caseId}/data-status

Per data source, the status of each source the custodians shared, with status percentages. Superseded by data-status-tree-v3, which most clients should use.

Headers

  • organization string Required

    id of the selected (active) organization

Path parameters

  • caseId string Required

    Id of the case

Query parameters

  • extractionCode string
  • searchText string
  • tags array[string]

    Tag ids (comma-separated). Filters device conversations, emails, files, and financial sources. Excludes discord/reddit.

  • searchMatchType string

    Match type for message text search. FUZZY allows typo tolerance, EXACT requires exact token match.

    Values are FUZZY or EXACT. Default value is FUZZY.

Responses

  • 200 application/json
    Hide response attributes Show response attributes object
    • data object Required
      Hide data attribute Show data attribute object
      • data array[object] Required
        Hide data attributes Show data attributes object
        • dataSource object Required
          Hide dataSource attributes Show dataSource attributes object
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • name string Required
          • displayName string Required
          • category string Required
          • config object | null Required

            Collection options for this source. The keys below are the ones the code reads, for device sources (ios, android).

            Additional properties are allowed.

            Hide config attributes Show config attributes object | null
            • iosEnableEncryptedBackup boolean
            • iosAllowOnlyEncryptedBackup boolean
            • iosAutoIncludeSafariData boolean
            • iosAutoIncludeNotesData boolean
            • androidIgnoreMediaPermission boolean
            • iosAllApps array[string]
            • iosAllowedApps array[string]
            • androidAllApps array[string]
            • androidAllowedApps array[string]
        • percentages array[object] Required
        • data array[object] Required
          Hide data attributes Show data attributes object
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • case string | null Required
          • dataSource string | null Required
          • caseDataSource string | null Required
          • extractionCode string | null Required
          • status string Required

            Values are pending, in_progress, staged, completed, or failed.

          • sourceType string Required

            Values are Device, UserEmailDataProvider, CaseFileProvider, FinancialAccountProvider, LegalDocumentProvider, DiscordUserProvider, RedditUserProvider, LinkedInUserProvider, or AiChatProvider.

          • itemsCount number Required
          • pendingOcApprovalCount number

            Set only for an Originating-org Lawyer on an OC-enabled case: count of items uploaded but not yet OC-approved for this source. Omitted for OC callers and for OL callers on non-OC cases.

          • device object
            Hide device attributes Show device attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • deviceId string Required
            • serialNumber string Required
            • name string Required
            • type string Required
            • nonDeviceType string | null Required
            • model string Required
            • timeZone string Required
            • osVersion string Required
            • owner object | null Required

              Not loaded by any route, so always null.

            • devicePhoneNumber string Required
            • organizations array[string] Required

              Organization ids

            • extractionCodes array[string] Required

              Extraction code ids

            • availableData object

              Which data types exist for this device (optionally scoped by query filters).

          • emailProvider object
            Hide emailProvider attributes Show emailProvider attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • email string Required
            • ecCode string

              Never sent today: no importer fills it.

            • grantId string | null Required
            • provider string | null Required
            • isValid boolean Required
            • lastAccessedAt string(date-time) | null Required
            • folders array[object] Required

              Mailbox folders saved when the account was connected or its folders were refreshed.

              Hide folders attributes Show folders attributes object
              • name string
              • id string
              • isSystemFolder boolean
              • backgroundColor string
              • metadata object

                A copy of the provider's folder record. OAuth (Nylas) accounts: id, name, object, grantId, and depending on the provider backgroundColor, textColor, systemFolder, parentId, childCount, totalCount, unreadCount, attributes. IMAP accounts: name, id, isSystemFolder, backgroundColor and an empty metadata object.

                Additional properties are allowed.

          • fileProvider object
            Hide fileProvider attributes Show fileProvider attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • case object | null Required

              Not loaded by any route, so always null.

            • extractionCode object | null Required

              Not loaded by any route, so always null.

          • discordProvider object
            Hide discordProvider attributes Show discordProvider attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • discordUserId string Required
            • username string | null Required
            • globalName string | null Required
            • discriminator number | null Required
            • email string | null Required
            • phone string | null Required
            • avatar object | null Required

              Not loaded by any route, so always null.

            • verified boolean Required
            • flags array[string] Required
            • servers array[object] Required
            • adsProfile object | null Required
            • accountData object | null Required
            • settings object | null Required
            • metadata object | null Required
            • deletedAt string(date-time) | null Required
            • deletedBy object | null Required
            • ocSharedStatus string | null

              Opposing-council only: whether this provider has been shared with the OL. null for OL/OG callers — same convention as every other item listing. Provider-level: every item under it shares this status, since approval here is all-or-nothing.

              Values are shared, pending, or not_gated.

          • redditProvider object
            Hide redditProvider attributes Show redditProvider attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • redditUserId string Required
            • email string | null Required

              Not filled by any importer today, so always null.

            • emailVerified boolean Required

              Not filled by any importer today, so always false.

            • registrationDate string(date-time) | null Required

              Not filled by any importer today, so always null.

            • isDeleted boolean Required
            • accountGender string | null Required
            • birthdate string | null Required
            • linkedIdentities array[object] Required
            • friends array[object] Required
            • subscribedSubreddits array[string] Required
            • gildedContent array[object] Required
            • multireddits array[object] Required
            • ipLogs array[object] Required
            • deletedAt string(date-time) | null Required
            • deletedBy string | null Required
            • ocSharedStatus string | null

              Opposing-council only: whether this provider has been shared with the OL. null for OL/OG callers — same convention as every other item listing. Provider-level: every item under it shares this status, since approval here is all-or-nothing.

              Values are shared, pending, or not_gated.

          • aiChatProvider object
            Hide aiChatProvider attributes Show aiChatProvider attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • platform string Required

              Values are claude, chatgpt, or gemini.

            • externalUserId string Required
            • email string | null Required
            • displayName string | null Required
            • accountPlan string | null Required
            • accountData object | null Required
            • metadata object | null Required

              Not filled by any importer today, so always null.

            • deletedAt string(date-time) | null Required
            • deletedBy string | null Required
            • ocSharedStatus string | null

              Opposing-council only: whether this provider has been shared with the OL. null for OL/OG callers — same convention as every other item listing. Provider-level: every item under it shares this status, since approval here is all-or-nothing.

              Values are shared, pending, or not_gated.

    • statusCode number Required
    • timestamp string(date-time) Required
GET /case/{caseId}/data-status
curl \
 --request GET 'http://api.example.com/case/{caseId}/data-status' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "organization: string"
Response examples (200)
{
  "data": {
    "data": [
      {
        "dataSource": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "name": "gmail",
          "displayName": "Gmail",
          "category": "email",
          "config": {
            "iosEnableEncryptedBackup": true,
            "iosAllowOnlyEncryptedBackup": false,
            "iosAllApps": [
              "messages",
              "call_log",
              "whatsapp",
              "photos"
            ],
            "iosAllowedApps": [
              "messages",
              "call_log"
            ]
          }
        },
        "percentages": [
          {
            "status": "completed",
            "percentage": 66.67
          },
          {
            "status": "in_progress",
            "percentage": 33.33
          }
        ],
        "data": [
          {
            "createdAt": "2026-01-15T14:30:00.000Z",
            "updatedAt": "2026-01-15T14:30:00.000Z",
            "id": "507f1f77bcf86cd799439011",
            "case": "507f1f77bcf86cd799439011",
            "dataSource": "507f1f77bcf86cd799439011",
            "caseDataSource": "507f1f77bcf86cd799439011",
            "extractionCode": "507f1f77bcf86cd799439011",
            "status": "pending",
            "sourceType": "Device",
            "itemsCount": 1250,
            "pendingOcApprovalCount": 0,
            "device": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "deviceId": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
              "serialNumber": "F2LXK0QJHG7F",
              "name": "Jane's iPhone",
              "type": "ios",
              "nonDeviceType": "string",
              "model": "iPhone 15",
              "timeZone": "America/New_York",
              "osVersion": "18.0",
              "owner": {},
              "devicePhoneNumber": "+15555550100",
              "organizations": [
                "507f1f77bcf86cd799439011"
              ],
              "extractionCodes": [
                "507f1f77bcf86cd799439013"
              ],
              "availableData": {
                "messages": true,
                "calls": false
              }
            },
            "emailProvider": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "email": "jane.doe@example.com",
              "ecCode": "K7Q2-9XPL",
              "grantId": "5f0c8b3e-2a41-4d7c-9a51-1c2b3d4e5f60",
              "provider": "google",
              "isValid": true,
              "lastAccessedAt": "2026-01-15T14:30:00.000Z",
              "folders": [
                {
                  "backgroundColor": "#ffffff",
                  "id": "INBOX",
                  "isSystemFolder": true,
                  "metadata": {
                    "grantId": "5f0c8b3e-2a41-4d7c-9a51-1c2b3d4e5f60",
                    "id": "INBOX",
                    "name": "INBOX",
                    "object": "folder",
                    "systemFolder": true
                  },
                  "name": "INBOX"
                }
              ]
            },
            "fileProvider": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "case": {},
              "extractionCode": {}
            },
            "discordProvider": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "discordUserId": "1012345678901234567",
              "username": "janedoe",
              "globalName": "Jane Doe",
              "discriminator": 0,
              "email": "jane.doe@example.com",
              "phone": "+15555550100",
              "avatar": {},
              "verified": true,
              "flags": [
                "string"
              ],
              "servers": [
                {
                  "name": "Example Server",
                  "serverId": "1023456789012345678"
                }
              ],
              "adsProfile": {
                "age": "25-34",
                "gender": "female"
              },
              "accountData": {
                "discord_store": {
                  "orders": []
                }
              },
              "settings": {
                "locale": "en-US",
                "theme": "dark"
              },
              "metadata": {
                "avatar_hash": null,
                "has_mobile": true,
                "premium_until": null
              },
              "deletedAt": "2026-05-04T09:42:00Z",
              "deletedBy": {},
              "ocSharedStatus": "shared"
            },
            "redditProvider": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "redditUserId": "jane_doe_42",
              "email": "string",
              "emailVerified": false,
              "registrationDate": "2026-05-04T09:42:00Z",
              "isDeleted": false,
              "accountGender": "female",
              "birthdate": "1990-04-12",
              "linkedIdentities": [
                {
                  "issuerId": "https://accounts.google.com",
                  "subjectId": "104857600123456789012"
                }
              ],
              "friends": [
                {
                  "note": "",
                  "username": "john_smith_7"
                }
              ],
              "subscribedSubreddits": [
                "AskReddit",
                "personalfinance"
              ],
              "gildedContent": [
                {
                  "amount": 1,
                  "award": "gold",
                  "contentLink": "https://www.reddit.com/r/AskReddit/comments/1abc2de/comment/kx1y2z3/",
                  "date": "2026-01-15T14:30:00.000Z"
                }
              ],
              "multireddits": [
                {
                  "display_name": "news",
                  "id": "m4abc1",
                  "subreddits": "worldnews,news"
                }
              ],
              "ipLogs": [
                {
                  "date": "2026-01-15 14:30:00 UTC",
                  "ip": "203.0.113.7"
                }
              ],
              "deletedAt": "2026-05-04T09:42:00Z",
              "deletedBy": "string",
              "ocSharedStatus": "shared"
            },
            "aiChatProvider": {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "platform": "chatgpt",
              "externalUserId": "user-a1B2c3D4e5F6g7H8i9J0k1L2",
              "email": "jane.doe@example.com",
              "displayName": "Jane Doe",
              "accountPlan": "plus",
              "accountData": {
                "id": "user-a1B2c3D4e5F6g7H8i9J0k1L2",
                "email": "jane.doe@example.com",
                "name": "Jane Doe",
                "chatgpt_plus_user": true
              },
              "metadata": {},
              "deletedAt": "2026-05-04T09:42:00Z",
              "deletedBy": "string",
              "ocSharedStatus": "shared"
            }
          }
        ]
      }
    ]
  },
  "statusCode": 200,
  "timestamp": "2026-01-15T10:15:00.000Z"
}