Other Endpoints
Miscellaneous live backend endpoints that do not fit the main auth/products/wallet groups.
GET /api/app-data
Public configuration bootstrap for clients.
- Auth required: No
- Roles: Public
Returned areas
Current response includes keys such as:
products.sort_byproducts.media.max_mb_sizeproducts.min_price_cents- lowest accepted product price in minor units (500)products.manual_price_review_threshold_cents- above this amount a product waits for Fangate's compliance review before it can be bought (15000)feedback.topicsaffiliate.default_fee_percentagecurrencies[](id,code, andbank_fields- the currency's usual payout fields; since 2026-09-27 the payout account type is the creator's choice whatever the currency, seebank_account_types[])registration.legal-required,acceptance_label,documents[](key,label,url): whatregistration_legal_accepted: trueonPOST /api/registerstands forregistration.signature- the creator contract's signature form (Jotform):form_url,form_id,iframe_id,title,prefill_fields(the form's field names for e-mail, first and last name) andprefill_url_template(the form URL with{email},{first_name},{last_name}placeholders to fill in). Embed it in an iframe with the creator's e-mail prefilled; see Onboardingregistration.content_display_consent-required,field(content_display_consent),label: the separate consent checkbox a registration screen shows next to the legal acceptance;requiredfollows an admin switch (see Auth)bank_account_types[]-type(iban,us_routing,uk_sort_code,crypto),label,fields[],currencies[], optionalavailable: false: the payout account types a creator can save. Every real type lists every currency - a USD balance may be paid to an IBAN, a EUR balance to a US routing number.cryptois the Tron USDT wallet (payout_method, see Users); selectable oncecrypto_payouts_enabledistrue.crypto_payouts_enabled(boolean, 2026-10-08) - whether a creator can choose crypto payouts yet;false= the crypto tile is shown greyed out andpayout_method: cryptois refused.withdrawal_fees[]-key(sepa,usd_ach,usd_swift,gbp,crypto),label,fixed,minimum,percentage: what a payout costs on each rail. The payout currency picks the rail: EUR to an IBAN payssepa, USD to a US routing numberusd_ach, GBP to a sort code or an IBANgbp; USD to any other account, and a EUR or GBP balance to a US routing number or (EUR) a UK sort code, payusd_swift("International (SWIFT)").fixedandminimumcount in the payout's currency.features[]settings[]
Success response example
{
"success": true,
"errors_message": null,
"data": {
"products": {
"sort_by": ["newest", "most_earnings", "most_views", "collection"],
"media": {
"max_mb_size": 20480
}
},
"feedback": {
"topics": ["bug", "feature", "other"]
},
"affiliate": {
"default_fee_percentage": 3
},
"currencies": [
{
"id": 1,
"code": "USD",
"symbol": "$",
"bank_fields": ["account_number", "routing_number"]
}
]
}
}GET /api/maps/autocomplete
Return raw Google Places autocomplete data for address input.
- Auth required: No in current route definition
- Roles: Public
Used by the sign-up address form; not part of the integration surface. GET /api/maps/place-details?place_id= resolves a prediction to address_components / formatted_address, also as the raw Google payload.
Rate limit per IP: autocomplete 60/min and 1000/day, place details 20/min and 200/day; over the limit the answer is 429 with Retry-After (see Error handling).
Query parameters
| Parameter | Type | Required |
|---|---|---|
input | string | Yes |
Success response example
This endpoint currently returns the raw Google Maps service payload, not the standard Fangate wrapper.
{
"predictions": [
{
"description": "123 Main Street, Paris, France"
}
],
"status": "OK"
}POST /api/report
Submit a public report about content or a transaction.
- Auth required: No
- Roles: Public
- Content type:
application/json
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
reason | string | Yes | Report reason text. |
email | string | Yes | Reporter email. |
report_context | string | No | purchase (default), trailer_preview or thumbnail_preview. |
transaction_id | integer | For purchase reports | Must exist in transactions.id. |
product_id | integer | For preview reports | The product whose public preview is reported. |
preview_uploaded_asset_id | string | For preview reports | Id of the approved trailer or thumbnail asset being reported. |
media_ids | string | No | Comma-separated media ids. |
comment | string | No | Additional context. |
Success response example
The stored report is answered in the standard envelope with its id (since 2026-09; it used to be an empty object):
{
"success": true,
"errors_message": null,
"data": {
"id": 88
}
}Error example
Validation failures use Laravel's plain format, not the envelope:
{
"message": "A transaction is required for purchase reports.",
"errors": {
"transaction_id": [
"A transaction is required for purchase reports."
]
}
}POST /api/feedback
Submit authenticated feedback with optional attachments.
- Auth required: Yes
- Roles: Authenticated creator
- Content type:
multipart/form-data
Request fields
| Field | Type | Required | Notes |
|---|---|---|---|
email | string | Yes | Feedback contact email. |
message | string | Yes | Feedback body. |
topic | string | Yes | Topic name from app-data config. |
attachments[] | file[] | No | Optional attachments. |
Success response example
{
"success": true,
"errors_message": null,
"data": "stored"
}Side effects
- attachments are stored on the public disk
- backend dispatches
SendFeedbackJob