eSign for Jira

External Integration API


Overview

eSign supports an Integration API to allow external systems to integrate with eSign.

Security & Authentication

Authenticate to eSign API’s by providing the eSign API Token as a standard Bearer token header.

Authorization: Bearer <ESIGN_API_TOKEN_HERE>

Create and manage API Tokens in eSign App Settings within the Atlassian Jira environment.

API Locations

The API Base URL’s are listed below by location. The active location for a site is displayed in the eSign App Settings and Create Token pages.

info API Tokens are linked to the pinned data residency region. If a site is migrated, new API Token(s) will need to be created.

Region

API Base URL

EU

https://japi.eu.esign-app.com/jira/api/external

USA

https://japi.us.esign-app.com/jira/api/external

API Endpoints

API Token [GET]

Description

Returns information about the eSign API token used to authenticate this request.

Can be used to verify API connection.

Method

GET

Endpoint

/jira/api/external/v1/token

Query

N/A

Body

N/A

Success Response

200

JSON
{
	"success": true,
	"code": 200,
	"data": {
		"name": "my api token",
		"created": "2025-09-10T05:00:45Z",
		"expires": "2026-09-10T00:00:00Z"
	}
}

Error
Response

401

JSON
{
	"success": false,
	"code": 401,
	"message": "Invalid API token"
}

Execute Signature [POST]

Description

Applies a signature to an existing Jira Work Item.

Method

POST

Endpoint

/v1/signature/execute

Query

N/A

Body

{
  "accountId": "{Signee Account ID}", 
  "issueKey": "{WorkItem/IssueKey}", 
  "pin": "XXXXXX", 
  "meaning": "{Signature Type Meaning}", 
  "title": "{user title (optional)}"
}

Success Response

200

JSON
{
	"success": true,
	"code": 200,
	"message": "Signature successfully applied to {WorkItem Key}."
}

Error
Response

403

JSON
{
	"success": false,
	"code": 403,
	"message": "Signature Type Invalid Meaning is not available for this work item due to type or status.  Contact your Jira administrator."
}

Import Signatures [POST]

This Import API is in development and not yet available. Contact Digital Rose if you need more information.

Description

Imports historic signatures into a single Jira Work Item (Issue) per call. Supports multiple signature lines per issue.

Method

POST

Endpoint

/v1/signature/import

Query

N/A

Body

See example below

Success Response

200 JSON response with import result message

Error Response

4XX/5XX JSON response with error details

Body Parameters

Field

Required

Type

Notes

issueKey

Yes

String

Target Jira issue key. Max length 16.

lines

Yes

Array

One or more signature lines. Max 100 lines per request.

lines[].name

Yes

String

Signer display name. Max length 50.

lines[].meaning

Yes

String

Signature meaning. Max length 16.

lines[].date

Yes

String

Imported date value. Max length 16.

lines[].title

No

String

Imported title. Max length 50.

lines[].status

No

String

Imported status text. Max length 32.

lines[].time

No

String

Imported time value. Max length 10.

lines[].tz

No

String

Imported timezone value. Max length 16.

lines[].accountRef

No

String

External account ID, email, etc from source system. Will be visible in verification and signature archive reports for imported signatures. Max length 64.

Examples

Body Example

JSON
{
  "issueKey": "ABC-123",
  "lines": [
    {
      "name": "Jane Example",
      "meaning": "Approval",
      "date": "Sep 28, 2010",
      "title": "Director",
      "status": "In Progress",
      "time": "04:13 PM",
      "tz": "America/Denver",
      "accountRef": "legacy-user-123"
    }
  ]
}

Success Response

200

JSON
{
  "success": true,
  "code": 200,
  "message": "3 signatures imported (2 duplicate lines skipped)",
  "data": {
    "issueKey": "ABC-123"
  }
}

Error
Response

400

JSON
{
  "success": false,
  "code": 400,
  "message": "lines exceeds max allowed count 100"
}


User Signature Profile [GET]

Description

Fetch information on a user’s signature profile, including their Signing Pin status and saved title

Method

GET

Endpoint

/v1/user/profile

Query

?accountId={accountId}

Body

N/A

Success Response

200

JSON
{
	"success": true,
	"code": 200,
	"data": {
		"accountId": "{user account ID}",
		"name": "{display name}",
		"title": "{eSign Title}",
		"pinStatus": "{OK|",
		"jiraBaseUrl": "https://{jira-site}.atlassian.net"
	}
}

Error
Response

400

JSON
{
	"success": false,
	"code": 400,
	"message": "Error retrieving user profile for account {accountId}"
}