cryptoinfraDocs

#Developer

Self-service integration plumbing — your webhook endpoints and their secrets, a test delivery, a log of recent API requests, and a live event stream. The API key itself is managed from the dashboard (Settings → API keys), not through the API.

Open as MarkdownFor AI assistants

8 endpoints. Generated from docs/openapi.yaml v1.0.0.

EndpointSummary
GET /v1/developer/webhooksList your webhook endpoints
POST /v1/developer/webhooksAdd a webhook endpoint
POST /v1/developer/webhooks/{id}Enable or disable an endpoint
DELETE /v1/developer/webhooks/{id}Delete an endpoint
POST /v1/developer/webhooks/{id}/regenerateRegenerate an endpoint's signing secret
POST /v1/developer/webhooks/{id}/testSend a signed test event
GET /v1/developer/logsYour recent API requests
GET /v1/eventsLive event stream (Server-Sent Events)

#GET/v1/developer/webhooks

List your webhook endpoints · Auth: bearer API key · operationId: listWebhookEndpoints

#Responses

StatusBodyMeaning
200objectEndpoints (secret shown as an 8-char hint only).
401ErrorMissing, malformed or unknown API key.

200 response body

FieldTypeDescription
endpointsobject[]—
endpoints[].idinteger—
endpoints[].urlstring—
endpoints[].enabledboolean—
endpoints[].created_atstring<date-time>—
endpoints[].secret_hintstringFirst 8 characters of the signing secret.
endpoints[].secretstringFull signing secret — present ONLY on create/regenerate.
json
{
  "endpoints": [
    {
      "id": 1,
      "url": "string",
      "enabled": true,
      "created_at": "2026-08-31T09:15:00.000Z",
      "secret_hint": "string",
      "secret": "string"
    }
  ]
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/developer/webhooks' \
  -H 'Authorization: Bearer ck_live_your_key'

#POST/v1/developer/webhooks

Add a webhook endpoint · Auth: bearer API key · operationId: createWebhookEndpoint

Every event (deposits, withdrawals, card activity, payments) is delivered to each enabled endpoint, signed HMAC-SHA256 with the endpoint's secret — returned once in this response. https URLs with public hostnames only; at most 5 endpoints.

#Request body

application/json · required

FieldTypeDescription
url requiredstring<uri>(maxLength 512)

#Responses

StatusBodyMeaning
201objectCreated; endpoint.secret is present ONLY here.
400—Invalid or unsafe URL.
401ErrorMissing, malformed or unknown API key.
409—Endpoint limit reached.

201 response body

FieldTypeDescription
endpointobject—
endpoint.idinteger—
endpoint.urlstring—
endpoint.enabledboolean—
endpoint.created_atstring<date-time>—
endpoint.secret_hintstringFirst 8 characters of the signing secret.
endpoint.secretstringFull signing secret — present ONLY on create/regenerate.
json
{
  "endpoint": {
    "id": 1,
    "url": "string",
    "enabled": true,
    "created_at": "2026-08-31T09:15:00.000Z",
    "secret_hint": "string",
    "secret": "string"
  }
}

#Example request

bash
curl -X POST 'https://api.cryptoinfra.build/v1/developer/webhooks' \
  -H 'Authorization: Bearer ck_live_your_key' \
  -H 'Content-Type: application/json' \
  -d '{
  "url": "https://example.com"
}'

#POST/v1/developer/webhooks/{id}

Enable or disable an endpoint · Auth: bearer API key · operationId: toggleWebhookEndpoint

#Parameters

NameInTypeRequiredDescription
idpathintegeryes—

#Request body

application/json · required

FieldTypeDescription
enabled requiredboolean—

#Responses

StatusBodyMeaning
200—Updated.
404—No such endpoint.

#Example request

bash
curl -X POST 'https://api.cryptoinfra.build/v1/developer/webhooks/1' \
  -H 'Authorization: Bearer ck_live_your_key' \
  -H 'Content-Type: application/json' \
  -d '{
  "enabled": true
}'

#DELETE/v1/developer/webhooks/{id}

Delete an endpoint · Auth: bearer API key · operationId: deleteWebhookEndpoint

#Parameters

NameInTypeRequiredDescription
idpathintegeryes—

#Responses

StatusBodyMeaning
200—Deleted (delivery history is kept
404—No such endpoint.

#Example request

bash
curl -X DELETE 'https://api.cryptoinfra.build/v1/developer/webhooks/1' \
  -H 'Authorization: Bearer ck_live_your_key'

#POST/v1/developer/webhooks/{id}/regenerate

Regenerate an endpoint's signing secret · Auth: bearer API key · operationId: regenerateWebhookSecret

The new secret is returned once; the old one stops verifying immediately.

#Parameters

NameInTypeRequiredDescription
idpathintegeryes—

#Responses

StatusBodyMeaning
200—New secret in endpoint.secret (only here).
404—No such endpoint.

#Example request

bash
curl -X POST 'https://api.cryptoinfra.build/v1/developer/webhooks/1/regenerate' \
  -H 'Authorization: Bearer ck_live_your_key'

#POST/v1/developer/webhooks/{id}/test

Send a signed test event · Auth: bearer API key · operationId: testWebhookEndpoint

#Parameters

NameInTypeRequiredDescription
idpathintegeryes—

#Request body

application/json · optional

FieldTypeDescription
event_typestringpayment.received is deprecated — payment links are retired and the event is no longer emitted; it is still accepted here so an older client's test-fire does not fail. (one of webhook.test, deposit.credited, withdrawal.confirmed, withdrawal.failed, card.kyc, card.status, card.topup, card.withdraw, card.transaction, card.wallet_otp, payment.received)

#Responses

StatusBodyMeaning
202—Queued through the real dispatcher.
404—No such enabled endpoint.

#Example request

bash
curl -X POST 'https://api.cryptoinfra.build/v1/developer/webhooks/1/test' \
  -H 'Authorization: Bearer ck_live_your_key' \
  -H 'Content-Type: application/json' \
  -d '{}'

#GET/v1/developer/logs

Your recent API requests · Auth: bearer API key · operationId: listApiLogs

Method, route, status and duration of your last calls (kept 14 days; no bodies, no query strings).

#Parameters

NameInTypeRequiredDescription
limitqueryintegerno— (min 1; max 200)

#Responses

StatusBodyMeaning
200objectThe request log.
401ErrorMissing, malformed or unknown API key.

200 response body

FieldTypeDescription
requestsobject[]—
requests[].idinteger—
requests[].methodstring—
requests[].pathstring—
requests[].statusinteger—
requests[].duration_msinteger—
requests[].created_atstring<date-time>—
json
{
  "requests": [
    {
      "id": 1,
      "method": "string",
      "path": "string",
      "status": 1,
      "duration_ms": 1,
      "created_at": "2026-08-31T09:15:00.000Z"
    }
  ]
}

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/developer/logs' \
  -H 'Authorization: Bearer ck_live_your_key'

#GET/v1/events

Live event stream (Server-Sent Events) · Auth: bearer API key · operationId: eventStream

A text/event-stream of your account's activity, for a dashboard that updates without refreshing. Same key as every other route. Each message is one JSON object { type, ts, data }; type is one of deposit.credited (data: depositId, userExternalId, chain, assetId, symbol, amount, txid), withdrawal.updated (withdrawalId, status, chain, assetId, symbol, amount, txid) or card.order.updated (orderId, kind, status, providerStatus, userExternalId). A comment line is sent every 25 seconds as a heartbeat.

Best-effort and not a webhook: a dropped connection loses what happened while it was down, and nothing is replayed. It is a hint to go and read the record; the poll endpoints stay the truth.

#Responses

StatusBodyMeaning
200—The stream. Stays open for the life of the connection.
401ErrorMissing, malformed or unknown API key.
503Errorlive_events_unavailable — no event hub on this deployment.

#Example request

bash
curl -X GET 'https://api.cryptoinfra.build/v1/events' \
  -H 'Authorization: Bearer ck_live_your_key'