Anchorage Digital website screenshot

Anchorage Digital

Anchorage Digital is a regulated digital-asset platform for institutions, operating Anchorage Digital Bank, N.A. — the first federally chartered (OCC) crypto bank in the United States — plus regulated entities in Singapore and New York. It provides qualified custody, trading (Anchorage Digital Prime), staking, on-chain settlement via the Atlas Settlement Network, stablecoin issuance and conversion, governance participation, and tax reporting. Its REST API v2.0 exposes 134 operations across custody, wallets, transfers, trading, Atlas settlement, onboarding, subaccounts, tax, and webhook notifications, secured with API keys plus Ed25519 request signing. Anchorage also ships an Agentic Banking product with a hosted MCP server that lets AI agents spend against pre-authorized budgets.

Anchorage Digital publishes 20 APIs on the APIs.io network, including Addresses API, API Key API, Asset Types API, and 17 more. Tagged areas include Company, Crypto, Custody, Digital Assets, and Banking.

The Anchorage Digital catalog on APIs.io includes 1 event-driven AsyncAPI specification.

Anchorage Digital’s developer surface includes documentation, API reference, getting-started guide, engineering blog, support, authentication, sandbox, and 25 more developer resources.

51.3/100 developing ▬ flat Agent 62/100 agent native Full breakdown ↓
scored 2026-08-10 · rubric v0.9.1
AccessSelf serve
20 APIs 1 MCP Servers
CompanyCryptoCustodyDigital AssetsBankingTradingStakingSettlementInstitutionalBlockchainStablecoins

Kin Score

Kin Score Kin Score How this is scored →
scored 2026-08-10 · rubric v0.9.1
Composite quality — 51.3/100 · developing
Contract Quality 18.4 / 25
Developer Ergonomics 13.8 / 20
Commercial Clarity 4.2 / 20
Operational Transparency 8.9 / 13
Governance 1.4 / 12
Discoverability 6.9 / 10
Agent readiness — 62/100 · agent native
Machine-Readable Contract 18 / 18
Agentic Access Contract 10 / 10
MCP Server 12 / 12
Machine-Readable Auth 10 / 10
Idempotency 9 / 9
Stable Error Semantics 8 / 8
Request/Response Examples 7 / 7
Rate-Limit Signaling 7 / 7
Typed Event Surface 6 / 6
Agent Skills 5 / 5
Well-Known Catalog 4 / 4
Consent & Bot Identity 0 / 3
A2A Agent Card 0 / 8
Dry-Run / Simulate Mode 0 / 4
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. This rating is computed from github.com/api-evangelist/anchorage-digital: open an issue to ask a question, or submit a pull request to add artifacts. Want it done for you? Prioritized profiling — $2,500 →

APIs 20

Individual APIs this provider publishes, each with its own machine-readable definition.

Anchorage Digital Addresses API

These endpoints allow the user to create and retrieve deposit addresses for specific assets. # Verifying Deposit Addresses The addresses REST API endpoints return signatures of ...

Anchorage Digital API Key API

These endpoints allow querying information about the current API key in use.

Anchorage Digital Asset Types API

Descriptions of supported asset types

Anchorage Digital Atlas Settlement Network API

The Atlas Settlement Network API from Anchorage Digital — 9 operation(s) for atlas settlement network.

Anchorage Digital Collateral Management API

The Collateral Management API from Anchorage Digital — 6 operation(s) for collateral management.

Anchorage Digital Deposit Attribution API

Deposit Attribution is the process of gathering information about the originator of a given deposit. Once a deposit is initiated this process is automatically started being repr...

Anchorage Digital Onboarding API

These endpoints allow clients/partner institutions to start the customer onboarding process for a B2B2B/B2B2C end customer who would not be using the Anchorage Digital applicati...

Anchorage Digital Stablecoins API

Endpoints for stablecoin conversion operations including issuance and redemption

Anchorage Digital Statements API

The Statements API from Anchorage Digital — 4 operation(s) for statements.

Anchorage Digital Subaccounts API

These endpoints allow the organization to manage subaccounts.

Anchorage Digital Tax API

These endpoints allow the organization to manage tax. ** UNDER DEVELOPMENT **

Anchorage Digital Tax Reporting API

Operations for managing tax accounts and cost basis reporting

Anchorage Digital Trading API

API endpoints for managing RFQ, Market or Limit orders [Anchorage Digital websocket API documentation.](https://anchorage-wsapi.netlify.app/)

Anchorage Digital Transactions API

Transactions include all of the blockchain actions that affect your vault balances, such as withdrawals, deposits, transfers, and participation actions. Each transaction may hav...

Anchorage Digital Transfers API

These endpoints allow you to transfer assets from one of your API-enabled vaults to *another resource custodied by Anchorage Digital*.

Anchorage Digital Trusted Destinations API

The Trusted Destinations API from Anchorage Digital — 4 operation(s) for trusted destinations.

Anchorage Digital Vaults API

An Anchorage Digital organization has one or more vaults. Each vault may contain one or more assets which are held in wallets. Each wallet may be comprised of one or more addres...

Anchorage Digital Vesting API

These endpoints allow access to vesting balance information for allocations.

Anchorage Digital Wallets API

A vault has one or more wallets. Each wallet is a collection of one or more addresses depending on the asset type. A wallet is created for a particular blockchain network, e.g. ...

Anchorage Digital Webhook Notifications API

The Webhook Notifications API from Anchorage Digital — 6 operation(s) for webhook notifications.

Scroll for all 20

MCP Servers 1

Model Context Protocol servers that expose these APIs to AI agents.

Rate Limits 1

Documented rate limits and quota policies.

Anchorage Digital Rate Limits

1 limits

RATE LIMITS

Event Specifications 1

AsyncAPI definitions for this provider's event-driven and streaming APIs.

Security Posture 3

Authentication, domain security, vulnerability disclosure, and trust-center signals.

Anchorage Digital Authentication

apiKey · 1 scheme

SECURITY

Anchorage Digital Domain Security

TLSv1.3 · HSTS · DNSSEC · DMARC

SECURITY

Anchorage Digital Vulnerability Disclosure

disclosure policy published

SECURITY

Agentic Access 1

Recommended x-agentic-access execution contracts for AI agents.

Anchorage Digital Agentic Access

134 operations · 55 acting

134 operations · 55 acting

AGENTIC

Resources

Get Started 3

Portal, sign-up, and the first successful call

Documentation 3

Reference material describing how the API behaves

Agent Surfaces 5

MCP servers, agent skills, and machine-readable catalogs

Design & Contract 7

Pagination, idempotency, versioning, errors, and events

Scroll for all 7

Build 1

SDKs, sample code, and the tooling you integrate with

Access & Security 4

Authentication, authorization, and security posture

Operate 4

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 2

The organization behind the API

Other 1

Properties that don't map to a standard resource type

Source (apis.yml)

apis.yml Raw ↑
aid: anchorage-digital
accessModel:
  pricing: unknown
  onboarding: self-serve
  trial: false
  try_now: false
  public: false
  label: Self-serve signup
  confidence: medium
  source:
  - authentication
  generated: '2026-07-22'
  method: derived
image: https://kinlane-images.s3.amazonaws.com/shared/apis-json/icons/anchorage-digital.png
name: Anchorage Digital
description: Anchorage Digital is a regulated digital-asset platform for institutions, operating Anchorage Digital Bank, N.A.
  — the first federally chartered (OCC) crypto bank in the United States — plus regulated entities in Singapore and New York.
  It provides qualified custody, trading (Anchorage Digital Prime), staking, on-chain settlement via the Atlas Settlement
  Network, stablecoin issuance and conversion, governance participation, and tax reporting. Its REST API v2.0 exposes 134
  operations across custody, wallets, transfers, trading, Atlas settlement, onboarding, subaccounts, tax, and webhook notifications,
  secured with API keys plus Ed25519 request signing. Anchorage also ships an Agentic Banking product with a hosted MCP server
  that lets AI agents spend against pre-authorized budgets.
url: https://raw.githubusercontent.com/api-evangelist/anchorage-digital/refs/heads/main/apis.yml
x-type: company
x-source: vc-portfolio
x-backed-by:
- pantera-capital
- polychain
- sv-angel
x-tier: enriched
x-tier-reason: portfolio-lead
specificationVersion: '0.20'
created: '2026-07-17'
modified: '2026-07-17'
tags:
- Company
- Crypto
- Custody
- Digital Assets
- Banking
- Trading
- Staking
- Settlement
- Institutional
- Blockchain
- Stablecoins
apis:
- aid: anchorage-digital:anchorage-digital-addresses-api
  name: Anchorage Digital Addresses API
  description: "These endpoints allow the user to create and retrieve deposit addresses for specific assets.\n\n# Verifying\
    \ Deposit Addresses\n\nThe addresses REST API endpoints return signatures of the address strings and other metadata that\
    \ prove the address was generated by Anchorage Digital for your organization. \n\nIt is critical that clients verify the\
    \ address signature and any accompanying metadata before the address is used, to confirm the address authenticity and\
    \ integrity.\n\n## Address Signature Schemes\n\nThe API supports two address verification schemes:\n\n- **V1 Address Signatures**\
    \ - The original scheme involves verifying a signature against a public key that is unique to each organization. This\
    \ public key remains fixed for the lifetime of the organization and is distributed on request by Anchorage Digital out-of-band.\
    \ While the public key does not need to be kept confidential, it must be kept tamper-proof.\n- **V2 Address Signatures**\
    \ - The newer scheme involves verifying a signature against the public key of the leaf certificate of a X509 certificate\
    \ chain returned alongside the signature, and verifying the certificate chain itself against the Anchorage Digital Address\
    \ Signing Root CA, provided below, which must be hard-coded by API clients.\n\nYou can determine which scheme an address\
    \ uses by checking the `signatureVersion` field.\n\n## V1 Address Signature Verification\n\nThe steps for verifying V1\
    \ address signatures are as follows:\n\n1. Check the validity of the signature:\n    a. Decode the `addressSignaturePayload`\
    \ field from hex to bytes.\n    b. Decode the `signature` field from hex to bytes.\n    c. Using the fixed public key\
    \ for this organization, verify that `signatureBytes` is a valid Ed25519 signature of the `addressSignaturePayloadBytes`.\n\
    2. Verify the signed address matches the address to be used:\n    a. Decode the `addressSignaturePayload` field from hex\
    \ to bytes.\n    b. Parse the bytes as a JSON object.\n    c. Verify the address to be used matches the value of the `TextAddress`\
    \ property from the JSON object.\n\n**Note: It is not sufficient to validate the signature without also validating that\
    \ the address contained in the JSON decoded from the `addressSignaturePayload` matches the address to be used.**\n\n###\
    \ V1 Signed Payload Fields\n\n- `TextAddress` — The text format of the on-chain address.\n\n```json\n{\n  \"TextAddress\"\
    : \"2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw\"\n}\n```\n\n### Sample V1 validation code:\n\n```go\npackage main\n\nimport (\n\
    \t\"crypto/ed25519\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\n// V1SignedPayload represents the JSON\
    \ structure in the addressSignaturePayload for V1 signatures\ntype V1SignedPayload struct {\n\tTextAddress string `json:\"\
    TextAddress\"`\n}\n\n// verifyV1AddressSignature verifies a V1 address signature.\n//\n// Parameters:\n//   - address:\
    \ The address string from the API response\n//   - addressSignaturePayload: Hex-encoded bytes that were signed\n//   -\
    \ signature: Hex-encoded Ed25519 signature\n//   - orgPublicKeyHex: Hex-encoded Ed25519 public key for your organization\
    \ (obtained out-of-band)\n//\n// Returns an error if verification fails.\nfunc verifyV1AddressSignature(address, addressSignaturePayload,\
    \ signature, orgPublicKeyHex string) error {\n\t// Step 1: Check the validity of the signature\n\n\t// Decode the addressSignaturePayload\
    \ from hex to bytes\n\tpayloadBytes, err := hex.DecodeString(addressSignaturePayload)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"\
    failed to decode addressSignaturePayload: %w\", err)\n\t}\n\n\t// Decode the signature from hex to bytes\n\tsignatureBytes,\
    \ err := hex.DecodeString(signature)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to decode signature: %w\", err)\n\
    \t}\n\n\t// Decode the organization public key from hex\n\tpublicKeyBytes, err := hex.DecodeString(orgPublicKeyHex)\n\t\
    if err != nil {\n\t\treturn fmt.Errorf(\"failed to decode organization public key: %w\", err)\n\t}\n\n\tif len(publicKeyBytes)\
    \ != ed25519.PublicKeySize {\n\t\treturn fmt.Errorf(\"invalid public key size: got %d bytes, expected %d\", len(publicKeyBytes),\
    \ ed25519.PublicKeySize)\n\t}\n\n\tpublicKey := ed25519.PublicKey(publicKeyBytes)\n\n\t// Verify the Ed25519 signature\n\
    \tif !ed25519.Verify(publicKey, payloadBytes, signatureBytes) {\n\t\treturn fmt.Errorf(\"signature verification failed\"\
    )\n\t}\n\n\t// Step 2: Verify the signed address matches the address to be used\n\n\t// Parse the payload bytes as JSON\n\
    \tvar signedPayload V1SignedPayload\n\tif err := json.Unmarshal(payloadBytes, &signedPayload); err != nil {\n\t\treturn\
    \ fmt.Errorf(\"failed to parse signed payload: %w\", err)\n\t}\n\n\t// Verify the TextAddress matches\n\tif signedPayload.TextAddress\
    \ != address {\n\t\treturn fmt.Errorf(\"signed TextAddress does not match: signed=%q, expected=%q\", signedPayload.TextAddress,\
    \ address)\n\t}\n\n\treturn nil\n}\n\nfunc main() {\n\t// Sample API response data\n\taddress := \"2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw\"\
    \n\taddressSignaturePayload := \"7b225465787441646472657373223a22324e313941636968513161344d78515736353855464854696f554e6e4d6b6948506b77227d\"\
    \n\tsignature := \"b18f6848dc0fef01a069e7ac26046383bf5cd130203994dc2d72b5a9097351b1e8b67115b63124fbc8c16673566416a635913c670b676089339c62a7824baa03\"\
    \n\n\t// Organization public key - obtained out-of-band from Anchorage Digital beforehand\n\t// Unique per Organization,\
    \ fixed for the lifetime of that Organization\n\t// Must be kept tamper-proof\n\torgPublicKeyHex := \"8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c\"\
    \n\n\t// Verify the signature\n\tif err := verifyV1AddressSignature(address, addressSignaturePayload, signature, orgPublicKeyHex);\
    \ err != nil {\n\t\tfmt.Printf(\"✗ V1 Address signature verification failed: %v\\n\", err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"\
    ✓ V1 Address signature verified successfully!\")\n\tfmt.Printf(\"  Address: %s\\n\", address)\n\tfmt.Println(\"\\nYou\
    \ may now safely use this address for deposits.\")\n}\n```\n\n## V2 Address Signature Verification\n\nAddresses returned\
    \ with `signatureVersion` set to `V2` also include a `certChain` field containing an x509 certificate chain in PEM format.\n\
    \nThe steps for verifying V2 address signatures are as follows:\n\n1. Verify the certificate chain:\n    a. Parse the\
    \ `certChain` field as PEM-encoded x509 certificates \n \n        **Note: The leaf certificate is at the 0th index, followed\
    \ by zero or more intermediate certificates. The root cert is excluded from this response. The number of certificates\
    \ in the chain is subject to change.**\n \n    b. Verify the certificate chain from the leaf to the trusted Anchorage\
    \ Digital Root CA.\n    c. Verify all certificates are valid at the current time (both notAfter and notBefore).\n    d.\
    \ Verify the leaf certificate's Subject Alternative Names include `address-provider.anchorage.internal`.\n    e. Verify\
    \ the leaf certificate's KeyUsage includes both `digitalSignature` and `nonRepudiation` (also known as `contentCommitment`).\n\
    \    f. Extract the  public key from the leaf certificate. Currently, we only support ed25519 keys, however this is subject\
    \ to change the future.\n2. Verify the signature:\n    a. Decode the `addressSignaturePayload` field from hex to bytes\n\
    \    b. Decode the `signature` field from hex to bytes\n    c. Using the public key from the leaf certificate, verify\
    \ that `signatureBytes` is a valid signature of the `addressSignaturePayload` bytes.\n3. Verify the signed details:\n\
    \    a. Parse the `addressSignaturePayload` bytes as a JSON object\n    b. Verify `SignatureExpiresAt` is greater or equal\
    \ to the current UTC Unix Timestamp\n    c. Verify `TextAddress` matches the address to be used\n    d. Verify `VaultId`\
    \ matches your expected Vault ID\n    e. Verify `NetworkId` matches the expected network for this address\n\n**Note: The\
    \ signed payload also includes a `NetworkName` field for human-readable purposes, which does not need to be verified.**\n\
    \n**Note: API clients must not use \"strict\" JSON parsers which will disallow extra properties, as future versions may\
    \ introduce additional fields.**\n\n**Note: Anchorage Digital will periodically refresh V2 signatures and our Address\
    \ Signing Root CA before expiration. The deposit address itself will not change. Only the signature, certificate chain\
    \ and Root CA will be updated.**\n\n### V2 Signed Payload Fields\n\n- `TextAddress` — The text format of the on-chain\
    \ address.\n- `VaultId` — Identifies the vault this address belongs to.\n- `NetworkId` — Identifies the network that this\
    \ address can receive deposits on.\n- `NetworkName` — A human readable version of the `NetworkId`.\n- `SignatureExpiresAt`\
    \ — The time after which the signature should not be trusted.\n\n```json\n{\n  \"VaultId\": \"dae6089e7c0836705f0562af0f1e4e1f\"\
    ,\n  \"TextAddress\": \"bcrt1q709skemgf5skpsnysvgme2s3ztehkutl390yl0wp29lnmum5uw7qg0qrwm\",\n  \"NetworkName\": \"Bitcoin\
    \ Regnet\",\n  \"NetworkId\": \"BTC_R\",\n  \"SignatureExpiresAt\": 1769450713\n}\n```\n\n### Anchorage Digital Address\
    \ Signing Root CAs\n\nClients are encouraged to hard-code the appropriate Root CA value for the environment they are making\
    \ API requests against. It is essential that this value be tamper-proof.\n\n- Production Environment:\n\n```\n-----BEGIN\
    \ CERTIFICATE-----\nMIIBXTCCAQ+gAwIBAgIUQZI+MSvYTXQHra+3OAKnwAMzotUwBQYDK2VwMCAxHjAcBgNVBAMMFWNhLmFuY2hvcmFnZS5pbnRlcm5hbDAeFw0yNjAxMjYwMDAwMDBaFw0yNzAxMjYwMDAwMDBaMCAxHjAcBgNVBAMMFWNhLmFuY2hvcmFnZS5pbnRlcm5hbDAqMAUGAytlcAMhADTh1nctgIHtAKNW8ww/bY606pJ3OP2dyZYcQrU2kG5jo1swWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwICBDAUBgorBgEEAYaNHwEBBAYWBHJvb3QwIAYDVR0RBBkwF4IVY2EuYW5jaG9yYWdlLmludGVybmFsMAUGAytlcANBANkkdudEjH9RTKbRAxrRXyMSS/TgmdSrAVYOZzoRDJlyc+5oD+a0pmmwWVe86xZi37YbN1GzVlXcJAPpV6ceEQU=\n\
    -----END CERTIFICATE-----\n```\n\n- Staging Environment:\n\n```\n-----BEGIN CERTIFICATE-----\nMIIBXDCCAQ6gAwIBAgITOfTQ4rYUsghgvdl8YCJSC67uGDAFBgMrZXAwIDEeMBwGA1UEAwwVY2EuYW5jaG9yYWdlLmludGVybmFsMB4XDTI2MDEyNDAwMDAwMFoXDTI3MDEyNDAwMDAwMFowIDEeMBwGA1UEAwwVY2EuYW5jaG9yYWdlLmludGVybmFsMCowBQYDK2VwAyEAPlBo2/+kPPL0WRpT+B/yHsU25AN/M6HP2bzC61yHb4ajWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgIEMBQGCisGAQQBho0fAQEEBhYEcm9vdDAgBgNVHREEGTAXghVjYS5hbmNob3JhZ2UuaW50ZXJuYWwwBQYDK2VwA0EAYsJxVI9n42liCF9f+Ou7uuC1QGFwaHwFsfOm0WFofSlE1trWqzj4ruzjPYSRJc8Ht2A7XCAfXkG0mzKpL/wQDg==\n\
    -----END CERTIFICATE-----\n```\n\n### Sample V2 validation code:\n\n```go\npackage main\n\nimport (\n\t\"crypto/ed25519\"\
    \n\t\"crypto/x509\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"time\"\n)\n\n// V2SignedPayload\
    \ represents the JSON structure in the addressSignaturePayload for V2 signatures\ntype V2SignedPayload struct {\n\tTextAddress\
    \        string `json:\"TextAddress\"`\n\tVaultId            string `json:\"VaultId\"`\n\tNetworkId          string `json:\"\
    NetworkId\"`\n\tNetworkName        string `json:\"NetworkName\"`\n\tSignatureExpiresAt int64  `json:\"SignatureExpiresAt\"\
    ` // Unix timestamp\n}\n\n// verifyV2AddressSignature verifies a V2 address signature.\n//\n// Parameters:\n//   - now:\
    \ The \"current\" time. Note that conforming implementations must use\n//     a trusted source for the current time.\n\
    //   - address: The address string from the API response\n//   - addressSignaturePayload: Hex-encoded bytes that were\
    \ signed\n//   - signature: Hex-encoded signature\n//   - certChainPEM: PEM-encoded certificate chain (leaf first, then\
    \ intermediates)\n//   - rootCAPEM: PEM-encoded Root CA certificate (hard-coded by client)\n//   - expectedVaultId: Your\
    \ Vault ID to verify against the signed VaultId\n//   - expectedNetworkId: Expected network ID for this address (e.g.,\
    \ \"BTC\", \"ETH\")\n//\n// Returns an error if verification fails.\nfunc verifyV2AddressSignature(\n\tnow time.Time,\n\
    \taddress, addressSignaturePayload, signature, certChainPEM, rootCAPEM, expectedVaultId, expectedNetworkId string,\n)\
    \ error {\n\t// Step 1: Verify the certificate chain\n\n\t// Parse the certificate chain from PEM\n\tcerts, err := parsePEMCertificates([]byte(certChainPEM))\n\
    \tif err != nil {\n\t\treturn fmt.Errorf(\"failed to parse certificate chain: %w\", err)\n\t}\n\n\tif len(certs) == 0\
    \ {\n\t\treturn fmt.Errorf(\"certificate chain is empty\")\n\t}\n\n\tleafCert := certs[0]\n\tvar intermediateCerts []*x509.Certificate\n\
    \tif len(certs) > 1 {\n\t\tintermediateCerts = certs[1:]\n\t}\n\n\t// Parse the Root CA\n\trootCACerts, err := parsePEMCertificates([]byte(rootCAPEM))\n\
    \tif err != nil {\n\t\treturn fmt.Errorf(\"failed to parse Root CA: %w\", err)\n\t}\n\tif len(rootCACerts) != 1 {\n\t\t\
    return fmt.Errorf(\"expected exactly one Root CA certificate, got %d\", len(rootCACerts))\n\t}\n\trootCA := rootCACerts[0]\n\
    \n\t// Verify the leaf certificate's KeyUsage includes both\n\t// digitalSignature and nonRepudiation (AKA contentCommitment)\n\
    \tif leafCert.KeyUsage&x509.KeyUsageDigitalSignature == 0 {\n\t\treturn fmt.Errorf(\"leaf certificate KeyUsage missing\
    \ DigitalSignature\")\n\t}\n\tif leafCert.KeyUsage&x509.KeyUsageContentCommitment == 0 {\n\t\treturn fmt.Errorf(\"leaf\
    \ certificate KeyUsage missing NonRepudiation (ContentCommitment)\")\n\t}\n\n\t// Verify the certificate chain from leaf\
    \ to Root CA\n\troots := x509.NewCertPool()\n\troots.AddCert(rootCA)\n\n\tintermediates := x509.NewCertPool()\n\tfor _,\
    \ cert := range intermediateCerts {\n\t\tintermediates.AddCert(cert)\n\t}\n\n\t// NOTE: Not all x509 libraries are created\
    \ equal and are not\n\t// guaranteed to verify exactly the same things!\n\t//\n\t// Always review the library you plan\
    \ to use and ensure it covers the\n\t// checks described in the User Guide!\n\t//\n\t// For example, the Go implementation\
    \ checks all Certificates for\n\t// temporal validity (notBefore and notAfter against CurrentTime), for\n\t// valid signatures\
    \ up the chain, and checks that the Subject\n\t// Alternative Names include the values in DNSNames below.\n\t//\n\t//\
    \ However it does not check the KeyUsage bits, hence the additional\n\t// checks above.\n\topts := x509.VerifyOptions{\n\
    \t\tDNSNames:      []string{\"address-provider.anchorage.internal\"},\n\t\tRoots:         roots,\n\t\tIntermediates: intermediates,\n\
    \t\tCurrentTime:   now,\n\t\t// NOTE: This allows for any Extended Key Usage, but does not\n\t\t// check the Key Usage\
    \ bits, hence the additional checks above.\n\t\tKeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageAny},\n\t}\n\tif _, err\
    \ := leafCert.Verify(opts); err != nil {\n\t\treturn fmt.Errorf(\"certificate chain verification failed: %w\", err)\n\t\
    }\n\n\t// Extract the public key from the leaf certificate\n\tleafPublicKey, ok := leafCert.PublicKey.(ed25519.PublicKey)\n\
    \tif !ok {\n\t\treturn fmt.Errorf(\"leaf certificate does not use Ed25519 (got type %T)\", leafCert.PublicKey)\n\t}\n\n\
    \t// Step 2: Verify the signature\n\n\t// Decode the addressSignaturePayload from hex to bytes\n\tpayloadBytes, err :=\
    \ hex.DecodeString(addressSignaturePayload)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to decode addressSignaturePayload:\
    \ %w\", err)\n\t}\n\n\t// Decode the signature from hex to bytes\n\tsignatureBytes, err := hex.DecodeString(signature)\n\
    \tif err != nil {\n\t\treturn fmt.Errorf(\"failed to decode signature: %w\", err)\n\t}\n\n\t// Verify the signature using\
    \ the leaf certificate's public key\n\tif !ed25519.Verify(leafPublicKey, payloadBytes, signatureBytes) {\n\t\treturn fmt.Errorf(\"\
    signature verification failed\")\n\t}\n\n\t// Step 3: Verify the signed details\n\n\t// Parse the payload bytes as JSON\n\
    \tvar signedPayload V2SignedPayload\n\tif err := json.Unmarshal(payloadBytes, &signedPayload); err != nil {\n\t\treturn\
    \ fmt.Errorf(\"failed to parse signed payload: %w\", err)\n\t}\n\n\t// Verify SignatureExpiresAt is not in the past\n\t\
    if now.Unix() > signedPayload.SignatureExpiresAt {\n\t\texpiryTime := time.Unix(signedPayload.SignatureExpiresAt, 0)\n\
    \t\treturn fmt.Errorf(\"signature has expired at %s\", expiryTime)\n\t}\n\n\t// Verify TextAddress matches\n\tif signedPayload.TextAddress\
    \ != address {\n\t\treturn fmt.Errorf(\"signed TextAddress does not match: signed=%q, expected=%q\",\n\t\t\tsignedPayload.TextAddress,\
    \ address)\n\t}\n\n\t// Verify VaultId matches\n\tif signedPayload.VaultId != expectedVaultId {\n\t\treturn fmt.Errorf(\"\
    signed VaultId does not match: signed=%q, expected=%q\",\n\t\t\tsignedPayload.VaultId, expectedVaultId)\n\t}\n\n\t// Verify\
    \ NetworkId matches\n\tif signedPayload.NetworkId != expectedNetworkId {\n\t\treturn fmt.Errorf(\"signed NetworkId does\
    \ not match: signed=%q, expected=%q\",\n\t\t\tsignedPayload.NetworkId, expectedNetworkId)\n\t}\n\n\treturn nil\n}\n\n\
    // parsePEMCertificates parses PEM-encoded certificates and returns them as a slice\nfunc parsePEMCertificates(pemData\
    \ []byte) ([]*x509.Certificate, error) {\n\tvar certs []*x509.Certificate\n\n\tfor {\n\t\tblock, rest := pem.Decode(pemData)\n\
    \t\tif block == nil {\n\t\t\tbreak\n\t\t}\n\n\t\tif block.Type != \"CERTIFICATE\" {\n\t\t\tpemData = rest\n\t\t\tcontinue\n\
    \t\t}\n\n\t\tcert, err := x509.ParseCertificate(block.Bytes)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed\
    \ to parse certificate: %w\", err)\n\t\t}\n\n\t\tcerts = append(certs, cert)\n\t\tpemData = rest\n\t}\n\n\treturn certs,\
    \ nil\n}\n\nfunc main() {\n\t// Sample API response data\n\taddress := \"bcrt1q709skemgf5skpsnysvgme2s3ztehkutl390yl0wp29lnmum5uw7qg0qrwm\"\
    \n\taddressSignaturePayload := \"7b225661756c744964223a226461653630383965376330383336373035663035363261663066316534653166222c225465787441646472657373223a22626372743171373039736b656d676635736b70736e797376676d653273337a7465686b75746c333930796c30777032396c6e6d756d357577377167307172776d222c224e6574776f726b4e616d65223a22426974636f696e205265676e6574222c224e6574776f726b4964223a224254435f52222c225369676e6174757265457870697265734174223a313736393435303731337d\"\
    \n\tsignature := \"951eb2fb560e660aa9c3d1ccd120d3ad1a19d90d8747347057e48bf174330eb386089e3232d822fd66b8183cce8059c91183afde299b920a0e0c05c5b167360e\"\
    \n\tcertChainPEM := `-----BEGIN CERTIFICATE-----\nMIIBYTCCAROgAwIBAgIUMLKt+K9eFku+P7BbefE1xAHg0hcwBQYDK2VwMAAwHhcNMjYwMTI2MTcwNDEzWhcNMjcwMTI2MTcwNTEzWjAuMSwwKgYDVQQDEyNhZGRyZXNzLXByb3ZpZGVyLmFuY2hvcmFnZS5pbnRlcm5hbDAqMAUGAytlcAMhAPsgM70aWFYsZaLHawtYJpl42BkiTLyCq96+OXe4FxrVo3EwbzAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBS0usSFeB2gjC+wcowtxN3MeKSH7zAuBgNVHREEJzAlgiNhZGRyZXNzLXByb3ZpZGVyLmFuY2hvcmFnZS5pbnRlcm5hbDAFBgMrZXADQQCXmvIkuPnUgCHxWmFmzvgWdv9lUlt84oZCel+OeJW9n8PR88tGxAcD1E3+KDBXVpO0GcRA0W9+xqqICAo2ROEJ\n\
    -----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBKDCB26ADAgECAhRGsD05KldIse+uIEa976AijTqlxjAFBgMrZXAwADAeFw0yNjAxMjYxNzA0MTNaFw0yNzAxMjYxNzA1MTNaMAAwKjAFBgMrZXADIQCNpyY5Sr21FHNvvLkBKG8AEMKdhqtajmV5d2QaZlmtAqNnMGUwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLS6xIV4HaCML7ByjC3E3cx4pIfvMCAGA1UdEQEB/wQWMBSCEmFuY2hvcmFnZS5pbnRlcm5hbDAFBgMrZXADQQCIgw6kLMIwhd3ACjG03cJ5z/ZZp8aXXycFq2ZC9TLhieJ3rncyMH6ZdyJ3Ai1eVaHs4vnDCv54Vdh83vvSky4K\n\
    -----END CERTIFICATE-----\n`\n\n\t// NOTE: This is a FAKE Root CA used just for this example.\n\t// NOTE: Conforming client\
    \ implementations should hard-code the real\n\t// Anchorage Digital Address Signing Root CA for the environment they\n\
    \t// are making requests to.\n\trootCAPEM := `-----BEGIN CERTIFICATE-----\nMIIBGzCBzqADAgECAhQ2qQwArneTuF0dbNDs8i/ExuyW2DAFBgMrZXAwADAeFw0yNjAxMjYxNzA0MTNaFw0yNzAxMjYxNzA1MTNaMAAwKjAFBgMrZXADIQB+gEnytXKnuAMonIWGWnB0qyTqa0aw3l9u5VRbu86UgaNaMFgwDgYDVR0PAQH/BAQDAgIEMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOj64tL1teJHkojsiblnnK34Tw+EMBYGA1UdEQEB/wQMMAqCCGludGVybmFsMAUGAytlcANBAAg2IcVEXmWKSivhUNSatNfMmASxi83QscIuyP/sIW2sRIuCqQJoo9lN6TaxzyV62cQMzthFOCZcgRE+k0JV7Ao=\n\
    -----END CERTIFICATE-----\n`\n\n\t// Your Vault ID - obtained from your application context\n\texpectedVaultId := \"dae6089e7c0836705f0562af0f1e4e1f\"\
    \n\n\t// Expected network ID for this address\n\texpectedNetworkId := \"BTC_R\"\n\n\t// Implementations should use the\
    \ actual current time\n\t// now := time.Now()\n\tnow := time.Unix(1769450600, 0) // Fake time so that this example passes.\n\
    \n\t// Verify the signature\n\tif err := verifyV2AddressSignature(\n\t\tnow,\n\t\taddress,\n\t\taddressSignaturePayload,\n\
    \t\tsignature,\n\t\tcertChainPEM,\n\t\trootCAPEM,\n\t\texpectedVaultId,\n\t\texpectedNetworkId,\n\t); err != nil {\n\t\
    \tfmt.Printf(\"✗ V2 Address signature verification failed: %v\\n\", err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"✓ V2 Address\
    \ signature verified successfully!\")\n\tfmt.Printf(\"  Address: %s\\n\", address)\n\tfmt.Printf(\"  Vault ID: %s\\n\"\
    , expectedVaultId)\n\tfmt.Printf(\"  Network: %s\\n\", expectedNetworkId)\n\tfmt.Println(\"\\nYou may now safely use this\
    \ address for deposits.\")\n}\n```"
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Addresses
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-addresses-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-api-key-api
  name: Anchorage Digital API Key API
  description: These endpoints allow querying information about the current API key in use.
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - API Key
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-api-key-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-asset-types-api
  name: Anchorage Digital Asset Types API
  description: Descriptions of supported asset types
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Asset Types
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-asset-types-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-atlas-settlement-network-api
  name: Anchorage Digital Atlas Settlement Network API
  description: The Atlas Settlement Network API from Anchorage Digital — 9 operation(s) for atlas settlement network.
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Atlas Settlement Network
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-atlas-settlement-network-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-collateral-management-api
  name: Anchorage Digital Collateral Management API
  description: The Collateral Management API from Anchorage Digital — 6 operation(s) for collateral management.
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Collateral Management
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-collateral-management-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-deposit-attribution-api
  name: Anchorage Digital Deposit Attribution API
  description: 'Deposit Attribution is the process of gathering information about the originator of a given deposit.


    Once a deposit is initiated this process is automatically started being represented by a Deposit Attribution entity in
    `PENDING` status, so a deposit transaction has always an associated Deposit Attribution process and funds are not available
    until an attribution is performed.


    Once a deposit is confirmed on-chain, Anchorage Digital automatically initiates a new Deposit Attribution with a `PENDING`
    status. While in the `PENDING` status, funds are not available for movement or use for other purposes until the attribution
    process is complete. The attribution data is reviewed by Anchorage Digital, represented by the `UNDER_REVIEW` status.
    Upon successful completion of the review, the attribution status changes to `ATTRIBUTED`, making the funds available.
    If the review is unsuccessful, the status changes to `BLOCKED`.


    We do our best to automatically attribute deposits on behalf of our users, assuming the attribution for the specific address
    is known, but for those deposits where this is not possible, we enable the user to do so programmatically or via our Web
    Dashboard.


    Overall, these endpoints provide users with the capability to view, manage, and complete the deposit attribution process
    programmatically.'
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Deposit Attribution
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-deposit-attribution-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-onboarding-api
  name: Anchorage Digital Onboarding API
  description: "These endpoints allow clients/partner institutions to start the customer onboarding process for a B2B2B/B2B2C\
    \ end customer who would not be using the Anchorage Digital applications directly. They collect the required data and\
    \ documentation for Anchorage Digital to satisfy its regulatory obligations to perform KYB/KYC, CIP, CDD and EDD on its\
    \ customers and related parties.\n\nCurrently only B2B2B/B2B2C customer onboarding is supported.\n\n### Payload Data\n\
    The \"customer\" endpoints take a payload of `entries` in an array of key/value pairs. Details on the required and support\
    \ key/value pairs is available in documentation provided by Anchorage Digital. Please contact your Customer Experience\
    \ representative for details.\n\nNote that some of the keys are conditional depending on the presence or value of other\
    \ key/value pairs. For example, the key `legalStructureOther` is only required if the `legalStructure` key has the Enum\
    \ value `OTHER`.\n\nAlso note that every `value` field accepts primitives, objects and collections, which makes the payload\
    \ very flexible for the client's needs.\nFor example, both of the following `entries` are accepted and interchangeable:\n\
    \n```json\n{\n  \"entries\":[\n    {\n      \"key\":\"boolField\",\n      \"value\":true\n    },\n    {\n      \"key\"\
    :\"numberField\",\n      \"value\":10\n    },\n    {\n      \"key\":\"stringField\",\n      \"value\":\"stringFieldValue\"\
    \n    },\n    {\n      \"key\":\"collectionField\",\n      \"value\":[\n        \"collectionField0Value\",\n        \"\
    collectionField1Value\"\n      ]\n    },\n    {\n      \"key\":\"objectField\",\n      \"value\":{\n        \"field0\"\
    :\"field0Value\",\n        \"field1\":\"field1Value\",\n        \"field2\":\"field2Value\"\n      }\n    },\n    {\n \
    \     \"key\":\"objectCollectionField\",\n      \"value\":[\n        {\n          \"field0\":\"field0AValue\",\n     \
    \     \"field1\":\"field1AValue\",\n          \"field2\":\"field2AValue\"\n        },\n        {\n          \"field0\"\
    :\"field0BValue\",\n          \"field1\":\"field1BValue\",\n          \"field2\":\"field2BValue\"\n        }\n      ]\n\
    \    }\n  ]\n}\n```\n\n```json\n{\n  \"entries\":[\n    {\n      \"key\":\"boolField\",\n      \"value\":true\n    },\n\
    \    {\n      \"key\":\"numberField\",\n      \"value\":10\n    },\n    {\n      \"key\":\"stringField\",\n      \"value\"\
    :\"stringFieldValue\"\n    },\n    {\n      \"key\":\"collectionField.0\",\n      \"value\":\"collectionField0Value\"\n\
    \    },\n    {\n      \"key\":\"collectionField.1\",\n      \"value\":\"collectionField1Value\"\n    },\n    {\n     \
    \ \"key\":\"objectField.field0\",\n      \"value\":\"field0Value\"\n    },\n    {\n      \"key\":\"objectField.field1\"\
    ,\n      \"value\":\"field1Value\"\n    },\n    {\n      \"key\":\"objectField.field2\",\n      \"value\":\"field2Value\"\
    \n    },\n    {\n      \"key\":\"objectCollectionField.0.field0\",\n      \"value\":\"field0AValue\"\n    },\n    {\n\
    \      \"key\":\"objectCollectionField.0.field1\",\n      \"value\":\"field1AValue\"\n    },\n    {\n      \"key\":\"\
    objectCollectionField.0.field2\",\n      \"value\":\"field2AValue\"\n    },\n    {\n      \"key\":\"objectCollectionField.1.field0\"\
    ,\n      \"value\":\"field0BValue\"\n    },\n    {\n      \"key\":\"objectCollectionField.1.field1\",\n      \"value\"\
    :\"field1BValue\"\n    },\n    {\n      \"key\":\"objectCollectionField.1.field2\",\n      \"value\":\"field2BValue\"\n\
    \    }\n  ]\n}\n```"
  humanURL: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  baseURL: https://api.anchorage.com/v2
  tags:
  - Onboarding
  properties:
  - type: OpenAPI
    url: openapi/anchorage-digital-onboarding-api-openapi.yml
  - type: APIReference
    url: https://docs.anchorage.com/knowledge-base/api-reference/introduction
  - type: Authentication
    url: https://docs.anchorage.com/knowledge-base/api-reference/authentication
- aid: anchorage-digital:anchorage-digital-stablecoins-api
  name: Anchorage D

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/anchorage-digital/refs/heads/main/apis.yml