API Documentation

One generic endpoint — pass a service_code to select the function you want. Pricing is identical to the website, whether you call it directly or through a chat interface.

Authentication

Create an API key from the console, then pass it in the Authorization header. Only Max and above subscription tiers can create keys.

Authorization: Bearer sk-your-key-here

Quick start

List available functions and pricing

curl https://silink.ai/api/v1/business/services \ -H "Authorization: Bearer sk-your-key-here"

OpenAPI spec / Postman

A trimmed spec covering only this API, with a payload schema per service_code. Import it straight into Postman / Insomnia / a client generator: /developer/openapi.json · /developer/openapi.yaml

MCP (for AI agent platforms)

The same functions are exposed as MCP tools over Streamable HTTP. Add a server in Claude Desktop / n8n / Clay or any MCP-capable platform with the URL below and the same API key as Bearer auth. Each function is one tool; call list_services first for prices and balance.

MCP URL: https://silink.ai/mcp Authorization: Bearer sk-your-key-here

Call a function

curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code":"verify.brand_check","payload":{"brand":"...","markets":["us_uk"]}}'

Idempotency

Pass an idempotency_key (a uuid4 is recommended) — repeating the same key returns the original result and never charges twice. If omitted, the server generates one without retry protection.

Sandbox (free testing)

No Max/Business subscription required — grab a sk-test- key from the console after logging in, and call all 13 functions for free. Responses are real, structurally accurate example data (not live queries — the data will be stale), 20 free calls per function per month, no spTok charged. To go to production, upgrade your subscription and swap in a real key; no code changes needed.

Authorization: Bearer sk-test-your-sandbox-key

Responses carry sandbox:true and a sandbox_note with usage; once the quota is used up you get 402 sandbox_quota_exceeded.

Async mode (for the slow calls)

report.new_product_intelligence (20-40s) and report.target_list_export (1-3 min) — the two slowest calls — support async:true. Charging still happens synchronously (identical rules to the non-async path); only the engine run is deferred. The request returns 202 with a job_id immediately instead of holding the connection open for minutes.

curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code":"report.target_list_export","payload":{"industry":"..."},"async":true,"callback_url":"https://yourapp.com/webhooks/silink"}' # → HTTP 202 {"ok":true,"async":true,"job_id":"job_...","status":"queued", "status_url":"https://silink.ai/api/v1/business/jobs/job_...", "callback_secret":"..."}

Poll status (pull)

curl https://silink.ai/api/v1/business/jobs/job_your_job_id \ -H "Authorization: Bearer sk-your-key-here"

callback_url is entirely optional — poll this endpoint until status becomes succeeded/failed. status is one of queued/running/succeeded/failed.

Receive a callback (push)

callback_url must be https:// and cannot point at a private/loopback address. On completion we POST to it with the body shown below; on failure (non-2xx or timeout) we retry with backoff — 10s/1min/5min/15min/1h/3h/6h/12h, 8 attempts — then mark it exhausted. That only affects the push: the result itself is always available from the status endpoint above, it is never lost.

POST https://yourapp.com/webhooks/silink X-SiLink-Signature: sha256=<hex> X-SiLink-Job-Id: job_... {"event":"job.succeeded","job_id":"job_...","service_code":"report.target_list_export", "idempotency_key":"...","ok":true,"result":{ ... },"usd_charged":1200,"payment_intent_id":"pi_..."}

Verify with: X-SiLink-Signature is sha256=hmac_sha256(callback_secret, raw request body bytes). callback_secret is shown once, in the 202 response — save it immediately.

Rate limits

Counted per API key over a 60-second sliding window. Exceeding the limit returns 429 with retry_after (seconds) and limit_per_min in the body, plus a standard Retry-After header your SDK can back off on.

Subscription tierRequests per minute
max60
business600
HTTP/1.1 429 Too Many Requests Retry-After: 12 {"detail":{"error":"rate_limited","retry_after":12,"limit_per_min":60,"msg":"..."}}

Partner platforms needing higher limits: contact us.

Response format

Every success response is ok:true + result. The shape of result depends on the service_code; billing fields differ by whether the service is pooled.

Pooled services (most)

{ "ok": true, "service_code": "discover.buyers", "result": { ... }, "sptok_charged": 1000, "price_charged_usd_reference": 10.0, "volume_discount_factor": 1.0, "idempotency_key": "…", "replayed": false }

Non-pooled services (tagged not pooled)

Charged per call against the saved payment method. On success you get usd_charged + payment_intent_id. If the automatic charge fails you get HTTP 200 with ok:false and a checkout_url — nothing is run or charged in that case.

{ "ok": false, "error": "offsession_charge_failed", "checkout_url": "https://…", "checkout_session_id": "cs_live_…", "deliver_url": "https://silink.ai/api/v1/business/checkout/cs_live_…/deliver" }

Once the user has paid at checkout_url, POST to deliver_url with the same key: the service runs and returns its result. Until payment completes you get 402 checkout_pending. deliver is idempotent — repeat calls replay the result and never charge twice.

report.* services return download_urls inside result; fetch PDF/DOCX/MD/TXT from there — the file is never inlined in the response.

Error codes

StatuserrorMeaning
400unknown_service_codeUnknown service_code; the available field lists valid ones
400engine_rejected_inputEngine rejected the payload. Any charge is refunded automatically
401—Invalid or inactive API key
402insufficient_sptokInsufficient spTok balance; body includes need/have
402volume_over_limitOver 100k calls this month; custom quote required
403tier_insufficientSubscription tier lacks API access (Max or above required)
402checkout_pendingdeliver endpoint: payment not completed yet
400async_not_supportedThis service_code does not support async:true; body lists which ones do
400invalid_callback_urlcallback_url must be https:// and not point at a private/loopback address
429rate_limitedRate limit exceeded, see Rate limits above
500engine_errorEngine failed. Any charge is refunded automatically

Every non-2xx response has the shape {"detail":{"error":"…","msg":"…"}}. A failed automatic charge on a non-pooled service is not an error status: it is HTTP 200 + ok:false, see Response format.

Function reference

Discover Buyers (10 candidates/search)

$10
service_code: discover.buyers

Single call takes about 9-12 seconds (two LLM calls + database scan); returns the complete result synchronously with no streaming progress.

payload fields: product — Product/requirement description (required) · province — Limit to a specific province (optional)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "discover.buyers", "payload": {"product": "...", "province": "..."}, "lang": "en"}'

Discover Suppliers (10 candidates/search)

$10
service_code: discover.suppliers

Single call takes about 5-8 seconds; returns the complete result synchronously with no streaming progress.

payload fields: product — Product/requirement description (required) · province — Limit to a specific province (optional)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "discover.suppliers", "payload": {"product": "...", "province": "..."}, "lang": "en"}'

Discover China Buyers (province/industry list)

$49
service_code: discover.cn_buyers

Returns the full density ranking across all 31 provinces; if province is provided, also returns the buyer company list for that province.

payload fields: industry — Industry name (required) · province — If specified, also returns the buyer company list for that province (optional)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "discover.cn_buyers", "payload": {"industry": "...", "province": "..."}, "lang": "en"}'

Discover Competitors

$29
service_code: discover.competitors

Returns the complete list of same-industry competitors, capped at 500 results per call (truncated by score when exceeded; the capped field flags whether truncation occurred).

payload fields: company — Target company's full legal name (required) · same_province_only — Whether to limit results to the same province (optional, default false)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "discover.competitors", "payload": {"company": "...", "same_province_only": true}, "lang": "en"}'

Brand Check (Outbound/China)

$99
service_code: verify.brand_check
payload fields: brand — Brand name (required) · markets — List of target market IDs, see brand_check.MARKETS
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "verify.brand_check", "payload": {"brand": "...", "markets": ["us_uk"]}, "lang": "en"}'

Deep Risk Check (litigation/history)

$49
service_code: verify.deep_risk_check
payload fields: identifier — Company's full legal name or 18-digit Unified Social Credit Code (required)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "verify.deep_risk_check", "payload": {"identifier": "..."}, "lang": "en"}'

China Industry Analysis Report

$79
service_code: report.industry_overview

$79 per call, charged from the standard spTok subscription pool (below the $299 threshold). Returns download_urls for PDF/DOCX/MD/TXT reports. Takes about 10-20 seconds.

payload fields: industry — Industry name (required) · province — Limit to a specific province (optional)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "report.industry_overview", "payload": {"industry": "...", "province": "..."}, "lang": "en"}'

Province Landing Decision (industry ranking)

$99
service_code: decide.province

Given an industry, returns the full density ranking across all 31 provinces (not truncated). The semantics are 'recommend a province to land in for this industry' -- not a lookup of details for a single specific province.

payload fields: industry — Industry name (required), e.g. 'electronics manufacturing'
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "decide.province", "payload": {"industry": "..."}, "lang": "en"}'

China Supplier Comparison

$149
service_code: decide.compare_suppliers_5

Uses the same full_compare() engine as the paid flow on /check/compare on the website, which has been verified in production to complete real payment and delivery end to end.

payload fields: names — Array of company full legal names, 2-5 companies (required)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "decide.compare_suppliers_5", "payload": {"names": ["...", "..."]}, "lang": "en"}'

Overseas Market Selection

$29
service_code: decide.market

Returns the purchaser count ranking across all covered countries (not truncated).

payload fields: product — Product/requirement description (required)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "decide.market", "payload": {"product": "..."}, "lang": "en"}'

Company Naming/Rename/English Name

$39
service_code: build.naming
payload fields: company — Chinese company's full legal name (required)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "build.naming", "payload": {"company": "..."}, "lang": "en"}'

New Product Intelligence Reportnot pooled

$899
service_code: report.new_product_intelligence

$899 per call, not drawn from the monthly subscription pool (v3.1 rule: anything above $299 is billed standalone). Attempts to charge the account's saved payment method first; if that fails, returns a checkout_url for manual payment confirmation. Takes about 20-40 seconds.

payload fields: product — Product/requirement description (required) · mode — 'design' or 'deconstruct', defaults to 'design'
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "report.new_product_intelligence", "payload": {"product": "...", "mode": "..."}, "lang": "en"}'

Target List Export Report (up to 30)not pooled

$1200
service_code: report.target_list_export

$1200 per call, up to 30 companies with full contact details and a PDF/DOCX/MD/TXT report. Not drawn from the monthly subscription pool -- uses the same off-session charge flow as the New Product Report. Can take 1-3 minutes (includes AI-generated selection rationale and live contact lookup). Returns download_urls; the response body does not include the binary file directly.

payload fields: industry — Industry name (required) · province — Limit to a specific province (optional) · tiers — Restrict to specific tiers, e.g. ['listed','srdi'] (optional) · min_insured — Minimum insured-employee threshold, default 2 (optional)
curl -X POST https://silink.ai/api/v1/business/run \ -H "Authorization: Bearer sk-your-key-here" \ -H "Content-Type: application/json" \ -d '{"service_code": "report.target_list_export", "payload": {"industry": "...", "province": "...", "tiers": ["listed", "high_tech"], "min_insured": 2}, "lang": "en"}'