# Get immigration case details

GET https://api.letsdeel.com/rest/v2/immigration/client/cases/{id}

Get detailed information for a specific immigration case. Use this to check case status and track process progress. The id path parameter is the case UUID returned from the 'Create Client Case' endpoint. Response is enriched with applicant profile, visa type, case status, estimated completion date, process details, and compliance document details.
 **Token scopes**: `immigration:read`

Reference: https://developer.deel.com/api/endpoints/immigration/get-client-case

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: Deel HRIS SCIM API
  version: 1.0.0
paths:
  /immigration/client/cases/{id}:
    get:
      operationId: get-client-case
      summary: Get immigration case details
      description: >-
        Get detailed information for a specific immigration case. Use this to
        check case status and track process progress. The id path parameter is
        the case UUID returned from the 'Create Client Case' endpoint. Response
        is enriched with applicant profile, visa type, case status, estimated
        completion date, process details, and compliance document details.
         **Token scopes**: `immigration:read`
      tags:
        - subpackage_immigration
      parameters:
        - name: id
          in: path
          description: Immigration case id
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          description: >
            ## Authentication

            The Deel API uses bearer tokens to authenticate requests. All API
            calls must be made over HTTPS — calls over plain HTTP or without
            authentication will fail.


            ```curl

            curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \
              -H 'Authorization: Bearer YOUR-TOKEN-HERE'
            ```


            [Learn more about authentication](/api/authentication)
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/immigration_getClientCase_Response_200'
        '400':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/GetImmigrationCaseDetails-v2026-01-01RequestBadRequestError
        '401':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '403':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '404':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
        '500':
          description: Operation failed.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/GetImmigrationCaseDetails-v2026-01-01RequestInternalServerError
servers:
  - url: https://api.letsdeel.com/rest/v2
  - url: https://api-staging.letsdeel.com/rest/v2
components:
  schemas:
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataStatus:
      type: string
      enum:
        - OPEN
        - CLOSED
        - ON_HOLD
      description: Status of the immigration case.
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataStatus
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataProcess:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the current active process.
        name:
          type: string
          description: Name of the current active process.
        status:
          type: string
          description: Status of the current active process.
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataProcess
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataApplicant:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the applicant profile id.
        external_id:
          type:
            - string
            - 'null'
          description: External identifier of the applicant.
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataApplicant
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus:
      type: string
      enum:
        - IN_REVIEW
        - APPROVED
        - REJECTED
      description: Status of the document.
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItems:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the document.
        status:
          $ref: >-
            #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus
          description: Status of the document.
        document_type:
          type: string
          description: >-
            The type of the document. Represents the visa type for right to work
            cases.
        expiration_date:
          type: string
          format: date-time
          description: Expiry date of the document.
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItems
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaData:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of immigration case.
        status:
          $ref: >-
            #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataStatus
          description: Status of the immigration case.
        process:
          $ref: >-
            #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataProcess
        applicant:
          oneOf:
            - $ref: >-
                #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataApplicant
            - type: 'null'
        case_type:
          type: string
          description: Name of the case type
        documents:
          type: array
          items:
            $ref: >-
              #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaDataDocumentsItems
        visa_type:
          type:
            - string
            - 'null'
          description: The type of the the visa.
        country_code:
          type: string
          description: The country of the immigration case.
        last_update_at:
          type: string
          format: date-time
          description: Last activity on the immigration case.
        case_created_at:
          type: string
          format: date-time
          description: Creation date of the immigration case.
        estimated_completion_date:
          type: string
          format: date-time
          description: Estimated completion date of the immigration case.
      title: ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaData
    immigration_getClientCase_Response_200:
      type: object
      properties:
        data:
          $ref: >-
            #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaData
      title: immigration_getClientCase_Response_200
    ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaErrorsItems:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
        message:
          type: string
          description: Human-readable explanation of the error
      title: >-
        ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaErrorsItems
    GetImmigrationCaseDetails-v2026-01-01RequestBadRequestError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: >-
              #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaErrorsItems
      title: GetImmigrationCaseDetails-v2026-01-01RequestBadRequestError
    ApiErrorRequest:
      type: object
      properties:
        method:
          type: string
          description: The HTTP method of the failed request
        url:
          type: string
          description: The relative URL of the failed request
        status:
          type: number
          format: double
          description: The status code of the response
        api_req_id:
          type: string
          description: The request ID of the failed request
        docs:
          type: string
          description: >-
            A link to the official documentation for the requested endpoint
            resource
        source:
          type: string
          description: The source handler which produced the returned error
        code:
          type: number
          format: double
          description: The code of the source handler which produced the returned error
      title: ApiErrorRequest
    ApiError:
      type: object
      properties:
        message:
          type: string
          description: A description of the returned error
        path:
          type: string
          description: The JSON path where input validation failed
      title: ApiError
    ApiErrorContainer:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/ApiErrorRequest'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
      title: ApiErrorContainer
    GetImmigrationCaseDetails-v2026-01-01RequestInternalServerError:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: >-
              #/components/schemas/ImmigrationClientCasesIdGetResponsesContentApplicationJsonSchemaErrorsItems
      title: GetImmigrationCaseDetails-v2026-01-01RequestInternalServerError
  securitySchemes:
    deelToken:
      type: http
      scheme: bearer
      description: >
        ## Authentication

        The Deel API uses bearer tokens to authenticate requests. All API calls
        must be made over HTTPS — calls over plain HTTP or without
        authentication will fail.


        ```curl

        curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \
          -H 'Authorization: Bearer YOUR-TOKEN-HERE'
        ```


        [Learn more about authentication](/api/authentication)
    oauth2:
      type: http
      scheme: bearer
      description: >-
        Standard OAuth2 security scheme based on
        https://swagger.io/docs/specification/authentication/

```

## SDK Code Examples

```python
import requests

url = "https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/v2/immigration/client/cases/e9b4ce94-2e3e-4d41-9faf-1ad2389cac1d")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```