Organization API · v1
From request
to report.
Submit a wallet, keep the check ID, and retrieve its result. Each key belongs to one organization and one environment.
Start in Sandbox
- Open your company workspace and choose Sandbox.
- In Developers, create a key with “Read and create checks”. Save the secret when it appears.
- Send the request below, then retrieve its check ID until the result is ready.
Live requires a separately provisioned organization balance and price. A Live key cannot access Sandbox checks, and personal API keys do not work on these endpoints.
- Base URL
https://app.chainysoft.io/api/external/v1/organization- Authentication
X-API-Key: YOUR_ORGANIZATION_KEY- Networks
eth· Ethereum,bsc· BNB Smart Chain,trx· TRON
/checksCreate a wallet check
Generate one request ID for each intended check. Persist that ID and the request body before sending. The server returns 202 after saving the job; screening runs asynchronously.
curl https://app.chainysoft.io/api/external/v1/organization/checks \
-H 'X-API-Key: YOUR_ORGANIZATION_KEY' \
-H 'Idempotency-Key: wallet-request-0001' \
-H 'Content-Type: application/json' \
-d '{
"address": "0x0000000000000000000000000000000000000001",
"network": "eth",
"external_reference": "your-customer-reference"
}'
The address is an input example, not a recommendation or a verified screening result.
| Field | Required | Meaning |
|---|---|---|
address | Yes | Full wallet address. TRON addresses must have a valid checksum and exact letter case. |
network | Yes | One of eth, bsc, trx. |
external_reference | No | Your reference, up to 120 characters. Avoid personal or sensitive information. |
The key determines the organization and environment. Do not send an organization override.
{
"status": true,
"data": {
"check": {
"id": "<check UUID>",
"environment": "sandbox",
"state": "queued",
"settlement": "none",
"price_cents": 0,
"currency": "USD"
},
"replayed": false
}
}Response excerpt. The full check also includes address, network, reference, timestamps and organization ID.
/checks/:idRead the result
curl https://app.chainysoft.io/api/external/v1/organization/checks/CHECK_ID \
-H 'X-API-Key: YOUR_ORGANIZATION_KEY'
The response is {"status":true,"data":{…check}}. While the check is queued or processing, poll with a delay and backoff. A completed report contains risk_score on a 0–100 scale, risk_level, risks, sandbox, and coverage.
The score describes risk; it is not an automatic approval or rejection of a payment. This endpoint provides wallet screening. It does not include transaction tracing, a graph, or organization risk-rule evaluation.
/checksList checks in the key’s environment. Optional parameters: limit (1–100, default 25), state, q (address or external reference), and cursor.
{
"status": true,
"data": {
"items": [],
"next_cursor": null
}
}
Pass next_cursor unchanged for the next page, preserving the same filters. Read-only keys can use both GET endpoints.
Retry without another charge
- Send the same Idempotency-Key and the same payload after a timeout or a lost response. The saved check is returned with
replayed: true. - The request ID is shared across the organization’s keys within an environment. Rotating a key does not create a duplicate.
- Reusing an ID with a different payload returns 409. Sending a new ID creates a new check, even for the same wallet.
- An ID must contain 8–128 ASCII letters, digits, dots, underscores, colons or hyphens.
During the pilot, only enrolled organizations can create checks. A pause stops new submissions while authorized exact retries, result reads and accepted work remain available. A retry with a changed body still returns 409.
Live funds are reserved when a check is accepted. Completion captures the reservation once. A confirmed failure releases it. An uncertain provider outcome keeps the reservation for reconciliation and does not trigger another paid create.
Understand the status
| State | Next step |
|---|---|
queued | The job is saved. Continue polling. |
processing | Screening is in progress. Continue polling. |
completed | Read the report. Sandbox results remain explicitly marked as simulated. |
failed | No usable report. Read error_code; the reservation is released. |
reconciliation_required | The provider outcome is unresolved. Stop automatic polling/retries and ask your Chainy operator to review this check ID. Funds remain reserved. |
Handle errors
{"status": false, "error": "Idempotency key payload mismatch",
"code": "IDEMPOTENCY_CONFLICT"}
| HTTP | Meaning |
|---|---|
| 400 | Invalid address, network, request ID, body or filter. |
| 401 | Missing, invalid or revoked organization key. |
| 402 | Insufficient organization funds. No new check was accepted. |
| 403 | Missing permission, Live has not been provisioned, or this organization is outside the pilot (PILOT_REQUIRED). |
| 404 | Check unavailable in this organization/environment, or the feature is disabled. |
| 409 | Request ID conflict or account limit reached. |
| 429 | Outstanding-job limit reached. Back off and retry with the same request ID. |
| 503 | New checks are paused (CHECKS_PAUSED), or local provider/admission configuration is unavailable. No new job or reservation was created. Back off and retain the same request ID. |
After an ambiguous network error or server failure, retry the original request ID. A response does not guarantee completion time; use the check state to track progress.