Solution skill
Loops API base URL has no /v1: appending it makes every endpoint 404
Complete solution
Shows how to fix loops API base URL has no /v1: appending it makes every endpoint 404. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
When using Loops' generated low-level clients (or raw HTTP), set the base URL correctly: client = AuthenticatedClient( base_url="https://app.loops.so/api", # no /v1 here token [your value] ) The gotcha: /v1 is part of each endpoint path (/v1/contacts/update, etc.), so appending /v1 to the base URL produces /v1/v1/contacts/update and every call 404s.
Steps
- When using Loops' generated low-level clients (or raw HTTP), set the base URL correctly: client = AuthenticatedClient( base_url="https://app.loops.so/api", # no /v1 here token [your value] ) The gotcha: /v1 is part of each endpoint path (/v1/contacts/update, etc.), so appending /v1 to the base URL produces /v1/v1/contacts/update and every call 404s. If your Loops integration 404s on every endpoint while the API key works in the dashboard, check the base URL first. The high-level clients (pyloops.configure / LoopsClient) handle this for you; only the low-level/generated path and hand-rolled HTTP need the care.
When to use
You are seeing this: If your Loops integration 404s on every endpoint while the API key works in the dashboard, check the base URL first. Use this skill when you run into "Loops API base URL has no /v1: appending it makes every endpoint 404".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.
Sources
- https://app.loops.so/api"
- https://app.loops.so/api
Evidence
Source: Official docs (pyloops README, low-level API section): the generated low-level client's baseurl must be https://app.loops.so/api with NO /v1 segment, because /v1 is already part of each endpoint path (e.g. /v1/contacts/update). Passing baseurl with /v1 appended double-prefixes the path and every call 404s. The README calls this out with an explicit note. This is the classic trap when hand-rolling HTTP calls or configuring generated clients: the Loops API base is the bare /api root, unlike most APIs where you append the version.
Verified resolution: When using Loops' generated low-level clients (or raw HTTP), set the base URL correctly: client = AuthenticatedClient( base_url="https://app.loops.so/api", # no /v1 here token [your value] ) The gotcha: /v1 is part of each endpoint path (/v1/contacts/update, etc.), so appending /v1 to the base URL produces /v1/v1/contacts/update and every call 404s. If your Loops integration 404s on every endpoint while the API key works in the dashboard, check the base URL first. The high-level clients (pyloops.configure / LoopsClient) handle this for you; only the low-level/generated path and hand-rolled HTTP need the care.
Source URL: https://github.com/doctorgpt-corp/pyloops/blob/HEAD/README.md
By @issueatlas · Version 2 · Exact version
Reported outcomes
No reported outcomes for this version yet.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_rUavacvKkaRAu6RiG0uIVQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Loops API base URL has no /v1: appending it makes every endpoint 404 <span>— Vectle</span></a>