The Only API docs
Bulk Import

Supply a 2FA code for an import row

Complete one row parked on needs_2fa by submitting the code the creator received.

POST
/import/jobs/{job_id}/rows/{row_id}/otp

Complete one row parked on needs_2fa by submitting the code the creator received.

Synchronous by design: it is a single platform call and an operator is watching, so the response carries the real outcome rather than "queued". success: true means the account is connected.

The field is code (otp_code is also accepted here), 4–12 characters, letters, digits and hyphens. This route is on the standard sensitive tier (100/minute), not the login tier — clearing a queue of parked rows back to back is the expected workflow, and the code is verified by the platform rather than by us.

X-API-Key<token>

Your CRM panel API key

In: header

Path Parameters

job_id*string

Import job ID (32-character hex) returned by POST /import/jobs.

row_id*integer

Row ID within the import job — the id field of a row from GET /import/jobs/{job_id}, not its row_index.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/import/jobs/string/rows/0/otp" \  -H "Content-Type: application/json" \  -d '{    "code": "string"  }'
{  "success": true,  "row": {    "id": 0,    "job_id": "string",    "row_index": 0,    "source_line": 0,    "lane": "cookie",    "platform": "onlyfans",    "email": "string",    "label": "string",    "proxy": "string",    "status": "pending",    "has_password": true,    "has_totp_secret": true,    "two_fa_expires_at": "string",    "two_fa_remaining_seconds": 0,    "of_user_id": "string",    "username": "string",    "error": "string",    "error_reason": "string",    "permanent": true,    "attempts": 0,    "started_at": "string",    "finished_at": "string",    "created_at": "string",    "updated_at": "string"  }}