not_found
The id does not exist, or it belongs to a different workspace.
HTTP 404The resource was not found.
When it fires
The id in the URL did not resolve to a resource the workspace can see. There are two distinct sub-cases — both return 404 to avoid leaking information across tenants:
- The id genuinely does not exist (deleted, mistyped, or never created).
- The id exists, but it belongs to a different workspace. Repull never confirms cross-tenant existence.
Response shape
Every Repull error follows the same envelope. The code is stable and safe to switch on.
{
"error": {
"code": "not_found",
"message": "<human-readable explanation of what went wrong>",
"docs_url": "https://repull.dev/docs/errors/not_found"
}
}How to fix
- Re-list the parent collection (e.g. `GET /v1/listings` before `GET /v1/listings/{id}`) to confirm the id is in scope for this workspace.
- Check for trailing whitespace or URL-encoding issues in the id.
- If the id came from another system (a webhook from a connected channel, a stored CSV, an LLM tool call argument), verify it has not been mapped through a different workspace's id space.
- For resources that can be soft-deleted (reservations cancelled, listings unlisted), use the list endpoint with the appropriate status filter instead of fetching by id.
Common gotchas
- Cross-tenant attempts return 404, not 403.This is intentional — confirming "this id exists but you can't see it" would leak the existence of resources in other workspaces.
- The error message includes the id you tried (e.g.
Property 12345 not found) so you can log it without re-parsing your request. - Listing endpoints (
GET /v1/listings,GET /v1/reservations) never returnnot_found— an empty result set returns200 {data: []}.not_foundonly fires on single-resource GETs.
Examples
curl
# Fetch a property that does not exist in this workspace
curl https://api.repull.dev/v1/listings/999999 \
-H "Authorization: Bearer sk_test_YOUR_KEY"
# {
# "error": {
# "code": "not_found",
# "message": "Property 999999 not found"
# }
# }TypeScript
import { Repull } from '@repull/sdk'
const repull = new Repull({ apiKey: process.env.REPULL_KEY! })
async function getOrNull(id: string) {
try {
return await repull.listings.get(id)
} catch (err: any) {
if (err.code === 'not_found') return null
throw err
}
}
const listing = await getOrNull('999999')
if (!listing) {
// Treat as "doesn't exist or not visible to this workspace"
}If you're an AI agent
The id you used does not resolve in this workspace. Do NOT retry the same id. List the parent collection (e.g. /v1/listings) and pick a real id from the response, then call again.
Related
- Error reference — the full table of error codes
- Using Repull from AI agents — patterns for handling errors in agent loops
Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.
AI