Skip to content

Consents

Third-party consent, creator tagging, and consent-response workflows.

This area covers:

  • classic consent document uploads
  • email-based consent requests
  • in-app creator tag requests
  • creator search for tagging
  • accept / decline flows
  • verification gating before response

POST /api/consents/store-or-send

Create or send one consent request mode for a product.

  • Auth required: Yes
  • Roles: Product owner
  • Content type: multipart/form-data

Request fields

FieldTypeRequiredNotes
product_idintegerYesProduct owner must own the product.
datestringYesConsent date.
emailstringNoUsed for email mode.
tagged_creator_idintegerNoSingle creator tag target.
tagged_creator_ids[]integer[]NoMultiple creator tag targets.
files[]file[]NoManual document mode. Files must be pdf, jpg, jpeg, or png, max 10 MB each.

Exactly one mode is required

Current validation requires exactly one of the following modes:

  1. tag one or more Fangate creators
  2. send by email
  3. upload at least three documents

If multiple modes are mixed, validation fails.

Current behavior by mode

Tag creators

  • uses tagged_creator_id or tagged_creator_ids[]
  • seller cannot tag themselves
  • pending duplicate tag on the same product is blocked
  • accepted duplicate tag on the same product is blocked
  • if the same seller and tagged user already have any previously accepted tag on another product, a new tag for the current product is auto-created as accepted
  • otherwise a new tag starts as pending

Email mode

  • if the email belongs to an existing Fangate user, backend creates creator tags instead of relying on legacy external consent email flow
  • if the email does not belong to a registered user and no files are uploaded, backend uses the legacy email request flow

Manual document mode

  • requires at least three uploaded files

If the product has no media yet, backend can queue consent processing instead of failing immediately.

Queued response:

json
{
  "success": true,
  "errors_message": null,
  "data": "Consent processing has been queued and will be completed when media files are available"
}

Standard success response example

json
{
  "success": true,
  "errors_message": null,
  "data": []
}

Validation error example

json
{
  "success": false,
  "errors_message": "Choose exactly one: tag a Fangate creator, request consent by email, or upload three documents.",
  "data": null
}

Search creators for the tagging flow.

  • Auth required: Yes
  • Roles: Authenticated creator

Query parameters

ParameterTypeRequiredNotes
qstringNoEmpty query returns suggestions from previous collaborations.
limitintegerNoDefault 20, max 50.
exclude_user_idintegerNoDefaults to the authenticated user.

Search behavior

Non-empty search checks:

  • first name
  • last name
  • email
  • full name
  • Veriff first name
  • Veriff last name
  • Veriff full name
  • exact numeric user id when query is numeric

Return product-level creator tags from the product owner's perspective.

  • Auth required: Yes
  • Roles: Product owner

Success response example

json
{
  "success": true,
  "errors_message": null,
  "data": [
    {
      "id": 10,
      "status": "pending",
      "product_id": 5155,
      "taken_at": "2026-04-20T10:15:00+00:00",
      "created_at": "2026-04-20T10:15:00+00:00",
      "tagged_user": {
        "id": 23,
        "first_name": "Co",
        "last_name": "Creator",
        "email": "cocreator@example.com",
        "display_name": "Co Creator"
      }
    }
  ]
}

Return incoming creator tag requests for the authenticated tagged creator.

  • Auth required: Yes
  • Roles: Tagged creator

Success response example

json
{
  "success": true,
  "errors_message": null,
  "data": [
    {
      "id": 10,
      "status": "pending",
      "product_id": 5155,
      "taken_at": "2026-04-20T10:15:00+00:00",
      "created_at": "2026-04-20T10:15:00+00:00",
      "tagger": {
        "id": 7,
        "first_name": "Alyssa",
        "last_name": "Creator",
        "email": "alyssa@example.com"
      }
    }
  ]
}

Accept or decline an incoming creator tag request.

  • Auth required: Yes
  • Roles: Tagged creator only
  • Content type: application/json

Request body

json
{
  "decision": "accept"
}

Allowed values:

  • accept
  • decline

Success response example

json
{
  "success": true,
  "errors_message": null,
  "data": {
    "id": 10,
    "status": "accepted",
    "product_id": 5155
  }
}

Verification-required response

If the tagged creator is not Veriff-verified, backend returns a verification-required payload instead of applying the decision:

json
{
  "success": false,
  "errors_message": "Verification is required before you can respond to this consent request.",
  "data": {
    "requires_verification": true,
    "verification": {
      "id": "96972fba-3de6-4346-9029-4fdbea684bd3",
      "url": "https://alchemy.veriff.com/v/..."
    }
  }
}

Error cases

Forbidden:

json
{
  "success": false,
  "errors_message": "Forbidden",
  "data": null
}

Already answered:

json
{
  "success": false,
  "errors_message": "This tag request has already been answered.",
  "data": null
}

Purchase enforcement

Current backend blocks purchase when:

  • the product has pending consent creator tags
  • the product has declined consent creator tags
  • the product has no allowed media

This is evaluated inside product purchase logic, not by a dedicated public consent endpoint.


Fangate backend developer documentation