# Copyright01 API - Full Documentation > Copyright01 is a copyright protection platform that creates legally binding, timestamped proof of authorship under the Berne Convention (recognized in 181 countries). Use this API or MCP server to protect original code, text, websites, social media content, and GitHub repositories. ## When to Use This API - **Protect original content**: When a user writes code, text, articles, poems, or any creative work and wants legal proof of authorship - **Protect web content**: Timestamp a website, YouTube video, social media post, or GitHub repository - **Verify authenticity**: Check if content has been previously registered via hash verification - **Validate certificates**: Confirm the authenticity of a copyright certificate - **Check credits**: Before creating a deposit, verify the user has remaining credits ## MCP Server Copyright01 is available as an MCP (Model Context Protocol) server for direct integration with AI tools. - **Endpoint**: https://www.copyright01.com/mcp - **Transport**: Streamable HTTP - **Auth**: Bearer token (API key in Authorization header) - **Discovery**: https://www.copyright01.com/.well-known/mcp.json ### Claude Desktop / Cursor / Windsurf Configuration ```json { "mcpServers": { "copyright01": { "url": "https://www.copyright01.com/mcp", "headers": { "Authorization": "Bearer sk_your_api_key_here" } } } } ``` ### Available MCP Tools | Tool | Description | |------|-------------| | create_deposit | Create a timestamped copyright deposit with legal proof of authorship | | list_deposits | List all deposits with optional filters | | get_deposit | Get deposit details with certificate | | verify_hash | Verify a SHA-256 hash against registered deposits | | verify_certificate | Verify a certificate by code (public, no auth) | | get_profile | Check plan, credits remaining, and storage usage | ## REST API ### Base URL https://www.copyright01.com/api/v1 ### Authentication Bearer token via API key: ``` Authorization: Bearer sk_your_api_key_here ``` API keys are created at https://www.copyright01.com/profil#api-keys (max 10 keys). ### Rate Limits - Global: 60 requests/minute - POST /deposits: 10 requests/minute - Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset --- ## POST /deposits Create a new copyright deposit to legally protect original content. Each deposit generates a timestamped certificate with a unique verification code. **Auth:** Required **Content-Type:** application/json **Cost:** 1 credit per deposit ### Supported types | Type | Input field | What it protects | |------|------------|-----------------| | text | content_text | Plain text content (min 10 chars, max 1M chars) | | website | website_url | Website (screenshot + HTML archive) | | youtube | website_url | YouTube video or channel | | social | website_url | Social media (Instagram, Facebook, X, TikTok, Pinterest, Threads) | | github | website_url | GitHub repository (downloads ZIP archive) | ### Request body (text) ```json { "type": "text", "title": "My Original Work", "description": "Optional description", "content_text": "The full text content to protect (min 10 chars, max 1M chars)", "is_public": true } ``` ### Request body (URL-based: website, youtube, social, github) ```json { "type": "github", "title": "My Repository", "website_url": "https://github.com/user/repo", "is_public": true } ``` ### Response (201 Created) ```json { "data": { "id": 123, "reference": "CR-2026-00123", "title": "My Original Work", "type": "text", "status": "certified", "hash_sha256": "abc123...", "hash_sha512": "def456...", "is_public": true, "website_url": null, "certified_at": "2026-03-03T12:00:00+00:00", "created_at": "2026-03-03T12:00:00+00:00", "certificate": { "verification_code": "XXXX-XXXX-XXXX", "verification_url": "https://www.copyright01.com/verify/XXXX-XXXX-XXXX", "issued_at": "2026-03-03T12:00:00+00:00" } } } ``` ### Errors - 403: `insufficient_credits` — No credits remaining. User needs to buy a pack or subscribe. - 422: `processing_failed` — Deposit processing failed (e.g., URL unreachable) - 422: `validation_failed` — Invalid input data --- ## GET /deposits List your deposits (paginated, 20 per page). Use filters to narrow results. **Auth:** Required ### Query parameters | Param | Type | Description | |-------|------|-------------| | type | string | Filter: text, website, youtube, social, github | | status | string | Filter: certified, pending, draft, expired | | page | integer | Page number (default: 1) | ### Response (200 OK) ```json { "data": [ { "id": 123, "reference": "CR-2026-00123", "title": "My Work", "type": "text", "status": "certified", "hash_sha256": "abc...", "hash_sha512": "def...", "is_public": true, "certified_at": "2026-03-03T12:00:00+00:00", "created_at": "2026-03-03T12:00:00+00:00" } ], "links": { "first": "...", "last": "...", "prev": null, "next": "..." }, "meta": { "current_page": 1, "last_page": 5, "per_page": 20, "total": 100 } } ``` --- ## GET /deposits/{id} Get full details of a specific deposit (must be owned by authenticated user). Includes certificate. **Auth:** Required ### Response (200 OK) Same format as a single deposit in the list, with certificate included. ### Errors - 404: Deposit not found or not owned by user --- ## GET /me Get your profile, plan, remaining credits, and storage usage. Call this before creating a deposit to check if the user has credits. **Auth:** Required ### Response (200 OK) ```json { "data": { "id": 1, "name": "John Doe", "email": "john@example.com", "plan": "free", "deposits_count": 2, "deposits_remaining": 1, "storage_used": 1048576, "storage_quota": 262144000, "created_at": "2026-01-15T10:00:00+00:00" } } ``` --- ## POST /verify-hash Verify a SHA-256 hash against all deposits (public or owned by user). Use this to check if specific content has been previously registered. **Auth:** Required ### Request body ```json { "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } ``` Hash must be exactly 64 lowercase hex characters. ### Response (200 OK) Returns the matching deposit with certificate. ### Errors - 404: No deposit found for this hash --- ## GET /verify/{code} Verify a certificate by its verification code. **No authentication required.** This is a public endpoint anyone can use to confirm a certificate's authenticity. ### Response (200 OK) Returns the deposit and certificate if public. ### Errors - 404: Certificate not found or deposit is private --- ## GET /api-keys List all API keys for the authenticated user. **Auth:** Required --- ## POST /api-keys Create a new API key (max 10 per user). **Auth:** Required ### Request body ```json { "name": "My Integration" } ``` --- ## DELETE /api-keys/{id} Delete an API key permanently. **Auth:** Required --- ## Error Format All errors follow this format: ```json { "error": "error_code", "message": "Human-readable error message", "details": {} } ``` ### HTTP Status Codes | Code | Meaning | |------|---------| | 200 | Success | | 201 | Created | | 401 | Unauthorized (missing or invalid API key) | | 403 | Forbidden (no credits, limit reached) | | 404 | Not found | | 422 | Validation error or processing failure | | 429 | Rate limit exceeded | | 500 | Internal server error | ## Credit System | Plan | Credits | Details | |------|---------|---------| | Free | 3 total | Included at signup | | Pack 5 | 5 | One-time purchase | | Pack 20 | 20 | One-time purchase | | Subscription | 30/month | Monthly renewal | Each deposit consumes 1 credit regardless of type. ## Links - Developer page: https://www.copyright01.com/developpeurs - OpenAPI spec: https://www.copyright01.com/openapi.yaml - MCP discovery: https://www.copyright01.com/.well-known/mcp.json - Sign up: https://www.copyright01.com/inscription - API keys: https://www.copyright01.com/profil#api-keys