REST API overview
The /v1 resources and endpoints, authentication, pagination, error codes and request IDs, with a call example you can run.
Last updated 2026-10-23
The REST API lives at https://www.renewsell.com/v1. It authenticates with an API key and speaks JSON in both directions. This page lists every resource and endpoint, then the rules for pagination, errors and idempotency.
Authentication
Send an API key with every request; either header works:
curl "https://www.renewsell.com/v1/credits" \
-H "Authorization: Bearer $RENEWSELL_API_KEY"
curl "https://www.renewsell.com/v1/credits" \
-H "x-api-key: $RENEWSELL_API_KEY"
Create keys on the API keys page, described in API keys. A key is 64 letters with no fixed prefix. A missing key returns 401; a key without the needed scope returns 403.
Resources and endpoints
| Resource | Endpoints |
|---|---|
| Targets | GET, POST /v1/targets; GET, PATCH, DELETE /v1/targets/{target} |
| Start and expand | POST /v1/targets/{target}/start, /cancel, /expand; GET, PATCH /v1/targets/{target}/sourcing |
| Items | GET /v1/targets/{target}/items; GET, DELETE /v1/targets/{target}/items/{id}; POST /v1/targets/{target}/items/{item}/enrichments/{enrichment}/retry |
| Searches | POST /v1/targets/{target}/searches; GET /v1/targets/{target}/searches/{id}; POST /v1/targets/{target}/searches/{id}/cancel |
| Enrichment columns | POST, GET /v1/targets/{target}/enrichments; GET, PATCH, DELETE /v1/targets/{target}/enrichments/{id}; POST …/{id}/cancel, …/{id}/retry |
| Events | GET /v1/events, GET /v1/events/{id} |
| Webhooks | POST, GET /v1/webhooks; GET, PATCH, DELETE /v1/webhooks/{id}; GET /v1/webhooks/{id}/attempts |
| Monitors | POST, GET /v1/monitors; GET, PATCH, DELETE /v1/monitors/{id}; GET /v1/monitors/{monitor}/runs, /runs/{id} |
| Imports | POST, GET /v1/imports; GET, PATCH, DELETE /v1/imports/{id}; PUT /v1/imports/{id}/upload?token=… |
| Credits | GET /v1/credits |
| Jobs | GET /v1/jobs/{id}; POST /v1/jobs/{id}/cancel |
| Connected accounts | GET /v1/connect/accounts |
| Customs data | POST /v1/customs/{operation}; the seven operations are in Customs data |
A few conventions:
{target}accepts a Target id or theexternalIdgiven at creation.- Ids are opaque strings; do not derive meaning from their prefix.
GET /v1/targets/{target}?expand=itemsembeds the first 100 items in the response.POST /v1/targetsstarts a search immediately by default. Send"start": falseto create a draft, then start it withPOST /v1/targets/{target}/start.- For imports,
POST /v1/importsreturns anuploadUrl;PUTthe CSV there. The upload uses a signed token and needs no API key. GET /v1/creditsreturns the plan, interval, available credits, reserved credits, monthly allowance and usage in the current period.
Pagination
Every list returns the same shape:
{
"data": [],
"hasMore": false,
"nextCursor": null
}
Page with limit and cursor. Defaults and ceilings:
| List | Default | Maximum |
|---|---|---|
| Targets | 25 | 100 |
| Items | 20 | 100 |
| Events | 25 | 200 |
| Webhooks, monitors, imports, delivery attempts | 25 | 200 |
nextCursor is opaque and only valid for the same list, account and filters; do not reuse it across lists.
Errors
Failures return an HTTP status and one shape:
{ "error": { "code": "not_found", "message": "Resource not found" } }
| Status | code | Meaning |
|---|---|---|
| 400 | invalid_request | Bad parameters or body |
| 401 | unauthorized | Missing or invalid key |
| 402 | insufficient_credits | Not enough credits |
| 403 | forbidden | The key lacks the scope this operation needs |
| 404 | not_found | No such resource, or it belongs to another account |
| 409 | conflict | The current state does not allow this |
| 429 | rate_limited | Too many requests; wait for Retry-After |
| 500 | internal_error | Server error |
| 502 | upstream code | The external data source failed |
| 503 | provider_unavailable, service_unavailable | The capability is currently unavailable |
| 504 | timeout | The request timed out |
Every response carries X-Request-Id. Include it when reporting a problem so the exact request can be found.
Idempotency
Billable customs operations require an Idempotency-Key header; retrying with the same key does not charge twice. Other writes have no idempotency key, so do not blindly retry after a timeout. Read the resource first to see whether the write landed.
Example
export RENEWSELL_API_KEY="your-api-key"
curl "https://www.renewsell.com/v1/targets?limit=10" \
-H "Authorization: Bearer $RENEWSELL_API_KEY"
An excerpt of the response:
{
"data": [
{
"id": "…",
"object": "target",
"status": "idle",
"title": "German outdoor furniture importers",
"createdAt": "2026-10-20T09:15:00.000Z"
}
],
"hasMore": false,
"nextCursor": null
}