IP · Blockchain APIs · v2.1

Blockchain primitives, exposed as a documented API.

Deploy smart contracts, mint NFTs, verify ownership and enforce anti-fraud across multiple chains. REST + SDKs, webhooks, structured errors — built to industry API standards.

Blockchain APIs

Features

What you can build with Blockchain APIs.

Smart contracts

Deploy, version and upgrade audited contract templates from a single API.

NFT minting

Single, batch and lazy-mint NFTs with metadata, royalties and transfer rules.

Ownership verification

Cryptographic proof endpoints for assets, tickets and credentials.

Anti-fraud

Built-in fraud signals, replay protection and ticket validation flows.

Multi-chain

EVM-compatible chains and major L2s — abstracted behind one API surface.

Webhooks & events

Subscribe to on-chain events without running your own indexer.

Getting started

Three steps to production.

01

Get API keys

Request access. Receive sandbox + production credentials under mutual NDA.

02

Choose your SDK

Official SDKs in JavaScript, Python, PHP and Java. REST always available.

03

Start building

Issue your first call in sandbox, validate, then promote to production.

Authentication

Bearer tokens over HTTPS.

Authenticate every request with a Bearer API key issued from your AMICA dashboard. Keys are environment-scoped and signed requests are recommended for high-value operations.

  • • All requests must be made over TLS 1.2+.
  • • API keys are scoped per environment (sandbox / live).
  • • Rotate keys at any time from the dashboard — old keys stay valid for 24h.
  • • Rate limit: 600 req/min per key, with burst headroom.
Authorization header
GET /v2/blockchain/health HTTP/1.1
Host: api.amicaholding.com
Authorization: Bearer sk_live_••••••••••••••••
Content-Type: application/json
Idempotency-Key: 8f7c1c7e-2b5e-4f1a-9c91-2d2e1c80a1f2

Endpoints

REST resources.

Base URL https://api.amicaholding.com/v2/blockchain

POST/v2/blockchain/contractsDeploy a smart contract

Deploy an audited contract template to a target chain. Returns a contract object with deployed address.

Request body

{
  "template": "ticket_v2",
  "chain": "polygon",
  "owner": "0x9a3...",
  "metadata": { "name": "My Event", "symbol": "EVT" }
}

200 OK · response

{
  "id": "ctr_01HZ...",
  "address": "0xabc...",
  "chain": "polygon",
  "template": "ticket_v2",
  "status": "deployed",
  "created_at": "2026-04-26T10:21:00Z"
}
POST/v2/blockchain/nfts/mintMint an NFT

Mint single or batch NFTs against an existing contract. Idempotent via Idempotency-Key header.

Request body

{
  "contract_id": "ctr_01HZ...",
  "to": "0x9a3...",
  "metadata_uri": "ipfs://Qm...",
  "quantity": 1
}

200 OK · response

{
  "id": "nft_01HZ...",
  "token_id": "1042",
  "tx_hash": "0xdef...",
  "status": "confirmed"
}
GET/v2/blockchain/ownership/{token_id}Verify ownership

Returns the cryptographic proof of current ownership for a given token.

200 OK · response

{
  "token_id": "1042",
  "owner": "0x9a3...",
  "verified": true,
  "block": 58213441
}
POST/v2/blockchain/tickets/validateValidate a ticket

Single-use validation with replay protection. Used by venue scanners.

Request body

{
  "token_id": "1042",
  "scanner_id": "scn_223",
  "nonce": "5e8c..."
}

200 OK · response

{
  "valid": true,
  "redeemed_at": "2026-04-26T19:02:11Z"
}

SDK examples

Pick your stack.

JavaScript · /v2/blockchain · v2.1
import { AmicaClient } from "@amica/sdk";

const amica = new AmicaClient({ apiKey: process.env.AMICA_KEY });

const contract = await amica.blockchain.contracts.deploy({
  template: "ticket_v2",
  chain: "polygon",
  owner: "0x9a3...",
  metadata: { name: "My Event", symbol: "EVT" },
});

console.log(contract.address);

Error model

Predictable, structured errors.

All errors follow a single JSON envelope with stable machine codes, human-readable messages and a request ID for support.

Error envelope
{
  "error": {
    "code": "validation_failed",
    "message": "Field 'amount' must be a positive integer.",
    "request_id": "req_01HZ7K2A..."
  }
}
STATUSCODEDESCRIPTION
400validation_failedRequest body did not pass schema validation.
401unauthenticatedMissing or invalid API key.
403forbiddenKey does not have permission for this resource.
404not_foundResource (contract, token, scanner) does not exist.
409conflictIdempotency conflict or token already redeemed.
429rate_limitedPer-key rate limit exceeded. Retry with backoff.
500internal_errorUnexpected error. Safe to retry idempotent calls.

Webhooks

Subscribe to events, not polling.

Each webhook is signed with HMAC-SHA256 in the X-AMICA-Signature header. Verify before processing.

contract.deployed

Sent when a contract finishes deployment on-chain.

nft.minted

Sent on confirmed mint, with token id and tx hash.

nft.transferred

Sent when a token changes ownership.

ticket.redeemed

Sent when a ticket is validated at a venue scanner.