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:
GETorPOST— 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:
| Where | Example |
|---|---|
| Path (recommended) | GET https://betacalco.com/quote-follow-up-link/getLink/AAE8274 |
| Query string | GET https://betacalco.com/quote-follow-up-link/getLink?serial=AAE8274 |
| JSON body | POST 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"
}
| Field | Meaning |
|---|---|
success | true on success, false on any error. Branch on this. |
serial | The quote serial the link is for (echoed back). |
url | The link to send. This is the whole point — put it in your message. |
tokenLifetimeDays | How many days the link stays valid (0 = never expires). |
expiresAt | When 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": ["…"] }):
| Status | Meaning | What to do |
|---|---|---|
400 | No serial was supplied | Fix the request — you didn't send a serial. |
401 | Secret missing or wrong | Check your X-Bc-Api-Key. |
404 | No quote for that serial (or it has no assigned agent) | Skip it — there's no one to send a link to. |
500 | Server-side problem | Retry later; tell Beta-Calco if it persists. |
4. What the link actually is (so you use it correctly)
- The
urlis 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:
- Method:
GET - URL:
https://betacalco.com/quote-follow-up-link/getLink/{{ $json.serial }}(swap{{ $json.serial }}for wherever your serial comes from). - Authentication: Generic Credential Type → Header Auth. Create a Header Auth credential with
- Name:
X-Bc-Api-Key - Value: the secret from Beta-Calco.
- Name:
- 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/401go 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
tokenLifetimeDaysdays — request a fresh one for each send - Questions / a secret: contact your Beta-Calco technical contact.