POST
/
api
/
ftpos
/
import-generic
Dealer Import
curl --request POST \
  --url https://monitoring.safeturf.ai/api/ftpos/import-generic \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "merchantId": 123,
  "merchantEmail": "<string>",
  "merchantPhoneNumber": "<string>",
  "websiteUrl": "<string>",
  "merchantStatus": "<string>",
  "businessInfo": {
    "legalName": "<string>",
    "dba": "<string>",
    "ein": "<string>",
    "entityType": "<string>",
    "stateIncorp": "<string>",
    "annualSalesRevenue": 123,
    "businessPhone": "<string>",
    "businessAddress": {
      "street": "<string>",
      "city": "<string>",
      "state": "<string>",
      "zip": "<string>"
    }
  },
  "principalInfo": {
    "firstName": "<string>",
    "lastName": "<string>",
    "email": "<string>",
    "cellPhone": "<string>",
    "ssn": "<string>",
    "dob": "<string>",
    "principalAddress": {
      "street": "<string>",
      "city": "<string>",
      "state": "<string>",
      "zip": "<string>"
    }
  },
  "locationInfo": [
    {
      "storeName": "<string>",
      "streetAddress": "<string>",
      "city": "<string>",
      "state": "<string>",
      "zipCode": "<string>",
      "phoneNumber": "<string>",
      "contactEmail": "<string>",
      "isPrimary": true,
      "status": "<string>"
    }
  ],
  "bankAccounts": [
    {
      "accountNumber": "<string>",
      "aba": "<string>",
      "bankName": "<string>",
      "type": "<string>",
      "owner": "<string>",
      "legalBusinessName": "<string>"
    }
  ],
  "licenseInfo": [
    {
      "license": "<string>",
      "expirationsDate": "<string>",
      "states": [
        "<string>"
      ]
    }
  ]
}
'
{
  "flow_run_id": "<string>",
  "flow_run_name": "<string>",
  "status": "<string>",
  "merchant_id": 123,
  "message": "<string>"
}

Overview

Use this endpoint to push a new dealer (merchant) into Safeturf. The system deduplicates, transforms, and enriches the data automatically, then triggers the underwriting verification workflow. All fields are optional — send what you have. The more data provided, the smoother the verification process.

Authentication

Every request must include a Bearer token in the Authorization header:
Authorization: Bearer <your_api_token>
Contact your Safeturf integration contact to obtain your API token.

Query Parameters

force_update
boolean
default:"false"
Re-import the merchant even if a record already exists for this merchantId. Use this to update an existing dealer.
skip_verification
boolean
default:"false"
Skip the underwriting verification flow after import. Useful for bulk loads where you want to trigger verification later.
source
string
default:"API"
Source identifier for tracking. Set this to "PLMT" so Safeturf can attribute and filter records by partner.

Request Body

merchantId
integer
default:"98001"
Your internal numeric ID for this dealer. Used for deduplication — if a record with this ID already exists, the import is skipped unless force_update=true.
merchantEmail
string
default:"owner@example.com"
Primary contact email for the dealer account.
merchantPhoneNumber
string
default:"407-555-0100"
Primary phone number for the dealer.
websiteUrl
string
default:"https://example.com"
Dealer’s website URL.
merchantStatus
string
default:"active"
The dealer’s current status in your system. Stored as-is in Safeturf for reference. Defaults to "ACTIVE" if not provided.
businessInfo
object
Business information. Send as a nested JSON object — not as dot-notation keys.
principalInfo
object
Principal owner information. Send as a nested JSON object — not as dot-notation keys.
locationInfo
array
Array of physical store locations for this dealer.
bankAccounts
array
Array of bank accounts associated with this dealer.
licenseInfo
array
Array of contractor or business licenses held by this dealer.

Example Request

curl -X POST "https://api.safeturf.com/api/ftpos/import-generic?source=PALMETTO" \
  -H "Authorization: Bearer <your_api_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "merchantId": 98001,
    "merchantEmail": "owner@example.com",
    "merchantPhoneNumber": "407-555-0100",
    "websiteUrl": "https://example.com",
    "businessInfo": {
      "legalName": "Acme Solar LLC",
      "dba": "Acme Solar",
      "ein": "12-3456789",
      "entityType": "llc",
      "stateIncorp": "FL",
      "annualSalesRevenue": 1500000,
      "businessPhone": "407-555-0101",
      "businessAddress": {
        "street": "123 Main St",
        "city": "Orlando",
        "state": "FL",
        "zip": "32000"
      }
    },
    "principalInfo": {
      "firstName": "Alex",
      "lastName": "Johnson",
      "email": "owner@example.com",
      "cellPhone": "407-555-0102",
      "ssn": "000-00-0000",
      "dob": "1980-01-01",
      "principalAddress": {
        "street": "456 Oak Ave",
        "city": "Kissimmee",
        "state": "FL",
        "zip": "34000"
      }
    },
    "locationInfo": [
      {
        "storeName": "Acme Solar Orlando",
        "streetAddress": "123 Main St",
        "city": "Orlando",
        "state": "FL",
        "zipCode": "32000",
        "phoneNumber": "407-555-0101",
        "contactEmail": "location@example.com",
        "isPrimary": true,
        "status": "approved"
      }
    ],
    "bankAccounts": [
      {
        "accountNumber": "000000001",
        "aba": "000000000",
        "bankName": "Example Bank",
        "type": "business",
        "owner": "business",
        "legalBusinessName": "Acme Solar LLC"
      }
    ],
    "licenseInfo": [
      {
        "license": "LIC-0000001",
        "expirationsDate": "2026-08-31 00:00:00",
        "states": ["FL"]
      }
    ]
  }'

Response

{
  "flow_run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "flow_run_name": "chunky-panther",
  "status": "running",
  "merchant_id": 98001,
  "message": "Generic import started for merchant 98001",
  "prefect_ui": "http://localhost:4200/flow-runs/flow-run/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
flow_run_id
string
UUID of the background flow run processing this import. Use this to track status.
flow_run_name
string
Human-readable name assigned to the flow run by Prefect.
status
string
Always "running" on a successful submission — the import is processed asynchronously.
merchant_id
integer
Echo of the merchantId from your request.
message
string
Confirmation message.

Notes

  • Authentication is required. Include your Bearer token on every request.
  • Set ?source=<YOUR_PARTNER_CODE> as a query parameter for full attribution tracking in Safeturf reporting.
  • The import is asynchronous — a 200 response means the record was accepted and queued, not that it has finished processing.
  • If a dealer with the same merchantId already exists, the import will be skipped. To update an existing record, add ?force_update=true to the URL.
  • After a successful import, poll GET /api/ftpos/business/{merchant_id} to retrieve the business_uuid once the record is ready (returns 404 while processing, 200 when complete). Then use the Check UW Status endpoint to monitor the dealer’s verification progress.