---
name: comparemyloan-signup
description: Sign a person up for a free human second look at their mortgage quote or Loan Estimate at comparemyloan.com, with the person's yes and a code only they can read. Two curl calls, no keys, no account, no installs.
license: MIT-0
version: 2026-11-03
homepage: https://comparemyloan.com/agents
---

# comparemyloan sign-up

comparemyloan is a US service. A human there checks the rate, the points and
every lender fee on a person's mortgage quote or Loan Estimate against this
week's market and tells the person, by text or email, what is normal and what
is worth a question. It is free for the person. comparemyloan is not a lender,
does not make credit decisions, does not negotiate, lock rates or take
applications, never shares the person with a lender unless the person asks for
that themselves, and pays nothing to any assistant or its maker.

This skill starts that sign-up for the person. Only a code sent to the
person's own phone or inbox, and read back by the person, makes it a lead.
Until the code comes back, nobody at comparemyloan is alerted and nobody contacts the person.

## When it fits

The person has a mortgage quote or a Loan Estimate in hand (refinance or
purchase, any US lender) and wants to know whether it is good before they tell
the lender to go ahead. It does not fit a person who only wants a rate quoted:
comparemyloan quotes no rates.

## Step 1: the person sees these words and says yes

Show the person these words exactly, and go on only on a clear yes:

> comparemyloan will have a person check every number on your mortgage quote or Loan Estimate, free. comparemyloan is not a lender, no lender sees your file unless you say so, and nothing is sold. To start, they send a code to your phone or inbox. Giving that code to your assistant says yes to texts or emails from comparemyloan about your request. Reply STOP to any text, or write to help@comparemyloan.com, to end them.

Their sha256 is `c53daaa2d416fd83544ea54faec55515a69645d8f833664cb931f803ebbf442d`
(version 2026-11-03). The start call carries that hash as `consent.shownWords`.

Ask the person which they prefer, a text or an email, and for the number or
address; the quoted rate; the loan amount; the property's ZIP code.

## Step 2: start

```bash
curl -sS https://comparemyloan.com/api/agent/signups \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <any string you will reuse on a retry>" \
  -d '{
    "channel": "sms",
    "phone": "<the person'"'"'s US mobile number>",
    "loan": { "purpose": "refinance", "state": "TX", "balance": 380000, "rate": 6.75, "zip": "78701" },
    "consent": {
      "terms": true,
      "termsVersion": "2026-08-24",
      "privacyVersion": "2026-08-24",
      "shownWords": "c53daaa2d416fd83544ea54faec55515a69645d8f833664cb931f803ebbf442d"
    },
    "agent": { "name": "<your name>" }
  }'
```

For email, send `"channel": "email"` and `"email": "<address>"` instead of
`phone`. `loan.rate` is a number (6.75, not "6.75%"); `loan.purpose` and
`loan.state` are optional. The Terms and Privacy versions are printed at the
foot of https://comparemyloan.com/terms.html and /privacy.html.

A `202` answers `{"id": "...", "status": "awaiting_code", "channel": "sms",
"resendAfter": 30, "expiresAt": "...", "continue_url": "..."}`. Keep the `id`.

The person's phone now shows a text that names the code. Only they can read
it. Ask them for the six digits.

## Step 3: confirm

```bash
curl -sS https://comparemyloan.com/api/agent/signups/<id>/confirm \
  -H "Content-Type: application/json" \
  -d '{ "code": "<the six digits the person read back>" }'
```

A `200` answers `{"status": "completed", "next": "...", "upload": {...}}`.
Tell the person the `next` sentence. From here comparemyloan handles the
person directly, and they can reply STOP at any time.

If the person already gave you their Loan Estimate, the `upload` block is a
30-minute credential for it:

```bash
curl -sS https://comparemyloan.com/api/sheet/upload \
  -H "Authorization: Bearer <upload.token>" \
  -F "files=@loan-estimate.pdf"
```

This is optional. A Loan Estimate can also be texted or emailed back later.

## Answers that are not a yes

Every answer is JSON with `error` and a plain `message`.

| error | status | what to do |
|---|---|---|
| `wrong_code` | 400 | Not the code; `attemptsLeft` says how many tries remain. |
| `too_many_attempts` | 429 | Five wrong codes closed this code. The same start again sends a fresh one. |
| `expired` | 410 | The code or the sign-up expired. The same start again sends a fresh code while the sign-up lives; a new `Idempotency-Key` starts a new one. |
| `resend_too_soon` | 409 | A fresh code was asked for within 30 seconds of the last. `Retry-After` is the wait. |
| `too_many_codes` | 429 | `Retry-After` is the wait in seconds before the same start can go again. |
| `too_many_requests` | 429 | Too many calls from this connection this hour. `Retry-After` is the wait. |
| `unknown` | 404 | No sign-up with that id. |
| `requires_escalation` | 409 | `reason` says why: `sms_capture_off` / `email_verify_off` (that channel is closed to assistants right now), `not_mobile` (a landline or an internet line: no text can reach it), `high_risk_number` / `lookup_unavailable` (the number cannot be texted right now). When `offer` is `email`, retry the same start with `"channel": "email"`. Otherwise send the person to `continue_url` to finish on the form. |
| `not_us` | 422 | US borrowers only: a US mobile number and a property in the US. |
| `operator_ceiling` | 429 | Only for signed requests: the maker's hourly share is used. Wait the seconds in `Retry-After`. |
| `agent_door_off` | 404 | The door is closed. The person can use the form at https://comparemyloan.com/. |
| `bad_*`, `consent_required`, `missing_idempotency_key` | 422 | A field is missing or malformed; `message` says which. `consent_required` carries `expected`: the versions and the hash the start has to name. |

A number or address already known to comparemyloan answers exactly as a new
one does. Nothing in these calls says whether a person is already on file.

## Limits

Ten codes an hour and 25 a day to one number, three an hour and five a day to
one address, 30 texted codes an hour from one connection; one code at a time
per sign-up, 30 seconds apart; US mobile numbers only; a sign-up nobody
confirms expires after 24 hours. A number that replied STOP, or an address
that asked for no more email, gets no code: the start answers like any other. The full page: https://comparemyloan.com/agents
