Authenticate by including the header 'Authorization: Bearer <API_KEY>' on all requests to the Turnitin Similarity API base URL
Create a submission by POST /api/v1/submissions with a JSON body containing owner (user ID), title, and submitter; note the returned submission id
Upload the file content by PUT /api/v1/submissions/<id>/original with the appropriate Content-Type (e.g., application/pdf or text/plain) and the file binary as the request body
Poll GET /api/v1/submissions/<id> until the status field changes from 'PROCESSING' to 'COMPLETE'; implement exponential backoff between polls
Request a similarity report by POST /api/v1/submissions/<id>/similarity with generation settings such as search_repositories and auto_exclude_self_matching_scope; then GET /api/v1/submissions/<id>/similarity to retrieve the overall_match_percentage once the report status is 'COMPLETE'
Known gotchas
File uploads must follow the two-step process (create submission metadata first, then upload binary); attempting to include file content in the initial POST will be rejected
Similarity reports are not generated automatically upon upload; a separate POST to the similarity endpoint is required, and that too is asynchronous — do not assume the score is available immediately
Turnitin's API uses a per-tenant base URL that varies by institution; using the generic endpoint rather than your institution's tenant-specific URL will return authentication errors even with valid credentials
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp