---
title: "Start connector login"
method: POST
path: "/api/connectors/login"
---

# Start connector login

`POST /api/connectors/login`

## Request

- Base URL: `https://reduck.ai`
- URL: `https://reduck.ai/api/connectors/login`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Open a Reduck cloud browser at a site's sign-in page for a PERSON to sign into. Returns `signInUrl`, a Reduck page that shows the live browser — hand it to whoever holds the account on that site. When they sign in, the connector for each host is stored on its own; poll `getConnectorLogin` to see it land. Use this when there is no Reduck extension to upload cookies from. `hosts` defaults to the login URL's own site. The browser is created when the page is opened and lives ~10 minutes from then. With `profile`, the connectors are stored for that end-user; `endUserLink` then also answers `endUserUrl`, a page the end-user signs in on without a Reduck account. An end-user's sign-in never answers what they typed.

## Request body

- object
  - `loginUrl` string, uri, required
  - `hosts` string[]
  - `sso` boolean
  - `ssoAccount` string
  - `profile` string: The end-user this connector is kept for, in your own naming (for example your user id). Omit, or leave empty, for your own account's connectors. Only an API key or an OAuth token can read or create an end-user's connector.
  - `label` string: The label of the connector the sign-in stores into. Needed when the site already holds several connectors for the profile; without it the site's only one is refreshed.
  - `endUserLink` boolean: Also answer `endUserUrl`: a link for the end-user of `profile` to sign in on, with no Reduck account. Anyone holding it drives this one sign-in browser until it ends.

## Response `200`

OK

- object
  - `loginId` string, required: The sign-in's id. Nothing has to be called with it: it identifies this one in a log.
  - `signInUrl` string, required: Where the person signs in: a Reduck page showing the live browser. Give it to the account's owner — the page opens for them and for nobody else, so a link that leaks is a dead end rather than somebody else's browser.
  - `loginUrl` string, required: Where the browser was sent, echoed back.
  - `hosts` string[], required: The sites that become connectors, canonical — the login URL's own when none were named.
  - `expiresAt` string, required: When the browser closes on its own, storing whatever the jar holds by then.
  - `profile` string: The end-user profile the connectors are stored into; absent for your own account.
  - `endUserUrl` string: With `endUserLink`: the page the end-user signs in on, no Reduck account needed. It opens this one sign-in only, and stops working when the sign-in ends.

## Other responses

- `400`: Invalid request
- `401`: Not authenticated
- `403`: Out of cloud browser time for this period, or an end-user's sign-in was started from a browser session instead of with an API key or an OAuth token.
- `409`: A site already holds several connectors for the profile and the sign-in names none: give it a `label`.
- `429`: Too many sign-ins already open on this account.
- `502`: The browser could not be opened.
- `503`: This environment stores no connectors, or provisions no browsers.

---

[API](https://skmtc.dev/reduck/apis/reduck-api.md) · [All operations](https://skmtc.dev/reduck/apis/reduck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reduck/apis/reduck-api/revisions/a573b91206d6?raw)
