Bynn
Detect Fraud in Images and PDF
- Category
- Security
- Primary Subcategory
- Content Authenticity & Cryptographic Proof
Integration details
Description
Detect signs of fraud, manipulation, and AI generation in images and PDF documents. Upload a file and the app analyzes it for authenticity signals such as possible edits, synthetic content, document tampering, and AI-generated visuals. It helps teams quickly review suspicious images, identity documents, invoices, statements, screenshots, and PDFs before making decisions. Results are presented in a clear, easy-to-understand format so users can spot risks faster, reduce manual review time, and make more confident fraud checks. Ideal for compliance teams, fraud analysts, marketplaces, fintech platforms, KYC providers, insurers, and anyone who needs a practical way to assess whether visual content or documents may have been altered, forged, or AI-generated.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Content Authenticity & Cryptographic Proof
- Secondary Subcategories
- None listed
- Brand
- Bynn
- Access
- Account required
- First tracked
- 2026-08-05
- Tool count
- 142
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Bynn
Get updates when Bynn’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Content Authenticity & Cryptographic Proof
View Category142 tools agents can invoke
Save a payment method and activate the 7-day free trial with $10 credit (Bynn `POST /v1/users/activate-trial`). When to use: once the user has completed Stripe card setup client-side and you have a succeeded `setup_intent_id` and a `payment_method_id`. This attaches the card as the org's default, switches to the chosen `plan` on a 7-day trial (no immediate charge), and grants $10 of trial credit. Only allowed when the org is currently on the 'Trial' plan. Rate-limited (5/min). Requires: a dashboard access token (JWT) on the connection. Returns: `{success: true, message, credit_amount: "$10.00", plan, trial_ends_at (ISO 8601)}`. Errors: `400` (org not on the 'Trial' plan, SetupIntent not 'succeeded', or a Stripe error), `401` (missing/invalid token), `500` (unexpected activation failure).
activate_trial
Add an admin note to a dossier (Bynn `POST /v1/autodoc/dossiers/:dossier_token/notes`). When to use: to record a review comment on a dossier. The note is authored by the dashboard user behind the JWT; the server stamps the author and organization. Requires: dashboard token (JWT). Returns: `201` with the created note (same serialized shape as `list_dossier_notes` items). Errors: `401` (auth), `404` (no such dossier), `422` (content over 2000 chars or invalid).
add_dossier_note
Begin adding a passkey to the authenticated user's account: get WebAuthn creation options (Bynn `POST /v1/users/passkeys/add`). When to use: to START registering a new passkey for the current user. This returns the WebAuthn `PublicKeyCredentialCreationOptions` plus a `passkey_token`; a browser client must then call `navigator.credentials.create(...)` with those options and complete the ceremony out-of-band. NOTE: this tool only issues the options — the verification/finish step is not exposed here. Rate-limited (10/min). Requires: a dashboard access token (JWT) on the connection. Returns: `{options (WebAuthn creation options JSON), passkey_token}`. The challenge is valid for 5 minutes. Errors: `400` (failed to create passkey options), `401` (missing/invalid token).
add_passkey
Approve a pending HITL approval (Bynn `POST /v1/autodoc/approvals/:token/approve`). When to use: to resolve a paused workflow approval with the 'approved' handle — this resumes the workflow down the approved branch. Only pending approvals on a dossier still awaiting approval can be resolved; a concurrent resolution returns 409. Requires: dashboard token (JWT). Returns: `{token, status: 'approved', resolutionHandle: 'approved', resolvedAt, resolvedByEmail, comment}`. Errors: `401` (auth), `404` (no such approval), `409` (already resolved, or dossier no longer awaiting approval), `422` (comment over 500 chars).
approve_approval
Attach an organization tag to a dossier (Bynn `POST /v1/autodoc/dossiers/:dossier_token/organization_tags`). When to use: to label a dossier with an existing org tag (create tags with `create_organization_tag`). Idempotent — attaching an already-attached tag is a no-op. Requires: dashboard token (JWT). Returns: `{token, color, name, dossiersCount}` for the tag. Errors: `401` (auth), `404` (dossier or tag not found in your organization).
attach_dossier_tag
Schedule cancellation of the current subscription (Bynn `POST /v1/billing/cancel_plan`). When to use: to cancel a paid plan. The plan stays active (and billing continues) until the end of the billing period unless `immediate` is true; the cancellation can be reversed by changing plan again before it takes effect (`can_reactivate: true`). Restrictions that return 400: no active subscription; already scheduled for cancellation; Trial plans cannot be cancelled; and a plan created today cannot be cancelled until the next day ("still being set up"). Requires: a dashboard access token (JWT) on the connection. Returns: `{success, message, cancellation_date, cancellation_date_formatted, current_plan, billing_continues_until, can_reactivate}`. Errors: `401` (auth); `400` (no subscription, already scheduled, trial plan, same-day cancellation, or cancellation failed).
cancel_billing_plan
Cancel / abort a session (Bynn `DELETE /v1/sessions/:session_id`). When to use: when the applicant chooses to abort the flow, or when consent is refused. After cancellation `get_session`/`get_session_preflight` return 404/410. Requires: no API key — the `session_id` in the path is the credential. Returns: `{status: "cancelled"}`. Errors: `404` (invalid session).
cancel_session
Change the organization's subscription plan (Bynn `POST /v1/billing/change_plan`). When to use: to upgrade or downgrade. Preconditions: the org must already have a valid payment method AND a complete billing address — otherwise this returns 400 with `requires_payment_method: true` or `requires_billing_address: true` (add a card via `create_setup_intent` + `confirm_payment_method`, and set the address via `update_company_details` first). Call `list_billing_plans` first to confirm the target is a valid move. Requires: a dashboard access token (JWT) on the connection. Returns: `{success, message, new_plan, plan_name, billing_cycle, effective_date, billable_days, current_balance, monthly_fee, monthly_commitment, monthly_commitment_pro_rate, due_today, confirmation_sent_to, is_queued_downgrade}` (monetary fields are in dollars). Upgrades apply now; downgrades are queued until `effective_date`. Errors: `401` (auth); `400` (missing payment method / billing address, invalid or Enterprise plan, or the plan change failed).
change_billing_plan
Estimate the age of faces in an image (age verification / minor detection). Runs the `age-detection` moderation model (Bynn `POST /v1/moderation/infer`). Use this to estimate a person's age from a photo — e.g. age-gating or detecting minors. For an attached/uploaded image use the `image` file param; a URL uses `image_url`. Synchronous. Requires: a Bynn access token (dashboard JWT) or an API key on the connection. Returns: `{success, data: {num_faces, image_size: {width, height}, faces: [ { age (estimate), from_age, to_age (range), is_minor, challenge_25 (looks under 25), sex, sex_code, confidence, uncertainty, bbox: {x1, y1, x2, y2} } ]}}`. An empty `faces` list (num_faces 0) means no face was detected. Errors: `401` (auth), `402` (insufficient balance), `403` (model needs a higher plan), `404` (model not found), `422` (missing/invalid image).
check_age
Complete email verification with the code (Bynn `PATCH /v1/sessions/:session_id/email_verification`). When to use: after `start_email_verification`, submit the code the applicant received. Note: after too many wrong attempts the step is marked failed but still returns `{status: "accepted"}` so the flow can continue. Re-poll `get_session_preflight` after. Requires: no API key — the `session_id` in the path is the credential. Returns: `{status: "accepted"}`. Errors: `404` (invalid session, or wrong code — `invalid_code_retry`).
check_email_verification
Complete phone verification with the SMS code (Bynn `PATCH /v1/sessions/:session_id/phone_verification`). When to use: after `start_phone_verification`, submit the code the applicant received. Note: after too many wrong attempts the step is marked failed but still returns `{status: "accepted"}` so the flow can continue. Re-poll `get_session_preflight` after. Requires: no API key — the `session_id` in the path is the credential. Returns: `{status: "accepted"}`. Errors: `404` (invalid session, or wrong code — `invalid_code_retry`).
check_phone_verification
Finalize a liveness capture (Bynn `GET /v1/age_verification/liveness/:age_verification_id/complete`). When to use: STEP 3 of the liveness flow, after the browser SDK has finished the live face capture (i.e. after `start_age_verification_liveness`). This pulls the liveness results from AWS Rekognition and runs the age/face analysis, storing it on the session. Once this succeeds, call `get_age_verification_result(age_verification_id, ...)` to read the age estimate. Requires: no API key — the `age_verification_id` in the path is the credential (client-side/session call). Returns: `{verification: "completed", status}` where `status` is the liveness capture status (e.g. `created`, `succeeded`, `failed`, `expired`). Errors: `400` (no reference image — the capture was not actually performed), `404` (session not found, expired, or no liveness session present for this id).
complete_age_verification_liveness
Complete a face-liveness capture (Bynn `POST /v1/sessions/:session_id/liveness/complete`). When to use: AFTER the liveness capture SDK finishes (following `start_liveness`), to fetch the result and tell whether it succeeded or must be re-run. Then re-poll `get_session_preflight`. Requires: no API key — the `session_id` in the path is the credential. Returns: `{verification: "completed", status}` where `status` is the lowercased liveness result (e.g. "succeeded" | "failed"). Errors: `400` (could not complete liveness), `404` (invalid session, or no liveness session was started — call `start_liveness` first).
complete_liveness
Save the confirmed card as the default payment method (Bynn `POST /v1/billing/confirm_payment_method`). When to use: STEP 2 of adding a card, after the client-side Stripe.js confirms the SetupIntent from `create_setup_intent`. This attaches the PaymentMethod to the Stripe customer, sets it as default, and stores card + billing-address details on the org (and, where a payment mandate is required, e.g. India, creates the Stripe subscription). Precondition: the SetupIntent must have status 'succeeded' — otherwise 400. Requires: a dashboard access token (JWT) on the connection. Returns: `{success, payment_method: {id, card_brand, last4, exp_month, exp_year, cardholder_name, is_default, created_at, billing_address}}`. Errors: `401` (auth); `400` (SetupIntent not succeeded, or Stripe error `type: "stripe_error"`); `500` (failed to save).
confirm_payment_method
Create a new liveness age-verification session (Bynn `POST /v1/age_verification/liveness`). When to use: this is STEP 1 of the higher-security liveness flow. It opens a session and records the user's consent. Next call `start_age_verification_liveness(session_id)` to obtain the temporary AWS Rekognition credentials the browser SDK needs to run the live face capture. (For a quick, lower-security check with no liveness, use `verify_age_from_selfie` instead.) Requires: a Public API key on the connection. Billable: consumes one liveness verification credit; a `402 insufficient_balance` error means the org must top up. Returns: `{session_id}` — the session token. Pass this same value as the `session_id` / `age_verification_id` argument to every later step of the flow. Errors: `400` (could not start liveness), `401` (missing/invalid public key), `402` (insufficient balance).
create_age_verification_session
Create a document collection (Bynn `POST /v1/autodoc/collections`). When to use: to define a new reusable set of document requirements that a workflow's upload node can reference. Use `list_document_types` first to pick valid `documentType` identifiers. Requires: dashboard token (JWT). Returns: `201` with the created collection (same shape as `get_document_collection`). Errors: `401` (auth), `400` (a document has more than 50 OCR fields), `422` (validation — invalid document type, missing required requirement fields, etc.).
create_document_collection
Create a new face collection (Bynn `POST /v1/face-collections`). When to use: FIRST step of any face workflow. A collection groups enrolled faces so you can later search/identify against them. Do this before `enroll_face` or `search_faces`. Requires: a Private API key OR a dashboard token on the connection. Returns: `{collection_id (fc_...), name, description, face_count, created_at}`. - Pass `collection_id` to `enroll_face`, `search_faces`, and `delete_face_collection`. Errors: `401` (missing/invalid auth), `422` (validation, e.g. missing name), `429` (rate limit: 30/min).
create_face_collection
Create a fraud-analysis agent / operator (Bynn `POST /v1/reasoning/agents/fraud-analysis`). When to use: to build a specialized tool agent that an orchestrator can call. The new agent is `active` and uses your org's default LLM. Assign it to orchestrators now via `orchestratorIds`, or later via `create_orchestrator`/`update_orchestrator`. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: the full operator object (token, name, toolType, description, systemPrompt, priority, capabilities, status, ...). Save the `token`. Errors: `401` (auth), `403` (an `orchestratorIds` orchestrator not found in your org), `422` (validation), `429` (rate limited).
create_fraud_agent
Send an AutoDoc invitation by email or SMS (Bynn `POST /v1/autodoc/invitations`). When to use: to invite a recipient to start a workflow. The recipient gets a link (`https://start.auto-doc.ai/<workflow_token>?invitation_token=<adi_...>`) that opens the visitor app and links the resulting dossier back to this invitation. Delivery is async: status advances pending -> sent -> delivered -> opened -> started. Links expire after 30 days. NOT idempotent — repeated calls create new invitations (send a unique `reference` and check `list_invitations` first if you need de-duplication). Billable: one send credit per invitation (test keys are not billed). Requires: a private API key (`private_...`) OR a dashboard token (JWT). Returns: `201` with the invitation entity (token `adi_...`, status, recipient, workflow, reference, timestamps). Errors: `400` (invalid request), `401` (auth), `402` (insufficient balance), `404` (workflow not found), `422` (validation — bad recipient/channel), `429` (rate limit / daily cap).
create_invitation
Run a moderation / AI-detection inference (Bynn `POST /v1/moderation/infer`). When to use: to moderate or analyze a single piece of content with a named model. First choose a `model` api_name via `list_all_moderation_models` / `get_moderation_model`, then supply the input that matches the model's TYPE: - text model -> `content` - image model -> `image_url` OR `base64_image` (or `base64_pdf` for `vlm-ocr`) - video model -> `video_url` OR `base64_video` (wanted-person-detection also accepts `image_urls`/`base64_images` batches — do not mix video and images) - audio model -> `audio_url` OR `base64_audio` This runs SYNCHRONOUSLY: the result is returned inline (no polling needed). Requires: a dashboard token (JWT) or a private API key on the connection. Billable — charges one credit per inference (video/audio billed per minute, PDF/batch per page/ image). Test API keys skip billing and return mock results. Returns (InferenceEntity): `inference_id` (e.g. `inf_abc123`), `model_id`, `model_name`, `moderation_type` (image|video|audio|text), `status` (pending|processing|completed|failed), `result` (the model's output object), `input_url`, `response_time_ms`, `duration_seconds`, `billable_quantity`, `cost` (e.g. `$0.00010`), `created_at`, `completed_at`, and `error_message` if it failed. Errors: `401` (missing/invalid credential), `402` (`insufficient_balance` — top up), `403` (`plan_upgrade_required` — model needs a higher plan), `422` (invalid/unknown model, missing or too-large input, e.g. `content_required`, `image_input_required`, `image_too_large`, `too_many_images`), `500` (inference/billing error — auto-refunded).
create_moderation_inference
Create an orchestrator (coordinator) agent (Bynn `POST /v1/reasoning/agents/orchestrators`). When to use: to build a coordinator that runs reasoning jobs over documents. Create your fraud-analysis agents first (`create_fraud_agent`) so you can pass their tokens in `assignedAgentIds`. The new orchestrator is `active` and uses your org's default LLM. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: the full orchestrator object (token, name, description, systemPrompt, coordinationStrategy, assigned agents, status, ...). Save the `token`. Errors: `401` (auth), `403` (an `assignedAgentIds` operator not found in your org), `422` (a `documentContentTypes` value already assigned to another orchestrator, or other validation), `429` (rate limited).
create_orchestrator
Create an organization tag (Bynn `POST /v1/autodoc/organization_tags`). When to use: to define a new reusable dossier label. Max 100 tags per organization. Requires: dashboard token (JWT). Returns: `201` with `{token, color, name, dossiersCount: 0}`. Errors: `401` (auth), `400` (name over 50 chars), `422` (invalid color or tag limit reached).
create_organization_tag
Queue an ASYNCHRONOUS fraud-reasoning job for a document (Bynn `POST /v1/reasoning/jobs`). When to use: to run an orchestrator over a document without blocking. This returns immediately with a job token; poll `get_reasoning_job(id)` until `status` is `completed` or `failed`. For an inline/blocking run instead, use `test_orchestrator`. Prefer `orchestratorId` when you want a specific coordinator. Requires: a dashboard token (JWT). Rate limit: 10/min. Consumes LLM tokens on execution. Returns: `{id (job token), status, triggerType, documentId, documentName, orchestratorId, orchestratorName, createdAt, message}`. Errors: `401` (auth), `404` (document not found in your org), `422` (no active orchestrator available to run), `429` (rate limited).
create_reasoning_job
Create a new identity-verification session (Bynn `POST /v1/sessions`). When to use: to START a KYC verification for an applicant. This is the ONLY session tool that needs a credential — a Public API key. All later tools use the returned `session_id` instead. Give the applicant the returned `url` (or QR code) to run the hosted flow, or drive it yourself with the other tools in this module. Requires: a Public API key on the connection. Billable: consumes one KYC verification credit per non-test session (test/sandbox keys are free). Returns: `{session_id, dossier_id, url, qr_base64_png, branding{...}, websocket_url}`. - `session_id` is the session token you pass to every other tool here. - `url` is the hosted verification page for the applicant. - `branding` carries the org's name, colors, logos and consent/terms/privacy links. Errors: `401` (missing/invalid public key), `402` (insufficient_balance — no active plan; top up or use sandbox keys), `404` (invalid/deleted KYC level).
create_session
Create a Stripe SetupIntent to collect a payment method (Bynn `POST /v1/billing/create_setup_intent`). When to use: STEP 1 of adding or replacing a card. Creates (or reuses) the org's Stripe customer and returns a `client_secret` your client-side Stripe.js confirms the card against. After the customer completes card entry, call `confirm_payment_method` with the resulting `setup_intent_id` and `payment_method_id` to save it (STEP 2). Requires: a dashboard access token (JWT) on the connection. Returns: `{client_secret, setup_intent_id, customer_id, success}`. Errors: `401` (auth); `400` (Stripe error, `type: "stripe_error"`); `500` (setup failed).
create_setup_intent
Create a new age-verification website configuration (Bynn `POST /v1/websites`). When to use: to register a new website/app that will host a Bynn age gate. Only `name`, `domain`, and `age_restriction` are required; every other field is optional and, if omitted, takes the server default noted in its description. Only the arguments you pass are sent. Look up `enabled_countries` codes with `list_countries` first. Requires: a dashboard token (JWT) or private API key on the connection. Rate limit: 10 requests/minute. Returns: the created website object (same shape as `get_website`), including its new `id` and `asset_id` to use in later calls. Errors: `401` (missing/invalid token), `422` (validation error — e.g. bad `age_restriction` value, missing required field, or invalid domain; the message lists the offending fields).
create_website
Create a workflow (Bynn `POST /v1/autodoc/workflows`). When to use: to define a new visitor journey. NOTE: the server always saves a new workflow with `status: 'active'` regardless of any status you set. Supports an `Idempotency-Key` on the wire (not exposed here) for safe retries. Requires: dashboard token (JWT). Returns: `201` with the created workflow (same shape as `get_workflow`). Errors: `401` (auth), `422` (validation).
create_workflow
Delete a document submission (Bynn `DELETE /v1/documents/:id`). When to use: to purge a previously submitted document. Idempotent — deleting an already-deleted document still succeeds. After deletion, `get_document` returns 404. Requires: a Private API key on the connection. Returns: `{submission_id, document_id, status: "deleted", deleted_at}`. Errors: `401` (missing/invalid key), `404` (no such document in this organization).
delete_document
Delete a document collection (soft delete) (Bynn `DELETE /v1/autodoc/collections/:id`). When to use: to retire a collection. This soft-deletes the collection and all of its document requirements. Returns an empty body on success (`204 No Content`). Requires: dashboard token (JWT). Returns: `{}` on success. Errors: `401` (auth), `404` (no such collection).
delete_document_collection
Delete a single enrolled face from a collection (Bynn `DELETE /v1/face-collections/:collection_token/faces/:face_token`). When to use: to remove one enrolled face. IRREVERSIBLE — the face embedding is permanently deleted. To delete the whole collection, use `delete_face_collection`. Requires: a Private API key OR a dashboard token on the connection. Returns: `{success: true}`. Errors: `401` (missing/invalid auth), `404` (collection or face not found), `429` (rate limit: 30/min).
delete_face
Delete a face collection and ALL its enrolled faces (Bynn `DELETE /v1/face-collections/:token`). When to use: to permanently remove a collection. IRREVERSIBLE — every face embedding inside it is destroyed too. To remove a single face instead, use `delete_face`. Requires: a Private API key OR a dashboard token on the connection. Returns: `{success: true}`. Errors: `401` (missing/invalid auth), `404` (no such collection in this organization), `429` (rate limit: 10/min).
delete_face_collection
Delete a fraud-analysis agent / operator (Bynn `DELETE /v1/reasoning/agents/fraud-analysis/:id`). When to use: to permanently remove an operator. Its orchestrator assignments are removed automatically. Blocked if it is assigned to any orchestrator that currently has queued or running reasoning jobs. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: `{id, name, message}`. Errors: `401` (auth), `404` (no such agent), `422` (assigned to an orchestrator with active jobs — the error lists those orchestrators), `429` (rate limited).
delete_fraud_agent
Cancel (hard-delete) a pending AutoDoc invitation (Bynn `DELETE /v1/autodoc/invitations/:token`). When to use: to cancel an invitation that has not been sent yet. Only invitations in 'pending' status can be cancelled; anything already sent or beyond returns 422. Returns an empty body (`204 No Content`). Requires: dashboard token (JWT). Returns: `{}` on success. Errors: `401` (auth), `404` (not found), `422` (invitation is not pending).
delete_invitation
Delete an orchestrator agent (Bynn `DELETE /v1/reasoning/agents/orchestrators/:id`). When to use: to permanently remove an orchestrator and its associated reasoning jobs. Blocked while it has queued or running jobs — wait for them to finish (poll `list_reasoning_jobs`) before deleting. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: `{id, name, message}`. Errors: `401` (auth), `404` (no such orchestrator), `422` (has active queued/running reasoning jobs), `429` (rate limited).
delete_orchestrator
Delete an organization tag (Bynn `DELETE /v1/autodoc/organization_tags/:id`). When to use: to remove a tag entirely. This cascades — the tag is detached from every dossier that carried it. Returns an empty body (`204 No Content`). Requires: dashboard token (JWT). Returns: `{}` on success. Errors: `401` (auth), `404` (no such tag).
delete_organization_tag
Delete one of the authenticated user's passkeys (Bynn `DELETE /v1/users/passkeys/:id`). When to use: to remove a specific passkey (found via `list_passkeys`). Blocked if it is the user's ONLY authentication method (i.e. their last passkey and they have no email/password login). Rate-limited (10/min). Requires: a dashboard access token (JWT) on the connection. Returns: `{success: true, message, remaining_passkeys (int)}`. Errors: `401` (missing/invalid token), `404` (no passkey with that id/token for this user), `422` (cannot delete the only remaining authentication method, or delete failed).
delete_passkey
Permanently delete an age-verification website configuration (Bynn `DELETE /v1/websites/:id`). When to use: to remove a website/app entirely. This is irreversible — the age gate stops working for that domain. Requires: a dashboard token (JWT) or private API key on the connection. Rate limit: 10 requests/minute. Returns: `{success: true, message, deleted_id, deleted_asset_id}`. Errors: `401` (missing/invalid token), `404` (no such website in this organization), `422` (delete failed).
delete_website
Delete a workflow (soft delete) (Bynn `DELETE /v1/autodoc/workflows/:id`). Requires: dashboard token (JWT). Returns: `{message: "Workflow deleted successfully"}`. Errors: `401` (auth), `404` (no such workflow), `422` (delete failed).
delete_workflow
Return the Bynn REST API's OpenAPI 3.0 specification (from /openapi.json). When to use: to discover the FULL Bynn API — every path, method, parameter, request body, and response schema — including endpoints or fields not wrapped as MCP tools here. Use it to understand a field, find an endpoint, or answer "what can the Bynn API do?". No authentication required. Returns: the raw OpenAPI 3.0 document (`openapi`, `info`, `paths`, `components`, ...). On failure returns `{error: true, message: ...}`.
describe_api
Detach an organization tag from a dossier (Bynn `DELETE /v1/autodoc/dossiers/:dossier_token/organization_tags/:tag_token`). When to use: to remove a tag label from a dossier. Idempotent — detaching a tag that isn't attached still succeeds. Returns an empty body (`204 No Content`). Requires: dashboard token (JWT). Returns: `{}` on success. Errors: `401` (auth), `404` (dossier or tag not found in your organization).
detach_dossier_tag
Check whether an image is AI-generated or a real photo. Runs the `ai-generated-image` moderation model (Bynn `POST /v1/moderation/infer`). Use this to tell whether a single image was produced or edited by a generative/AI model versus captured authentically. Runs synchronously and returns the result immediately. HOW TO SUPPLY THE IMAGE (pick one): • The user ATTACHED/uploaded an image -> ALWAYS call with the `image` file parameter. Just include it; the host fills it with the attachment ({download_url,...}) and the server fetches and analyzes it. Do NOT base64-encode the attachment yourself and do NOT pass a sandbox/client path. If your host cannot fill the parameter, the tool simply falls back to an upload card (see below) — including `image` is never wrong. • The user gave a URL -> call with `image_url`. • A file path THIS server can read (self-hosted MCP) -> `file_path`. • `base64_image` also works but avoid it for large images (it bloats the conversation). If the result comes back with `needs_image` (the host didn't forward the attachment), the rendered card contains a drag-and-drop uploader: tell the user to drop the image into the card and it will be checked directly — do not retry with self-made base64 or file paths. Requires: a Bynn access token (dashboard JWT) or an API key on the connection. Returns: `{inference_id, model_id, model_name, moderation_type: "image", status, response_time_ms, created_at, completed_at, result: { ai_probability (0-1), is_ai_generated (bool — the verdict), uncertain (bool), source, top_generator: {name, probability} — the generator most likely used, e.g. midjourney/flux_1, generators: [{name, probability}], c2pa_signer, detection_mode }}`. Read `result.is_ai_generated` for the yes/no and `result.ai_probability` for confidence. (Convenience wrapper over `create_moderation_inference` with `model="ai-generated-image"`; use that tool with a different `model` for other checks.) Errors: `401` (auth), `402` (insufficient balance), `403` (model needs a higher plan), `404` (model not found), `422` (missing/invalid image).
detect_ai_generated_image
Package a dossier's documents + variables into a ZIP (Bynn `POST /v1/autodoc/dossiers/:id/download_zip`). When to use: to export a whole dossier — all uploaded documents plus a `data.json` of the workflow variables — as a single ZIP. This also flips the dossier's `download_status` to 'downloaded' as a side effect. Heavily rate limited (3 requests/min per org). IMPORTANT: the response body is the raw binary ZIP, NOT JSON — this tool surfaces it under a `raw` key rather than structured fields. Limits: max 100 documents, 50 MB per file, 500 MB total. Requires: dashboard token (JWT). Returns: `{raw: <zip bytes as text>}` on success. Errors: `401` (auth), `404` (no such dossier), `400` (too many docs / file or total size over limit), `500` (packaging failed).
download_dossier_zip
Download an invoice as a PDF (Bynn `GET /v1/billing/invoices/:id/download`). When to use: to fetch the PDF receipt for a specific invoice from `list_invoices`. Only succeeded/paid invoices can be downloaded. The response is a binary PDF (Content-Type application/pdf), so this JSON client returns it under a `raw` field rather than a parsed object — prefer the `hosted_invoice_url` / `pdf_url` from `list_invoices` when you just need a link to hand to the user. Requires: a dashboard access token (JWT) on the connection. Returns: the raw PDF bytes (as `{"raw": ...}` when not JSON-decodable). Errors: `401` (auth); `403` (invoice not payable/available for download); `404` (no such invoice for this organization).
download_invoice
Duplicate a workflow (Bynn `POST /v1/autodoc/workflows/:id/duplicate`). When to use: to clone an existing workflow as a starting point for a new one. Creates a brand-new workflow (with its own `id`/`token`) copying the source's definition. Requires: dashboard token (JWT). Returns: the newly created workflow (same shape as `get_workflow`). Errors: `401` (auth), `404` (no such workflow), `422` (duplication failed).
duplicate_workflow
Enroll a single face into a collection (Bynn `POST /v1/face-collections/:token/enroll`). When to use: to add a known reference face to a collection so it can later be matched by `search_faces`. The image MUST contain EXACTLY ONE face — zero or multiple faces are rejected. Create the collection first with `create_face_collection`. Requires: a Private API key OR a dashboard token on the connection. Returns: `{face_id (face_...), name, external_id, category, metadata, created_at}`. - Keep `face_id` to later remove this face with `delete_face`. Errors: `400` (no face detected, or multiple faces detected in the image), `401` (missing/invalid auth), `404` (collection not found), `422` (validation: no image input, image/metadata too large, or extraction failed), `429` (rate limit: 30/min).
enroll_face
Draft a fraud-analysis agent system prompt with AI (Bynn `POST /v1/reasoning/agents/fraud-analysis/generate-prompt`). When to use: before `create_fraud_agent`, to auto-generate a system prompt, a suggested name, and a short description from a tool type + description. Nothing is persisted — feed the returned `prompt` into `create_fraud_agent(prompt=...)`. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: `{prompt, agentName, shortDescription}`. Errors: `401` (auth), `422` (validation), `429` (rate limited).
generate_fraud_agent_prompt
Draft an orchestrator system prompt with AI (Bynn `POST /v1/reasoning/agents/orchestrators/generate-prompt`). When to use: before `create_orchestrator`, to auto-generate a good system prompt, a suggested name, and a short description from a plain description. Nothing is persisted — feed the returned `prompt` into `create_orchestrator(prompt=...)`. Requires: a dashboard token (JWT). Rate limit: 30/min. Returns: `{prompt, agentName, shortDescription}`. Errors: `401` (auth), `422` (validation), `429` (rate limited).
generate_orchestrator_prompt
Retrieve the FULL, unmasked value of an existing API key (Bynn `GET /v1/api_keys/:id`). When to use: when you need the actual key string for a key you already know the `id` of (from `list_api_keys`). Unlike `list_api_keys`, the `key` field here holds the complete secret — handle it carefully and never log it. Requires: a dashboard access token (JWT) on the connection. Returns: a single key object `{id, name, key (FULL value), key_type, is_test, created_at, expires_at, last_used_at, stats}`. Errors: `401` (missing/invalid token), `403` (your role may not access API keys), `404` (no key with this id in your organization), `429` (rate limited — max 10/min).
get_api_key
Read the result of a liveness age-verification session (Bynn `GET /v1/age_verification/liveness/:age_verification_id`). When to use: STEP 4 (final) of the liveness flow, after `complete_age_verification_liveness` has succeeded. Returns the age estimate, the pass/underage decision for the chosen model, and the liveness verdict. Requires: a Private API key on the connection. Returns (key fields): `unique_id` (your identifier for the user), `is_adult` (bool), `verification_status` (pass|underage|unknown|pending|error), `age_verification_model`, `confidence` (high|moderate|low), `age_estimated` (int), `age_range: {low, high}`, `face: {glasses, predicted_gender}`, `liveness: {status (verified|not_verified| not_evaluated), confidence}`, `image_saved`, `biometrics_saved`, `evaluated_at`, `data_destroyed_at`. Errors: `401` (missing/invalid private key), `404` (invalid session), `482` (no age-verification data — liveness not completed — or more than one face), `483` (no face detected), `484` (could not estimate age).
get_age_verification_result
Re-check a prior age-verification result server-side (Bynn `GET /v1/agemin/check/status/:session_token`). When to use: run this on your BACKEND after a verification completes to confirm the result and detect any frontend tampering with the age/verdict. It reads the stored session verdict WITHOUT exposing the person's actual estimated age (privacy-preserving). Do NOT call this from the frontend — it requires your private key. Input: the `session_token` you received from `verify_age_with_selfie` / `verify_age_with_email`. Requires: a Private API key on the connection. Not billable. Returns: `{status: "ok", reference (your reference_id), timestamp (session created_at), result: {session_token, age_threshold, confidence, verification_status (pass|underage), is_adult, is_of_age, passed (bool), face_confidence, domain, asset_token}}`. Errors: `401` (missing/invalid key), `404` invalid_session (no session with that token in your organization).
get_age_verification_status
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Bynn alternatives on ChatGPT?
As of 2026-09-18, Bynn competes with OnChainDiligence, ProofX, TruthScan in ChatGPT Content Authenticity & Cryptographic Proof, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.