Are you using our SaaS platform (Baserow.io) or self-hosting Baserow?
SaaS
What are the exact steps to reproduce this issue?
The __link_row_contains API filter is incorrectly returning an empty list. Here’s a reproducible test case:
Create a linked record in table 612667. This POST succeeds:
Bash
curl -X POST -H “Authorization: Token YOUR_API_TOKEN” -H “Content-Type: application/json” -d ‘{“field_4974792”:[75],“field_4974793”:[11],“field_4974794”:“2025-07-18”,“field_4974796”:3753645}’ “https://api.baserow.io/api/database/rows/table/612667/”
2. Retrieve the new record (e.g., ID 141) to prove the link to member 75 exists. This works:
I’m just using chat gpt to help me with my scripts but it’s saying that what you’re seeing is a bug.
There might be a workaround though that would serve the same purpose. I’m also using the SaaS version. I have a bunch of working scripts that involve linked fields, rollups, and lookups:
Linked field that connects Table A to Table B: Add link that Table B, using Table A Column A and Table B Column A to find matches
Rollups & Lookups: Copy value from Rollup/Lookup into Column A (works with numbers, Boolean, text, and choices (as long as the choices are already added)
I believe the issue you are having here si you’re using the link_row_contains filter, which searches for a string, isntead of the ink_row_has filter which uses a number.
Hi @britastic, thanks for jumping in and confirming it looked like a bug! I appreciate you offering to share your scripts.
We managed to get it working in the end. As another user (cwinhall) pointed out, the correct filter for a linked row’s ID is link_row_has.
We still ran into a final API bug where we couldn’t filter by a single_select (Status) field at the same time, so the final solution was to use the link_row_has filter to get the member’s records and then do the final status filtering in the browser.
Thanks again for your help and willingness to share your work!
Using link_row_has instead of link_row_contains was the correct way to filter by a linked row’s ID. That was the key piece of information I was missing.
Interestingly, that uncovered a second issue. When I tried to combine the working link_row_has filter with a filter on a single_select Status field (e.g., __equal=3753645), the API returned a 400 Bad Request error.
The final working solution was a hybrid approach:
Use link_row_has to get all of a member’s borrow records from the server (this is efficient).
Filter those results for the “Borrowed” status in the browser’s JavaScript.
Your suggestion was essential for finding the final solution. Thanks again!