Test Ad

CashLink Developer API

CashLink Proof Camera Public API v2

Permanent private evidence, integrity status, publication, IPFS and BCH automation.

Base URL
https://linkincash.cc/api/v2/proof-camera

CashLink Proof Camera Public API v2

Automate permanent private file proofs, SHA-256 verification, owner-only delivery, CashLink publication, IPFS pinning, and Bitcoin Cash anchoring.

Download the OpenAPI 3.1 contract

Base URLs and account

Proof operations use https://linkincash.cc/api/v2/proof-camera. Accounts, recovery, and paid storage capacity are shared with Image Space at https://linkincash.cc/api/v2/image-space.

Create the anonymous CashLink Media API account once:

curl -X POST 'https://linkincash.cc/api/v2/image-space/accounts' \
  -H 'Accept: application/json' \
  -H 'Idempotency-Key: account-create-00000001'

Save the returned climg_ account token and recovery code immediately. Proof Camera uses no Cookie, Session, or free allowance. Buy add-on storage through the storage-only Image Space quote and payment-order routes before uploading. Every stored source byte is debited once and every API proof is private and permanent; the API explicitly rejects quota_type=traffic.

Use Authorization: Bearer $ACCOUNT_TOKEN for Proof, upload-session, quote, and account order-list requests. Invalid or cross-account credentials return 404.

Contract rules

JSON responses use data, links, and meta.contract_version: 2. Errors use application/problem+json. IDs and URLs are opaque.

All mutations require an Idempotency-Key of 16–200 characters. Reusing a key with the same request replays the result; using it with different content returns 409. Each chunk also requires its upload token, exact offset, and SHA-256. Responses and private files are private, no-store.

Direct upload

curl -X POST 'https://linkincash.cc/api/v2/proof-camera/proofs' \
  -H "Authorization: Bearer $ACCOUNT_TOKEN" \
  -H 'Accept: application/json' \
  -H 'Idempotency-Key: proof-upload-00000001' \
  -F 'file=@./evidence.jpg' \
  -F 'expected_sha256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'

A successful request returns 202. CashLink hashes the bytes it stored. hash.actual, hash.expected, and hash.matches_expected report the result; a mismatch does not reject the proof. The response also contains retention, scan, preview, NSFW, analysis, CashLink, IPFS, and BCH states.

Resumable upload

Create a session with the total byte size:

curl -X POST 'https://linkincash.cc/api/v2/proof-camera/upload-sessions' \
  -H "Authorization: Bearer $ACCOUNT_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: proof-session-00000001' \
  -d '{"name":"evidence.tif","mime":"image/tiff","size":10485760,"expected_sha256":null}'

Save the one-time data.upload_token. Send a raw chunk with a fresh idempotency key:

curl -X PATCH 'https://linkincash.cc/api/v2/proof-camera/upload-sessions/SESSION_ID' \
  -H "Authorization: Bearer $ACCOUNT_TOKEN" \
  -H "Upload-Token: $UPLOAD_TOKEN" \
  -H 'Upload-Offset: 0' \
  -H 'Upload-Chunk-SHA256: CHUNK_SHA256' \
  -H 'Idempotency-Key: proof-chunk-00000001' \
  -H 'Content-Type: application/octet-stream' \
  --data-binary '@./chunk.bin'

Use GET /upload-sessions/{session} with the account and upload tokens to recover the accepted offset. Use DELETE with both tokens and an idempotency key to cancel. After all bytes arrive:

curl -X POST 'https://linkincash.cc/api/v2/proof-camera/upload-sessions/SESSION_ID/complete' \
  -H "Authorization: Bearer $ACCOUNT_TOKEN" \
  -H "Upload-Token: $UPLOAD_TOKEN" \
  -H 'Idempotency-Key: proof-complete-00000001'

Completion is idempotent, returns 202, creates a PhotoProof, and never creates an Image Space image or ordinary shared file.

Proof status and private bytes

  • GET /proofs returns the latest 100 owned proofs.
  • GET /proofs/{proof} returns the complete machine-readable state.
  • GET /proofs/{proof}/preview returns owner-only actual preview bytes. JPEG, PNG, GIF, WebP, and supported image transcodes may work before antivirus finishes. PDF, video, and spreadsheet previews require an explicit ClamAV clean result.
  • GET /proofs/{proof}/original returns the original only after scan status is clean or unscannable. NSFW flags do not prevent private download. Malware, deletion, moderation blocks, or the wrong owner return 404.

preview.kind identifies the preview type. content_ready and ready are true only when actual uploaded content is available, and only then is url non-null. placeholder_url always points to a public static type illustration containing no uploaded content. PDFs use the first page, videos use a frame near 10% (capped at 10 seconds), and spreadsheets use up to 12 rows by 8 columns from the first visible sheet. unscannable, scan errors, and render failures keep the illustration only.

Actual preview and original responses retain private, no-store, nosniff, and restrictive CSP headers.

CashLink public URL

Publication is explicit and irreversible once others copy it:

curl -X POST 'https://linkincash.cc/api/v2/proof-camera/proofs/PROOF_ID/shares' \
  -H "Authorization: Bearer $ACCOUNT_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: proof-share-00000001' \
  -d '{"publication_acknowledged":true}'

The operation is idempotent and reuses the proof's existing CashLink URL. Safety and NSFW publication gates still apply.

IPFS add-on storage

Proof IPFS no longer creates per-file payment orders. Buy add-on storage through the storage-only Image Space API, then submit the Proof IPFS operation; an original asset with an existing permanent allocation is not charged twice. The legacy ipfs-payment-quote and ipfs-payment-orders creation endpoints return 410, while existing clapi_ orders remain readable and can finish activation, fulfillment, reversal, and refunds.

BCH anchoring

If the account already has a blockchain credit, call POST /proofs/{proof}/blockchain with blockchain_acknowledged: true, blockchain_format: "json" or "memo_cash", and optional verified IPFS/CashLink fields.

To buy credit for this proof, first request:

GET /proofs/{proof}/blockchain-payment-quote?units=1&blockchain_acknowledged=1&blockchain_format=json

Then create POST /proofs/{proof}/blockchain-payment-orders with the quote token, the refund address twice, terms_version: "2026-08-15", terms_accepted: true, and blockchain_permanent_acknowledgement: true. Activate with the one-time order token. Paid fulfillment redeems the current proof automatically. Poll the proof until blockchain.txid and explorer links appear.

Payment order access

GET /payment-orders uses the climg_ account token. Individual routes use only the matching clapi_ order token:

  • GET /payment-orders/{order}
  • POST /payment-orders/{order}/activate
  • GET /payment-orders/{order}/qr
  • GET /payment-orders/{order}/refunds
  • GET /payment-orders/{order}/events

Events are text/event-stream and resume with Last-Event-ID. Version 1 provides no webhook; use SSE and Proof status polling.

Limits and lifecycle

Reads are normally 60/minute, mutations and payment creation 10/minute, and chunks 120/minute, with account and IP upload/concurrency controls. Insufficient add-on storage returns 402.

There is no DELETE for completed proofs, public search, PDF certificate, or webhook. CashLink URLs, IPFS copies, and BCH transactions cannot be fully withdrawn after publication.