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

  1. 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.
  2. Check for trailing whitespace or URL-encoding issues in the id.
  3. 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.
  4. 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 return not_found — an empty result set returns 200 {data: []}. not_found only 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.

Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.

AI