curl --request POST \
--url https://connect.tryverso.ai/api/connect-native \
--header 'Content-Type: application/json' \
--data '
{
"action": "start",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"device": {
"platform": "ios",
"osVersion": "17.5",
"sdkVersion": "0.1.0",
"model": "iPhone15,2",
"appVersion": "3.2.0"
}
}
'{
"captureNonce": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clientSecret": "<string>",
"provider": "chatgpt",
"loginUrl": "https://chatgpt.com/auth/login",
"cookieDomain": "chatgpt.com",
"cookieName": "__Secure-next-auth.session-token",
"sessionUrl": "https://chatgpt.com/api/auth/session",
"expiresInSeconds": 3600
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}Native connect (mobile SDKs)
The two calls the mobile SDKs make to connect an account from inside an app. With an SDK you never call this endpoint yourself; it is documented for teams building on a platform without an SDK yet.
start verifies and consumes a connect link, creates the user record if
needed, sends connect.started, and returns where to log in and which
cookie to watch, plus a one-time capture credential (captureNonce and
clientSecret, valid one hour).
capture hands the provider session read from the app’s WebView to
Verso, which encrypts it, creates the connection (folding a previous
connection of the same account into it), sends connection.created and
starts the first sync. A capture sent before the provider session is
usable (no accessToken yet) returns waiting; retry every few seconds.
No API key: the link’s token authenticates start, and the capture
credential authenticates capture. The app and user come from the
link, never from the request.
curl --request POST \
--url https://connect.tryverso.ai/api/connect-native \
--header 'Content-Type: application/json' \
--data '
{
"action": "start",
"token": "eyJhbGciOiJIUzI1NiJ9…",
"device": {
"platform": "ios",
"osVersion": "17.5",
"sdkVersion": "0.1.0",
"model": "iPhone15,2",
"appVersion": "3.2.0"
}
}
'{
"captureNonce": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clientSecret": "<string>",
"provider": "chatgpt",
"loginUrl": "https://chatgpt.com/auth/login",
"cookieDomain": "chatgpt.com",
"cookieName": "__Secure-next-auth.session-token",
"sessionUrl": "https://chatgpt.com/api/auth/session",
"expiresInSeconds": 3600
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}Body
- Option 1
- Option 2
Response
The start data, or the capture outcome (connected or waiting).
- Option 1
- Option 2
- Option 3
Identifies this connect attempt in capture.
Returned once. Proves in capture that the caller is the SDK instance that started the flow.
"chatgpt"
Where to send the WebView.
"https://chatgpt.com/auth/login"
"chatgpt.com"
The session cookie to watch. The provider may split it into <cookieName>.0, <cookieName>.1, … chunks; concatenate them in order.
"__Secure-next-auth.session-token"
Fetched from inside the WebView once the cookie is present; its JSON carries accessToken, user.id and user.email.
"https://chatgpt.com/api/auth/session"
Lifetime of the capture credential.
3600