Connecting accounts
Show your name, logo and colours before the platform's consent screen, per link or for every connect in the workspace.
The welcome screen is a short page Pozy shows before sending the user to the platform. It says who is asking ("Acme wants to connect to your Instagram"), with your logo, and forwards to the platform's consent screen after about a second. Users who can see whose app is asking finish the connect more often.
The same branding carries through to the picker (Pages, locations, boards) and to the closing screen, so the whole flow looks like part of your product.
#Turn it on for one link
Add welcome=true and your brand to the connect call:
curl "https://api.pozy.ai/v1/connect/instagram?profileId=6650c1f2a9e4b7d3c8a1f0e2&welcome=true&brandName=Acme&logoUrl=https://acme.com/logo.png&primaryColor=%234F46E5&redirect_url=https://app.example.com/connected" \
-H "Authorization: Bearer $POZY_API_KEY"const res = await fetch("https://api.pozy.ai/v1/connect/instagram?profileId=6650c1f2a9e4b7d3c8a1f0e2&welcome=true&brandName=Acme&logoUrl=https:%2F%2Facme.com%2Flogo.png&primaryColor=%234F46E5&redirect_url=https:%2F%2Fapp.example.com%2Fconnected", {
headers: { Authorization: `Bearer ${process.env.POZY_API_KEY}` },
});
const data = await res.json();
if (!res.ok) throw new Error(data.error);
// data.authUrl now opens the welcome screen on pozy.airesp = requests.get(
"https://api.pozy.ai/v1/connect/instagram",
headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
params={
"profileId": "6650c1f2a9e4b7d3c8a1f0e2",
"welcome": "true",
"brandName": "Acme",
"logoUrl": "https://acme.com/logo.png",
"primaryColor": "#4F46E5",
"redirect_url": "https://app.example.com/connected",
},
timeout=30,
)The returned authUrl points at the welcome screen instead of the platform. Nothing else in your flow changes.
#Save it for the whole workspace
Save your branding once and every connect URL created with your keys shows it, with no extra parameters. Do it in the dashboard under Settings → White label, or with the API:
curl -X PUT "https://api.pozy.ai/v1/connect/welcome-screen" \
-H "Authorization: Bearer $POZY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"showByDefault": true,
"brandName": "Acme",
"logoUrl": "https://acme.com/logo.png",
"theme": {
"primaryColor": "#4F46E5",
"heading": "Connect {platform} to {brand}",
"trustLine": "{brand} only gets the access you approve. Disconnect any time.",
"cornerRadius": 12,
"font": "sans",
"termsUrl": "https://acme.com/terms",
"privacyUrl": "https://acme.com/privacy"
}
}'showByDefault is required. GET /v1/connect/welcome-screen returns what is saved. Changing the saved screen needs a workspace owner or admin, or a full-scope API key. Profile-scoped keys cannot change it.
#How the options combine
| You send | Result |
|---|---|
| Nothing, nothing saved | No welcome screen. authUrl goes straight to the platform. |
Nothing, saved with showByDefault: true |
The saved screen. |
welcome=true |
The screen, with your parameters over the saved branding (theme merged key by key). |
welcome=false |
No screen for this link, even if one is saved. |
handoff=true |
Always the screen: it is the first thing the phone shows. See Phone handoff. |
headless=true |
No screen, unless handoff=true. welcome=true with headless=true is rejected. |
Branding parameters (brandName, logoUrl, primaryColor, welcomeTheme) only apply when the screen is shown. Sending them on a link without the screen returns 400 invalid_field_value with param: welcome, so you notice instead of wondering why your logo is missing.
#Branding parameters
| Parameter | Limit |
|---|---|
brandName |
1 to 60 characters. |
logoUrl |
An http(s) URL, up to 2,048 characters. |
primaryColor |
#RRGGBB. URL-encode the # as %23 in a query string. |
welcomeTheme |
A JSON object with any of the theme keys below, up to 4,000 characters once encoded. |
#Theme keys
The same keys work in welcomeTheme on a link and in theme on the saved screen.
| Key | Type | Notes |
|---|---|---|
heading |
text, up to 120 | Default: "{brand} wants to connect to your {platform}". |
trustLine |
text, up to 200 | The reassurance line under the heading. |
consentLine |
text, up to 200 | What happens next on the platform. |
statusLine |
text, up to 200 | Shown while forwarding. Default: "Taking you to {platform}". |
buttonLabel |
text, up to 30 | The fallback button if the forward stalls. Default: "Continue to {platform}". |
successHeading, errorHeading |
text, up to 120 | Closing screen titles. |
successBody, errorBody |
text, up to 200 | Closing screen text. |
primaryColor, accentColor, pageColor, cardColor, textColor |
#RRGGBB |
Button, icons, page background, card background and text. |
cornerRadius |
integer, 0 to 24 | Card and button radius in pixels. |
font |
sans, serif or mono |
|
bannerStyle |
halftone, solid or plain |
The band at the top of the card. |
trustLineIcon, consentLineIcon |
shield, lock, link, check, user, sparkles or none |
|
hide |
list | Any of heading, trustLine, consentLine, statusLine, successBody, errorBody. |
termsUrl, privacyUrl |
https:// URL |
Linked in the footer. |
{brand} and {platform} in any text are replaced with your brand name and the platform's name. Unknown keys are rejected, so a typo fails loudly.
The screen is on view for about a second before it forwards. Put the reassurance in trustLine and keep heading to one line.
#Endpoints
| Endpoint | What it does |
|---|---|
GET /v1/connect/welcome-screen |
Get the saved welcome screen |
PUT /v1/connect/welcome-screen |
Save the welcome screen |
GET /v1/connect/{platform} |
Get OAuth connect URL |