Skip to main content
POST
Create a bundle

Authorizations

Authorization
string
header
required

API key, e.g. Authorization: Bearer sajn_svc_.... Not scope-limited: acts with its owner's workspace role.

Headers

Sajn-Version
enum<string>

API version for this request. Without it, the request uses the organization's default version; an organization without a default is pinned to the latest version by its first request.

Available options:
2026-09,
2026-10
Sajn-Workspace
string

ID of the workspace this request acts in, from GET /api/v1/workspaces. Without it, an API key acts in its default workspace. The token's user must be a member of the workspace; an OAuth token only accepts the workspace it was granted for. A workspace that doesn't exist or can't be reached returns 403 WORKSPACE_ACCESS_DENIED.

Idempotency-Key
string

Makes retries safe. A retry with the same key and the same request replays the stored response for 24 hours (header Idempotent-Replayed: true); the same key with a different request returns 400.

Maximum string length: 255

Body

application/json

Body

name
string | null

The bundle name, shown as the heading of the bundle page and in the invitation.

Maximum string length: 200
subject
string | null

The subject line of the invitation email.

message
string | null

A message included in every invitation.

expiresAt
string<date-time> | null

The expiry date of the bundle. Every document in it gets the same one.

signableAfterExpired
boolean

Whether the documents can still be signed after expiresAt.

sendPlainTextEmailOnly
boolean | null

Send plain text invitations only, without HTML. null inherits the workspace default.

redirectUrl
string | null

URL to send a party to once they have signed. Must be http(s).

redirectEnabled
boolean

Whether redirectUrl is used.

signingMode
enum<string>

How the parties sign: PARALLEL, all at once, or SEQUENTIAL, one at a time in the order of each party's signingOrder. The order runs across every document in the bundle.

Available options:
PARALLEL,
SEQUENTIAL
language
enum<string>

Language of the bundle page and the emails to the parties, an ISO 639-1 code such as sv.

Available options:
sv,
en,
no,
da,
fi,
de,
is,
es,
fr,
it
reminderIntervalDays
integer | null

Days between automatic reminders. 0 turns them off, and null uses the default of 3.

Required range: 0 <= x <= 9007199254740991
internalRecipients
string<email>[]

Email addresses that receive a copy of each sealed PDF once its document is completed. At most 5. Pass an empty array to clear.

Maximum array length: 5
Pattern: ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
nationalIdDisplayMode
enum<string> | null

How national identity numbers are displayed to signers: FULL, PARTIAL, or NONE. null keeps each document's own setting.

Available options:
FULL,
PARTIAL,
NONE,
null
openVerification
enum<string> | null

Verification every party passes before the document opens: PIN, SMS, EMAIL, or an eID such as SE_BANKID. null means none. A party's own openVerification overrides it.

Available options:
PIN,
SMS,
EMAIL,
SE_BANKID,
NO_BANKID_BIOMETRIC,
NO_BANKID_HIGH,
DK_MITID,
DK_MITID_ERHVERV,
FI_FTN,
NL_IDIN,
null
documentIds
string[]

Draft documents to add, up to 50. Each one must be a DRAFT in the workspace that isn't in another bundle, and each of its parties needs an email address. Its parties become the bundle's parties, one per email address.

Maximum array length: 50
Minimum string length: 1
parties
object[]

The bundle's parties. When you pass them, they replace the parties the documents brought, as PUT /api/v1/bundles/{id}/parties does.

Maximum array length: 100

Response

201

id
string
required

The bundle ID.

name
string | null
required

The bundle name, shown as the heading of the bundle page and in the invitation.

status
enum<string>
required

DRAFT while you build it, and again after a withdraw. OPEN from the send until every document is resolved, then COMPLETED. CANCELED after a cancel.

Available options:
DRAFT,
OPEN,
COMPLETED,
CANCELED
subject
string | null
required

The subject line of the invitation email.

message
string | null
required

A message included in every invitation.

expiresAt
string<date-time> | null
required

The expiry date of the bundle. Every document in it gets the same one.

signingMode
enum<string>
required

How the parties sign: PARALLEL, all at once, or SEQUENTIAL, one at a time in the order of each party's signingOrder. The order runs across every document in the bundle.

Available options:
PARALLEL,
SEQUENTIAL
language
enum<string>
required

Language of the bundle page and the emails to the parties, an ISO 639-1 code such as sv.

Available options:
sv,
en,
no,
da,
fi,
de,
is,
es,
fr,
it
reminderIntervalDays
integer | null
required

Days between automatic reminders. 0 turns them off, and null uses the default of 3.

Required range: -9007199254740991 <= x <= 9007199254740991
signableAfterExpired
boolean
required

Whether the documents can still be signed after expiresAt.

internalRecipients
string[]
required

Email addresses that receive a copy of each sealed PDF once its document is completed.

nationalIdDisplayMode
enum<string> | null
required

How national identity numbers are displayed to signers: FULL, PARTIAL, or NONE. null keeps each document's own setting.

Available options:
FULL,
PARTIAL,
NONE,
null
openVerification
enum<string> | null
required

Verification every party passes before the document opens: PIN, SMS, EMAIL, or an eID such as SE_BANKID. null means none. A party's own openVerification overrides it.

Available options:
PIN,
SMS,
EMAIL,
SE_BANKID,
NO_BANKID_BIOMETRIC,
NO_BANKID_HIGH,
DK_MITID,
DK_MITID_ERHVERV,
FI_FTN,
NL_IDIN,
null
sendPlainTextEmailOnly
boolean | null
required

Send plain text invitations only, without HTML. null inherits the workspace default.

redirectUrl
string | null
required

URL to send a party to once they have signed.

redirectEnabled
boolean
required

Whether redirectUrl is used.

documentCount
integer
required

The number of documents in documents.

Required range: -9007199254740991 <= x <= 9007199254740991
createdAt
string<date-time>
required

When the bundle was created.

updatedAt
string<date-time>
required

When the bundle was last updated.

documents
object[]
required

The documents in the bundle, oldest first.

parties
object[]
required

The bundle's parties, in signing order.