---
title: "Save a login"
method: POST
path: "/v1/logins"
tags: ["logins"]
---

# Save a login

`POST /v1/logins`

## Request

- Base URL: `https://api.pomerado.ai`
- URL: `https://api.pomerado.ai/v1/logins`
- Auth: HTTP bearer

Saves a website login and returns its metadata.

- The values pass through this client and its model provider. Warn the user first, or send deliver "dashboard" with only site_url and label to get a Dashboard link where the person enters the login instead.
- A Personal account keeps one login per website, fixed to its identity after the first verified sign-in. A Business account may save several.

## Request body

- object
  - `site_url` string, required: The website, such as instacart.com or a pasted URL, saved as its HTTPS origin
  - `label` string: a string at most 200 character(s) long
  - `username` string: a string at most 1024 character(s) long
  - `email` string: a string at most 320 character(s) long
  - `phone` string: a string at most 64 character(s) long
  - `account_number` string: a string at most 128 character(s) long
  - `primary_identifier` 'username' | 'email' | 'phone' | 'account_number': The identifier it signs in with; else the first it holds in this order
  - `password` string: a string at most 16384 character(s) long
  - `sign_in` 'password' | 'code': code: the site sends a code each sign-in, so no password is saved
  - `date_of_birth` string: a string matching the pattern ^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
  - `zip` string: a string at most 10 character(s) long
  - `authenticator_secret` string: a string at most 4096 character(s) long
  - `recovery_codes` string[]: an array of at most 20 item(s)
  - `preferred_method` 'sms' | 'call' | 'email' | 'authenticator' | 'push' | 'recovery_code': A two-factor method
  - `deliver` 'dashboard': Return a Dashboard link where the person enters the login, so no secret reaches this client

## Response `200`

With deliver dashboard: where to finish

- DashboardDelivery
  - `dashboard_url` string, required: A signed-in Dashboard page where the person finishes this and sees the secret once

## Other responses

- `201`: The saved login
- `400`: invalid_request
- `401`: unauthorized, reauthentication_required
- `403`: forbidden, site_not_supported
- `409`: site_login_exists, login_identity_conflict, legacy_duplicate_saved_logins, saved_login_unsettled, login_in_use, login_save_in_progress
- `413`: request_too_large
- `422`: invalid_credential
- `500`: internal_error
- `503`: acceptance_unknown, temporarily_unavailable

---

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