Skip to main content
POST
/
lead
Submit lead
curl --request POST \
  --url https://{tenant}.techea.eu/api/v1/lead \
  --header 'Content-Type: application/json' \
  --header 'apikey: <api-key>' \
  --data '
{
  "product_id": "36068625-4707-4ef8-a419-2aad1483db49",
  "publisher_id": "b96bdbc6-437a-4e2f-9b0e-2d91a5767f3b",
  "customer": {
    "external_id": "pub-12345-abc",
    "personal_data": {
      "first_name": "John",
      "last_name": "Smith",
      "second_surname": "Johnson",
      "birthday": "1988-05-10",
      "identification_number": "12345678A",
      "nacionality": "ES"
    },
    "contact": {
      "email": {
        "address": "john.smith@email.com",
        "status": "verified",
        "verified_at": "2026-02-01T10:00:00Z",
        "verification_method": "otp"
      },
      "phone": {
        "area_code": "+34",
        "number": "600111222",
        "status": "verified",
        "verified_at": "2026-02-01T10:00:00Z",
        "verification_method": "otp"
      }
    },
    "address": {
      "street": "Calle Mayor",
      "house": "1",
      "city": "Madrid",
      "region": "Madrid",
      "postal_code": "28001",
      "country": "ES"
    },
    "profile": {
      "occupation": "self_employed",
      "monthly_income": 2500,
      "monthly_expenses": 1500,
      "marital_status": "married",
      "children": 1
    },
    "financial_instruments": [
      {
        "type": "bank_account",
        "currency": "EUR",
        "iban": "ES9121000418450200051332",
        "status": "not_verified"
      }
    ]
  },
  "product_data": {
    "loan_amount": 10000,
    "loan_purpose": "home_improvement",
    "loan_term_months": 36
  },
  "consents": {
    "entries": [
      {
        "type": "terms",
        "accepted": true,
        "accepted_at": "2026-02-16T10:22:31Z",
        "version": "v3.2"
      },
      {
        "type": "privacy_policy",
        "accepted": true,
        "accepted_at": "2026-02-16T10:22:31Z",
        "version": "v4.1"
      },
      {
        "type": "marketing",
        "accepted": false,
        "accepted_at": null,
        "version": "v2.0"
      }
    ],
    "metadata": {
      "ip_address": "84.23.12.55",
      "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
      "collected_at": "2026-02-16T10:22:31Z"
    }
  },
  "tracking": {
    "click_id": "abc123xyz",
    "sub_id": "publisher_sub_1",
    "campaign_id": "camp_789"
  }
}
'
{ "lead_id": "a1b2c3d4-0000-0000-0000-111122223333", "status": "accepted", "redirect_url": "https://advertiser.example.com/apply?token=xyz123", "rejection_reason": null }
Both terms and privacy_policy consents must be present with accepted: true. Missing or false consents result in a consents_missing rejection.

Required fields

FieldDescription
product_idProduct UUID provided by TECHEA
publisher_idYour publisher UUID
customer.personal_data.first_nameCustomer’s first name
customer.personal_data.last_nameCustomer’s last name
customer.contact.email.addressPrimary customer identifier — must be unique per product
product_data.loan_amountInteger between 500 and 75,000
product_data.loan_purposeOne of the accepted enum values
product_data.loan_term_monthsInteger between 3 and 84
consents.entriesMust include terms and privacy_policy with accepted: true
consents.metadata.ip_addressCustomer’s IP at consent time
consents.metadata.collected_atTimestamp of consent collection

Authorizations

apikey
string
header
required

API Key provided by TECHEA

Body

application/json
product_id
string<uuid>
required

ID of the product the customer is applying for. Provided by TECHEA.

publisher_id
string<uuid>
required

Your publisher ID in TECHEA.

customer
object
required
product_data
object
required
consents
object
required
tracking
object

Optional campaign attribution data

Response

Lead received and processed. Check the status field:

  • accepted: lead distributed to at least one advertiser — redirect customer to redirect_url
  • rejected: lead not accepted — check rejection_reason
  • pending: lead accepted and queued for async processing
lead_id
string<uuid> | null

ID generated by TECHEA. Used for advertiser event tracking. Null if the lead was rejected before being created (e.g. customer_already_exists).

status
enum<string>

Lead status from the publisher's perspective:

  • accepted: distributed to at least one advertiser — redirect customer to redirect_url
  • pending: accepted and queued for async processing
  • rejected: not accepted — check rejection_reason
Available options:
accepted,
pending,
rejected
redirect_url
string<uri> | null

URL to redirect the customer to complete the process. Only present when status = accepted.

rejection_reason
enum<string> | null

Reason for rejection. Only present when status = rejected.

Available options:
customer_already_exists,
duplicate_submission,
eligibility_failed,
age_restriction,
income_insufficient,
geographic_restriction,
no_matching_advertisers,
consents_missing,
invalid_product,
blacklisted,
fraud_suspected,
null