> You are reading the Docusign Developer Documentation. For clean Markdown of any page, append .md to the page URL.
>
> Documentation indexes by section:
> - APIs and SDKs: https://docusign.docs.buildwithfern.com/docs/llms.txt
> - Platform 101: https://docusign.docs.buildwithfern.com/platform/llms.txt
> - Extension Apps: https://docusign.docs.buildwithfern.com/extension-apps/llms.txt
> - Docusign CLI: https://docusign.docs.buildwithfern.com/docusign-cli/llms.txt
>
> Authentication (OAuth, JWT Grant, M2M): https://docusign.docs.buildwithfern.com/platform/auth
> Webhooks and Connect: https://docusign.docs.buildwithfern.com/platform/webhooks
>
> OpenAPI specifications: https://docusign.docs.buildwithfern.com/openapi.json
> MCP server: https://docusign.docs.buildwithfern.com/_mcp/server

# How to start the signing process for an unsigned envelope without connectivity (offline)

> Learn how to start the signing process for an unsigned cached envelope with the Android SDK.

This topic demonstrates how to start the signing process for an unsigned cached [envelope](/docs/esign-rest-api/esign101/concepts/envelopes). This call can be made when the user’s mobile device is offline.

**Important:** This example requires that the user has a locally stored envelope. The account used for authentication must also either:

* be set as the host for an [In Person Signer](https://support.docusign.com/s/document-item?rsc_301\&bundleId=gav1643676262430\&topicId=hak1578456316043.html)  or
* have assigned [tabs](/docs/esign-rest-api/esign101/concepts/tabs) in the envelope.

## Required data

Running the code in this how-to requires this data:

| Data element                                                                                | Description                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| \{ENVELOPE_ID} for a [cached envelope](/docs/mobile-sdks/android-sdk/how-to/cache-envelope) | A [GUID](http://guid.one/) value that identifies a Docusign [envelope](/docs/esign-rest-api/esign101/concepts/envelopes). This value is automatically generated by Docusign when the envelope is created. In order to start an offline signing session, this envelope must be stored locally on your device. |

## Step 1. Log in to Docusign

To make the API call shown in this how-to, you must be logged in to Docusign.

See [How to log in to Docusign from your app](/docs/mobile-sdks/android-sdk/how-to/log-in) for details.

## Step 2. Start offline signing process

Use the method shown to start the offline signing process. Make sure to substitute \{ENVELOPE_ID} with the envelope ID of an unsigned envelope that has already been cached on your device.

**`Java`**

```java title="Java"
DSSigningDelegate signingDelegate = DocuSign.getInstance().getSigningDelegate();
signingDelegate.signOffline(context,
    {"ENVELOPE_ID"},
    new DSOfflineSigningListener() {
        @Override
        public void onCancel(String envelopeId) {
            Log.d("signOffline", "signing cancelled for envelope ID: " + envelopeId);
        }

        @Override
        public void onError(DSSigningException exception) {
            Log.e("signOffline", exception.getLocalizedMessage());
        }

        @Override
        public void onSuccess(String envelopeId) {
            Log.d("signOffline", "Signing successful for envelope ID: " + envelopeId);
        }
    }
);
```

**`Kotlin`**

```kotlin title="Kotlin"
val signingDelegate = DocuSign.getInstance().getSigningDelegate()
signingDelegate.signOffline(
    context,
    "{ENVELOPE_ID}",
    object : DSOfflineSigningListener {
        override fun onCancel(envelopeId: String) {
            Log.d("signOffline", "signing cancelled for envelope ID: $envelopeId")
        }

        override fun onError(exception: DSSigningException) {
            Log.e("signOffline", exception.localizedMessage)
        }

        override fun onSuccess(envelopeId: String) {
            Log.d("signOffline", "Signing successful for envelope ID: $envelopeId")
        }
    }
)
```

## Expected response

If your call is successful, you will see the Android SDK’s native offline signing screen. The offline user can sign the document, and once the device has restored connectivity, the signed envelope is ready for sync.

![](/_fern-files/_img/dd2f769f58bbe1c7e2e39f5329b39039c5fb585b0ae70a754a295817db2ef16f.webp)

## Next steps

* Learn more about our [Android SDK](/docs/mobile-sdks/android-sdk/android101).
* See all available Android SDK [How-to guides](/docs/mobile-sdks/android-sdk/how-to).
* [Try out Android SDK through our sample app](/docs/mobile-sdks/android-sdk/sample-app).
* See [Preparing envelopes for mobile offline signing](https://support.docusign.com/s/document-item?rsc_301\&bundleId=gub1579795684748\&topicId=rxa1579795665285.html).
* See how to [Go-Live](/docs/mobile-sdks/android-sdk/go-live) with a completed app and find the base path for API calls in the production environment.