sourcely/developers
SOURCELY API PREVIEW

Get search results

Check the status of a search and retrieve its sources.

Pass the job_id from Create a search and the same account's API key. When status is completed, your sources are ready. A key from another account receives 404 job_not_found.

usage.estimated_cost is present while the search is queued. actual_cost is filled when it finishes and deducted from your credits; it is 0 when the search fails. Both include your subscription discount, shown as usage.discount_percent. Polling does not add another charge.

GET/search/{job_id}

Authorization

BearerAuth
AuthorizationBearer <token>

Dashboard API key, sent as Bearer srcly_…

In: header

Path Parameters

job_id*Job Id

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/search/src_example"
{  "job_id": "src_example",  "status": "completed",  "result_type": "search",  "document": {    "source_ids": [      "src_paper_example"    ],    "scores": {      "src_paper_example": 1    },    "search_queries": [      "urban green space mental health outcomes",      "green space exposure depression anxiety"    ],    "page": 1,    "has_more": false,    "status": "done"  },  "claims": null,  "sources": {    "src_paper_example": {      "id": "src_paper_example",      "title": "Example study of urban green space and mental health",      "authors": [        "A. Example",        "B. Sample"      ],      "year": 2024,      "venue": "Example Research Journal",      "abstract": "Synthetic example used to illustrate the response structure.",      "url": "https://example.org/papers/urban-green-space",      "pdf_url": null,      "citation_count": null,      "score": 1,      "citations": null,      "enrichment": null,      "parsed_source": null    }  },  "usage": {    "currency": "USD",    "estimated_cost": 0.005,    "actual_cost": 0.005,    "discount_percent": 0,    "balance_after": null  },  "metadata": {    "requested_max_claims": 4,    "actual_max_claims": 0  }}

Reading the result

  1. Check status: a 200 response means the lookup succeeded, not necessarily the search.
  2. Read the ordered IDs from document.source_ids or each claim's source_ids.
  3. Resolve each ID in sources to retrieve the full source object.
  4. Use each track's scores for its ranking context. These are not confidence percentages.
  5. document.search_queries lists the search phrases that were written from your text and sent to the providers.
Synthetic example · SearchResult
{
  "job_id": "src_example",
  "status": "completed",
  "result_type": "search",
  "document": {
    "source_ids": [
      "src_paper_example"
    ],
    "scores": {
      "src_paper_example": 1
    },
    "search_queries": [
      "urban green space mental health outcomes",
      "green space exposure depression anxiety"
    ],
    "page": 1,
    "has_more": false,
    "status": "done"
  },
  "claims": null,
  "sources": {
    "src_paper_example": {
      "id": "src_paper_example",
      "title": "Example study of urban green space and mental health",
      "authors": [
        "A. Example",
        "B. Sample"
      ],
      "year": 2024,
      "venue": "Example Research Journal",
      "abstract": "Synthetic example used to illustrate the response structure.",
      "url": "https://example.org/papers/urban-green-space",
      "pdf_url": null,
      "citation_count": null,
      "score": 1,
      "citations": null,
      "enrichment": null,
      "parsed_source": null
    }
  },
  "usage": {
    "currency": "USD",
    "estimated_cost": 0.005,
    "actual_cost": 0.005,
    "discount_percent": 0,
    "balance_after": null
  },
  "metadata": {
    "requested_max_claims": 4,
    "actual_max_claims": 0
  }
}

The example is synthetic and shows a document-only search without citations or enrichment. Consult the model reference for every field, and enums for the exact state values.

Missing and failed searches

An unknown ID returns 404 with error.code: "job_not_found". Results live in Redis and survive an API-process restart. Completed and failed results expire one hour after completion by default; polling does not extend that window. Expired, deleted or lost records all return 404. Redis outages return 503 cache_unavailable, not 404.

A failed search currently returns 200 with status: "failed". Stored job-level failure details are not exposed in the current response model. See errors for the current and planned mappings.