Table of Contents

BCCCR API Documentation

Platform Registration

POST /api/platforms/register

Submit a platform registration application for BCCCR review.

Request Body

{
  "name": "<applicant_name>",
  "email": "<applicant_email>",
  "password": "<password>",
  "password_confirmation": "<password>",
  "platform_name": "<platform_name>",
  "platform_address": "<business_address>",
  "tin_number": "<tax_id>",
  "platform_phone": "<phone_number>",
  "platform_email": "<platform_contact_email>",
  "bank_account_number": "<account_number>",
  "bank_routing_number": "<routing_number>",
  "bank_name": "<bank_name>",
  "api_endpoint": "<optional_api_endpoint>"
}

Response (Success)

{
  "success": true,
  "message": "Platform registration submitted successfully. Your application will be reviewed by BCCCR administrators.",
  "data": {
    "platform_name": "<platform_name>",
    "status": "pending",
    "registration_date": "<timestamp>"
  }
}

Notes

GET /api/platforms/status/{email}

Check the status of a platform registration application.

Response (Success)

{
  "success": true,
  "message": "Registration status retrieved",
  "data": {
    "platform_name": "<platform_name>",
    "status": "<pending|active|inactive>",
    "registration_date": "<timestamp>",
    "approved_at": "<timestamp>",
    "admin_notes": "<notes>"
  }
}
Admin Management

GET /api/admin/applications/pending

Get all pending platform applications (admin only).

Response (Success)

{
  "success": true,
  "message": "Pending applications retrieved",
  "data": [
    {
      "id": <application_id>,
      "name": "<applicant_name>",
      "email": "<email>",
      "platform_name": "<platform_name>",
      "platform_address": "<address>",
      "tin_number": "<tax_id>",
      "platform_phone": "<phone>",
      "platform_email": "<contact_email>",
      "bank_name": "<bank>",
      "created_at": "<timestamp>",
      "admin_notes": "<notes>"
    }
  ]
}

POST /api/admin/applications/{id}/approve

Approve a platform application (admin only).

Request Body

{
  "notes": "<optional_admin_notes>"
}

Response (Success)

{
  "success": true,
  "message": "Platform application approved successfully",
  "data": {
    "platform_name": "<platform_name>",
    "status": "active",
    "approved_at": "<timestamp>",
    "api_key": "<generated_api_key>"
  }
}

POST /api/admin/applications/{id}/reject

Reject a platform application (admin only).

Request Body

{
  "notes": "<rejection_reason>"
}

Response (Success)

{
  "success": true,
  "message": "Platform application rejected",
  "data": {
    "platform_name": "<platform_name>",
    "status": "inactive"
  }
}
Contract Management

POST /api/contracts/register

Register up to 250 contract hashes for a single publication.

Request Body

{
  "ipfs_hash": "<IPFS hash for the publication>",
  "metadata_cid": "<IPFS CID for the metadata>",
  "contract_hashes": [
    "<contract_hash_1>",
    "<contract_hash_2>"
    // ... up to 250
  ]
}

Validation Rules

Response (Success)

{
  "success": true,
  "message": "Contracts registered successfully",
  "data": {
    "registered_count": <number>,
    "ipfs_hash": "<IPFS hash>",
    "metadata_cid": "<metadata CID>",
    "contract_hashes": [ ... ]
  }
}

Response (Validation Error)

{
  "success": false,
  "message": "Validation failed",
  "errors": {
    "contract_hashes": ["Contract hashes already exist: ..."]
  }
}

Example cURL

curl -X POST http://localhost:8000/api/contracts/register \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-api-key>" \
  -d '{"ipfs_hash":"QmTest123","metadata_cid":"QmMeta456","contract_hashes":["hash1","hash2"]}'

POST /api/contracts/validate

Validate a contract hash and return legitimacy and usage information.

Request Body

{
  "contract_hash": "<contract_hash>"
}

Response (Success)

{
  "success": true,
  "message": "Contract found",
  "data": {
    "contract_hash": "<contract_hash>",
    "status": "active",
    "ipfs_hash": "<IPFS hash>",
    "metadata_cid": "<metadata CID>",
    "originating_platform_id": <platform_id>,
    "originating_platform_name": "<platform name>",
    "registered_at": "<timestamp>"
  }
}

Response (Not Found or Inactive)

{
  "success": false,
  "message": "Contract not found",
  "data": null
}

Example cURL

curl -X POST http://localhost:8000/api/contracts/validate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-api-key>" \
  -d '{"contract_hash":"hash1"}'

PUT /api/contracts/{hash}/revoke

Revoke a contract. Only the publishing platform can revoke its own contracts.

Request Body

{
  "reason": "<reason for revocation>"
}

Response (Success)

{
  "success": true,
  "message": "Contract revoked successfully",
  "data": {
    "contract_hash": "<contract_hash>",
    "status": "revoked",
    "revoked_at": "<timestamp>",
    "reason": "<reason>"
  }
}

Response (Not Allowed or Already Revoked)

{
  "success": false,
  "message": "Only the publishing platform can revoke this contract",
  "data": null
}
{
  "success": false,
  "message": "Contract is already revoked",
  "data": null
}

Example cURL

curl -X PUT http://localhost:8000/api/contracts/hash1/revoke \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-api-key>" \
  -d '{"reason":"No longer valid"}'
Sales Reporting

POST /api/sales

Report a cross-platform sale to track royalty obligations between platforms.

Request Body

{
  "contract_hash": "0x1234567890abcdef...",
  "buyer_wallet_address": "0xabcdef1234567890...",
  "sale_amount": 29.99,
  "royalty_amount": 2.99,
  "transaction_hash": "0x9876543210fedcba...",
  "metadata": {
    "payment_method": "credit_card",
    "currency": "USD",
    "platform_fee": 1.50
  },
  "sold_at": "2024-01-15T10:30:00Z"
}

Required Fields

Optional Fields

Validation Rules

Response (Success)

{
  "success": true,
  "message": "Sale reported successfully",
  "data": {
    "transaction_id": 123,
    "royalty_id": 456,
    "contract_hash": "0x1234567890abcdef...",
    "sale_amount": 29.99,
    "royalty_amount": 2.99,
    "sold_at": "2024-01-15T10:30:00Z"
  }
}

Response (Validation Error)

{
  "success": false,
  "message": "Validation failed",
  "errors": {
    "contract_hash": ["Contract hash is not registered."],
    "royalty_amount": ["Royalty amount cannot exceed sale amount."]
  }
}

Business Logic

Example cURL

curl -X POST http://localhost:8000/api/sales \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-api-key>" \
  -d '{"contract_hash":"0x1234567890abcdef","sale_amount":29.99,"royalty_amount":2.99}'
Content Mirroring

POST /api/mirrors

Report content mirroring with IPFS locations to create a decentralized backup system.

Request Body

{
  "contract_hash": "0x1234567890abcdef...",
  "mirrored_ipfs_hash": "QmMirroredContent123",
  "mirror_location": "ipfs-node-1",
  "access_count": 0,
  "mirrored_at": "2024-01-15T10:30:00Z"
}

Required Fields

Optional Fields

Validation Rules

Response (Success)

{
  "success": true,
  "message": "Content mirror created successfully",
  "data": {
    "mirror_id": 123,
    "contract_hash": "0x1234567890abcdef...",
    "ipfs_hash": "QmOriginalContent",
    "mirrored_ipfs_hash": "QmMirroredContent123",
    "mirror_location": "ipfs-node-1",
    "access_count": 0,
    "mirrored_at": "2024-01-15T10:30:00Z",
    "action": "created"
  }
}

Business Logic

Example cURL

curl -X POST http://localhost:8000/api/mirrors \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <your-api-key>" \
  -d '{"contract_hash":"0x1234567890abcdef","mirrored_ipfs_hash":"QmMirroredContent123"}'

GET /api/mirrors/{ipfsHash}

Retrieve all mirrors for a specific IPFS hash to find available content locations.

Response (Success)

{
  "success": true,
  "message": "Mirrors retrieved successfully",
  "data": {
    "ipfs_hash": "QmOriginalContent",
    "mirrors": [
      {
        "mirror_id": 123,
        "mirrored_ipfs_hash": "QmMirroredContent123",
        "mirror_location": "ipfs-node-1",
        "platform_name": "Platform A",
        "access_count": 5,
        "last_accessed_at": "2024-01-15T10:30:00Z",
        "mirrored_at": "2024-01-10T09:00:00Z"
      }
    ],
    "total_mirrors": 1
  }
}

Example cURL

curl -X GET http://localhost:8000/api/mirrors/QmOriginalContent \
  -H "X-API-Key: <your-api-key>"