Branding and customization

What you can brand in the Wingspan V3 API today, what V1 customization settings map to, and what isn't available yet.

This page tells you which parts of the contractor experience you can brand through the V3 API today, and what happened to the V1 customization settings.

Status in V3

The V3 customization resource (GET and PATCH /v3/platform/customization) isn't available in the V3 API yet. Calls return 501 with code: NotImplemented. Contact support if you need to change email templates, terminology, or other branding for your Accounts. Each Account's logo, brand color, and support contact are set on its profile instead (see Account profile).

That means these V1 settings from GET /users/customization/{id} have no direct V3 endpoint yet:

V1 settingWhat it controlled
branding (name, primaryLogoUrl, secondaryLogoUrl, url)Company name, logos, and website shown to contractors
emailCustomization (footer, logos, styles, templates.contractorInvite)The look and wording of Wingspan emails
support (documentation URLs, support emails)Where contractors are sent for help
organizationSettings.defaultNewPayeeParentAccountId and defaultNewPayerParentAccountIdWhich parent new payee or payer accounts were placed under
inheritanceStrategy.organizationAccountConfigWhether a child account inherited its parent's customization

What you can set today

Account profile: logo, brand color, and support contact

Every Account has a presentation profile. Update an Account sets these profile fields:

FieldWhat it's for
logoUrlA public URL for your logo.
brandColorYour brand color.
supportEmailThe business support email shown in the ACH and card authorization terms your customers accept.
supportPhoneA support phone number.
locale, timezoneThe Account's locale and time zone.

Important: profile is replaced as a whole. If you send profile, send every profile field you want to keep, not only the one you're changing. Read the Account first with GET /v3/platform/accounts/{accountId}, change the field, then send the complete object. Leaving profile out of the request leaves it unchanged.

curl -X PATCH https://api.wingspan.app/v3/platform/accounts/Ap4tYs8KqW2nLm6xRb1cVe \
  -H "Authorization: Bearer $WINGSPAN_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "profile": {
      "logoUrl": "https://www.example.com/northwind-logo.png",
      "brandColor": "#1F6FEB",
      "supportEmail": "[email protected]",
      "supportPhone": "+1 555 010 0199",
      "locale": "en-US",
      "timezone": "America/Chicago"
    }
  }'

Reading and updating an Account needs the users.account:read and users.account:write scopes.

profile is for display only. The response can also show older identity fields such as displayName, individual, company, and logoFileId, which are kept for compatibility. Don't set identity there: the legal name, address, and tax ID of record live on the Account's compliance entity. See Tax information.

A message in the invite email

When you invite a payee, add up to 2,000 characters of plain text in customMessage on Invite a payee. The message appears in the invitation email Wingspan sends.

curl -X POST https://api.wingspan.app/v3/payments/payees/Py3mQw7kLx2tRb9nVd4sHa/invite \
  -H "Authorization: Bearer $WINGSPAN_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{ "customMessage": "Welcome to Northwind Staffing. Set up payments so we can pay you for your first shift." }'

Team-member invites (POST /v3/platform/persons/{personId}/invite) accept a message and a redirectUri for where the person lands after signing up.

Your own screens

If you need full control over what contractors see today, build the screens yourself and use the API underneath. See Embed Wingspan in your app for which steps you can collect through the API and which run in Wingspan-hosted views.

Related pages


Did this page help you?