Skip to main content

Beta-Calco — Quote Follow-Up Link API (integration guide)

Last reviewed: 2026-07-24 · Audience: whoever builds the n8n (or other) automation that consumes this API. What it does: you give it a quote serial, it gives you back a ready-to-send follow-up link for that quote. Drop the link into an email/SMS/WhatsApp step and the recipient (the quote's agent) can update the quote's status, stage, dates and comments — no login, no password.


1. The endpoint

GET https://betacalco.com/quote-follow-up-link/getLink/{serial}
  • Method: GET or POST — either works.
  • {serial} is the Beta-Calco quote serial, e.g. AAE8274.
  • Returns JSON.

You can pass the serial three ways — pick whichever is easiest in your tool:

WhereExample
Path (recommended)GET https://betacalco.com/quote-follow-up-link/getLink/AAE8274
Query stringGET https://betacalco.com/quote-follow-up-link/getLink?serial=AAE8274
JSON bodyPOST https://betacalco.com/quote-follow-up-link/getLink with body { "serial": "AAE8274" }

2. Authentication

Send the shared secret Beta-Calco gives you in a request header:

X-Bc-Api-Key: <the-secret>

(Authorization: Bearer <the-secret> is also accepted if that's easier in your tool.)

Always send the header. If Beta-Calco hasn't set a secret yet the endpoint is open and the header is simply ignored; the moment they set one it becomes required, and anything without it gets 401. Sending it from day one means nothing breaks when they turn auth on.

Put the secret in a header, never in the URL — URLs end up in server/access logs.


3. The response

Success — HTTP 200:

{
"success": true,
"serial": "AAE8274",
"url": "https://betacalco.com/quote-follow-up/AAE8274?token=djI6NjM2OTA3ODU6UVVG...",
"tokenLifetimeDays": 5,
"expiresAt": "2026-07-15T09:04:55+00:00"
}
FieldMeaning
successtrue on success, false on any error. Branch on this.
serialThe quote serial the link is for (echoed back).
urlThe link to send. This is the whole point — put it in your message.
tokenLifetimeDaysHow many days the link stays valid (0 = never expires).
expiresAtWhen the link expires (ISO-8601), or null if it never does. Roughly "now + lifetime".

Errors — the HTTP status tells you what went wrong; the body is always the same shape ({ "success": false, "errors": ["…"] }):

StatusMeaningWhat to do
400No serial was suppliedFix the request — you didn't send a serial.
401Secret missing or wrongCheck your X-Bc-Api-Key.
404No quote for that serial (or it has no assigned agent)Skip it — there's no one to send a link to.
500Server-side problemRetry later; tell Beta-Calco if it persists.

  • The url is a magic link. Whoever opens it can review and update that quote's agent's own open quotes in the follow-up tool — and nothing else on the site (it is not a login: no account, no checkout, no portal access).
  • Because it grants that access, treat the link as a secret: send it to the intended agent only. Don't post it in public channels.
  • It expires after tokenLifetimeDays (default 5). If you send reminders over time, call the API again each time to get a fresh link rather than reusing an old one.
  • Each call returns a freshly minted link; there's no limit on how many you request for a serial.

5. Copy-paste examples

curl (header auth, serial in path):

curl -sS "https://betacalco.com/quote-follow-up-link/getLink/AAE8274" \
-H "X-Bc-Api-Key: THE_SECRET"

curl (POST with JSON body):

curl -sS -X POST "https://betacalco.com/quote-follow-up-link/getLink" \
-H "X-Bc-Api-Key: THE_SECRET" \
-H "Content-Type: application/json" \
-d '{"serial":"AAE8274"}'

6. Wiring it up in n8n

Use the built-in HTTP Request node:

  1. Method: GET
  2. URL: https://betacalco.com/quote-follow-up-link/getLink/{{ $json.serial }} (swap {{ $json.serial }} for wherever your serial comes from).
  3. Authentication: Generic Credential Type → Header Auth. Create a Header Auth credential with
    • Name: X-Bc-Api-Key
    • Value: the secret from Beta-Calco.
  4. Response: leave as JSON. The link is at {{ $json.url }} — reference it in your next step (e.g. the Send Email node's body).

Error handling — read this. By default the HTTP Request node treats any non-2xx response as a failure and routes it to the node's error output. That's usually what you want (a 404 really is "no such quote"). Two options:

  • Regular HTTP Request node: either let 404/401 go to the error branch, or turn on Options → Response → Never Error and branch on {{ $json.success }} / {{ $json.statusCode }} yourself.
  • AI-agent "HTTP Request Tool" node: this one hides the response body on non-2xx, so you'd lose the error detail — turn on Never Error and branch on success. (The body is the same shape whether the call succeeded or failed, so this works cleanly.)

Suggested flow:

Trigger (e.g. new "cold" quote / schedule)
→ HTTP Request (this API — get the link)
→ IF {{ $json.success }} is true
→ Send Email/SMS (body includes {{ $json.url }})
→ (else) log / skip

7. Quick reference

  • URL: https://betacalco.com/quote-follow-up-link/getLink/{serial} (GET or POST)
  • Auth header: X-Bc-Api-Key: <secret> (always send it)
  • On success: use url
  • Branch on: success (and/or HTTP status)
  • Link expires: after tokenLifetimeDays days — request a fresh one for each send
  • Questions / a secret: contact your Beta-Calco technical contact.