Create external web link

POST /api/configuration/externalweblinks

Overview

Creates one external web link — a stored URL that the tenant's front-of-house and member-facing applications render as a link or tile. Each link hangs off a link type, which is the slot in the host application the link fills. Link types are reference data you do not create here; list them with Get all external web link types and send the id you want as linkTypeId.

The identifier is generated by the system — you cannot choose it. On success you get 201 Created with a body of {"externalWebLinkId": 1234}. No Location header is set, so read the id from the body. Keep it: it is the {id} for Update external web link and Delete external web links.

There is no idempotency key and no duplicate detection on URL or description, so retrying a request that already succeeded creates a second link with a new id. If a retry is ambiguous, list the existing links before retrying rather than sending the call again.

The only uniqueness rule is per link type. Each link type carries an allowMultiples flag. When it is false, the type may hold exactly one link, and a second create against it fails with 400 and External Web Link Type Id '{linkTypeId}' does not allow multiple entries. — note that this is a 400, not a 409. When allowMultiples is true, any number of links may share the type.

Validation runs before anything is saved, so a rejected request leaves no partial link.

Endpoint

POST {base_url}/api/configuration/externalweblinks

{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.

Request body

FieldTypeRequiredDescription
linkTypeIdinteger (int32)YesThe slot the link occupies in the host application, taken from the id of an entry returned by Get all external web link types. Link types are existing reference data; this endpoint will not create one for you. A value that matches no type — including the 0 you get by omitting the field — is rejected with 400 and External Web Link Type Id '{value}' not found. If the type has allowMultiples set to false and a link already uses it, the request is rejected instead with the "does not allow multiple entries" message.
descriptionstringYesThe human-readable label the host application shows for the link, rather than an internal note — this is the text a member or staff user sees. Maximum 255 characters. Must be present and non-empty; omitting it, or sending null or "", is rejected with 400 and Invalid request: No description provided.
urlstringYesThe destination the link opens. Must be an absolute URL with an http or https scheme — a relative path, a bare hostname such as www.example.com, or any other scheme (ftp:, mailto:) is rejected with 400 and URL '{value}' is not a valid URL. Maximum 255 characters. Must be present and non-empty, or you get 400 and Invalid request: No URL provided.
imagestringNoAbsolute URL of an icon or thumbnail the host application displays alongside the link. Optional — omit it, or send null or "", and the link is created with no image. When supplied it must be http or https and the path must end in .svg, .jpeg, .jpg, .gif or .png (case-insensitive); anything else, including a URL with no file extension, is rejected with 400 and Image URL '{value}' is not a valid URL. Maximum 255 characters.
targetTypestringYesHow the host application should open the destination. Must be present and non-empty, or you get 400 and Invalid request: No target type provided. The value is not validated beyond that, and whatever you send is saved, up to 40 characters — so a typo is accepted here and only surfaces as a broken link in the consuming application. Gladstone's own staff UI writes Internal or External; match those exactly unless the application you are integrating with expects something else.
domainBrowsingbooleanNoWhether the host application confines the user to the single page at url or lets them browse the wider domain from it. Not validated; saved as given. true corresponds to the full-domain option and false to single-page-only in Gladstone's staff UI. Omitting it or sending null saves false.
statusstringNoWhether the link is live. Accepts Active or InActive, matched case-insensitively but saved exactly as you sent it, so send the value in the casing your consuming application compares against. Omitting the field, or sending null or "", saves InActive — a created link is therefore hidden by default and needs a follow-up update, or an explicit "status": "Active" here, to appear. Any other value is rejected with 400 and Invalid request: Status must be either 'Active' or 'InActive'.

Sample request

cURL
curl -X POST '{base_url}/api/configuration/externalweblinks' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true' \
  -H 'Content-Type: application/json' \
  -d '{
  "linkTypeId": 12345,
  "description": "string",
  "url": "string",
  "image": "string",
  "targetType": "string",
  "domainBrowsing": true,
  "status": "string"
}'

Errors

Error bodies for the 400s below are a bare JSON string containing the message quoted in the "When" column — not a problem-details object. The exception is a malformed body, which returns a validation problem document (application/problem+json, RFC 7807) with an errors map keyed by field name. Check the shape before parsing.

StatusMeaningWhen
400Malformed request bodyThe JSON is unparseable, the body is missing entirely, or a value is of the wrong type — for example a non-numeric linkTypeId or a string domainBrowsing. Rejected before any other check runs; the body is a validation problem document.
400No description provideddescription is missing, null or empty. Message: Invalid request: No description provided.
400No target type providedtargetType is missing, null or empty. Message: Invalid request: No target type provided.
400No URL providedurl is missing, null or empty. Message: Invalid request: No URL provided.
400URL is not a valid absolute http/https URLurl is not parseable as an absolute URI, or its scheme is neither http nor https. Message: URL '{url}' is not a valid URL.
400Image URL is not a valid image URLimage is supplied but does not match the expected http/https form ending in .svg, .jpeg, .jpg, .gif or .png. Message: Image URL '{image}' is not a valid URL.
400Link type does not existNo external web link type has the supplied linkTypeId — including 0, the value you get by omitting the field. Message: External Web Link Type Id '{linkTypeId}' not found.
400Invalid statusstatus is supplied but is neither Active nor InActive (compared case-insensitively). Message: Invalid request: Status must be either 'Active' or 'InActive'.
400Link type already in use and does not allow multiplesThe link type exists with allowMultiples set to false and already has a link against it. Message: External Web Link Type Id '{linkTypeId}' does not allow multiple entries. This is the duplicate case, and it returns 400 rather than 409.
403ForbiddenThe token does not carry the scope this endpoint requires. Anonymous and member tokens are both rejected here; use an integration token.
500Internal server errorAn unexpected server-side failure after validation has passed, for example while saving the link. The body is empty; nothing is created. Safe to retry, but confirm the link was not created before you do, since retries are not deduplicated.

This page as markdown · All pages · llms.txt