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 setting | What 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 defaultNewPayerParentAccountId | Which parent new payee or payer accounts were placed under |
inheritanceStrategy.organizationAccountConfig | Whether 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:
| Field | What it's for |
|---|---|
logoUrl | A public URL for your logo. |
brandColor | Your brand color. |
supportEmail | The business support email shown in the ACH and card authorization terms your customers accept. |
supportPhone | A support phone number. |
locale, timezone | The Account's locale and time zone. |
Important:
profileis replaced as a whole. If you sendprofile, send every profile field you want to keep, not only the one you're changing. Read the Account first withGET /v3/platform/accounts/{accountId}, change the field, then send the complete object. Leavingprofileout 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
Updated 10 days ago