> This page is for Developers.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.emnify.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.emnify.com/_mcp/server.

> Manage SGP.32 IoT eSIM profiles programmatically using the emnify eUICC API - list eUICCs, schedule profile operations, and monitor operation status.

The eUICC API lets you manage eSIM profiles on SGP.32 IoT eSIM devices programmatically.
You can retrieve eUICC information, schedule profile operations, and monitor their status - all without accessing the emnify Portal.

## Prerequisites

All eUICC API calls require a valid authentication token in the `Authorization` header.
For instructions on obtaining a token, see [Application tokens](/developers/auth/application-tokens).

## List your eUICCs

Retrieve all eUICCs registered to your organization.
Use the `q` query parameter to filter by EID or other fields.

**Endpoint:** `GET /api/v1/euicc`

### Request

GET [https://cdn.emnify.net/api/v1/euicc](https://cdn.emnify.net/api/v1/euicc)

**`List All eUICCs`**

```curl List All eUICCs
curl -G https://cdn.emnify.net/api/v1/euicc \
     -H "Authorization: Bearer <token>" \
     -d page=1 \
     -d per_page=25
```

**`List All eUICCs`**

```python List All eUICCs
import requests

url = "https://cdn.emnify.net/api/v1/euicc"

querystring = {"page":"1","per_page":"25"}

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

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

print(response.json())
```

**`List All eUICCs`**

```javascript List All eUICCs
const url = 'https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25';
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);
}
```

**`List All eUICCs`**

```go List All eUICCs
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25"

	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))

}
```

**`List All eUICCs`**

```ruby List All eUICCs
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25")

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
```

**`List All eUICCs`**

```java List All eUICCs
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25")
  .header("Authorization", "Bearer <token>")
  .asString();
```

**`List All eUICCs`**

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

**`List All eUICCs`**

```csharp List All eUICCs
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

**`List All eUICCs`**

```swift List All eUICCs
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc?page=1&per_page=25")! 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()
```

### Response (200)

```json
[
  {
    "id": 123456,
    "eid": "89634247065724874780755570224832",
    "created": "2025-08-26T09:31:51.000Z",
    "profile": [
      {
        "iccid_with_luhn": "89883030000123456789",
        "status": {
          "id": 1,
          "description": "Available"
        },
        "customer_org": {
          "id": 44,
          "name": "emnify Test"
        },
        "name": "emnify IoT eSIM profile",
        "operator": {
          "id": 851,
          "name": "emnify"
        },
        "preloaded": true,
        "fallback_allowed": true,
        "fallback_attribute": true,
        "profile_type": {
          "id": 5,
          "description": "IoT eUICC Profile"
        },
        "endpoint": {
          "id": 789123,
          "name": "My device"
        }
      }
    ],
    "issuer_org": {
      "id": 2,
      "name": "emnify GmbH"
    },
    "customer_org": {
      "id": 44,
      "name": "emnify Test"
    },
    "supported_profile_type": {
      "id": 5,
      "description": "IoT eUICC Profile"
    },
    "status": {
      "id": 1,
      "description": "Active"
    },
    "last_audited": "2025-09-25T11:56:15.000Z",
    "last_polled": "2025-09-25T11:56:15.000Z",
    "last_synced": "2025-09-25T11:56:15.000Z",
    "eim": {
      "id": 1,
      "description": "TBD"
    }
  }
]
```

To filter by EID, use the `q` query parameter:

### Request

GET [https://cdn.emnify.net/api/v1/euicc](https://cdn.emnify.net/api/v1/euicc)

**`Filter by EID`**

```curl Filter by EID
curl -G https://cdn.emnify.net/api/v1/euicc \
     -H "Authorization: Bearer <token>" \
     --data-urlencode q=eid:89634247065724874780755570225034
```

**`Filter by EID`**

```python Filter by EID
import requests

url = "https://cdn.emnify.net/api/v1/euicc"

querystring = {"q":"eid:89634247065724874780755570225034"}

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

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

print(response.json())
```

**`Filter by EID`**

```javascript Filter by EID
const url = 'https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034';
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);
}
```

**`Filter by EID`**

```go Filter by EID
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034"

	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))

}
```

**`Filter by EID`**

```ruby Filter by EID
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034")

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
```

**`Filter by EID`**

```java Filter by EID
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034")
  .header("Authorization", "Bearer <token>")
  .asString();
```

**`Filter by EID`**

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

**`Filter by EID`**

```csharp Filter by EID
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

**`Filter by EID`**

```swift Filter by EID
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc?q=eid%3A89634247065724874780755570225034")! 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()
```

### Response (200)

```json
[
  {
    "id": 123789,
    "eid": "89634247065724874780755570225034",
    "created": "2025-08-26T09:31:51.000Z",
    "profile": []
  }
]
```

## Get a specific eUICC

Retrieve details for a single eUICC by its internal ID.

**Endpoint:** `GET /api/v1/euicc/{euicc_id}`

### Request

GET [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}](https://cdn.emnify.net/api/v1/euicc/\{euicc_id})

```curl
curl https://cdn.emnify.net/api/v1/euicc/123456 \
     -H "Authorization: Bearer <token>"
```

```python
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456"

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

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

print(response.json())
```

```javascript
const url = 'https://cdn.emnify.net/api/v1/euicc/123456';
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://cdn.emnify.net/api/v1/euicc/123456"

	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://cdn.emnify.net/api/v1/euicc/123456")

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://cdn.emnify.net/api/v1/euicc/123456")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://cdn.emnify.net/api/v1/euicc/123456', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456");
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://cdn.emnify.net/api/v1/euicc/123456")! 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()
```

### Response (200)

```json
{
  "id": 123457,
  "eid": "89634247065724874780755570224933",
  "created": "2025-08-26T09:31:51.000Z",
  "profile": []
}
```

## Profile statuses

Each profile on an eUICC has a `status` field that reflects its current state in the lifecycle.

| ID | Status          | Description                                                                                                                                   |
| -- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| 1  | **Available**   | Initial state for profiles on the emnify SM-DP+. Profile is not linked to any end-user and can be picked at random for assignment.            |
| 2  | **Allocated**   | Profile has been reserved but not yet associated to an eUICC (EID).                                                                           |
| 3  | **Linked**      | Profile has been reserved for use and an EID has been provided. *Transient - moves to Released.*                                              |
| 4  | **Confirmed**   | Profile has been confirmed. *Transient - moves to Released.*                                                                                  |
| 5  | **Released**    | Profile is ready to download, either through a QR code or through MDM using a pre-linked EID and default SM-DP+.                              |
| 6  | **Downloaded**  | Profile has been downloaded from the server; final notification from the eUICC is still awaited. *Transient - moves to Installed or Enabled.* |
| 7  | **Installed**   | Profile is installed on the eUICC but not active.                                                                                             |
| 8  | **Enabled**     | Profile is installed on the eUICC and currently active.                                                                                       |
| 9  | **Deleted**     | Profile was installed on the eUICC and has since been deleted.                                                                                |
| 10 | **Error**       | Profile is in an error state on the SM-DP+, for example after repeated failed download attempts.                                              |
| 11 | **Unavailable** | Profile was withdrawn on the SM-DP+ and can no longer be used.                                                                                |

Two additional profile fields control fallback behavior:

* `fallback_allowed` - Indicates whether the profile *type* supports being designated as a fallback.
* `fallback_attribute` - Indicates whether *this specific profile* is currently set as the fallback. When the active profile loses network connectivity, the device automatically switches to the fallback profile.

## Schedule profile operations

Use `POST /api/v1/euicc/{euicc_id}/operation` to schedule profile operations on an eUICC.
Each request body is an array, allowing you to schedule multiple operations at once.

Operations are executed asynchronously - the API returns immediately with a `Scheduled` status and a link header that points to the created operations.
Use [List operations](#list-operations) or [Get operation details](#get-operation-details) to track progress.

> **Note**
>
> This endpoint returns HTTP 404 for non-IoT eUICCs.

### Operation action IDs

| ID | Action                 |
| -- | ---------------------- |
| 1  | Audit eUICC            |
| 2  | Download profile       |
| 3  | Enable profile         |
| 4  | Set fallback attribute |
| 5  | Delete profile         |

### Validity period

The `validity_period` parameter defines how long (in seconds) the operation remains pending before it expires.
The **maximum value is 86400 seconds (24 hours)** which is also the default value if not specified.

If the device is unreachable and the validity period elapses before the operation is executed, the operation transitions to `Expired`.

### Contradicting operations

The API does not validate new operations against any already-scheduled operations for the same eUICC.
If a new operation conflicts with a pending one - for example, scheduling two concurrent "Enable profile" requests targeting different profiles - only the **first scheduled operation** will be applied.
Subsequent contradicting operations will not be executed.

> **Tip**
>
> Check for pending scheduled operations before scheduling a new one to avoid unintended conflicts.

### Audit an eUICC

Synchronizes the eUICC state by fetching the latest profile and status information directly from the device.
Run an audit when eUICC data appears out of sync with what the device reports.

### Request

POST [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Audit eUICC Operation`**

```curl Audit eUICC Operation
curl -X POST https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
  {
    "action": {
      "id": 1
    },
    "validity_period": 600
  }
]'
```

**`Audit eUICC Operation`**

```python Audit eUICC Operation
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

payload = [
    {
        "action": { "id": 1 },
        "validity_period": 600
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Audit eUICC Operation`**

```javascript Audit eUICC Operation
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"action":{"id":1},"validity_period":600}]'
};

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

**`Audit eUICC Operation`**

```go Audit eUICC Operation
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation"

	payload := strings.NewReader("[\n  {\n    \"action\": {\n      \"id\": 1\n    },\n    \"validity_period\": 600\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

**`Audit eUICC Operation`**

```ruby Audit eUICC Operation
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"action\": {\n      \"id\": 1\n    },\n    \"validity_period\": 600\n  }\n]"

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

**`Audit eUICC Operation`**

```java Audit eUICC Operation
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://cdn.emnify.net/api/v1/euicc/123456/operation")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"action\": {\n      \"id\": 1\n    },\n    \"validity_period\": 600\n  }\n]")
  .asString();
```

**`Audit eUICC Operation`**

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://cdn.emnify.net/api/v1/euicc/123456/operation', [
  'body' => '[
  {
    "action": {
      "id": 1
    },
    "validity_period": 600
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

**`Audit eUICC Operation`**

```csharp Audit eUICC Operation
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"action\": {\n      \"id\": 1\n    },\n    \"validity_period\": 600\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Audit eUICC Operation`**

```swift Audit eUICC Operation
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "action": ["id": 1],
    "validity_period": 600
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### Response (201)

```json
[
  {
    "id": "11111111-2222-3333-4444-555555555555",
    "action": {
      "id": 1,
      "description": "Audit eUICC"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:05:00.000Z",
    "last_updated_at": "2025-09-25T12:05:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    }
  }
]
```

### Download a profile

Downloads a new profile to the eUICC using an activation code.
The profile is fetched from the SM-DP+ server and installed on the device over-the-air.

| Parameter         | Type    | Required | Description                                                                                                                                                                        |
| ----------------- | ------- | :------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `activation_code` | string  |    Yes   | Activation code in `1$<SMDP_ADDRESS>$<MATCHING_ID>` format (for example, `1$SMDP.EXAMPLE.COM$04386-AGYFT-A74Y8-3F815`). Provided by emnify or a third-party SM-DP+ operator.       |
| `enable`          | boolean |    No    | If `true`, the profile is activated immediately after download. Defaults to `false`.                                                                                               |
| `rollback`        | boolean |    No    | If `true`, the device automatically reverts to the previously active profile if the newly enabled profile fails to connect to a network. Strongly recommended when `enable: true`. |
| `validity_period` | integer |    No    | How long (in seconds) the operation remains pending before it expires. Range: 1-86400. Defaults to 86400 (24 hours).                                                               |

> **Info**
>
> Set both `enable: true` and `rollback: true` when you want the profile to go live immediately - rollback ensures the device can recover automatically if the new profile fails to attach to a network.

### Request

POST [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Download Profile Operation`**

```curl Download Profile Operation
curl -X POST https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
  {
    "action": {
      "id": 2
    },
    "validity_period": 600,
    "activation_code": "1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815",
    "enable": true,
    "rollback": true
  }
]'
```

**`Download Profile Operation`**

```python Download Profile Operation
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

payload = [
    {
        "action": { "id": 2 },
        "validity_period": 600,
        "activation_code": "1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815",
        "enable": True,
        "rollback": True
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Download Profile Operation`**

```javascript Download Profile Operation
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"action":{"id":2},"validity_period":600,"activation_code":"1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815","enable":true,"rollback":true}]'
};

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

**`Download Profile Operation`**

```go Download Profile Operation
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation"

	payload := strings.NewReader("[\n  {\n    \"action\": {\n      \"id\": 2\n    },\n    \"validity_period\": 600,\n    \"activation_code\": \"1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815\",\n    \"enable\": true,\n    \"rollback\": true\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

**`Download Profile Operation`**

```ruby Download Profile Operation
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"action\": {\n      \"id\": 2\n    },\n    \"validity_period\": 600,\n    \"activation_code\": \"1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815\",\n    \"enable\": true,\n    \"rollback\": true\n  }\n]"

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

**`Download Profile Operation`**

```java Download Profile Operation
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://cdn.emnify.net/api/v1/euicc/123456/operation")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"action\": {\n      \"id\": 2\n    },\n    \"validity_period\": 600,\n    \"activation_code\": \"1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815\",\n    \"enable\": true,\n    \"rollback\": true\n  }\n]")
  .asString();
```

**`Download Profile Operation`**

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://cdn.emnify.net/api/v1/euicc/123456/operation', [
  'body' => '[
  {
    "action": {
      "id": 2
    },
    "validity_period": 600,
    "activation_code": "1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815",
    "enable": true,
    "rollback": true
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

**`Download Profile Operation`**

```csharp Download Profile Operation
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"action\": {\n      \"id\": 2\n    },\n    \"validity_period\": 600,\n    \"activation_code\": \"1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815\",\n    \"enable\": true,\n    \"rollback\": true\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Download Profile Operation`**

```swift Download Profile Operation
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "action": ["id": 2],
    "validity_period": 600,
    "activation_code": "1$SMDP.GSMA.COM$04386-AGYFT-A74Y8-3F815",
    "enable": true,
    "rollback": true
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### Response (201)

```json
[
  {
    "id": "11111112-2222-3333-4444-555555555555",
    "action": {
      "id": 2,
      "description": "Download profile"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:05:00.000Z",
    "last_updated_at": "2025-09-25T12:05:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    }
  }
]
```

### Enable a profile

Switches the active profile on the eUICC to the specified profile by ICCID.

> **Info**
>
> Enabling a profile automatically deactivates the currently active profile.
> The previously active profile transitions to **Installed (Inactive)** status and remains installed on the eUICC.

> **Info**
>
> **Rollback recommended:** Set `rollback: true` to automatically revert to the previously active profile if the newly enabled profile fails to connect to a network after activation.
> Without rollback, a failed profile switch may leave the device offline with no automatic recovery.

### Request

POST [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Enable Profile by ICCID`**

```curl Enable Profile by ICCID
curl -X POST https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
  {
    "action": {
      "id": 3
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051",
    "rollback": true
  }
]'
```

**`Enable Profile by ICCID`**

```python Enable Profile by ICCID
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

payload = [
    {
        "action": { "id": 3 },
        "validity_period": 600,
        "iccid_with_luhn": "89883030000133194051",
        "rollback": True
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Enable Profile by ICCID`**

```javascript Enable Profile by ICCID
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"action":{"id":3},"validity_period":600,"iccid_with_luhn":"89883030000133194051","rollback":true}]'
};

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

**`Enable Profile by ICCID`**

```go Enable Profile by ICCID
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation"

	payload := strings.NewReader("[\n  {\n    \"action\": {\n      \"id\": 3\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\",\n    \"rollback\": true\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

**`Enable Profile by ICCID`**

```ruby Enable Profile by ICCID
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"action\": {\n      \"id\": 3\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\",\n    \"rollback\": true\n  }\n]"

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

**`Enable Profile by ICCID`**

```java Enable Profile by ICCID
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://cdn.emnify.net/api/v1/euicc/123456/operation")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"action\": {\n      \"id\": 3\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\",\n    \"rollback\": true\n  }\n]")
  .asString();
```

**`Enable Profile by ICCID`**

```php Enable Profile by ICCID
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://cdn.emnify.net/api/v1/euicc/123456/operation', [
  'body' => '[
  {
    "action": {
      "id": 3
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051",
    "rollback": true
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

**`Enable Profile by ICCID`**

```csharp Enable Profile by ICCID
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"action\": {\n      \"id\": 3\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\",\n    \"rollback\": true\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Enable Profile by ICCID`**

```swift Enable Profile by ICCID
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "action": ["id": 3],
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051",
    "rollback": true
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### Response (201)

```json
[
  {
    "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "action": {
      "id": 3,
      "description": "Enable profile"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:05:00.000Z",
    "last_updated_at": "2025-09-25T12:05:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    },
    "iccid_with_luhn": "89883030000133194051"
  }
]
```

### Set a fallback profile

Designates a profile as the fallback - the profile the device automatically switches to if the active profile loses connectivity.

> **Note**
>
> Only a **Disabled** (inactive) profile can be set as the fallback.
> There can only be one fallback profile per eUICC at a time - designating a new fallback replaces the previous one.

### Request

POST [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Set Fallback Profile by ICCID`**

```curl Set Fallback Profile by ICCID
curl -X POST https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
  {
    "action": {
      "id": 4
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  }
]'
```

**`Set Fallback Profile by ICCID`**

```python Set Fallback Profile by ICCID
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

payload = [
    {
        "action": { "id": 4 },
        "validity_period": 600,
        "iccid_with_luhn": "89883030000133194051"
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Set Fallback Profile by ICCID`**

```javascript Set Fallback Profile by ICCID
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"action":{"id":4},"validity_period":600,"iccid_with_luhn":"89883030000133194051"}]'
};

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

**`Set Fallback Profile by ICCID`**

```go Set Fallback Profile by ICCID
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation"

	payload := strings.NewReader("[\n  {\n    \"action\": {\n      \"id\": 4\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

**`Set Fallback Profile by ICCID`**

```ruby Set Fallback Profile by ICCID
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"action\": {\n      \"id\": 4\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]"

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

**`Set Fallback Profile by ICCID`**

```java Set Fallback Profile by ICCID
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://cdn.emnify.net/api/v1/euicc/123456/operation")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"action\": {\n      \"id\": 4\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]")
  .asString();
```

**`Set Fallback Profile by ICCID`**

```php Set Fallback Profile by ICCID
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://cdn.emnify.net/api/v1/euicc/123456/operation', [
  'body' => '[
  {
    "action": {
      "id": 4
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

**`Set Fallback Profile by ICCID`**

```csharp Set Fallback Profile by ICCID
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"action\": {\n      \"id\": 4\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Set Fallback Profile by ICCID`**

```swift Set Fallback Profile by ICCID
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "action": ["id": 4],
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### Response (201)

```json
[
  {
    "id": "aaaaaaab-bbbb-cccc-dddd-eeeeeeeeeeee",
    "action": {
      "id": 4,
      "description": "Set fallback attribute"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:05:00.000Z",
    "last_updated_at": "2025-09-25T12:05:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    },
    "iccid_with_luhn": "89883030000133194051"
  }
]
```

### Delete a profile

Removes a profile from the eUICC over-the-air.

> **Warning**
>
> You cannot delete the currently active profile.
> Enable a different profile first.
> Profile deletion is irreversible.

### Request

POST [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Delete Profile by ICCID`**

```curl Delete Profile by ICCID
curl -X POST https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '[
  {
    "action": {
      "id": 5
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  }
]'
```

**`Delete Profile by ICCID`**

```python Delete Profile by ICCID
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

payload = [
    {
        "action": { "id": 5 },
        "validity_period": 600,
        "iccid_with_luhn": "89883030000133194051"
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Delete Profile by ICCID`**

```javascript Delete Profile by ICCID
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"action":{"id":5},"validity_period":600,"iccid_with_luhn":"89883030000133194051"}]'
};

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

**`Delete Profile by ICCID`**

```go Delete Profile by ICCID
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation"

	payload := strings.NewReader("[\n  {\n    \"action\": {\n      \"id\": 5\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

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

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

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

}
```

**`Delete Profile by ICCID`**

```ruby Delete Profile by ICCID
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"action\": {\n      \"id\": 5\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]"

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

**`Delete Profile by ICCID`**

```java Delete Profile by ICCID
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://cdn.emnify.net/api/v1/euicc/123456/operation")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"action\": {\n      \"id\": 5\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]")
  .asString();
```

**`Delete Profile by ICCID`**

```php Delete Profile by ICCID
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://cdn.emnify.net/api/v1/euicc/123456/operation', [
  'body' => '[
  {
    "action": {
      "id": 5
    },
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

**`Delete Profile by ICCID`**

```csharp Delete Profile by ICCID
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"action\": {\n      \"id\": 5\n    },\n    \"validity_period\": 600,\n    \"iccid_with_luhn\": \"89883030000133194051\"\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Delete Profile by ICCID`**

```swift Delete Profile by ICCID
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "action": ["id": 5],
    "validity_period": 600,
    "iccid_with_luhn": "89883030000133194051"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### Response (201)

```json
[
  {
    "id": "aaaaaaac-bbbb-cccc-dddd-eeeeeeeeeeee",
    "action": {
      "id": 5,
      "description": "Delete profile"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:05:00.000Z",
    "last_updated_at": "2025-09-25T12:05:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    },
    "iccid_with_luhn": "89883030000133194051"
  }
]
```

## Monitor operations

### List operations

Retrieve all operations scheduled for a specific eUICC.
Use the `q` query parameter to filter by action (`q=action:3`) or status.

**Endpoint:** `GET /api/v1/euicc/{euicc_id}/operation`

### Request

GET [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation)

**`Default - List All Operations`**

```curl Default - List All Operations
curl -G https://cdn.emnify.net/api/v1/euicc/123456/operation \
     -H "Authorization: Bearer <token>" \
     -d page=1 \
     -d per_page=25
```

**`Default - List All Operations`**

```python Default - List All Operations
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation"

querystring = {"page":"1","per_page":"25"}

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

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

print(response.json())
```

**`Default - List All Operations`**

```javascript Default - List All Operations
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25';
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);
}
```

**`Default - List All Operations`**

```go Default - List All Operations
package main

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

func main() {

	url := "https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25"

	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))

}
```

**`Default - List All Operations`**

```ruby Default - List All Operations
require 'uri'
require 'net/http'

url = URI("https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25")

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
```

**`Default - List All Operations`**

```java Default - List All Operations
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25")
  .header("Authorization", "Bearer <token>")
  .asString();
```

**`Default - List All Operations`**

```php Default - List All Operations
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

**`Default - List All Operations`**

```csharp Default - List All Operations
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

**`Default - List All Operations`**

```swift Default - List All Operations
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://cdn.emnify.net/api/v1/euicc/123456/operation?page=1&per_page=25")! 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()
```

### Response (200)

```json
[
  {
    "id": "11111111-2222-3333-4444-555555555555",
    "action": {
      "id": 3,
      "description": "Enable profile"
    },
    "status": {
      "id": 1,
      "description": "Scheduled"
    },
    "creation_date": "2025-09-25T12:00:00.000Z",
    "last_updated_at": "2025-09-25T12:00:00.000Z",
    "user": {
      "id": 123456,
      "name": "John Doe"
    },
    "expiry_date": "2025-09-25T12:10:00.000Z",
    "iccid_with_luhn": "89883030000123456789"
  }
]
```

### Get operation details

Retrieve the details and current status of a specific operation.

**Endpoint:** `GET /api/v1/euicc/{euicc_id}/operation/{operation_id}`

### Request

GET [https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation/\{operation_id}](https://cdn.emnify.net/api/v1/euicc/\{euicc_id}/operation/\{operation_id})

```curl
curl https://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555 \
     -H "Authorization: Bearer <token>"
```

```python
import requests

url = "https://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555"

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

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

print(response.json())
```

```javascript
const url = 'https://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555';
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://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555"

	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://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555")

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://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555");
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://cdn.emnify.net/api/v1/euicc/123456/operation/11111144-2222-3333-4444-555555555555")! 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()
```

### Response (200)

```json
{
  "id": "11111144-2222-3333-4444-555555555555",
  "action": {
    "id": 2,
    "description": "Download profile"
  },
  "status": {
    "id": 2,
    "description": "Succeeded"
  },
  "creation_date": "2025-09-25T12:00:00.000Z",
  "last_updated_at": "2025-09-25T12:15:00.000Z",
  "user": {
    "id": 123456,
    "name": "John Doe"
  },
  "expiry_date": "2025-09-26T12:00:00.000Z",
  "finalization_date": "2025-09-25T12:15:00.000Z",
  "iccid_with_luhn": "89883030000133194051"
}
```

### Operation statuses

| ID | Status    | Description                                                     |
| -- | --------- | --------------------------------------------------------------- |
| 1  | Scheduled | Operation is queued and waiting to be sent to the device        |
| 2  | Succeeded | Operation completed successfully                                |
| 3  | Failed    | Operation failed - check Error Object for more details.         |
| 4  | Expired   | Operation was not executed before the `validity_period` elapsed |
| 5  | Canceled  | Operation was canceled.                                         |

## Related resources

* [API Reference: eUICC](/developers/api/euicc) - Full endpoint reference with all parameters and response schemas
* [eSIM management in the Portal](/portal/esim-management/advanced-esim) - Perform the same operations through the emnify Portal UI, except the eUICC audit
* [Authentication](/developers/auth/application-tokens) - How to obtain and use authentication tokens