https://api.valendata.com/apify. Code that uses apify-client, and HTTP calls from n8n or Make, keep working when you change two things:
- the base URL, to
https://api.valendata.com/apify; - the token, to a Valendata API key (
vd_sk_...).
Python
apify-client adds /v2 to api_url itself.
JavaScript
n8n, Make and plain HTTP
Use an HTTP Request step. The most common call runs an actor and answers with its items in one request:?token= or as Authorization: Bearer vd_sk_.... Write the actor as username~name in a URL; a / there would split the path.
Run one of your own skills
Use the skill’s slug as the actor id. The run input is the skill’s inputs, by their names.GET /apify/v2/acts lists the actors you can run: the ones below, then your skills.
Actors that run on Valendata
Fields an actor returns on Apify that the Valendata skill does not read, such as a place’s
website or categoryName, are present and null. Nothing is guessed.
Some inputs are not supported yet, and the run is refused with a 400 that says what to send instead:
- Google Maps: one search term per run (start one run per term), and no Maps URLs or place ids as input.
- Amazon: search URLs or search words, not product pages.
maxCrawlPages reads at most 100 pages.
Any other actor answers 404 until it is on Valendata. Bring it over with POST /v1/import/apify, or create a skill that does the same.
Endpoints
All paths are underhttps://api.valendata.com/apify. Answers use Apify’s shapes: objects inside {"data": ...}, and errors as {"error": {"type", "message"}}.
/v2/actors/... answers the same as /v2/acts/....
Items accept format (json, jsonl, csv, xlsx), offset, limit, desc, fields, omit, clean, skipEmpty, skipHidden, flatten, attachment, bom, delimiter and skipHeaderRow. Paging is in the X-Apify-Pagination-* headers.
The run-sync calls wait up to 15 minutes. A run still going then answers 408; it keeps running, and you can read it later by its id. A run that failed answers 400 with the reason.
Run statuses are Apify’s: READY, RUNNING, SUCCEEDED, FAILED, ABORTING, ABORTED. A run that returned some rows with a note counts as SUCCEEDED.
Cost
Each run costs what the skill or service behind it costs on Valendata, andusageTotalUsd is that amount in dollars (credits × $0.01). See credits.
maxTotalChargeUsd caps a run: Valendata turns it into a row limit from what a row has cost on that skill’s recent runs. A cap below a run’s least price is refused with 402 before anything runs. A run is refused with 402 when your balance cannot pay to start it.
memory, timeout and build are accepted and shown on the run, but they do not change how a skill runs.
Webhooks
Ad-hoc webhooks work as on Apify: passwebhooks (base64-encoded JSON) when you start a run. Valendata sends ACTOR.RUN.CREATED, ACTOR.RUN.SUCCEEDED, ACTOR.RUN.FAILED, ACTOR.RUN.ABORTED and ACTOR.RUN.TIMED_OUT, with Apify’s default body (userId, createdAt, eventType, eventData, resource) or your payloadTemplate. Each delivery is signed with X-Valendata-Signature, like every Valendata webhook.
Import an actor
POST /v1/import/apify takes the actor’s apify.com URL or id, and the input you use today:
- If the actor already runs on Valendata, the answer has
kind: "alias"and the equivalent calls, with your input translated. Nothing is created. - Otherwise a skill is created from the actor’s public description, with its output fields as the new skill’s columns. The answer has
kind: "creation"and astatus_urlto poll, as with creating a skill, and it costs the same. Passstart_urlwhen the input names no page.

