Download OpenAPI specification:
Download Postman Collection: Download
This API uses OAuth 2.0 for authentication and adheres to the SCIM (System for Cross-domain Identity Management) protocol for user management.
This documentation is organized into the following structure:
Our API implements rate limiting to ensure fair usage and prevent abuse. Specifically, we limit requests to 30 per second per IP address. This helps us maintain the stability and performance of our API by preventing any single IP address from overwhelming our servers with too many requests. Rate limiting also encourages responsible use of our API and helps protect it from potential malicious attacks.
X-ST-Origin)Every endpoint optionally accepts an X-ST-Origin header declaring which integration is making the call. It is used for usage metrics only — it never changes the behaviour of a request and is never returned in a response.
Accepted values: builder, figma, mcp, genstudio, unknown. When the header is absent, the origin is derived from the OAuth client that authenticated the request. An unrecognised value is ignored and the derived origin is used instead, so a malformed header never fails a call.
{baseUrl} represents the URL of your Stensul instance, for example https://mycompany.stensul.com
Obtain OAuth 2.0 Bearer tokens to authenticate requests to the Stensul API. Supports client_credentials for machine-to-machine access and authorization_code (with optional PKCE) for user-delegated access.
Exchange credentials or an authorization code for a Bearer token. The token must be passed on all subsequent API requests.
Default token expiration: 6 hours (expressed in seconds). An API client can only use one grant type — not both.
Machine-to-machine access. No Stensul user is associated with the token — only scope checks apply.
Pass client_id, client_secret, and grant_type=client_credentials. A token is issued immediately.
User-delegated access. The token is bound to a specific Stensul user, so both scope checks and the user's Stensul permissions apply. This means some endpoints may return a 403 that they would not return under client_credentials (for example, copying an email requires the user to have the clone_campaign or clone_template permission).
The flow follows standard OAuth 2.0 Authorization Code:
Redirect the user to the Stensul authorization page:
GET {baseUrl}/api/v1/oauth/authorize
?response_type=code
&client_id={client_id}
&redirect_uri={redirect_uri}
&state={random_string}
&prompt=consent
&code_challenge={BASE64URL(SHA256(code_verifier))} # PKCE only
&code_challenge_method=S256 # PKCE only
The user logs in to Stensul (if not already) and approves the authorization request.
Receive the code — Stensul redirects the browser to your redirect_uri with code and state as query parameters:
{redirect_uri}?code={authorization_code}&state={random_string}
Exchange the code — call this endpoint with grant_type=authorization_code, client_id, client_secret, code, and redirect_uri (required if it was included in step 1).
PKCE (Proof Key for Code Exchange) is supported for clients configured without a secret. Use it when the client cannot securely store a client_secret (e.g. a single-page app or mobile app).
In step 1, additionally include:
code_challenge — BASE64URL(SHA256(code_verifier))code_challenge_method — must be S256In step 3, pass code_verifier instead of client_secret.
| grant_type required | string Enum: "client_credentials" "authorization_code" |
| client_id required | string <uuid> |
| client_secret | string Required for confidential clients (non-PKCE). Omit for PKCE clients. |
| redirect_uri | string Required for authorization_code if redirect_uri was included in the authorize request. |
| code | string The authorization code received at your redirect_uri. Required for authorization_code grant type. |
| code_verifier | string PKCE only. The original random string whose SHA-256 hash was sent as code_challenge in the authorize request. Pass this instead of client_secret for PKCE clients. |
{- "grant_type": "client_credentials",
- "client_id": "1bdf2ba9-a5fa-42c5-81d3-beae2629e469",
- "client_secret": "<client-secret>"
}{- "token_type": "Bearer",
- "expires_in": 21600,
- "access_token": "<access_token>"
}Retrieve Libraries within Stensul. A Library determines which Modules can be used to build an Email, along with the ESP configuration, branding rules, and available features. Reading Library details is typically the first step before creating Emails via the API.
Required scope: libraries:read
This endpoint retrieves a list of libraries with the option to sort, filter and paginate the results.
No request body parameters are required for this endpoint.
No request body parameters are required for this endpoint.
| filter[name] | string Example: filter[name]=My Library Allow filtering resource results by name. |
| filter[description] | string Example: filter[description]=My Library Description Allow filtering resource results by description. |
| sort | string Example: sort=name Allow sorting resource results. Provide a - (minus) before criteria for descending order. Allow comma-separated values. Available values : name, created_at, updated_at |
| page[size] | integer Example: page[size]=15 For paginated responses indicates the amount of resource results to be retrieved per page. Maximum resources: 30. Default is 15. |
| page[number] | integer Example: page[number]=1 For paginated responses indicates the page number to be retrieved. |
| fields[libraries] | string Example: fields[libraries]=name,key,description Specify which attributes to return for each library, separated by commas. Every attribute is returned if this parameter is not used. Any other key is rejected with a 400. The unbracketed
Valid attributes are: id, name, key, description, permission, tags, created_at, updated_at, created_by, updated_by. |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": [
- {
- "attributes": {
- "id": "667ad8fee1ddfeb5800a5185",
- "name": "My Library 1",
- "key": "my_library1",
- "description": "My Library 1 Description",
- "permission": "access_library_my_library1",
- "created_at": "2024-06-25T14:49:34.432000Z",
- "updated_at": "2024-06-25T14:49:34.432000Z",
- "created_by": "johndoe@example.com",
- "updated_by": "johndoe@example.com",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
]
}
}, - {
- "attributes": {
- "id": "667ad922830f9700e2044387",
- "name": "My Library 2",
- "key": "my_library2",
- "description": "My Library 2 Description",
- "permission": "access_library_my_library2",
- "created_at": "2024-06-25T14:50:10.660000Z",
- "updated_at": "2024-06-25T14:50:10.660000Z",
- "created_by": "johndoe@example.com",
- "updated_by": "johndoe@example.com"
}
}
], - "links": {
- "prev": null,
- "next": null
}, - "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 1,
- "links": [
- {
- "url": null,
- "label": "« Previous",
- "active": false
}, - {
- "label": "1",
- "active": true
}, - {
- "url": null,
- "label": "Next »",
- "active": false
}
], - "per_page": 15,
- "to": 2,
- "total": 2
}
}Required scope: libraries:read
This endpoint retrieves Library information based on the provided Library ID.
No request body parameters are required for this endpoint.
| libraryId required | string |
| fields[libraries] | string Example: fields[libraries]=name,key,description Specify which attributes to return, separated by commas. Every attribute is returned if this parameter is not used. Any other key is rejected with a 400. The unbracketed
Valid attributes are: id, name, key, description, permission, tags, created_at, updated_at, created_by, updated_by.
|
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "672124a1cd2c65d4600fdd94",
- "name": "My Library",
- "key": "my_library",
- "description": "My Library Description",
- "permission": "access_library_my_library",
- "created_at": "2024-10-29T18:08:33.026000Z",
- "updated_at": "2024-12-19T18:27:07.080000Z",
- "created_by": "johndoe@example.com",
- "updated_by": "johndoe@example.com",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "modules": [
- {
- "key": "image",
- "name": "Image",
- "locked": true,
- "variation_ids": [
- "6806947e1f9601e6f00bb139"
]
}, - {
- "key": "text",
- "name": "Text",
- "locked": true,
- "variation_ids": [
- "6806947e1f9601e6f00bb139",
- "6a0370f838ad31136e0b6528"
]
}, - {
- "key": "cta",
- "name": "CTA",
- "locked": false,
- "variation_ids": [ ]
}
], - "variations": [
- {
- "id": "6806947e1f9601e6f00bb139",
- "key": "main",
- "name": "Main"
}, - {
- "id": "6a0370f838ad31136e0b6528",
- "key": "holiday",
- "name": "Holiday"
}
], - "config": {
- "template_width": 640,
- "template_mobile_width": 480,
- "template_mobile_breakpoint": 480,
- "enable_mobile": true,
- "template_background_color": "#FFFFFF",
- "content_background_color": "#FFFFFF",
- "template_background_palettes": "{ \"default\": \"#d8d8d8\", \"options\": { \"White\": \"#FFFFFF\", \"Grey\": \"#d8d8d8\" , \"Black\": \"#000000\" } }",
- "color_palettes": "{\"modules_bg\":[\"474646\",\"Dark Gray\",\"FFFFFF\",\"White\",\"79a8c9\",\"Blue\"],\"text_bg\":[\"474646\",\"Dark Gray\",\"FFFFFF\",\"White\",\"79a8c9\",\"Blue\"]}",
- "font_family": "Arial",
- "font_size": 14,
- "font_color": "#000000",
- "line_height": 18,
- "link_color": "#0000FF",
- "link_decoration": "underline",
- "personalization_tags": [
- {
- "name": "First Name",
- "value": "%%FirstName%%",
- "folder": "customer",
- "id": 1737658623681
}, - {
- "name": "Last Name",
- "value": "%%LastName%%",
- "folder": "customer",
- "id": 1737731352919
}
], - "insert_body": true,
- "prepend_html": "<div>Library Prepend Code</div>",
- "append_html": "<div>Library Append Code</div>",
- "padding": "",
- "is_title_enabled": true,
- "title_default": "My Default Title",
- "html_custom_head": "<link rel=\"icon\" href=\"/stensul-favicon.svg?new\" type=\"image/x-icon\">",
- "esp": true,
- "esp_provider": [
- "sfmc-test-k44hlmiwwa",
- "zeta-zeta-mvocvmidvf"
], - "email_test_sending": false,
- "email_test_sending_integration_key": "",
- "email_test_sending_use_minified_output": false,
- "dynamic_authoring": true,
- "dynamic_authoring_provider": "sfmc-broker-dc-salesforce-dynamic-content-h9bgkmpy9g",
- "dynamic_authoring_type": "structured",
- "language_enabled": true,
- "languages": [
- "sq",
- "en-US",
- "es-AR"
], - "default_language": "en-US",
- "workflow": true,
- "workflow_provider": [
- "example-worflow-provider"
], - "messaging": true,
- "messaging_provider": [
- "example-messaging-provider"
], - "output_formats": true,
- "output_formats_values": [
- "body_html"
], - "html_to_pdf": true,
- "pdf_settings": [
- "add_header",
- "add_mobile_view",
- "multiple_pages"
], - "html_to_oft": true,
- "html_to_emltpl": true,
- "plain_text": false,
- "mask_link": false,
- "preheader": true,
- "preheader_default": "My Default Preheader",
- "preheader_required": false,
- "preheader_max_length_enabled": true,
- "preheader_max_length": 30,
- "is_subject_line_enabled": true,
- "subject_line_max_length_enabled": true,
- "subject_line_max_length": 30,
- "subject_line_ab_test_enabled": true,
- "tracking": false,
- "tracking_config": "",
- "url_tracking": true,
- "url_tracking_parameters": {
- "allow_user_to_deactivate": false,
- "campaign": [
- {
- "name": "new-parameter-name",
- "input_type": "text",
- "default_value": "New Parameter Default Value",
- "validation": "",
- "required": false,
- "encoded": false,
- "list": null
}
], - "element": [
- {
- "name": "new-element-name",
- "type": "parameter",
- "input_type": "text",
- "default_value": "New Element Default Value",
- "validation": "",
- "required": false,
- "encoded": false,
- "list": null
}
]
}, - "url_tracking_required": false,
- "url_tracking_option": "simple_tracking",
- "customization_requests_enabled": true,
- "customization_requests_recipients": [
- {
- "id": "668ef38422b4533ad40f2e85",
- "email": "johndoe@example.com"
}
], - "variations": {
- "default": "63160f483a32c8204b49d96e",
- "mode": "individual"
}, - "require_approvals": false,
- "minify_output_by_default": false,
- "fixed_modules": {
- "header": {
- "key": "image",
- "name": "Image"
}, - "footer": {
- "key": "text",
- "name": "Text"
}
}, - "skip_complete_modal": false,
- "default_view": "desktop",
- "proprietary_css": "<style>font-family: 'Open Sans';</style>"
}
}
}
}Create, copy, and read Emails (drafts, finished, and templates) within Stensul, and update their content. Emails are assembled from Modules within a Library.
Required scope: emails:write
This endpoint creates an email.
library_key (text, required) - The library key. Can be obtained with the endpoint /external-api/v1/libraries endpoint.name (text, required) - The email name.type (text, optional) - The type of email, valid values include "draft" and "template". Default: "draft".title (text, optional) - The title of the email. If not used, the Library default will be used (if set).tags (array, optional) - The email tags. Tags must be available to the Library.modules (array, optional) - The modules to include in the email. Modules must be available to the Library. Modules are added in the order of this array and can be repeated. Each item can be either:"image"key (required), and optionally referenceEmailId + referenceModuleId to copy content from an existing email module. Both reference fields must be provided together or not at all.preheader (text, optional) - The preheader of the email. If not used, the Library default will be used (if set).subject_line (text, optional) - The subject line of the email. If not used, the Library default will be used (if set).language (text, optional) - The email language. It must be one of the selected values on the library. If not used, the Library default will be used.project_id (text, optional) - The project id the email should belong to.active_variation_id (text, optional) - ID of the variation to activate on the new email. Must be one of the library's variations (see the Get Email layout endpoint's variations). Only accepted when the library selects one variation for the whole email (variations_mode: all); when omitted the library default applies.| include | string Example: include=modules Include related Resources. Valid resources for this endpoint are "modules". |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
| library_key | string |
| name | string |
| type | string Enum: "draft" "template" |
| title | string |
| tags | Array of strings |
Array of strings or objects | |
| preheader | string or null |
| subject_line | string or null |
| language | string or null |
| project_id | string |
| active_variation_id | string ID of the variation to activate on the new email. Only accepted when the
library selects one variation for the whole email ( |
{- "library_key": "my_library",
- "name": "Test Email",
- "type": "draft",
- "title": "The Email Title",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "modules": [
- {
- "key": "image"
}, - {
- "key": "text",
- "referenceEmailId": "673cf6e17785702ce0dc3891",
- "referenceModuleId": 42
}, - {
- "key": "image"
}
], - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "language": "en-US",
- "project_id": "673cf6e17785702ce0dc3891"
}{- "data": {
- "attributes": {
- "id": "688d2ed76046334e7d09e1c0",
- "name": "Test Email",
- "type": "draft",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "project_id": "673cf6e17785702ce0dc3891",
- "is_archived": false,
- "has_modules_locked": false,
- "has_been_uploaded": false,
- "downloadable_as": [
- "pdf",
- "oft",
- "emltpl"
], - "is_exportable_to_esp": true,
- "is_translatable": true,
- "has_active_proof": false,
- "has_autosave_enabled": true,
- "library": {
- "id": "675850cb61771cd6bd084038",
- "name": "My Library",
- "key": "my_library"
}, - "has_outdated_modules": false,
- "images": {
- "preview": null,
- "thumbnail": null
}, - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "title": "The Email Title",
- "tracking": null,
- "language": "en-US",
- "has_translation_process_started": false,
- "created_at": "2025-08-01T21:17:11.626000Z",
- "updated_at": "2025-08-01T21:17:11.626000Z",
- "created_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "updated_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "modules_locked_by": null,
- "approvals_workflow_state": null,
- "original_language_email_id": null,
}, - "included": {
- "modules": [
- {
- "id": 2726763471,
- "key": "image",
- "name": "Image",
- "elements": [
- {
- "id": 1551250765,
- "type": "image",
- "style": { },
- "content": {
- "source": "",
- "source_mobile": "",
- "alt": ""
}, - "guardrails": { }
}
]
}, - {
- "id": 3183306685,
- "key": "text",
- "name": "Text",
- "elements": [
- {
- "id": 637007118,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}
]
}, - {
- "id": 4289922848,
- "key": "image",
- "name": "Image",
- "elements": [
- {
- "id": 1551250765,
- "type": "image",
- "style": { },
- "content": {
- "source": "",
- "source_mobile": "",
- "alt": ""
}, - "guardrails": { }
}
]
}
]
}
}
}Required scope: emails:read
This endpoint retrieves a list of emails with the option to sort, filter and paginate the results.
No request body parameters are required for this endpoint.
| sort | string Example: sort=-created_at Allow sorting resource results. Provide a - (minus) before criteria for descending order. Allow comma-separated values. Available values: name, type, created_at, updated_at |
| page[number] | integer Example: page[number]=1 For paginated responses indicates the page number to be retrieved. |
| page[size] | integer Example: page[size]=20 For paginated responses indicates the amount of resource results to be retrieved per page. Maximum resources: 30. Default is 15. |
| filter[name] | string Allow filtering resource results by name. |
| filter[types][] | string Example: filter[types][]=draft Allow filtering resource results by type, available types are "draft", "finished" or "template". This filter can be added more than once to include results with different types.' |
| filter[library_keys][] | string Example: filter[library_keys][]=library_1 Allow filtering results by Library Key. This filter can be added more than once to include results with different libraries. |
| filter[tags][] | string Example: filter[tags][]=translation Allow filtering by tags. This filter can be added more than once to include results with different tags. |
| filter[tags_match_criteria] | string Default: "any" Enum: "any" "all" Example: filter[tags_match_criteria]=all Define whether the tags filter should work as "any" or "all". For "any", only results having any of the passed tags will be retrieved. For "all", only results having all of the passed tags will be retrieved. |
| filter[language] | string Example: filter[language]=en-US Allow filtering by language code as defined by ISO 639-1 including additional language tags representing regional subtypes defined in IETF's BCP 47. |
| filter[has_modules_locked] | integer Filter emails by whether their modules have been locked or not. Valid values are 0 or 1. By default all emails will be returned. |
| filter[has_been_uploaded] | integer Example: filter[has_been_uploaded]=1 Allow filtering for emails uploaded to an ESP. Valid values are 0 or 1. By default all emails will be returned. |
| filter[is_archived] | integer Example: filter[is_archived]=1 Allow filtering for archived emails. Valid values are 0 or 1. By default all emails will be returned. |
| filter[project_id] | string Example: filter[project_id]=673cf6e17785702ce0dc3891 Allow filtering resource results by project Id. |
| q | string Example: q=My search terms Allows searching for emails by Email Name, Author, Tags and Library name. |
| fields[campaigns] | string Example: fields[campaigns]=name,type,tags,created_by,library Specify which attributes to return for each email, separated by commas. Every attribute is returned if this parameter is not used. The key is
Valid attributes are: id, name, type, title, tags, project_id, language, preheader, subject_line, is_archived, is_exportable_to_esp, is_translatable, has_modules_locked, has_been_uploaded, has_active_proof, has_autosave_enabled, has_outdated_modules, has_translation_process_started, downloadable_as, library, images, tracking, approvals_workflow_state, modules_locked_by, original_language_email_id, public_view_url, created_at, updated_at, created_by, updated_by.
|
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": [
- {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "name": "Test Email",
- "type": "finished",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "project_id": "673cf6e17785702ce0dc3891",
- "is_archived": false,
- "has_modules_locked": false,
- "has_been_uploaded": false,
- "downloadable_as": [
- "pdf",
- "oft",
- "emltpl"
], - "is_exportable_to_esp": true,
- "is_translatable": true,
- "has_active_proof": true,
- "has_autosave_enabled": true,
- "library": {
- "id": "675850cb61771cd6bd084038",
- "name": "My Library",
- "key": "my_library"
}, - "has_outdated_modules": false,
- "images": {
}, - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "title": "The Email Title",
- "tracking": {
- "new-parameter-name": "New Parameter Default Value"
}, - "language": "en-US",
- "has_translation_process_started": false,
- "created_at": "2025-01-22T14:13:09.559000Z",
- "updated_at": "2025-01-24T16:51:38.122000Z",
- "created_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "updated_by": {
- "id": "6176cab757475472c31392a2",
- "full_name": "John Doe",
- "email": "johndoe@example.com"
}, - "modules_locked_by": null,
- "approvals_workflow_state": {
- "applicable_statuses": [
- "pending-review"
], - "workflow_id": "67224ca2d573614d8108f165",
- "active_stage_name": "STAGE 1",
- "reviewer_user_ids": [
- "6176cab757475472c31392a2"
], - "approver_user_ids": [ ],
- "rejecter_user_ids": [ ],
- "pending_review_user_ids": [
- "6176cab757475472c31392a2"
], - "last_proof_id": "67224cd05c6771eb5101b312",
- "last_proof_status": "IN_PROGRESS"
}, - "original_language_email_id": "672124a1cd2c65d4600fdd94"
}
}
], - "links": {
- "prev": null,
}, - "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 25,
- "links": [
- {
- "url": null,
- "label": "« Previous",
- "active": false
}, - {
- "label": "1",
- "active": true
}, - {
- "label": "2",
- "active": false
}, - {
- "label": "3",
- "active": false
}, - {
- "label": "4",
- "active": false
}, - {
- "label": "5",
- "active": false
}, - {
- "label": "6",
- "active": false
}, - {
- "label": "7",
- "active": false
}, - {
- "label": "8",
- "active": false
}, - {
- "label": "9",
- "active": false
}, - {
- "label": "10",
- "active": false
}, - {
- "url": null,
- "label": "...",
- "active": false
}, - {
- "label": "24",
- "active": false
}, - {
- "label": "25",
- "active": false
}, - {
- "label": "Next »",
- "active": false
}
], - "per_page": 1,
- "to": 1,
- "total": 25
}
}Renders the email HTML through the output generator service. The response is
self-describing: encoding is utf-8 and content holds the raw HTML.
| emailId required | string |
| colorScheme | string Default: "light" Enum: "light" "partial-dark" "full-dark" Simulates how an email client renders the email in dark mode. |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "format": "html",
- "content_type": "text/html",
- "encoding": "utf-8",
- "content": "<!doctype html><html><body>Hello</body></html>"
}
}
}Renders the email as a PDF through the output generator service. The response is
self-describing: encoding is base64 and content holds the base64-encoded PDF bytes.
| emailId required | string |
| colorScheme | string Default: "light" Enum: "light" "partial-dark" "full-dark" Simulates how an email client renders the email in dark mode. |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "format": "pdf",
- "content_type": "application/pdf",
- "encoding": "base64",
- "content": "JVBERi0xLjcK..."
}
}
}Renders the email as a PNG through the output generator service. The response is
self-describing: encoding is base64 and content holds the base64-encoded PNG bytes.
| emailId required | string |
| colorScheme | string Default: "light" Enum: "light" "partial-dark" "full-dark" Simulates how an email client renders the email in dark mode. |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "format": "png",
- "content_type": "image/png",
- "encoding": "base64",
- "content": "iVBORw0KGgoAAAANSUhEUg..."
}
}
}Required scope: emails:read
This endpoint retrieves the layout of an email.
An element carries a visibility object ({"value": <bool>}, its current on/off
state) only when that state can be changed — that is, only for the elements the
owning module allows to be toggled. When visibility is absent the element is
permanently visible: sending visibility for it leaves it visible and returns a
warning. So presence of the key, not a separate flag, tells you whether hiding is
possible.
No request body parameters are required for this endpoint.
| emailId required | string |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "name": "Test Email",
- "type": "draft",
- "save_version": 7,
- "styles": {
- "desktop_width": {
- "value": 600,
- "unit": "px"
}, - "mobile_width": {
- "value": 400,
- "unit": "px"
}, - "background_color": "#ffffff",
- "font_family": "Arial",
- "font_size": {
- "value": 16,
- "unit": "px"
}, - "line_height": {
- "value": 24,
- "unit": "px"
}
}, - "active_variation_id": "6806947e1f9601e6f00bb139",
- "variations_mode": "all",
- "default_variation_id": "6806947e1f9601e6f00bb139",
- "variations": [
- {
- "id": "6806947e1f9601e6f00bb139",
- "key": "main",
- "name": "Main"
}, - {
- "id": "6a0370f838ad31136e0b6528",
- "key": "holiday",
- "name": "Holiday"
}
], - "guardrails": {
- "url_tracking": {
- "url_tracking_parameters": {
- "allow_user_to_deactivate": true,
- "campaign": [
- {
- "name": "utm_campaign",
- "type": "parameter",
- "input_type": "text",
- "default_value": "workshop",
- "validation": "^workshop-\\w+$",
- "required": true,
- "encoded": false,
- "list": [ ]
}
], - "element": [
- {
- "name": "utm_content",
- "type": "parameter",
- "input_type": "list",
- "default_value": "blue",
- "validation": "",
- "required": true,
- "encoded": false,
- "list": [
- "blue",
- "green",
- "red"
]
}
]
}
}
}, - "url_tracking": {
- "enabled": true,
- "values": {
- "utm_campaign": "spring_sale"
}
}, - "modules": [
- {
- "id": 487239234,
- "key": "test_module",
- "name": "Test Module",
- "rows": [
- {
- "id": 487239234,
- "style": {
- "border_bottom_color": "#000000",
- "border_bottom_style": "solid",
- "border_bottom_width": {
- "value": 3,
- "unit": "px"
}, - "border_left_color": "#000000",
- "border_left_style": "solid",
- "border_left_width": {
- "value": 3,
- "unit": "px"
}, - "border_right_color": "#000000",
- "border_right_style": "solid",
- "border_right_width": {
- "value": 3,
- "unit": "px"
}, - "border_top_color": "#000000",
- "border_top_style": "solid",
- "border_top_width": {
- "value": 3,
- "unit": "px"
}, - "padding_bottom": {
- "value": 5,
- "unit": "px"
}, - "padding_left": {
- "value": 5,
- "unit": "px"
}, - "padding_right": {
- "value": 5,
- "unit": "px"
}, - "padding_top": {
- "value": 10,
- "unit": "px"
}, - "background_color": "#FF0000",
- "height": {
- "value": "auto",
- "unit": ""
}, - "width": {
- "value": 100,
- "unit": "%"
}
}, - "columns": [
- {
- "id": 433215223,
- "style": {
- "border_bottom_color": "#000000",
- "border_bottom_style": "solid",
- "border_bottom_width": {
- "value": 3,
- "unit": "px"
}, - "border_left_color": "#000000",
- "border_left_style": "solid",
- "border_left_width": {
- "value": 3,
- "unit": "px"
}, - "border_right_color": "#000000",
- "border_right_style": "solid",
- "border_right_width": {
- "value": 3,
- "unit": "px"
}, - "border_top_color": "#000000",
- "border_top_style": "solid",
- "border_top_width": {
- "value": 3,
- "unit": "px"
}, - "padding_bottom": {
- "value": 5,
- "unit": "px"
}, - "padding_left": {
- "value": 5,
- "unit": "px"
}, - "padding_right": {
- "value": 5,
- "unit": "px"
}, - "padding_top": {
- "value": 10,
- "unit": "px"
}, - "background_color": "#FF0000",
- "height": {
- "value": "auto",
- "unit": ""
}, - "width": {
- "value": 100,
- "unit": "%"
}
}, - "elements": [
- {
- "id": 1740035395,
- "type": "button",
- "style": {
- "font_family": "Helvetica, Arial, Sans-serif",
- "font_size": {
- "value": 12,
- "unit": "px"
}, - "color": "#FFFFFF",
- "font_weight": "normal",
- "letter_spacing": "normal",
- "line_height": {
- "value": 20,
- "unit": "px"
}, - "align": "center",
- "padding_top": {
- "value": 0,
- "unit": "px"
}, - "padding_right": {
- "value": 0,
- "unit": "px"
}, - "padding_bottom": {
- "value": 0,
- "unit": "px"
}, - "padding_left": {
- "value": 0,
- "unit": "px"
}, - "background_color": "#003FA3"
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": false
}, - "italic": {
- "allowed": false
}, - "underline": {
- "allowed": false
}, - "strikethrough": {
- "allowed": false
}, - "superscript": {
- "allowed": false
}, - "unordered_list": {
- "allowed": false
}, - "ordered_list": {
- "allowed": false
}, - "color": {
- "allowed": false
}, - "font_size": {
- "allowed": false
}, - "padding": {
- "allowed": false
}, - "alignment": {
- "allowed": false
}
}, - "rowId": 3778397941,
- "columnId": 2189807271,
- "rowIndex": 0,
- "columnIndex": 0,
- "order": 0,
- "visibility": {
- "value": true
}, - "link": {
- "url": "",
- "title": ""
}
}
]
}
]
}
]
}
]
}
}
}Required scope: emails:write
This endpoint updates the content of an email.
A custom element is updated by setting the values of the variables it exposes:
{
"save_version": 12,
"modules": [
{
"id": 18300748,
"elements": [
{
"id": 1349096506,
"type": "custom",
"content": { "variables": [ { "id": 618662, "value": "right" } ] }
}
]
}
]
}
Read the element first: the Get Email layout endpoint reports each variable's
id, name, type and current value under content.variables, and what may
be done to it under guardrails.variables, keyed by the same id.
Three things to know before calling it:
htmlCode, placeholderCode and
css cannot be set through this endpoint and are ignored if sent. Rendering is
a server-owned {{name}} -> value substitution, so the element's guardrails
hold for API writes exactly as they do in the builder.options, color palette, hyperlink validations. A
rejected variable keeps its previous value and produces a warning; the other
variables and the rest of the email still save, and the response is still
200. Read data.warnings to find out what did not apply.Custom elements are copied by value into a module and again into an email, so a write here changes this email only - it does not edit the module or the library's element definition.
A text link carries its own URL tracking on the link chunk itself, under
content[].content[].text.link.url_tracking_parameters/url_tracking_disabled —
not under the element's url_tracking_parameters/url_tracking_disabled, which
only button and image elements use. See TextLink in the schema for the shape.
Unlike button/image values, a text link's tracking is stored then audited,
never rejected pre-storage: whatever is sent is written into the link, and any
value that fails the library's rules comes back under url_tracking.issues with
a link object (index, href) identifying which anchor it is, since a text
element can hold several.
Writing a text element's content replaces its links wholesale — there is no
partial per-link update. To keep a link's existing tracking through an unrelated
edit (a style change, a word fixed elsewhere in the same element), echo back the
content the Get Email layout endpoint returned for that element, tracking
fields included, rather than reconstructing it from scratch.
data-description, when set in the builder, is preserved on write but not yet
exposed or settable through this endpoint — a fast-follow.
| emailId required | string |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
| active_variation_id | string ID of the variation to activate on the email. Must be one of the IDs returned
by the Get Email layout endpoint under |
Array of objects (Module) Modules to update. Optional — omit when only changing | |
object Campaign-level URL tracking values, as A value the library does not accept is refused, not stored: the previous
value (or the library default) stands, and the refusal comes back under
| |
| save_version | integer or null >= 0 Optimistic-concurrency token: the |
{- "active_variation_id": "6a0370f838ad31136e0b6528",
- "modules": [
- {
- "id": 18300748,
- "variation_id": "6a0370f838ad31136e0b6528",
- "elements": [
- {
- "id": 4278365025,
- "type": "text",
- "style": {
- "font_family": "Arial",
- "font_size": {
- "value": 20
}, - "text_align": "left",
- "align": "left",
- "color": "string",
- "font_weight": "normal",
- "letter_spacing": {
- "value": 0,
- "unit": "string"
}, - "line_height": {
- "value": 0,
- "unit": "%"
}, - "background_color": "string",
- "padding_top": {
- "value": 10,
- "unit": "px"
}, - "padding_right": {
- "value": 10,
- "unit": "px"
}, - "padding_bottom": {
- "value": 10,
- "unit": "px"
}, - "padding_left": {
- "value": 10,
- "unit": "px"
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": null,
- "link": null
}, - "style": {
- "bold": null,
- "italic": null,
- "strikethrough": null,
- "underline": null,
- "color": null,
- "background_color": null,
- "align": null
}
}
]
}
], - "url_tracking_parameters": {
- "utm_content": "hero_cta"
}, - "url_tracking_disabled": true,
- "visibility": true
}
], - "style": {
- "background_color": "#FF0000",
- "outer_background_color": "#00FFB7",
- "background_image_source": "68a5dc735e65a-1755700339.3867.png",
- "background_image_source_mobile": "68a5dc6bd5974-1755700331.8749.jpg"
}
}
], - "url_tracking": {
- "utm_campaign": "workshop-spring"
}, - "save_version": 7
}{- "data": {
- "message": "Email content updated successfully",
- "modules": [
- {
- "id": 18300748,
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns/688cdb3d6046334e7d09e1b4/en_us/688cdcdea18e0-1754062046.6617.jpg",
- "source_mobile": "",
- "alt": "Image 1 Alt Text"
}
}, - {
- "id": 1349096506,
- "type": "custom",
- "content": {
- "variables": [
- {
- "id": 618662,
- "value": "right"
}, - {
- "id": 618663,
- "value": "#0A7891"
}, - {
- "id": 618664,
- "value": "16"
}, - {
- "id": 618665,
- "value": "Terms apply."
}
]
}
}
]
}, - {
- "id": 12187124,
- "elements": [
- {
- "id": 2623287498,
- "type": "text",
- "style": {
- "font_size": {
- "value": 20
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Header Text"
}
}
]
}
]
}, - {
- "id": 288207052,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
]
}
]
}, - {
- "id": 2955957717,
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns/688cdb3d6046334e7d09e1b4/en_us/688cddf4bda6e-1754062324.7768.jpg",
- "source_mobile": "",
- "alt": "Image 2 Alt Text"
}
}, - {
- "id": 2025168873,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
]
}
]
}, - {
- "id": 414669236,
- "elements": [
- {
- "id": 4015144907,
- "type": "divider",
- "style": { },
- "content": [ ]
}, - {
- "id": 3514957104,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "unordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Lorem"
}
}, - {
- "text": {
- "content": "ipsum"
}, - "style": {
- "color": "#0000ee"
}
}, - {
- "text": {
- "content": "dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "bold": true,
- "italic": true
}
}, - {
- "text": {
- "content": ", consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna"
}
}, - {
- "text": {
- "content": "aliquyam"
}, - "style": {
- "italic": true
}
}, - {
- "text": {
- "content": "erat, sed diam"
}
}, - {
- "text": {
- "content": "voluptua"
}, - "style": {
- "strikethrough": true
}
}, - {
- "text": {
- "content": ". At vero eos et accusam et justo duo dolores et ea rebum"
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Phasellus eget aliquam eros. Etiam dictum nec justo eu varius. Aenean iaculis dolor nec elit consequat, ut feugiat tortor molestie. Donec ornare vitae quam ac sagittis. Morbi posuere cursus aliquam."
}
}
], - "items": [
- {
- "type": "ordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec sollicitudin, justo eu sagittis tristique, dui risus tempus ipsum, at sodales ante diam."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec vitae pretium leo, a ultricies nibh. Mauris auctor bibendum lacinia."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Vestibulum luctus ex in urna interdum mollis."
}
}
]
}
]
}
]
}
]
}
]
}, - {
- "id": 3369732429,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem"
}
}, - {
- "text": {
- "content": "ipsum dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "color": "#800000"
}
}, - {
- "text": {
- "content": ","
}
}, - {
- "text": {
- "content": "consetetur sadipscing elitr"
}, - "style": {
- "background_color": "#ffff99"
}
}, - {
- "text": {
- "content": ", sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}, - {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
}
}
]
}
]
}, - {
- "id": 984143014,
- "type": "divider",
- "style": { },
- "content": [ ]
}, - {
- "id": 3052579762,
- "type": "button",
- "style": { },
- "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum"
}
}
]
}
],
}
]
}
], - "save_version": 8,
- "warnings": [
- {
- "type": "image_processing",
- "message": "Image source is disabled",
- "module_id": 18300748,
- "element_id": 4278365025,
- "element_type": "image"
}, - {
- "field": "fontsize",
- "message": "Fontsize formatting was requested but is not allowed for this component",
- "code": "FONTSIZE_NOT_ALLOWED",
- "severity": "warning"
}, - {
- "type": "image_processing",
- "message": "Image source is disabled",
- "module_id": 2955957717,
- "element_id": 4278365025,
- "element_type": "image"
}, - {
- "field": "elements",
- "message": "Element type not allowed",
- "code": "ELEMENT_TYPE_NOT_ALLOWED",
- "severity": "warning",
- "module_id": 414669236,
- "element_id": 4015144907,
- "element_type": "divider"
}, - {
- "field": "elements",
- "message": "Element type not allowed",
- "code": "ELEMENT_TYPE_NOT_ALLOWED",
- "severity": "warning",
- "module_id": 414669236,
- "element_id": 984143014,
- "element_type": "divider"
}, - {
- "field": "elements",
- "message": "Some elements were not processed",
- "code": "ELEMENTS_NOT_PROCESSED",
- "severity": "warning",
- "module_id": 414669236,
- "element_ids": [
- 4015144907,
- 984143014
]
}, - {
- "type": "custom_processing",
- "message": "Custom element variable value is not valid. Allowed values: 14, 16, 18",
- "module_id": 18300748,
- "element_id": 1349096506,
- "element_type": "custom",
- "field": "variables.618664"
}, - {
- "type": "custom_processing",
- "message": "Custom is locked and cannot be edited",
- "module_id": 18300748,
- "element_id": 1349096506,
- "element_type": "custom",
- "field": "variables.618665"
}
]
}
}Required scope: emails:write
Removes a module, with all of its elements, from an email. This is destructive and cannot be undone.
Deleting a module is deliberately a separate call: PATCH /external-api/v1/emails/{{emailId}}/content is a
merge, so modules that are absent from its payload are preserved. Omitting a module there never removes it —
the only way to remove one is to name it in this endpoint.
moduleId is the module instance id, i.e. the id reported for each module by the
/external-api/v1/emails/{{emailId}}/layout endpoint. The remaining modules keep their order, their ids and
their content, so element references held for other modules stay valid.
403 — the email has its modules locked, or the module is the library's fixed header or footer.404 — the email does not exist, or it has no module with that instance id.409 — the email is currently being edited by another user in the builder, or the
deletion was refused because the email had been written since it was read
(error_code: save_version_conflict). The latter covers both a stale save_version
sent by the caller and a write that landed while this request was being served: the
removal is persisted as a conditional update, so a lost race is reported rather than
overwriting the other writer. Nothing is deleted in either case.No request body parameters are required for this endpoint.
| emailId required | string |
| moduleId required | integer Example: 18300748 Module instance id, as reported by the Get Email layout endpoint. |
| save_version | integer >= 0 Example: save_version=7 Optimistic-concurrency token: the |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": {
- "message": "Email module deleted successfully",
- "deleted_module": {
- "id": 2955957717,
- "key": "hero_image",
- "name": "Hero image"
}, - "modules": [
- {
- "id": 18300748,
- "key": "header",
- "name": "Header"
}, - {
- "id": 12187124,
- "key": "text_block",
- "name": "Text block"
}
], - "save_version": 8,
}
}Required scope: emails:write
This endpoint copies an existing email.
Optional fields will inherit the value of the original email unless they are specified in the payload.
Note — authorization_code grant only: When the request is made with an
authorization_codetoken, the associated Stensul user's permissions are enforced in addition to the scope check. The user must have theclone_campaign(for drafts) orclone_template(for templates) permission, andduplicate_email_between_librariesif copying across libraries. These checks do not apply toclient_credentialstokens.
name (text, required) - The email name.library_key (text, optional) - Override the library key. Can be obtained with the endpoint /external-api/v1/libraries endpoint.type (text, optional) - Override the type of email, valid values include "draft" and "template".title (text, optional) - Override the title of the original email.tags (array, optional) - Override the email tags of the original email. Tags must be available to the Library.preheader (text, optional) - Override the preheader of the original email.subject_line (text, optional) - Override the subject line of the original email.language (text, optional) - Override the email language. It must be one of the selected values on the library.project_id (text, optional) - Override the project id the email should belong to.| emailId required | string |
| include | string Example: include=modules Include related Resources. Valid resources for this endpoint are "modules". |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "name": "Test Email",
- "library_key": "my_library",
- "type": "template",
- "title": "The Email Title",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "language": "en-US",
- "project_id": "673cf6e17785702ce0dc3891"
}{- "data": {
- "attributes": {
- "id": "6793c5d6d09bde4de70f75c2",
- "name": "Test Email",
- "type": "draft",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "project_id": "673cf6e17785702ce0dc3891",
- "is_archived": false,
- "has_modules_locked": false,
- "has_been_uploaded": false,
- "downloadable_as": [
- "pdf",
- "oft",
- "emltpl"
], - "is_exportable_to_esp": true,
- "is_translatable": true,
- "has_active_proof": false,
- "has_autosave_enabled": true,
- "library": {
- "id": "675850cb61771cd6bd084038",
- "name": "My Library",
- "key": "my_library"
}, - "has_outdated_modules": false,
- "images": {
}, - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "title": "The Email Title",
- "tracking": {
- "new-parameter-name": "New Parameter Default Value"
}, - "language": "en-US",
- "has_translation_process_started": false,
- "created_at": "2025-01-24T16:54:46.472000Z",
- "updated_at": "2025-01-24T16:54:46.472000Z",
- "created_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "updated_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "modules_locked_by": null,
- "approvals_workflow_state": null,
- "original_language_email_id": null,
}, - "included": {
- "modules": [
- {
- "id": 18300748,
- "key": "copy-of-paragraph-left-image-right-1754061293",
- "name": "Hero Image",
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns//688d2f39e280f17631009e16/en_us/688cdcdea18e0-1754062046.6617.jpg",
- "source_mobile": "",
- "alt": "Image 1 Alt Text"
}, - "guardrails": { }
}
]
}, - {
- "id": 12187124,
- "key": "header+_paragraph",
- "name": "Header + Paragraph",
- "elements": [
- {
- "id": 2623287498,
- "type": "text",
- "style": {
- "font_size": {
- "value": 20
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Header Text"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": false
}, - "underline": {
- "allowed": false
}, - "link": {
- "allowed": false
}, - "strikethrough": {
- "allowed": false
}, - "superscript": {
- "allowed": false
}, - "unordered_list": {
- "allowed": false
}, - "ordered_list": {
- "allowed": false
}, - "color": {
- "allowed": false
}, - "background_color": {
- "allowed": false
}, - "font_size": {
- "allowed": false
}
}
}, - {
- "id": 288207052,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}
]
}, - {
- "id": 2955957717,
- "key": "copy-of-header-paragraph-1754060165",
- "name": "Image Left + Paragraph Right",
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns//688d2f39e280f17631009e16/en_us/688cddf4bda6e-1754062324.7768.jpg",
- "source_mobile": "",
- "alt": "Image 2 Alt Text"
}, - "guardrails": { }
}, - {
- "id": 2025168873,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}
]
}, - {
- "id": 414669236,
- "key": "copy-of-paragraph-left-image-right-1754060461",
- "name": "Divider + Text + Button",
- "elements": [
- {
- "id": 4015144907,
- "type": "divider",
- "style": { },
- "content": [ ],
- "guardrails": { }
}, - {
- "id": 3514957104,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "unordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Lorem"
}
}, - {
- "text": {
- "content": "ipsum"
}, - "style": {
- "color": "#0000ee"
}
}, - {
- "text": {
- "content": "dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "italic": true,
- "bold": true
}
}, - {
- "text": {
- "content": ", consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna"
}
}, - {
- "text": {
- "content": "aliquyam"
}, - "style": {
- "italic": true
}
}, - {
- "text": {
- "content": "erat, sed diam"
}
}, - {
- "text": {
- "content": "voluptua"
}, - "style": {
- "strikethrough": true
}
}, - {
- "text": {
- "content": ". At vero eos et accusam et justo duo dolores et ea rebum"
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Phasellus eget aliquam eros. Etiam dictum nec justo eu varius. Aenean iaculis dolor nec elit consequat, ut feugiat tortor molestie. Donec ornare vitae quam ac sagittis. Morbi posuere cursus aliquam."
}
}
], - "items": [
- {
- "type": "ordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec sollicitudin, justo eu sagittis tristique, dui risus tempus ipsum, at sodales ante diam."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec vitae pretium leo, a ultricies nibh. Mauris auctor bibendum lacinia."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Vestibulum luctus ex in urna interdum mollis."
}
}
]
}
]
}
]
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}, - {
- "id": 3369732429,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "color": "#800000"
}
}, - {
- "text": {
- "content": ","
}
}, - {
- "text": {
- "content": "consetetur sadipscing elitr"
}, - "style": {
- "background_color": "#ffff99"
}
}, - {
- "text": {
- "content": ", sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}, - {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}, - {
- "id": 984143014,
- "type": "divider",
- "style": { },
- "content": [ ],
- "guardrails": { }
}, - {
- "id": 3052579762,
- "type": "button",
- "style": { },
- "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": false
}, - "ordered_list": {
- "allowed": false
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": false
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
},
}
]
}
]
}
}
}Required scope: emails:read
This endpoint retrieves email information based on the provided email ID.
No request body parameters are required for this endpoint.
| emailId required | string |
| include | string Example: include=outputs,schedule,modules Include related Resources. Valid resources are "outputs", "schedule" and "modules". Multiple resources can be separated by commas. |
| fields[campaigns] | string Example: fields[campaigns]=name,type,tags,created_by,library Specify which attributes to return, separated by commas. Every attribute is returned if this parameter is not used. The key is
Valid attributes are: id, name, type, title, tags, project_id, language, preheader, subject_line, is_archived, is_exportable_to_esp, is_translatable, has_modules_locked, has_been_uploaded, has_active_proof, has_autosave_enabled, has_outdated_modules, has_translation_process_started, downloadable_as, library, images, tracking, approvals_workflow_state, modules_locked_by, original_language_email_id, public_view_url, created_at, updated_at, created_by, updated_by. |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "data": {
- "attributes": {
- "id": "6790fcf5447b4da76a0d37b5",
- "name": "Test Email",
- "type": "finished",
- "tags": [
- "tag1",
- "tag2",
- "tag3"
], - "project_id": "673cf6e17785702ce0dc3891",
- "is_archived": false,
- "has_modules_locked": false,
- "has_been_uploaded": false,
- "downloadable_as": [
- "pdf",
- "oft",
- "emltpl"
], - "is_exportable_to_esp": true,
- "is_translatable": true,
- "has_active_proof": true,
- "has_autosave_enabled": true,
- "library": {
- "id": "675850cb61771cd6bd084038",
- "name": "My Library",
- "key": "my_library"
}, - "has_outdated_modules": false,
- "images": {
}, - "preheader": "The Email Preheader",
- "subject_line": "The Subject Line",
- "title": "The Email Title",
- "tracking": {
- "new-parameter-name": "New Parameter Default Value"
}, - "language": "en-US",
- "has_translation_process_started": false,
- "created_at": "2025-01-22T14:13:09.559000Z",
- "updated_at": "2025-01-24T16:51:38.122000Z",
- "created_by": {
- "id": "",
- "full_name": "System",
- "email": "system"
}, - "updated_by": {
- "id": "6176cab757475472c31392a2",
- "full_name": "John Doe",
- "email": "johndoe@example.com"
}, - "modules_locked_by": null,
- "approvals_workflow_state": {
- "applicable_statuses": [
- "pending-review"
], - "workflow_id": "67224ca2d573614d8108f165",
- "active_stage_name": "STAGE 1",
- "reviewer_user_ids": [
- "6176cab757475472c31392a2"
], - "approver_user_ids": [ ],
- "rejecter_user_ids": [ ],
- "pending_review_user_ids": [
- "6176cab757475472c31392a2"
], - "last_proof_id": "67224cd05c6771eb5101b312",
- "last_proof_status": "IN_PROGRESS"
}, - "original_language_email_id": "672124a1cd2c65d4600fdd94"
}, - "included": {
- "schedule": {
- "_id": "65e0d2bee63b93ff6c07b452",
- "email_id": "6790fcf5447b4da76a0d37b5",
- "subject": "The Subject Line",
- "filename": "test_email.html",
- "audiences": [
- "Active"
], - "integration_key": "zeta-zeta-mvocvmidvf",
- "connector_key": "zeta",
- "status": "scheduled",
- "is_scheduled": true,
- "is_sent": false,
- "date": "2024-03-29T19:08:21.000000Z",
- "from_email_address": "johndoe@example.com",
- "from_name": "John Doe",
- "reply_to_email_address": "johndoe@example.com",
- "reply_to_name": "John",
- "updated_at": "2024-02-29T18:53:50.666000Z",
- "created_at": "2024-02-29T18:53:50.666000Z"
}, - "outputs": [
- {
- "email_id": "6790fcf5447b4da76a0d37b5",
- "format": "body_html",
- "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" \nxmlns:v=\"urn:schemas-microsoft-com:vml\" \nxmlns:o=\"urn:schemas-microsoft-com:office:office\" \n\tlang=\"en-US\" xml:lang=\"en-US\">\n\t<head>\n\t\t<!--[if gte mso 9]><xml>\n\t\t\t<o:OfficeDocumentSettings>\n\t\t\t<o:AllowPNG/>\n\t\t\t<o:PixelsPerInch>96</o:PixelsPerInch>\n\t\t\t</o:OfficeDocumentSettings>\n\t\t\t</xml>\n\t\t<![endif]-->\n\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n\t\t<meta name=\"HandheldFriendly\" content=\"true\"/>\n\t\t<meta name=\"MobileOptimized\" content=\"320\"/>\n\t\t<meta name=\"viewport\" content=\"width=device-width\" />\n\n\t\t\t\t\t<link rel=\"icon\" href=\"/stensul-favicon.svg?new\" type=\"image/x-icon\">\t\t\n\t\t\t\t<title>The Email Title</title>\n \n\t\t\t\t\t<link href=\"https://stensul.com/styles.css\" rel=\"stylesheet\">\n\t\t\n\t\t<style type=\"text/css\">\n \n span, td, table, div {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .st-email-body{\n width:100% !important;\n -webkit-text-size-adjust: 100%;\n margin: 0 auto!important;\n padding: 0px;\n background-color: #ffffff;\n }\n\n span.st-preheader{\n display: none!important;\n }\n\n \n td img + div {\n display: none;\n }\n\n \n a[href^=\"tel\"],\n a[href^=\"sms\"]{text-decoration: none; color: inherit !important; pointer-events: none; cursor: default;}\n u + .st-email-body a {color: inherit; text-decoration: none; font-size: inherit; font-family: inherit; font-weight: inherit; line-height: inherit;}\n \n *[x-apple-data-detectors] {color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: inherit !important; font-weight: inherit !important; line-height: inherit !important;}\n\n a,a:hover,a:link,a:visited {\n text-decoration:none !important;\n outline: none;\n }\n\n p {\n margin: 0;\n padding: 0;\n }\n\n \n .st-hide-desktop {\n display:none;\n font-size:0;\n height:0;\n min-height:0;\n max-height:0;\n line-height:0;\n mso-hide:all;\n }\n\n .st-gmail-fix { display: none !important; }\n\n </style>\n<style>\n\n@media screen and (max-width: 480px) {\n \n .st-col,.st-mobile-full-width,.st-module-wrapper-table,.st-wrapper,.st-wrapper-table{width:100%!important}.st-col{padding:0!important}.st-resize{width:100%!important}.st-mobile-width-constraint,.st-resize{display:block!important;height:auto!important}.st-mobile-width-constraint{max-width:100%!important}.st-equal-height,.st-height-auto{height:auto!important}.st-hide-desktop{display:table-row!important}.st-hide-mobile{display:none!important}.st-mobile-inline{display:inline!important}.show-img-mobile{display:table-row!important;width:100%!important;float:none;overflow:visible!important;height:auto!important}\n .st-dynamic-461-3, u + .st-email-body .st-dynamic-461-3 img { width:100%!important;max-width:640px!important; }\n.st-dynamic-461-7 { background-image:none!important; } \n .st-wrapper-table{\n width: 100%!important;\n max-width: 480px!important;\n margin: 0 auto;\n }\n }\n #MessageViewBody .st-module-wrapper-table {margin-top:-1px}\n @media (max-width:639px) and (min-width:481px) {.st-module-wrapper-table {margin-top:-1px !important;} }\n div > u + .body .st-module-wrapper-table {margin-top:0px !important}\n </style>\n<!--[if !mso]><!-->\n <style>\n ul, ol {margin-left:15px; padding-left:0px}\n </style>\n<!--<![endif]-->\n<!--[if mso]>\n <style>\n table{\n border-collapse: collapse;\n }\n\n span.MsoHyperlink {\n mso-style-priority:99;\n color:inherit;\n }\n span.MsoHyperlinkFollowed {\n mso-style-priority:99;\n color:inherit;\n }\n ol li, ul li {margin-top:0px !important;margin-bottom:0px !important;}\n </style>\n<![endif]-->\n\n<!--[if gte mso 9]>\n <style>\n .st-mso-full-width{\n width: 100%;\n }\n </style>\n<![endif]-->\n\n\n<!--[if IEMobile]>\n <style type=\"text/css\">\n .st-mso-full-width{\n width: 100%;\n }\n </style>\n<![endif]-->\n\n\n <style>font-family: 'Open Sans';</style>\n\n\n\t</head>\n\t<body class=\"st-email-body st-center-gmail\">\n\t\t\t\t\t\t\t<div lang=\"en-US\">\n\t\t\n\t\t\t\t\t<div>Library Prepend Code</div>\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t<div style=\"font-size:0px; display:none; visibility:hidden; opacity:0; color:transparent; max-height:0px; height:0; width:0; mso-hide:all;\">\n\t\t\t\t\t\tThe Email Preheader\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<table role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" bgcolor=\"#d8d8d8\" class=\"st-wrapper-table\" style=\"width: 100%;\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" class=\"st-dynamic-461-7\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"640\" class=\"st-wrapper st-wrapper-background st-module-wrapper-table\" style=\"width: 640px;\">\n <tr>\n <td width=\"100%\" valign=\"top\" style=\"width: 100%;\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" style=\"width: 100%;\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\">\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"640\" class=\"st-mso-full-width st-mobile-full-width\" style=\"width: 640px;\">\n <tr>\n <td align=\"center\" valign=\"top\" width=\"640\">\n <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\" class=\"st-dynamic-461-3\" style=\"width: 100%;\"><img border=\"0\" valign=\"top\" width=\"640\" src=\"ly0mv4c18i/en_us/images/6793a4116137b-1737729041.3982.png\" alt=\"\" class=\"st-mobile-width-constraint\" style=\"border: 0px; display: block; width: 640px; max-width: 100%;\"> </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" class=\"st-dynamic-461-7\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"640\" class=\"st-wrapper st-wrapper-background st-module-wrapper-table\" style=\"width: 640px;\">\n <tr>\n <td width=\"100%\" valign=\"top\" style=\"width: 100%;\">\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"640\" class=\"st-mso-full-width st-mobile-full-width\" style=\"width: 640px;\">\n <tr>\n <td align=\"center\" valign=\"top\" width=\"640\">\n <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\" class=\"st-dynamic-461-3\" style=\"width: 100%;\"><img border=\"0\" valign=\"top\" width=\"640\" src=\"ly0mv4c18i/en_us/images/6792a1e8da894-1737662952.8951.jpg\" alt=\"\" class=\"st-mobile-width-constraint\" style=\"border: 0px; display: block; width: 640px; max-width: 100%;\"> </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" class=\"st-dynamic-461-7\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"640\" class=\"st-wrapper st-wrapper-background st-module-wrapper-table\" style=\"width: 640px;\">\n <tr>\n <td width=\"100%\" valign=\"top\" style=\"width: 100%;\">\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"640\" class=\"st-mso-full-width st-mobile-full-width\" style=\"width: 640px;\">\n <tr>\n <td align=\"center\" valign=\"top\" width=\"640\">\n <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; color: #000000; font-size: 14px; font-weight: normal; letter-spacing: normal; line-height: 21px; width: 100%;\">\n <p style=\"margin: 0px;\"><span style=\"font-size: 14px; line-height: 21px;\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" class=\"st-dynamic-461-7\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"640\" class=\"st-wrapper st-wrapper-background st-module-wrapper-table\" style=\"width: 640px;\">\n <tr>\n <td width=\"100%\" valign=\"top\" style=\"width: 100%;\">\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"640\" class=\"st-mso-full-width st-mobile-full-width\" style=\"width: 640px;\">\n <tr>\n <td align=\"center\" valign=\"top\" width=\"640\">\n <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" style=\"padding-top: 8px; padding-bottom: 8px; width: 100%;\"><!--[if mso]>\n <v:roundrect xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" style=\"height:30pt; v-text-anchor:middle; width:84pt; mso-position-horizontal: center\" arcsize=\"10%\" strokecolor=\"#003FA3\" strokeweight=\"0pt\" fillcolor=\"#003FA3\">\n <w:anchorlock/>\n <v:textbox inset=\"0,0,0,0\"><p style=\"text-align: center; font-family: Helvetica, Arial, Sans-serif; color: #FFFFFF; font-size: 16px; font-weight: normal; letter-spacing: normal; mso-line-height-rule: exactly; line-height: 16px\"><![endif]-->\n <!--[if !mso]><!-->\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"border-collapse: initial;\">\n <tr>\n <td width=\"100%\" bgcolor=\"#003FA3\" align=\"center\" height=\"40\" valign=\"middle\" style=\"mso-padding-alt:0px 10px 0px 10px; border-radius:4px; height: 40px; width: 100%; text-align: center; background-color: #003fa3; vertical-align: middle\"><!--<![endif]--> <a href=\"https://stensul.com?new-parameter-name=New Parameter Default Value&new-element-name=New Element Default Value\" target=\"_blank\" bgcolor=\"#003FA3\" valign=\"middle\" style=\"mso-line-height-rule:exactly; text-align:center; font-family: Helvetica, Arial, sans-serif; color: #ffffff; font-size: 16px; font-weight: normal; letter-spacing: normal; line-height: 20px; padding-right: 10px; padding-left: 10px; text-decoration: none; display: table-cell; height: 40px; border-radius: 4px; vertical-align: middle; box-sizing: content-box\"> <span style=\"margin: 0px; color: #ffffff;\"><span style=\"font-size: 16px; line-height: 20px;\">Lorem ipsum</span></span></a> <!--[if !mso]><!--></td>\n </tr>\n </table> <!--<![endif]-->\n <!--[if mso]>\n </p></v:textbox>\n </v:roundrect>\n <![endif]-->\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"center\" class=\"st-dynamic-461-7\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"640\" class=\"st-wrapper st-wrapper-background st-module-wrapper-table\" style=\"width: 640px;\">\n <tr>\n <td width=\"100%\" valign=\"top\" style=\"width: 100%;\">\n <table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" style=\"width: 100%;\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\">\n <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"640\" class=\"st-mso-full-width st-mobile-full-width\" style=\"width: 640px;\">\n <tr>\n <td align=\"center\" valign=\"top\" width=\"640\">\n <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n <tr>\n <td width=\"100%\" valign=\"top\" align=\"left\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; color: #000000; font-size: 14px; font-weight: normal; letter-spacing: normal; line-height: 21px; width: 100%;\">\n <p style=\"margin: 0px;\"><span style=\"font-size: 14px; line-height: 21px;\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n </td>\n </tr><!--[if false]><!-->\n <tr>\n <td class=\"st-gmail-fix\" style=\"font-size:0; line-height: 0; height: 0; min-width: 640px;\">\n \n </td>\n </tr><!--<![endif]-->\n</table>\t\t\t\t\t\t\t\t\t<div>Library Append Code</div>\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t</body>\n</html>\n",
- "content_minified": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xml:lang=\"en-US\" lang=\"en-US\" lang=\"en-US\"><head> <!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]--> <meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"true\" name=\"HandheldFriendly\"><meta content=\"320\" name=\"MobileOptimized\"><meta content=\"width=device-width\" name=\"viewport\"><link href=\"/stensul-favicon.svg?new\" rel=\"icon\" type=\"image/x-icon\"><title>The Email Title</title><link href=\"https://stensul.com/styles.css\" rel=\"stylesheet\"><style type=\"text/css\">span,td,table,div{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.st-email-body{width:100% !important;-webkit-text-size-adjust:100%;margin:0 auto!important;padding:0;background-color:#fff}span.st-preheader{display:none!important}td img+div{display:none}a[href^=tel],a[href^=sms]{text-decoration:none;color:inherit !important;pointer-events:none;cursor:default}u+.st-email-body a{color:inherit;text-decoration:none;font-size:inherit;font-family:inherit;font-weight:inherit;line-height:inherit}*[x-apple-data-detectors]{color:inherit !important;text-decoration:none !important;font-size:inherit !important;font-family:inherit !important;font-weight:inherit !important;line-height:inherit !important}a,a:hover,a:link,a:visited{text-decoration:none !important;outline:none}p{margin:0;padding:0}.st-hide-desktop{display:none;font-size:0;height:0;min-height:0;max-height:0;line-height:0;mso-hide:all}.st-gmail-fix{display:none !important}</style><style>@media screen and (max-width:480px){.st-col,.st-mobile-full-width,.st-module-wrapper-table,.st-wrapper,.st-wrapper-table{width:100%!important}.st-col{padding:0!important}.st-resize{width:100%!important}.st-mobile-width-constraint,.st-resize{display:block!important;height:auto!important}.st-mobile-width-constraint{max-width:100%!important}.st-equal-height,.st-height-auto{height:auto!important}.st-hide-desktop{display:table-row!important}.st-hide-mobile{display:none!important}.st-mobile-inline{display:inline!important}.show-img-mobile{display:table-row!important;width:100%!important;float:none;overflow:visible!important;height:auto!important}.st-dynamic-461-3,u+.st-email-body .st-dynamic-461-3 img{width:100%!important;max-width:640px!important}.st-dynamic-461-7{background-image:none!important}.st-wrapper-table{width:100%!important;max-width:480px!important;margin:0 auto}}#MessageViewBody .st-module-wrapper-table{margin-top:-1px}@media (max-width:639px) and (min-width:481px){.st-module-wrapper-table{margin-top:-1px !important}}div>u+.body .st-module-wrapper-table{margin-top:0 !important}</style> <!--[if !mso]><!--> <style>ul,ol{margin-left:15px;padding-left:0}</style> <!--<![endif]--> <!--[if mso]> <style> table{ border-collapse: collapse; } span.MsoHyperlink { mso-style-priority:99; color:inherit; } span.MsoHyperlinkFollowed { mso-style-priority:99; color:inherit; } ol li, ul li {margin-top:0px !important;margin-bottom:0px !important;} </style><![endif]--> <!--[if gte mso 9]> <style> .st-mso-full-width{ width: 100%; } </style><![endif]--> <!--[if IEMobile]> <style type=\"text/css\"> .st-mso-full-width{ width: 100%; } </style><![endif]--> <style>font-family:'Open Sans'</style></head> <body class=\"st-center-gmail st-email-body\"><div lang=\"en-US\"><div>Library Prepend Code</div> <div style=\"font-size:0px;display:none;visibility:hidden;opacity:0;color:transparent;max-height:0px;height:0;width:0;mso-hide:all\"> The Email Preheader  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏  ͏ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ </div> <table bgcolor=\"#d8d8d8\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-wrapper-table\" role=\"presentation\" style=\"width:100%\" width=\"100%\"><tr><td align=\"center\" class=\"st-dynamic-461-7\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-module-wrapper-table st-wrapper st-wrapper-background\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td style=\"width:100%\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%\" width=\"100%\"><tr><td align=\"left\" valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-mobile-full-width st-mso-full-width\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td align=\"center\" valign=\"top\" width=\"640\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"><tr><td width=\"100%\" valign=\"top\" align=\"left\" class=\"st-dynamic-461-3\" style=\"width: 100%;\"><img border=\"0\" valign=\"top\" width=\"640\" src=\"ly0mv4c18i/en_us/images/6793a4116137b-1737729041.3982.png\" alt=\"\" class=\"st-mobile-width-constraint\" style=\"border: 0px; display: block; width: 640px; max-width: 100%;\"></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td align=\"center\" class=\"st-dynamic-461-7\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-module-wrapper-table st-wrapper st-wrapper-background\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td style=\"width:100%\" valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-mobile-full-width st-mso-full-width\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td align=\"center\" valign=\"top\" width=\"640\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"><tr><td width=\"100%\" valign=\"top\" align=\"left\" class=\"st-dynamic-461-3\" style=\"width: 100%;\"><img border=\"0\" valign=\"top\" width=\"640\" src=\"ly0mv4c18i/en_us/images/6792a1e8da894-1737662952.8951.jpg\" alt=\"\" class=\"st-mobile-width-constraint\" style=\"border: 0px; display: block; width: 640px; max-width: 100%;\"></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td align=\"center\" class=\"st-dynamic-461-7\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-module-wrapper-table st-wrapper st-wrapper-background\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td style=\"width:100%\" valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-mobile-full-width st-mso-full-width\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td align=\"center\" valign=\"top\" width=\"640\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"><tr><td align=\"left\" style=\"text-align:left;font-family:Helvetica,Arial,sans-serif;color:#000;font-size:14px;font-weight:400;letter-spacing:normal;line-height:21px;width:100%\" valign=\"top\" width=\"100%\"><p style=\"margin:0\"><span style=\"font-size:14px;line-height:21px\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td align=\"center\" class=\"st-dynamic-461-7\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-module-wrapper-table st-wrapper st-wrapper-background\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td style=\"width:100%\" valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-mobile-full-width st-mso-full-width\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td align=\"center\" valign=\"top\" width=\"640\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"><tr><td align=\"center\" style=\"padding-top:8px;padding-bottom:8px;width:100%\" valign=\"top\" width=\"100%\"><!--[if mso]> <v:roundrect xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"urn:schemas-microsoft-com:office:word\" style=\"height:30pt; v-text-anchor:middle; width:84pt; mso-position-horizontal: center\" arcsize=\"10%\" strokecolor=\"#003FA3\" strokeweight=\"0pt\" fillcolor=\"#003FA3\"> <w:anchorlock/> <v:textbox inset=\"0,0,0,0\"><p style=\"text-align: center; font-family: Helvetica, Arial, Sans-serif; color: #FFFFFF; font-size: 16px; font-weight: normal; letter-spacing: normal; mso-line-height-rule: exactly; line-height: 16px\"><![endif]--> <!--[if !mso]><!--> <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"border-collapse:initial\"><tr><td width=\"100%\" bgcolor=\"#003FA3\" align=\"center\" height=\"40\" valign=\"middle\" style=\"mso-padding-alt:0px 10px 0px 10px; border-radius:4px; height: 40px; width: 100%; text-align: center; background-color: #003fa3; vertical-align: middle\"><!--<![endif]--> <a href=\"https://stensul.com?new-parameter-name=New Parameter Default Value&new-element-name=New Element Default Value\" target=\"_blank\" bgcolor=\"#003FA3\" valign=\"middle\" style=\"mso-line-height-rule:exactly; text-align:center; font-family: Helvetica, Arial, sans-serif; color: #ffffff; font-size: 16px; font-weight: normal; letter-spacing: normal; line-height: 20px; padding-right: 10px; padding-left: 10px; text-decoration: none; display: table-cell; height: 40px; border-radius: 4px; vertical-align: middle; box-sizing: content-box\"> <span style=\"margin: 0px; color: #ffffff;\"><span style=\"font-size: 16px; line-height: 20px;\">Lorem ipsum</span></span></a> <!--[if !mso]><!--></td></tr></table> <!--<![endif]--> <!--[if mso]> </p></v:textbox> </v:roundrect> <![endif]--></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td align=\"center\" class=\"st-dynamic-461-7\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-module-wrapper-table st-wrapper st-wrapper-background\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td style=\"width:100%\" valign=\"top\" width=\"100%\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width:100%\" width=\"100%\"><tr><td align=\"left\" valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"st-mobile-full-width st-mso-full-width\" role=\"presentation\" style=\"width:640px\" width=\"640\"><tr><td align=\"center\" valign=\"top\" width=\"640\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\"><tr><td align=\"left\" style=\"text-align:left;font-family:Helvetica,Arial,sans-serif;color:#000;font-size:14px;font-weight:400;letter-spacing:normal;line-height:21px;width:100%\" valign=\"top\" width=\"100%\"><p style=\"margin:0\"><span style=\"font-size:14px;line-height:21px\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr><!--[if false]><!--> <tr><td class=\"st-gmail-fix\" style=\"font-size:0;line-height:0;height:0;min-width:640px\"> </td></tr><!--<![endif]--> </table> <div>Library Append Code</div></div> </body></html>",
- "updated_at": "2025-01-24T18:13:31.588000Z",
- "created_at": "2025-01-23T20:14:12.661000Z"
}, - {
- "email_id": "6790fcf5447b4da76a0d37b5",
- "format": "json",
- "content": "{\n \"modules\": [\n {\n \"name\": \"Image\",\n \"id\": \"673ca87cff1e3a426a09b316\",\n \"styles\": {\n \"backgroundImage\": \"\",\n \"backgroundRepeat\": \"no-repeat\",\n \"backgroundPlacement\": \"inside\",\n \"backgroundPositionX\": \"left\",\n \"backgroundPositionY\": \"top\",\n \"backgroundSize\": \"cover\",\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"stylesMobile\": [],\n \"attributes\": [],\n \"prependCode\": \"\",\n \"appendCode\": \"\",\n \"rows\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": {\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"columns\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": {\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"elements\": [\n {\n \"type\": \"image\",\n \"classes\": null,\n \"attributes\": {\n \"href\": \"\",\n \"width\": \"640\",\n \"height\": \"auto\",\n \"alt\": \"\",\n \"src\": \"ly0mv4c18i/en_us/images/6793a4116137b-1737729041.3982.png\"\n },\n \"styles\": [],\n \"bgcolor\": \"\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Image\",\n \"id\": \"673ca87cff1e3a426a09b316\",\n \"styles\": {\n \"backgroundImage\": \"\",\n \"backgroundRepeat\": \"no-repeat\",\n \"backgroundPlacement\": \"inside\",\n \"backgroundPositionX\": \"left\",\n \"backgroundPositionY\": \"top\",\n \"backgroundSize\": \"cover\",\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\"\n },\n \"stylesMobile\": [],\n \"attributes\": [],\n \"prependCode\": \"\",\n \"appendCode\": \"\",\n \"rows\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"columns\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"elements\": [\n {\n \"type\": \"image\",\n \"classes\": null,\n \"attributes\": {\n \"href\": \"\",\n \"width\": \"640\",\n \"height\": \"auto\",\n \"alt\": \"\",\n \"src\": \"ly0mv4c18i/en_us/images/6792a1e8da894-1737662952.8951.jpg\"\n },\n \"styles\": [],\n \"bgcolor\": \"\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Text\",\n \"id\": \"672133cac20e5a68090909c3\",\n \"styles\": {\n \"backgroundImage\": \"\",\n \"backgroundRepeat\": \"no-repeat\",\n \"backgroundPlacement\": \"inside\",\n \"backgroundPositionX\": \"left\",\n \"backgroundPositionY\": \"top\",\n \"backgroundSize\": \"cover\",\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\"\n },\n \"stylesMobile\": [],\n \"attributes\": [],\n \"prependCode\": \"\",\n \"appendCode\": \"\",\n \"rows\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"columns\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"elements\": [\n {\n \"type\": \"text\",\n \"classes\": null,\n \"content\": {\n \"html\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 14px; line-height: 21px;\\\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\",\n \"text\": \"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.\"\n },\n \"styles\": {\n \"fontFamily\": \"Helvetica, Arial, Sans-serif\",\n \"fontSize\": \"14px\",\n \"color\": \"#000000\",\n \"fontWeight\": \"normal\",\n \"letterSpacing\": \"normal\",\n \"lineHeight\": \"50%\",\n \"align\": \"left\"\n },\n \"attributes\": [],\n \"links\": [],\n \"bgcolor\": \"\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"name\": \"CTA\",\n \"id\": \"67813f07d061b0d8f50faba4\",\n \"styles\": {\n \"backgroundImage\": \"\",\n \"backgroundRepeat\": \"no-repeat\",\n \"backgroundPlacement\": \"inside\",\n \"backgroundPositionX\": \"left\",\n \"backgroundPositionY\": \"top\",\n \"backgroundSize\": \"cover\",\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\"\n },\n \"stylesMobile\": [],\n \"attributes\": [],\n \"prependCode\": \"\",\n \"appendCode\": \"\",\n \"rows\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"columns\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": [],\n \"elements\": [\n {\n \"type\": \"button\",\n \"classes\": null,\n \"content\": {\n \"html\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 16px; line-height: 20px;\\\">Lorem ipsum</span></p>\",\n \"text\": \"Lorem ipsum\"\n },\n \"styles\": {\n \"color\": \"#FFFFFF\",\n \"fontFamily\": \"Helvetica, Arial, Sans-serif\",\n \"fontSize\": \"16px\",\n \"lineHeight\": \"20%\",\n \"textAlign\": \"center\",\n \"fontWeight\": \"normal\",\n \"letterSpacing\": \"normal\",\n \"paddingRight\": \"10px\",\n \"paddingLeft\": \"10px\",\n \"minWidth\": 50,\n \"maxWidth\": 400,\n \"borderRadius\": \"4px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\"\n },\n \"attributes\": {\n \"width\": \"150\",\n \"height\": \"40\",\n \"align\": \"center\",\n \"bgcolor\": \"#003FA3\",\n \"href\": \"https://stensul.com\",\n \"title\": \"\",\n \"valign\": \"middle\",\n \"hrefExists\": false,\n \"trackingParameters\": {\n \"new-element-name\": \"New Element Default Value\"\n }\n },\n \"bgcolor\": \"\"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Text\",\n \"id\": \"672133cac20e5a68090909c3\",\n \"styles\": {\n \"backgroundImage\": \"\",\n \"backgroundRepeat\": \"no-repeat\",\n \"backgroundPlacement\": \"inside\",\n \"backgroundPositionX\": \"left\",\n \"backgroundPositionY\": \"top\",\n \"backgroundSize\": \"cover\",\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"stylesMobile\": [],\n \"attributes\": [],\n \"prependCode\": \"\",\n \"appendCode\": \"\",\n \"rows\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": {\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"columns\": [\n {\n \"attributes\": {\n \"width\": \"100%\"\n },\n \"styles\": {\n \"borderRadius\": \"0px\",\n \"borderTopWidth\": \"0px\",\n \"borderRightWidth\": \"0px\",\n \"borderBottomWidth\": \"0px\",\n \"borderLeftWidth\": \"0px\",\n \"borderTopStyle\": \"none\",\n \"borderRightStyle\": \"none\",\n \"borderBottomStyle\": \"none\",\n \"borderLeftStyle\": \"none\",\n \"borderTopColor\": \"\",\n \"borderRightColor\": \"\",\n \"borderLeftColor\": \"\"\n },\n \"elements\": [\n {\n \"type\": \"text\",\n \"classes\": null,\n \"content\": {\n \"html\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 14px; line-height: 21px;\\\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\",\n \"text\": \"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.\"\n },\n \"styles\": {\n \"fontFamily\": \"Helvetica, Arial, Sans-serif\",\n \"fontSize\": \"14px\",\n \"color\": \"#000000\",\n \"fontWeight\": \"normal\",\n \"letterSpacing\": \"normal\",\n \"lineHeight\": \"50%\",\n \"align\": \"left\"\n },\n \"attributes\": [],\n \"links\": [],\n \"bgcolor\": \"\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n}",
- "content_minified": null,
- "updated_at": "2025-01-24T14:30:59.752000Z",
- "created_at": "2025-01-23T20:14:12.671000Z"
}, - {
- "email_id": "6790fcf5447b4da76a0d37b5",
- "format": "json_translation",
- "content": "{\n \"id-6790fcf5447b4da76a0d37b5\": {\n \"message\": \"\"\n },\n \"preheader\": {\n \"message\": \"\"\n },\n \"subject\": {\n \"message\": \"\"\n },\n \"title\": {\n \"message\": \"The Email Title\"\n },\n \"3466191244-672133cac20e5a68090909c3-1776200482-3365543196-637007118\": {\n \"message\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 14px; line-height: 21px;\\\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\"\n },\n \"3561243941-67813f07d061b0d8f50faba4-3666308347-3198969854-1646033890\": {\n \"message\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 16px; line-height: 20px;\\\">Lorem ipsum</span></p>\"\n },\n \"4104738788-672133cac20e5a68090909c3-1776200482-3365543196-637007118\": {\n \"message\": \"<p style=\\\"margin: 0px;\\\"><span style=\\\"font-size: 14px; line-height: 21px;\\\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</span></p>\"\n }\n}",
- "content_minified": null,
- "updated_at": "2025-01-24T14:30:59.756000Z",
- "created_at": "2025-01-23T20:14:12.674000Z"
}
], - "modules": [
- {
- "id": 18300748,
- "key": "copy-of-paragraph-left-image-right-1754061293",
- "name": "Hero Image",
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns//688cdb3d6046334e7d09e1b4/en_us/688cdcdea18e0-1754062046.6617.jpg",
- "source_mobile": "",
- "alt": "Image 1 Alt Text"
}, - "guardrails": { }
}
]
}, - {
- "id": 12187124,
- "key": "header+_paragraph",
- "name": "Header + Paragraph",
- "elements": [
- {
- "id": 2623287498,
- "type": "text",
- "style": {
- "font_size": {
- "value": 20
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Header Text"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": false
}, - "underline": {
- "allowed": false
}, - "link": {
- "allowed": false
}, - "strikethrough": {
- "allowed": false
}, - "superscript": {
- "allowed": false
}, - "unordered_list": {
- "allowed": false
}, - "ordered_list": {
- "allowed": false
}, - "color": {
- "allowed": false
}, - "background_color": {
- "allowed": false
}, - "font_size": {
- "allowed": false
}
}
}, - {
- "id": 288207052,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}
]
}, - {
- "id": 2955957717,
- "key": "copy-of-header-paragraph-1754060165",
- "name": "Image Left + Paragraph Right",
- "elements": [
- {
- "id": 4278365025,
- "type": "image",
- "style": { },
- "content": {
- "source": "campaigns//688cdb3d6046334e7d09e1b4/en_us/688cddf4bda6e-1754062324.7768.jpg",
- "source_mobile": "",
- "alt": "Image 2 Alt Text"
}, - "guardrails": { }
}, - {
- "id": 2025168873,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}
]
}, - {
- "id": 414669236,
- "key": "copy-of-paragraph-left-image-right-1754060461",
- "name": "Divider + Text + Button",
- "elements": [
- {
- "id": 4015144907,
- "type": "divider",
- "style": { },
- "content": [ ],
- "guardrails": { }
}, - {
- "id": 3514957104,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "unordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Lorem"
}
}, - {
- "text": {
- "content": "ipsum"
}, - "style": {
- "color": "#0000ee"
}
}, - {
- "text": {
- "content": "dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "italic": true,
- "bold": true
}
}, - {
- "text": {
- "content": ", consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna"
}
}, - {
- "text": {
- "content": "aliquyam"
}, - "style": {
- "italic": true
}
}, - {
- "text": {
- "content": "erat, sed diam"
}
}, - {
- "text": {
- "content": "voluptua"
}, - "style": {
- "strikethrough": true
}
}, - {
- "text": {
- "content": ". At vero eos et accusam et justo duo dolores et ea rebum"
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Phasellus eget aliquam eros. Etiam dictum nec justo eu varius. Aenean iaculis dolor nec elit consequat, ut feugiat tortor molestie. Donec ornare vitae quam ac sagittis. Morbi posuere cursus aliquam."
}
}
], - "items": [
- {
- "type": "ordered_list",
- "items": [
- {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec sollicitudin, justo eu sagittis tristique, dui risus tempus ipsum, at sodales ante diam."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Donec vitae pretium leo, a ultricies nibh. Mauris auctor bibendum lacinia."
}
}
]
}, - {
- "type": "list_item",
- "content": [
- {
- "text": {
- "content": "Vestibulum luctus ex in urna interdum mollis."
}
}
]
}
]
}
]
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}, - {
- "id": 3369732429,
- "type": "text",
- "style": {
- "font_size": {
- "value": 14
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum dolor sit"
}
}, - {
- "text": {
- "content": "amet"
}, - "style": {
- "color": "#800000"
}
}, - {
- "text": {
- "content": ","
}
}, - {
- "text": {
- "content": "consetetur sadipscing elitr"
}, - "style": {
- "background_color": "#ffff99"
}
}, - {
- "text": {
- "content": ", sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
}
}
]
}, - {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "link": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": true
}, - "ordered_list": {
- "allowed": true
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": true,
- "values": [ ]
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
}
}, - {
- "id": 984143014,
- "type": "divider",
- "style": { },
- "content": [ ],
- "guardrails": { }
}, - {
- "id": 3052579762,
- "type": "button",
- "style": { },
- "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Lorem ipsum"
}
}
]
}
], - "guardrails": {
- "bold": {
- "allowed": true
}, - "italic": {
- "allowed": true
}, - "underline": {
- "allowed": true
}, - "strikethrough": {
- "allowed": true
}, - "superscript": {
- "allowed": true
}, - "unordered_list": {
- "allowed": false
}, - "ordered_list": {
- "allowed": false
}, - "color": {
- "allowed": true,
- "values": [ ]
}, - "background_color": {
- "allowed": false
}, - "font_size": {
- "allowed": true,
- "values": [
- 12,
- 14,
- 16,
- 18
]
}
},
}
]
}
]
}
}
}Required scope: emails:write
This endpoint updates the email's own settings: its name, title, subject line and
preheader. Module content is updated with PATCH /external-api/v1/emails/{{emailId}}/content
instead.
Only the fields present in the request body are written; anything omitted is left as it
is. Sending an explicit null or "" for title, subject_line or preheader clears
that field. At least one of name, title, subject_line or preheader is required.
title, subject_line and preheader must be enabled for the email's library, and a
library may cap their length below the 255-character maximum or mark the subject line or
preheader as required. A value that breaks one of those rules is rejected with 422 and
the library's own limit is named in the error.
| emailId required | string |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
| name | string <= 255 characters The email's name. Always available, and cannot be set to an empty value. |
| title | string or null <= 255 characters The email's title. Requires the library to have the title field enabled.
Send |
| subject_line | string or null <= 255 characters The email's subject line. Requires the library to have the subject line
enabled, and must fit the library's maximum length. Send |
| preheader | string or null <= 255 characters The email's preheader. Requires the library to have the preheader enabled,
and must fit the library's maximum length. Send |
| save_version | integer or null >= 0 Optimistic-concurrency token: the |
{- "name": "Q3 Product Launch Announcement",
- "title": "Product Launch",
- "subject_line": "Meet the new Acme Widget",
- "preheader": "The upgrade you have been waiting for is here.",
- "save_version": 7
}{- "data": {
- "message": "Email settings updated successfully",
- "updated_fields": [
- "name",
- "subject_line",
- "preheader"
], - "name": "Q3 Product Launch Announcement",
- "title": "Product Launch",
- "subject_line": "Meet the new Acme Widget",
- "preheader": "The upgrade you have been waiting for is here.",
- "save_version": 8,
}
}Upload images to a Stensul Email, or to the shared Studio module directory. Images can be provided as binary file uploads or as remote URLs.
Required scope: images:write
This endpoint allows multiple image uploads. Up to 5 images can be uploaded at a time using multipart/form-data.
Images can be provided either as binary file uploads (file) or as remote URLs (url). Exactly one of these must be present; they cannot be combined in the same request.
type selects where the images are stored:
email (default) — the target email's own folder. email_id is required.studio — the directory shared by every Studio module, so the image can be used as the
source of an image element in POST /external-api/v1/modules. email_id must be
omitted, and each returned file carries the path it was stored at, to be sent as that
source. Requires the modules:images:write scope, and the authorizing user must be
allowed to manage Studio modules.Exactly one of file or url must be present; they cannot be combined.
{- "data": {
- "target": "email",
- "email_id": "string",
- "files": [
- {
- "name": "68a5dc735e65a-1755700339.3867.png",
- "path": "customer/modules/studio/68a5dc735e65a-1755700339.3867.png",
- "extension": "png",
- "mime_type": "image/png"
}
], - "count": 2
}
}Returns a short-lived, single-use signed URL that an unauthenticated client can use to upload a single image to the given Email. Authorization is enforced here and bound into the URL's signature, so the URL cannot be retargeted to another Email.
| email_id required | string Email ID the eventual upload will be associated with |
| count | integer [ 1 .. 5 ] Default: 1 How many images this single link should accept, uploaded together in one POST. Bound into the signature so it cannot be raised by tampering. Defaults to 1. |
| labels | Array of strings <= 5 items [ items <= 60 characters ] Optional ordered per-slot guidance labels (e.g. ["Top image","Middle image"]) shown on the browser upload page so the user knows which image goes where. Position i maps to the i-th uploaded image. Bound into the signature. |
{- "email_id": "string",
- "count": 1,
- "labels": [
- "string"
]
}{- "data": {
- "upload_id": "9b1c2d3e-4f56-7890-abcd-ef1234567890",
- "count": 3,
- "labels": [
- "Top image",
- "Middle image",
- "Bottom image"
], - "expires_at": "2019-08-24T14:15:22Z",
- "method": "POST",
- "file_field": "file[]"
}
}Returns the server-generated filename of an image uploaded via a single-use signed URL,
correlated by the upload_id (nonce) returned from images/upload-url. Because the upload
happens out-of-band (a browser POSTs directly to the signed URL), the API client never sees
that response; poll this endpoint after the user uploads. Returns status: pending until
the upload completes (or if the result has expired).
| email_id required | string |
| upload_id required | string |
{- "status": "pending",
- "email_id": "string",
- "files": [
- {
- "name": "68a5dc735e65a-1755700339.3867.png",
- "extension": "png",
- "mime_type": "image/png"
}
], - "count": 0
}Returns a self-contained HTML page that lets a human pick an image and upload it to the Email bound in the signed URL. Same URL and signature as the POST upload; the GET only renders the page and does not consume the single-use nonce. No OAuth token is required.
| email_id required | string |
| nonce required | string |
| count | integer Max images this link accepts (1–5). Part of the signed query string. |
| labels | Array of strings Ordered per-slot guidance labels for the upload page. Part of the signed query string. |
| expires required | integer |
| signature required | string |
{- "errors": [
- {
- "title": "string"
}
]
}Uploads one or more images (sent under the multipart field "file[]") using a URL previously
minted via images/upload-url. The number allowed is the signed count. No OAuth token is
required: the request is authorized by the URL signature and its single-use nonce. The
target Email is taken from the signed query string.
| email_id required | string |
| nonce required | string |
| count | integer Max images this link accepts (1–5). Part of the signed query string. |
| labels | Array of strings Ordered per-slot guidance labels for the upload page. Part of the signed query string. |
| expires required | integer |
| signature required | string |
| file required | Array of strings <binary> [ 1 .. 5 ] items [ items <binary > ] One or more images, sent under the multipart field "file[]". The number allowed is bound into the signed URL's |
{- "email_id": "string",
- "files": [
- {
- "name": "68a5dc735e65a-1755700339.3867.png",
- "extension": "png",
- "mime_type": "image/png"
}
], - "count": 1
}Creates a standalone module (draft, Studio type) with the given structure.
name (string, required) — Module name. Must be unique across all non-deleted modules.style (object, optional) — Module-level style.background_color (string, optional) — Hex color code (e.g. #FFFFFF).background_image (string, optional) — Background image reference, not a URL. Sending the key at all (an empty string included) marks the module as having background-image intent: the Studio background-image editor plugins are enabled for it, even before a real image is set.border_radius (object, optional) — { value: number, unit: "px" }.border_top_width / border_right_width / border_bottom_width / border_left_width (object, optional) — { value: number, unit: "px" }.border_top_style / border_right_style / border_bottom_style / border_left_style (solid | dashed | dotted | double | hidden). Defaults to solid when a width greater than 0 is given without a style.border_top_color / border_right_color / border_bottom_color / border_left_color (hex string). Defaults to #000000 when a width greater than 0 is given without a color.rows (array, required, min 1) — Ordered list of rows.style (object, optional) — Row container style.background_color (string, optional) — Hex color.padding_top / padding_right / padding_bottom / padding_left (object, optional) — { value: number, unit: "px" }.border_top_width / border_right_width / border_bottom_width / border_left_width (object, optional) — { value: number, unit: "px" }.border_top_style / border_right_style / border_bottom_style / border_left_style (solid | dashed | dotted | double | hidden). Defaults to solid when a width greater than 0 is given without a style.border_top_color / border_right_color / border_bottom_color / border_left_color (hex string). Defaults to #000000 when a width greater than 0 is given without a color.columns (array, required, min 1) — Ordered list of columns within the row.style (object, optional) — Column container style.width (object, optional) — Percentage width: { value: number, unit: "%" }. Only the % unit is supported. When omitted, columns are distributed equally (e.g. two columns → 50%/50%).background_color (string, optional) — Hex color.padding_top / padding_right / padding_bottom / padding_left (object, optional) — { value: number, unit: "px" }.border_radius (object, optional) — { value: number, unit: "px" }.border_top_width / border_right_width / border_bottom_width / border_left_width (object, optional) — { value: number, unit: "px" }.border_top_style / border_right_style / border_bottom_style / border_left_style (solid | dashed | dotted | double | hidden). Defaults to solid when a width greater than 0 is given without a style.border_top_color / border_right_color / border_bottom_color / border_left_color (hex string). Defaults to #000000 when a width greater than 0 is given without a color.elements (array, optional) — Ordered list of elements within the column. Omit it or send [] to create an empty column.type (string, required) — Element type: text, button, image, or divider.
visibility (boolean, optional) — Whether the element is visible. Default: true.
style (object, optional) — Element style. Available fields depend on element type:
background_color (hex string), padding_top / padding_right / padding_bottom / padding_left ({ value, unit }).font_size ({ value, unit }), font_family (string), font_weight (normal | 100–900), color (hex string), text_align (left | center | right | justify), letter_spacing ({ value: number, unit: "em" | "px" }) — always stored as em; when px is provided it is converted using the element font size as base, line_height ({ value: number, unit: "%" }) — stored as (value - 100)% internally (e.g. { value: 120, unit: "%" } → "20%").font_size ({ value, unit }), font_family (string), font_weight (normal | 100–900), color (hex string), width ({ value, unit }), height ({ value: number | "auto", unit }) — height.value accepts a positive number or "auto", letter_spacing ({ value: number, unit: "em" | "px" }) — always stored as em; when px is provided it is converted using the element font size as base, line_height ({ value: number, unit: "%" }) — stored as (value - 100)% internally, border_radius ({ value: number, unit: "px" }), border_top_width / border_right_width / border_bottom_width / border_left_width ({ value: number, unit: "px" }), border_top_style / border_right_style / border_bottom_style / border_left_style (solid | dashed | dotted | double | hidden) — defaults to solid when a width greater than 0 is given without a style, border_top_color / border_right_color / border_bottom_color / border_left_color (hex string) — defaults to #000000 when a width greater than 0 is given without a color, button_padding_top / button_padding_right / button_padding_bottom / button_padding_left ({ value, unit }) — inner padding applied to the button itself (container padding uses the common padding_* fields), align (left | center | right) — horizontal alignment within the column, defaults to center.align (left | center | right) — horizontal alignment within the column, width ({ value, unit }), height ({ value: number | "auto", unit }) — height.value accepts a positive number or "auto".align (left | center | right) — horizontal alignment within the column. Defaults to center.align applies to image, button and divider; text elements use text_align instead. Button and divider default to center when omitted.
content — Rich-text content for text and button (array of content blocks); image metadata object for image; omitted for divider.
link (object, optional, button only) — { url: string, title: string }.
Each content block is an object with a type field:
paragraph / heading_1 … heading_6 — requires a content array of inline chunks.unordered_list / ordered_list — requires an items array.Each inline chunk can have a text object ({ content, link }) and a style object ({ bold, italic, underline, strikethrough, color }).
source (string, optional) — Either an image URL, or the path returned by
POST /external-api/v1/images with type=studio
(e.g. customer/modules/studio/689d2b3630861-17551306781988.jpg).source_mobile (string, optional) — Same as source, for the mobile image.alt (string, optional) — Alt text.href (string, optional) — Link URL.| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
| name required | string <= 255 characters |
object | |
required | Array of objects non-empty |
{- "name": "Hero Module",
- "style": {
- "background_color": "#FFFFFF"
}, - "rows": [
- {
- "style": {
- "padding_top": {
- "value": 20,
- "unit": "px"
}, - "padding_right": {
- "value": 20,
- "unit": "px"
}, - "padding_bottom": {
- "value": 20,
- "unit": "px"
}, - "padding_left": {
- "value": 20,
- "unit": "px"
}, - "background_color": "#f9f8f3"
}, - "columns": [
- {
- "style": {
- "width": {
- "value": 70,
- "unit": "%"
}
}, - "elements": [
- {
- "type": "text",
- "style": {
- "font_size": {
- "value": 19,
- "unit": "px"
}, - "color": "#000000",
- "text_align": "left"
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Add body copy right here."
}
}
]
}
]
}
]
}, - {
- "style": {
- "width": {
- "value": 30,
- "unit": "%"
}
}, - "elements": [
- {
- "type": "button",
- "style": {
- "font_size": {
- "value": 14,
- "unit": "px"
}, - "color": "#ffffff",
- "background_color": "#0A7891",
- "width": {
- "value": 168,
- "unit": "px"
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Shop now"
}
}
]
}
],
}
]
}
]
}
]
}{- "data": {
- "attributes": {
- "id": "688d2ed76046334e7d09e1c0",
- "key": "hero_module",
- "name": "Hero Module",
- "locked": false,
- "rows": [
- {
- "id": 4823901847,
- "style": {
- "padding_top": {
- "value": 20,
- "unit": "px"
}, - "padding_right": {
- "value": 20,
- "unit": "px"
}, - "padding_bottom": {
- "value": 20,
- "unit": "px"
}, - "padding_left": {
- "value": 20,
- "unit": "px"
}, - "background_color": "#f9f8f3"
}, - "columns": [
- {
- "id": 2910384756,
- "style": {
- "width": {
- "value": 70,
- "unit": "%"
}
}, - "elements": [
- {
- "id": 1234567890,
- "type": "text",
- "style": {
- "font_size": {
- "value": 19,
- "unit": "px"
}, - "color": "#000000",
- "align": "left"
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Add body copy right here."
}
}
]
}
], - "visibility": {
- "value": true
}
}
]
}, - {
- "id": 3847561029,
- "style": {
- "width": {
- "value": 30,
- "unit": "%"
}
}, - "elements": [
- {
- "id": 9876543210,
- "type": "button",
- "style": {
- "font_size": {
- "value": 14,
- "unit": "px"
}, - "color": "#ffffff",
- "button_background_color": "#0A7891",
- "width": {
- "value": 168,
- "unit": "px"
}
}, - "content": [
- {
- "type": "paragraph",
- "content": [
- {
- "text": {
- "content": "Shop now"
}
}
]
}
], - "visibility": {
- "value": true
}
}
]
}
]
}
], - "style": {
- "background_color": "#FFFFFF",
- "background_image": null,
- "background_repeat": "no-repeat",
- "background_placement": "inside",
- "background_position_x": "left",
- "background_position_y": "top",
- "background_size": "cover",
- "assign_background_image_height": false,
- "outer_background_color": "transparent",
- "height": {
- "value": "auto"
}, - "width": {
- "value": 100,
- "unit": "%"
}, - "border_top_color": "#000000",
- "border_top_style": "solid",
- "border_top_width": {
- "value": 0,
- "unit": "px"
}, - "border_right_color": "#000000",
- "border_right_style": "solid",
- "border_right_width": {
- "value": 0,
- "unit": "px"
}, - "border_bottom_color": "#000000",
- "border_bottom_style": "solid",
- "border_bottom_width": {
- "value": 0,
- "unit": "px"
}, - "border_left_color": "#000000",
- "border_left_style": "solid",
- "border_left_width": {
- "value": 0,
- "unit": "px"
}, - "border_radius": {
- "value": 0,
- "unit": "px"
}, - "padding_top": {
- "value": 0,
- "unit": "px"
}, - "padding_right": {
- "value": 0,
- "unit": "px"
}, - "padding_bottom": {
- "value": 0,
- "unit": "px"
}, - "padding_left": {
- "value": 0,
- "unit": "px"
}
}
}
}
}Create, read, update, and delete Stensul user accounts using the SCIM 2.0 protocol. Also supports assigning users to Roles and granting Library access (entitlements).
Required scope: users:read
This endpoint retrieves user information based on the provided user ID.
No request body parameters are required for this endpoint.
| userId required | string |
| attributes | string Example: attributes=userName,name,active A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=groups,entitlements A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
{- "id": "6669edf917fbcd961603a498",
- "externalId": "some-unique-id",
- "meta": {
- "created": "2024-06-12T14:50:33-04:00",
- "lastModified": "2024-06-12T14:50:33-04:00",
- "resourceType": "User"
}, - "userName": "johndoe@example.com",
- "name": {
- "formatted": "John Doe",
- "familyName": "Doe",
- "givenName": "John"
}, - "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6176ca93290d332c4c35f671",
- "display": "admin"
}, - {
- "value": "6176ca93290d332c4c35f66f",
- "display": "full"
}
], - "entitlements": [
- {
- "value": "access_library_my_library1",
- "display": "My Library 1"
}
], - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
]
}Required scope: users:write
This endpoint allows you to update the details of a user.
For security reasons password cannot be set via API.
schemas (array, required): An array of schema URLs.
userName (string, required): The username of the user.
name (object, required): The name of the user, including given name and family name.
givenName (string, required): The given name of the user.
familyName (string, required): The family name of the user.
externalId (string): The external ID of the user.
active (boolean): Indicates whether the user is active.
emails (array of objects, optional): Included for compatibility with other SCIM implementations. Stensul uses userName as the user's email address; this field is ignored if userName is present.
value (string): The email address.
type (string): The type of email (e.g. work).
primary (boolean): Indicates whether this is the primary email.
groups (array, required): An array of groups that the user belongs to.
value (string, required): The id of the group.entitlements (array, required): An array of library permissions the user has access to.
value (string, required): The name of the permission.| userId required | string |
| attributes | string Example: attributes=userName,name,active A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=groups,entitlements A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
| id | string |
object | |
| userName | string |
object | |
| active | boolean |
Array of objects Included for compatibility with other SCIM implementations. Stensul uses | |
Array of objects | |
Array of objects | |
| schemas | Array of strings |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "userName": "johndoe@example.com",
- "name": {
- "givenName": "John",
- "familyName": "Doe"
}, - "externalId": "some-unique-id",
- "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6669edf917fbcd961603a498"
}
], - "entitlements": [
- {
- "value": "access_library_my_library1"
}, - {
- "value": "access_library_my_library2"
}
]
}{- "id": "663a829c778347154f045a7c",
- "externalId": "some-unique-id",
- "meta": {
- "created": "2024-05-07T15:35:56-04:00",
- "lastModified": "2024-06-12T16:20:39-04:00",
- "resourceType": "User"
}, - "userName": "johndoe@example.com",
- "name": {
- "formatted": "Alice Smith",
- "familyName": "Smith",
- "givenName": "Alice"
}, - "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6176ca93290d332c4c35f66f",
- "display": "full"
}
], - "entitlements": [
- {
- "value": "access_library_my_library_1",
- "display": "My Library 1"
}, - {
- "value": "access_library_my_library_2",
- "display": "My Library 2"
}
], - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
]
}Required scope: users:write
This endpoint is used to delete a specific user by their ID.
No request body parameters are required for this endpoint.
| userId required | string |
| Content-Type | string Example: application/scim+json |
nullRequired scope: users:write
This endpoint is used to update a specific user's information using the SCIM (System for Cross-domain Identity Management) protocol.
schemas (array of strings, required): An array of URNs that indicate the schema used for the request.
Operations (array of objects, required): An array of operations to be performed on the user's information.
op (string, required): The operation to be performed, e.g., "replace", "add" or "remove".
value (object, required): The updated value for the specified attribute.
active (boolean): Indicates whether the user is active or not.
userName (string): The username of the user.
externalId (string): The unique identifier for the user outside Stensul.
groups (array of objects): An array of groups to which the user belongs.
value (string, required): The unique identifier of the group.entitlements (array, required): An array of library permissions the user has access to.
value (string, required): The name of the permission.path (string, required if "op" is "add" or "remove"): The path of the attribute to be updated, e.g., "name.givenName".
value (string, required): The updated value for the specified attribute.
| userId required | string |
| attributes | string Example: attributes=userName,name,active A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=groups,entitlements A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
| schemas | Array of strings |
Array of objects |
{- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:PatchOp"
], - "Operations": [
- {
- "op": "replace",
- "value": {
- "active": true,
- "userName": "johndoe@example.com",
- "externalId": "some-unique-id",
- "groups": [
- {
- "value": "66e87ec706cdd8dc88090562"
}
], - "entitlements": [
- {
- "value": "access_library_test"
}
]
}
}, - {
- "op": "add",
- "path": "groups",
- "value": {
- "groups": [
- {
- "value": "673f7ac3c4fc8143a90246e2"
}
]
}
}, - {
- "op": "add",
- "path": "entitlements",
- "value": {
- "entitlements": [
- {
- "value": "access_library_my_library2"
}
]
}
}
]
}{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "id": "68cac6e3d58975f2f40595a6",
- "meta": {
- "created": "2025-09-17T10:34:11-04:00",
- "lastModified": "2025-09-17T10:34:11-04:00",
- "resourceType": "User",
- "version": "W/\"8a94c60e7cf256ef74d6c2f75183878106cc2ead\""
}, - "userName": "johndoe@example.com",
- "externalId": "externalId1",
- "active": true,
- "name": {
- "formatted": "John Doe",
- "familyName": "Doe",
- "givenName": "John"
}, - "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "66f2ec8ee33d1435f40af976",
- "display": "admin"
}
], - "entitlements": [
- {
- "value": "access_library_test",
- "display": "Test"
}
]
}Required scope: users:write
This endpoint is used to create a new user in the system.
For security reasons passwords cannot be set via API, upon first login the user will be forced to set a new password.
schemas (array of strings, required): An array of strings indicating the names of the SCIM schemas supported.
externalId (string, optional): An optional Id used to identify the user in a system other than Stensul.
userName (string, required): Email used to identify the user in Stensul.
name (object, required): The user's name object containing the given name and family name.
givenName (string, required): The user's given name.
familyName (string, required): The user's family name.
active (boolean): Indicates whether the user is active.
emails (array of objects, optional): Included for compatibility with other SCIM implementations. Stensul uses userName as the user's email address; this field is ignored if userName is present.
value (string): The email address.
type (string): The type of email (e.g. work).
primary (boolean): Indicates whether this is the primary email.
groups (array of objects, required): An array of group objects that the user belongs to.
value (string, required): The identifier of the group.entitlements (array, required): An array of library permissions the user has access to.
value (string, required): The name of the permission.| attributes | string Example: attributes=userName,name,active A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=groups,entitlements A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
| schemas required | Array of strings |
| userName required | string |
required | object |
Array of objects Included for compatibility with other SCIM implementations. Stensul uses | |
| active required | boolean |
| externalId | string |
Array of objects | |
Array of objects |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "externalId": "some-unique-id",
- "userName": "johndoe@example.com",
- "name": {
- "givenName": "John",
- "familyName": "Doe"
}, - "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6176ca93290d332c4c35f671"
}, - {
- "value": "6176ca93290d332c4c35f66f"
}
], - "entitlements": [
- {
- "value": "access_library_ab-nulla-laboriosam-ea-occaecati-ab"
}
]
}{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "id": "68cac6e3d58975f2f40595a6",
- "meta": {
- "created": "2025-09-17T10:34:11-04:00",
- "lastModified": "2025-09-17T10:34:11-04:00",
- "resourceType": "User",
- "version": "W/\"8a94c60e7cf256ef74d6c2f75183878106cc2ead\""
}, - "userName": "johndoe@example.com",
- "externalId": "externalId1",
- "active": true,
- "name": {
- "formatted": "John Doe",
- "familyName": "Doe",
- "givenName": "John"
}, - "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "66f2ec8ee33d1435f40af976",
- "display": "admin"
}
], - "entitlements": [
- {
- "value": "access_library_test",
- "display": "Test"
}
]
}Required scope: users:read
This endpoint retrieves a list of users with the ability to paginate the results based on the filter criteria.
Method: GET
URL: {baseUrl}/external-api/scim/v2/Users
Query Parameters:
filter (string, optional): The filter criteria for retrieving users.
startIndex (integer, optional): The index of the first result to return.
count (integer, optional): The number of results to return.
sortBy (string, optional): The attribute to sort the results by. Supported values are "id", "externalId", "meta.created", "meta.lastModified", "userName", "name.familyName" and "name.givenName".
sortOrder (string, optional): The order to sort the results in. Allowed values are "ascending" or "descending".
| startIndex | integer |
| count | integer Example: count=10 |
| sortBy | string Enum: "id" "userName" "externalId" "meta.created" "meta.lastModified" "name.familyName" "name.givenName" Example: sortBy=userName The attribute to sort the results by. Supported values are "id", "externalId", "meta.created", "meta.lastModified", "userName", "name.familyName" and "name.givenName". |
| sortOrder | string Enum: "ascending" "descending" Example: sortOrder=ascending The order to sort the results in. Allowed values are "ascending" or "descending". |
| filter | string Example: filter=userName eq "bob@example.com" Filter results by a specific word or phrase. Filter values are case-sensitive. Note: You must URL-encode the Example: |
| attributes | string Example: attributes=userName,name,active A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=groups,entitlements A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
{- "totalResults": 2,
- "itemsPerPage": 10,
- "startIndex": 1,
- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:ListResponse"
], - "Resources": [
- {
- "id": "663a829c778347154f045a7c",
- "externalId": "some-unique-id",
- "meta": {
- "created": "2024-05-07T15:35:56-04:00",
- "lastModified": "2024-06-12T16:20:39-04:00",
- "resourceType": "User"
}, - "userName": "johndoe@example.com",
- "name": {
- "formatted": "Alice Smith",
- "familyName": "Smith",
- "givenName": "Alice"
}, - "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6176ca93290d332c4c35f66f",
- "display": "full"
}
], - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
]
}, - {
- "id": "6669edf917fbcd961603a498",
- "externalId": "some-unique-id",
- "meta": {
- "created": "2024-06-12T14:50:33-04:00",
- "lastModified": "2024-06-12T14:50:33-04:00",
- "resourceType": "User"
}, - "userName": "johndoe@example.com",
- "name": {
- "formatted": "John Doe",
- "familyName": "Doe",
- "givenName": "John"
}, - "active": true,
- "emails": [
- {
- "value": "johndoe@example.com",
- "type": "work",
- "primary": true
}
], - "groups": [
- {
- "value": "6176ca93290d332c4c35f671",
- "display": "admin"
}, - {
- "value": "6176ca93290d332c4c35f66f",
- "display": "full"
}
], - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
]
}
]
}Create, read, update, and delete Stensul Roles using the SCIM 2.0 protocol. Roles control what users can do within Stensul and which Libraries they can access.
Required scope: roles:read
This endpoint retrieves a list of groups with the ability to paginate the results based on the filter criteria.
Method: GET
URL: {baseUrl}/external-api/scim/v2/Groups
Query Parameters:
filter (string, optional): The filter criteria for retrieving groups. Supported fields are "id", "displayName" and "externalId". "members" filtering is not supported. Filter values are case-sensitive.
startIndex (integer, optional): The index of the first result to return.
count (integer, optional): The number of results to return.
sortBy (string, optional): The attribute to sort the results by. Supported values are "id", "displayName", "meta.created", "meta.lastModified".
sortOrder (string, optional): The order to sort the results in. Allowed values are "ascending" or "descending".
| startIndex | integer The index entry by which to begin the list of returned results. |
| count | integer Example: count=10 Limit the number of results returned in a single response. By default, the system returns a list of 100 users. |
| filter | string Example: filter=displayName eq "admin" Filter results by a specific word or phrase. Filter values are case-sensitive. Supported filterable fields: Note: Supported operators: Logical operators Examples:
|
| sortBy | string Enum: "id" "displayName" "meta.created" "meta.lastModified" Example: sortBy=displayName The attribute to sort the results by. Supported values are "id", "displayName", "meta.created", "meta.lastModified". |
| sortOrder | string Enum: "ascending" "descending" Example: sortOrder=ascending The order to sort the results in. Allowed values are "ascending" or "descending". |
| attributes | string Example: attributes=displayName A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=members A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
{- "totalResults": 3,
- "itemsPerPage": 10,
- "startIndex": 0,
- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:ListResponse"
], - "Resources": [
- {
- "id": "6176ca93290d332c4c35f66f",
- "meta": {
- "created": "2021-10-25T11:17:39-04:00",
- "lastModified": "2024-05-22T14:08:21-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "full",
- "members": [
- {
- "value": "6176cab757475472c31392a2",
- "display": "John Doe"
}, - {
- "value": "663a829c778347154f045a7c",
- "display": "Alice Smith"
}
]
}, - {
- "id": "6176ca93290d332c4c35f670",
- "meta": {
- "created": "2021-10-25T11:17:39-04:00",
- "lastModified": "2021-10-25T11:17:39-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "reviewer",
- "members": [
- {
- "value": "6176cab757475472c31392a2",
- "display": "John Doe"
}, - {
- "value": "663a829c778347154f045a7c",
- "display": "Alice Smith"
}
]
}, - {
- "id": "6176ca93290d332c4c35f66e",
- "meta": {
- "created": "2021-10-25T11:17:39-04:00",
- "lastModified": "2023-12-15T10:27:41-05:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "user",
- "members": [
- {
- "value": "6176cab757475472c31392a2",
- "display": "John Doe"
}, - {
- "value": "663a829c778347154f045a7c",
- "display": "Alice Smith"
}
]
}
]
}Required scope: roles:write
This endpoint is used to create a new group in the system.
schemas (array of strings, required): An array of strings indicating the names of the SCIM schemas supported.
displayName (string, required): Group name.
members (array of objects, optional): An array of user objects.
value (string, required): The identifier of the user.| attributes | string Example: attributes=displayName A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=members A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
| schemas | Array of any Default: ["urn:ietf:params:scim:schemas:core:2.0:Group"] Items Value: "urn:ietf:params:scim:schemas:core:2.0:Group" |
| displayName | string |
Array of objects |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "SCIM Group",
- "members": [
- {
- "value": "667adbb640ee4dd72b006655"
}
]
}{- "id": "6686fbbeccd0a3cca10f1cd5",
- "meta": {
- "created": "2024-07-04T15:45:02-04:00",
- "lastModified": "2024-07-04T15:45:02-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "SCIM Group",
- "members": [
- {
- "value": "61e98b7a9a8c1068111f4af3",
- "display": "John Doe"
}, - {
- "value": "667adbb640ee4dd72b006655",
- "display": "John Doe"
}
]
}Required scope: roles:write
This endpoint allows you to update the details of a group.
schemas (array, required): An array of schema URLs.
displayName (string, required): The name of the group.
members (array, optional): An array of members of the group.
value (string, required): The id of the user.| groupId required | string |
| attributes | string Example: attributes=displayName A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=members A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
| schemas | Array of any Default: ["urn:ietf:params:scim:schemas:core:2.0:Group"] Items Value: "urn:ietf:params:scim:schemas:core:2.0:Group" |
| displayName | string |
Array of objects |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "SCIM Group",
- "members": [
- {
- "value": "667adbb640ee4dd72b006655"
}
]
}{- "id": "6686fbbeccd0a3cca10f1cd5",
- "meta": {
- "created": "2024-07-04T15:45:02-04:00",
- "lastModified": "2024-07-04T16:13:50-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "SCIM Group",
- "members": [
- {
- "value": "61e98b7a9a8c1068111f4af3",
- "display": "John Doe"
}, - {
- "value": "667adbb640ee4dd72b006655",
- "display": "John Doe"
}
]
}Required scope: roles:write
This endpoint is used to update a specific group's information using the SCIM (System for Cross-domain Identity Management) protocol.
schemas (array of strings, required): An array of URNs that indicate the schema used for the request.
Operations (array of objects, required): An array of operations to be performed on the group's information.
op (string, required): The operation to be performed, e.g., "replace", "add" or "remove".
value (object, required): The updated value for the specified attribute.
displayName (string): The name of the group.
members (array of objects): An array of users for the group.
value (string, required): The unique identifier of the user.path (string, required if "op" is "add" or "remove"): The path of the attribute to be updated, e.g., "members".
value (string, required): The updated value for the specified attribute.
| groupId required | string |
| attributes | string Example: attributes=displayName A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=members A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
{- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:PatchOp"
], - "Operations": [
- {
- "op": "replace",
- "value": {
- "displayName": "SCIM Group",
- "members": [
- {
- "value": "6176cab757475472c31392a2"
}
]
}
}, - {
- "op": "add",
- "path": "members",
- "value": {
- "members": [
- {
- "value": "61e98b7a9a8c1068111f4af3"
}, - {
- "value": "627016f10a7f953ea1187a34"
}
]
}
}, - {
- "op": "remove",
- "path": "members",
- "value": {
- "members": [
- {
- "value": "627016f10a7f953ea1187a34"
}
]
}
}
]
}{- "id": "6176ca93290d332c4c35f66f",
- "meta": {
- "created": "2021-10-25T11:17:39-04:00",
- "lastModified": "2024-07-08T16:44:59-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "SCIM Group",
- "members": [
- {
- "value": "61e98b7a9a8c1068111f4af3",
- "display": "John Doe"
}
]
}Required scope: roles:read
This endpoint retrieves information about a specific group identified by
the groupId.
No request body is required for this endpoint.
| groupId required | string |
| attributes | string Example: attributes=displayName A comma-separated list of attribute names to return in the response. Attribute names can be top-level (e.g. |
| excludedAttributes | string Example: excludedAttributes=members A comma-separated list of attribute names to exclude from the response. Sub-attributes can be referenced using dot notation (e.g. |
| Content-Type | string Example: application/scim+json |
{- "id": "6176ca93290d332c4c35f66f",
- "meta": {
- "created": "2021-10-25T11:17:39-04:00",
- "lastModified": "2024-05-22T14:08:21-04:00",
- "resourceType": "Group"
}, - "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Group"
], - "displayName": "full",
- "members": [
- {
- "value": "663a829c778347154f045a7c",
- "display": "Alice Smith"
}
]
}Required scope: roles:write
This endpoint is used to delete a specific group by its ID.
No request body parameters are required for this endpoint.
| groupId required | string |
| Content-Type | string Example: application/scim+json |
nullRetrieve the SCIM 2.0 schema definitions that describe the attributes supported for User and Group resources within Stensul.
Required scope: users:read
This endpoint retrieves the schema for the User resource in the SCIM API.
No request body parameters are required for this endpoint.
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Schema"
], - "id": "urn:ietf:params:scim:schemas:core:2.0:User",
- "meta": {
- "resourceType": "Schema",
- "created": "2001-01-01T00:00:00+00:00",
- "lastModified": "2001-01-01T00:00:00+00:00",
- "version": "W/\"5CF43FF3C1E0C85DE1F13305C3B1AC83009FF941\"",
}, - "name": "User",
- "description": "User resource.",
- "attributes": [
- {
- "name": "userName",
- "description": "Unique identifier for the User, typically used by the user to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the service provider's entire set of Users. REQUIRED.",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "server",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "name",
- "description": "The components of the user's real name. Providers MAY return just the full name as a single string in the formatted sub-attribute, or they MAY return just the individual component attributes using the other sub-attributes, or they MAY return both. If both variants are returned, they SHOULD be describing the same name, with the formatted name indicating how the component attributes should be combined.",
- "type": "complex",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "formatted",
- "description": "The full name, including all middle names, titles, and suffixes as appropriate, formatted for display (e.g., 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "familyName",
- "description": "The family name of the User, or last name in most Western languages (e.g., 'Jensen' given the full name 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "givenName",
- "description": "The given name of the User, or first name in most Western languages (e.g., 'Barbara' given the full name 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}
]
}, - {
- "name": "active",
- "description": "A Boolean value indicating the User's administrative status.",
- "type": "boolean",
- "mutability": "readWrite",
- "returned": "default",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "groups",
- "description": "A list of groups to which the user belongs, either through direct membership, through nested groups, or dynamically calculated.",
- "type": "complex",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": true,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "value",
- "description": "The identifier of the User's group.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "$ref",
- "description": "The URI of the corresponding 'Group' resource to which the user belongs.",
- "type": "reference",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "referenceTypes": [
- "Group"
]
}, - {
- "name": "display",
- "description": "A human-readable name, primarily used for display purposes. READ-ONLY.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}
]
}, - {
- "name": "entitlements",
- "description": "A list of Library permissions the user has access to.",
- "type": "complex",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": true,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "value",
- "description": "The name of the Libraries's permission.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "display",
- "description": "A human-readable name, primarily used for display purposes. READ-ONLY.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}
]
}
]
}Required scope: roles:read
This endpoint retrieves the schema for the SCIM group resource.
This endpoint does not require any request body.
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Schema"
], - "id": "urn:ietf:params:scim:schemas:core:2.0:Group",
- "meta": {
- "resourceType": "Schema",
- "created": "2001-01-01T00:00:00+00:00",
- "lastModified": "2001-01-01T00:00:00+00:00",
- "version": "W/\"05A8B9B6C912798878B44A358F579A083EF9C4A3\"",
}, - "name": "Group",
- "description": "Group resource.",
- "attributes": [
- {
- "name": "displayName",
- "description": "A human-readable name for the Group. REQUIRED.",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "members",
- "description": "A list of members of the Group.",
- "type": "complex",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": true,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "type",
- "description": "A label indicating the type of resource, e.g., 'User' or 'Group'.",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "canonicalValues": [
- "User",
- "Group"
]
}, - {
- "name": "display",
- "description": "Display name for the member",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "value",
- "description": "Identifier of the member of this Group.",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "$ref",
- "description": "The URI corresponding to a SCIM resource that is a member of this Group.",
- "type": "reference",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "referenceTypes": [
- "User",
- "Group"
]
}
]
}
]
}Required scope: Any SCIM scope (users:read, users:write, roles:read, or roles:write)
This endpoint retrieves the SCIM (System for Cross-domain Identity Management) schemas.
This endpoint does not require any request body.
| Content-Type | string Example: application/scim+json |
{- "totalResults": 2,
- "itemsPerPage": 2,
- "startIndex": 1,
- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:ListResponse"
], - "Resources": [
- {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Schema"
], - "id": "urn:ietf:params:scim:schemas:core:2.0:User",
- "meta": {
- "resourceType": "Schema",
- "created": "2001-01-01T00:00:00+00:00",
- "lastModified": "2001-01-01T00:00:00+00:00",
- "version": "W/\"5CF43FF3C1E0C85DE1F13305C3B1AC83009FF941\"",
}, - "name": "User",
- "description": "User resource.",
- "attributes": [
- {
- "name": "userName",
- "description": "Unique identifier for the User, typically used by the user to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the service provider's entire set of Users. REQUIRED.",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "server",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "name",
- "description": "The components of the user's real name. Providers MAY return just the full name as a single string in the formatted sub-attribute, or they MAY return just the individual component attributes using the other sub-attributes, or they MAY return both. If both variants are returned, they SHOULD be describing the same name, with the formatted name indicating how the component attributes should be combined.",
- "type": "complex",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "formatted",
- "description": "The full name, including all middle names, titles, and suffixes as appropriate, formatted for display (e.g., 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "familyName",
- "description": "The family name of the User, or last name in most Western languages (e.g., 'Jensen' given the full name 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "givenName",
- "description": "The given name of the User, or first name in most Western languages (e.g., 'Barbara' given the full name 'Ms. Barbara J Jensen, III'].",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}
]
}, - {
- "name": "active",
- "description": "A Boolean value indicating the User's administrative status.",
- "type": "boolean",
- "mutability": "readWrite",
- "returned": "default",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "groups",
- "description": "A list of groups to which the user belongs, either through direct membership, through nested groups, or dynamically calculated.",
- "type": "complex",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": true,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "value",
- "description": "The identifier of the User's group.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "$ref",
- "description": "The URI of the corresponding 'Group' resource to which the user belongs.",
- "type": "reference",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "referenceTypes": [
- "Group"
]
}, - {
- "name": "display",
- "description": "A human-readable name, primarily used for display purposes. READ-ONLY.",
- "type": "string",
- "mutability": "readOnly",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}
]
}
]
}, - {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:Schema"
], - "id": "urn:ietf:params:scim:schemas:core:2.0:Group",
- "meta": {
- "resourceType": "Schema",
- "created": "2001-01-01T00:00:00+00:00",
- "lastModified": "2001-01-01T00:00:00+00:00",
- "version": "W/\"05A8B9B6C912798878B44A358F579A083EF9C4A3\"",
}, - "name": "Group",
- "description": "Group resource.",
- "attributes": [
- {
- "name": "displayName",
- "description": "A human-readable name for the Group. REQUIRED.",
- "type": "string",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": true,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "members",
- "description": "A list of members of the Group.",
- "type": "complex",
- "mutability": "readWrite",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": true,
- "caseExact": false,
- "subAttributes": [
- {
- "name": "type",
- "description": "A label indicating the type of resource, e.g., 'User' or 'Group'.",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "canonicalValues": [
- "User",
- "Group"
]
}, - {
- "name": "display",
- "description": "Display name for the member",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "value",
- "description": "Identifier of the member of this Group.",
- "type": "string",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false
}, - {
- "name": "$ref",
- "description": "The URI corresponding to a SCIM resource that is a member of this Group.",
- "type": "reference",
- "mutability": "immutable",
- "returned": "default",
- "uniqueness": "none",
- "required": false,
- "multiValued": false,
- "caseExact": false,
- "referenceTypes": [
- "User",
- "Group"
]
}
]
}
]
}
]
}Retrieve the SCIM 2.0 resource type definitions for Users and Groups, including their endpoint URLs and supported schema URNs.
Required scope: Any SCIM scope (users:read, users:write, roles:read, or roles:write)
This endpoint retrieves the resource types available in the system.
Valid resource types include Users and Groups.
No request body is required for this endpoint.
| Content-Type | string Example: application/scim+json |
{- "totalResults": 2,
- "itemsPerPage": 2,
- "startIndex": 1,
- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:ListResponse"
], - "Resources": [
- {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:ResourceType"
], - "id": "User",
- "name": "Users",
- "description": "User Account",
- "schema": "urn:ietf:params:scim:schemas:core:2.0:User",
- "schemaExtensions": [ ],
- "meta": {
- "resourceType": "ResourceType"
}
}, - {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:ResourceType"
], - "id": "Group",
- "name": "Groups",
- "description": "Group",
- "schema": "urn:ietf:params:scim:schemas:core:2.0:User",
- "schemaExtensions": [ ],
- "meta": {
- "resourceType": "ResourceType"
}
}
]
}Required scope: users:read
This endpoint retrieves the details of a specific resource type, in this case, the "User" resource type.
No request body is required for this endpoint.
| Content-Type | string Example: application/scim+json |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:ResourceType"
], - "id": "User",
- "name": "Users",
- "description": "User Account",
- "schema": "urn:ietf:params:scim:schemas:core:2.0:User",
- "schemaExtensions": [ ],
- "meta": {
- "resourceType": "ResourceType"
}
}Required scope: roles:read
This endpoint retrieves the details of a specific resource type, in this case, the "Group" resource type.
No request body is required for this endpoint.
| Content-Type | string |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:ResourceType"
], - "id": "Group",
- "name": "Groups",
- "description": "Group",
- "schema": "urn:ietf:params:scim:schemas:core:2.0:Group",
- "schemaExtensions": [ ],
- "meta": {
- "resourceType": "ResourceType"
}
}Retrieve the SCIM 2.0 Service Provider Configuration for Stensul, describing supported features such as filtering, sorting, bulk operations, and authentication schemes.
Required scope: Any SCIM scope (users:read, users:write, roles:read, or roles:write)
This endpoint retrieves the service provider configuration.
This endpoint does not require any request body.
| Content-Type | string Example: application/scim+json |
{- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"
], - "patch": {
- "supported": true
}, - "bulk": {
- "supported": true,
- "maxPayloadSize": 1048576,
- "maxOperations": 10
}, - "filter": {
- "supported": true,
- "maxResults": 100
}, - "changePassword": {
- "supported": false
}, - "sort": {
- "supported": true
}, - "etag": {
- "supported": true
}, - "authenticationSchemes": [
- {
- "name": "OAuth Bearer Token",
- "description": "Authentication scheme using the OAuth Bearer Token Standard",
- "type": "oauthbearertoken",
- "primary": true
}
], - "meta": {
- "resourceType": "ServiceProviderConfig",
- "created": "2024-06-12T21:19:57+00:00",
- "lastModified": "2024-06-10T19:33:18+00:00",
- "version": "W/\"d43b06bc97a786ab2c69f688f643d1b9bbc5e44e\""
}
}Create or update multiple Users and Roles within Stensul in a single request. Requires both users:write and roles:write scopes.
Required scopes: users:write AND roles:write
This endpoint is used to perform bulk operations on SCIM resources.
schemas (array of strings, required): An array of strings indicating the names of the SCIM schemas supported.
method (string, required) - The method for the operation.
bulkId (string, optional) - The ID for the bulk operation.
path (string) - The path for the operation.
data (object, required) - The data for the operation.
schemas (array, required) - An array of strings.
userName (string, required) - The username for the operation.
name (object) - The name object.
givenName (string) - The given name.
familyName (string) - The family name.
active (boolean) - The status of the operation.
emails (array of objects, optional): Included for compatibility with other SCIM implementations. Stensul uses userName as the user's email address; this field is ignored if userName is present.
value (string): The email address.
type (string): The type of email (e.g. work).
primary (boolean): Indicates whether this is the primary email.
groups (array) - An array of groups that the user belongs to.
value (string) - The id of the group.entitlements (array, required): An array of library permissions the user has access to.
value (string, required): The name of the permission.| Content-Type | string Example: application/scim+json |
| schemas | Array of strings |
Array of objects |
{- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:BulkRequest"
], - "Operations": [
- {
- "method": "POST",
- "bulkId": "bulk-id",
- "path": "/Users",
- "data": {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "userName": "johndoe@example.com",
- "name": {
- "givenName": "John",
- "familyName": "Doe"
}, - "emails": [
- {
- "primary": true,
- "value": "johndoe@example.com",
- "type": "work"
}
], - "active": true,
- "externalId": "externalId1",
- "groups": [
- {
- "value": "66f2ec8ee33d1435f40af976"
}
], - "entitlements": [
- {
- "value": "access_library_test"
}
]
}
}, - {
- "method": "PUT",
- "bulkId": "bulk-id",
- "path": "/Users/68c9bfa8ce959b97b1048565",
- "data": {
- "schemas": [
- "urn:ietf:params:scim:schemas:core:2.0:User"
], - "userName": "janedoe@example.com",
- "name": {
- "givenName": "Jane",
- "familyName": "Doe"
}, - "emails": [
- {
- "primary": true,
- "value": "janedoe@example.com",
- "type": "work"
}
], - "active": true,
- "externalId": "externalId1",
- "groups": [
- {
- "value": "66f2ec8ee33d1435f40af976"
}
], - "entitlements": [
- {
- "value": "access_library_test"
}
]
}
}
]
}{- "schemas": [
- "urn:ietf:params:scim:api:messages:2.0:BulkResponse"
], - "Operations": [
- {
- "method": "POST",
- "bulkId": "bulk-id",
- "status": 201
}, - {
- "method": "PUT",
- "bulkId": "bulk-id",
- "status": 200
}
]
}Returns which actions the authenticated user (derived from an authorization_code token) can perform on the given resource type. This is informational only: it does not replace the actual authorization checks enforced by the corresponding write/read endpoints.
An authorization_code token must have the capabilities:read scope.
Userless client_credentials callers are allowed through
but receive false for every capability, since there is no authenticated user's
permissions to report.
No request body parameters are required for this endpoint.
| resource[type] required | string Enum: "module" "email" "library" Example: resource[type]=module The type of resource to check capabilities for. |
| resource[id] | string Example: resource[id]=123 Optional identifier of the specific resource instance. For |
| Content-Type | string Example: application/json |
| Accept | string Example: application/json |
{- "resource": {
- "type": "module",
- "id": "123"
}, - "capabilities": {
- "module.read": true,
- "module.publish": true,
- "module.delete": false
}
}