Skip to main content
POST
/
v1
/
consumer
/
mint
Protect Content (Consumer Mint)
curl --request POST \
  --url https://api.truthlocks.com/v1/consumer/mint \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "content_hash": "<string>",
  "title": "<string>",
  "description": "<string>",
  "content_type": "<string>",
  "file_name": "<string>",
  "file_size": 123,
  "category": "code",
  "ai_metadata": {},
  "visibility": "public"
}
'
{
  "protection_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "attestation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "verify_url": "<string>",
  "share_url": "<string>",
  "content_hash": "<string>",
  "protected_at": "2023-11-07T05:31:56Z",
  "status": "protected"
}

Documentation Index

Fetch the complete documentation index at: https://docs.truthlocks.com/llms.txt

Use this file to discover all available pages before exploring further.

Mint a cryptographic attestation for a piece of content you want to protect. Your personal issuer and signing key are resolved automatically — you do not need to create an issuer or register a key. Hash your content client-side with SHA-256 and submit the hash along with file metadata. The endpoint returns a protection record with a shareable proof URL you can use to demonstrate authorship. Rate limits depend on your plan tier:
PlanProtections per month
Free50
Creator500
ProUnlimited
The response includes content_hash and protected_at so you can confirm which content was protected and the exact timestamp without making a follow-up call.

Parameters

content_hash
string
required
SHA-256 hash of the file content, computed client-side before upload.
title
string
Human-readable title for the protection (e.g. the file name or a short description).
description
string
Optional description providing additional context about the protected content.
content_type
string
MIME type of the content (e.g. image/png, application/pdf, text/x-python).
file_name
string
Original file name including extension.
file_size
integer
File size in bytes.
category
string
Content category. One of code, research, design, media, dataset, ai-output, writing, digital-art, or other. Defaults to other.
ai_metadata
object
Optional AI-extracted metadata object (e.g. from the AI metadata extraction flow).
visibility
string
Controls whether the protection appears on your public portfolio. Either public or private. Defaults to private.

Responses

Authorizations

X-API-Key
string
header
required

API key for machine-to-machine authentication

Body

application/json
content_hash
string
required

SHA-256 hash of the file content, computed client-side.

title
string

Human-readable title for the protection.

description
string

Optional description of the protected content.

content_type
string

MIME type of the content (e.g. image/png).

file_name
string

Original file name including extension.

file_size
integer

File size in bytes.

category
enum<string>

Content category. Defaults to other.

Available options:
code,
research,
design,
media,
dataset,
ai-output,
writing,
digital-art,
other
ai_metadata
object

Optional AI-extracted metadata object.

visibility
enum<string>

Whether the protection appears on your public portfolio. Defaults to private.

Available options:
public,
private

Response

Content protected

protection_id
string<uuid>
attestation_id
string<uuid>
verify_url
string<uri>
share_url
string<uri>
content_hash
string

SHA-256 hash echoed back from the request.

protected_at
string<date-time>

Timestamp when the content was protected (RFC 3339).

status
enum<string>
Available options:
protected