Lytics Data Upload API

APIs for collecting or uploading data.

Operations 3

POST /collect/bulk/{stream} BulkCSVUpload #
POST /collect/bulk/{streamname} BulkJSONUpload #
POST /collect/json/{stream} Data JSON Upload #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lytics-data-upload-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lytics-data-upload-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: V1 Lytics Data Upload API
  version: 1.0.0
  description: 'The Lytics API is a _restful_ *JSON* api that includes:

    * *Data Collection* api''s for collection, and upload of custom data.'
servers:
- url: https://api.lytics.io
tags:
- name: Data Upload
  description: APIs for collecting or uploading data.
paths:
  /collect/bulk/{stream}:
    post:
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkdCSVUploadModel'
              examples:
                response:
                  value:
                    status: 200
                    message: success
                    data:
                      message_count: 2
                      rejected_count: 0
                      content-type: application/json
                      droperrors: false
                      dryrun: false
                      timestamp_field: event_created
                      filename: myfile.csv
      security:
      - ApiKeyAuth: []
      summary: BulkCSVUpload
      operationId: BulkCSVUpload
      description: 'Upload CSV files (may be gzipped). They MUST contain headers: either

        in first row (by default) OR in **headers** querystring field.

        If the file contains a timestamp field you want us to use

        see **timestamp_field** querystring parameter for how we extract it.


        *Note Domain* this api is on a different domain *https://bulk.lytics.io* because the *api.lytics.io* domain

        is limited to 10MB file uploads.


        ```sh

        # the "user_regdata" is the STREAM (ie Type) of data, if there

        # is multiple different types of data (userdata, emaildata, events)

        # they would have different streams.


        # user data

        export LIODATAKEY="YOURKEY"

        curl -s -H "Authorization: $LIOKEY" \

        -H ''Content-type: application/csv'' \

        --data-binary @users.csv \

        "https://bulk.lytics.io/collect/bulk/user_regdata?timestamp_field=register_date" \

        | jq ''.''


        # only do a dry-run to see if it is formatted correctly

        curl -s "https://bulk.lytics.io/collect/bulk/user_regdata?access_token=$LIODATAKEY×tamp_field=register_date&dryrun=true" \

        --data-binary @users.csv -H ''Content-type: application/csv'' | jq ''.''


        # append fields to each row

        # where append = urlencode({"source":"crm"})

        # often used when file-name contains information


        curl -s "https://bulk.lytics.io/collect/bulk/user_regdata?append=%7B%22source%22%3A%22crm%22%7D&access_token=$LIODATAKEY" \

        --data-binary @users.csv -H ''Content-type: application/csv'' | jq ''.''


        # full example uploading gzipped file


        echo ''user_id,email,reg_date,item_count

        7456,email@email.com,"2012-10-17T17:29:39.738Z",82

        1234,email2@email.com,"2012-12-11T19:53:31.547Z",82'' > users.csv


        gzip users.csv


        curl -s "https://bulk.lytics.io/collect/bulk/user_regdata?access_token=$LIODATAKEY×tamp_field=reg_date&dryrun=true&filename=users.csv" \

        --data-binary @users.csv.gz \

        -H ''Content-type: application/csv'' | jq ''.''

        ```'
      tags:
      - Data Upload
      parameters:
      - name: account_id
        in: query
        description: Your Lytics account ID.
        required: false
        schema:
          type: string
      - name: stream
        in: path
        description: The DataType aka Table of type of data being uploaded.  See Data, Streams in web admin.
        required: true
        example: user_db
        schema:
          type: string
      - name: access_token
        in: query
        description: The Lytics DATA API key. Not the management key. Or use Authorization Header.
        required: false
        schema:
          type: string
      - name: dryrun
        in: query
        description: ''
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: timestamp_field
        in: query
        description: The name of the column or field in file that contains event timestamp.
        required: false
        schema:
          type: string
      - name: headers
        in: query
        description: CSV only, Comma delimited list of header columns for csv (if not first row)
        required: false
        schema:
          type: string
      - name: delimiter
        in: query
        description: CSV only, if not the default comma, either t=tab, or | may be accepted
        required: false
        schema:
          type: string
      - name: append
        in: query
        description: CSV only,  JSON encoded object of additional name-value pairs to append to each record.
        required: false
        schema:
          type: string
      - name: droperrors
        in: query
        description: ''
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: filename
        in: query
        description: Just for record-keeping in our event - stream.
        required: false
        example: '"myfile.csv"'
        schema:
          type: string
  /collect/bulk/{streamname}:
    post:
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkJSONUploadModel'
              examples:
                response:
                  value:
                    status: 200
                    message: success
                    data:
                      message_count: 2
                      rejected_count: 0
                      content-type: application/json
                      droperrors: false
                      dryrun: false
                      timestamp_field: event_created
                      filename: myfile.json
      security:
      - ApiKeyAuth: []
      summary: BulkJSONUpload
      operationId: BulkJSONUpload
      description: 'JSON formatting info.


        This JSON is ok:


        ```json

        {"order_ids":[1,2,3]}

        ```


        This is not valid because it has objects nested inside arrays:


        ```json

        {"orders":[{"id":1,"price":22},{"id":2,"price":23}]}

        ```'
      tags:
      - Data Upload
      parameters:
      - name: account_id
        in: query
        description: Your Lytics account ID.
        required: false
        schema:
          type: string
      - name: streamname
        in: path
        description: The DataType, or "Table" of type of data being uploaded
        required: true
        example: user_db
        schema:
          type: string
      - name: access_token
        in: query
        description: The Lytics DATA API key. Not the management key. Or use Authorization Header.
        required: false
        schema:
          type: string
      - name: dryrun
        in: query
        description: ''
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: timestamp_field
        in: query
        description: The name of the column or field in file that contains event timestamp.
        required: false
        schema:
          type: string
      - name: filename
        in: query
        description: Just for record-keeping in our event - stream.
        required: false
        example: '"myfile.json"'
        schema:
          type: string
  /collect/json/{stream}:
    post:
      responses:
        '200':
          description: OK
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataUploadModel'
              examples:
                response:
                  value:
                    status: 200
                    message: success
                    data:
                      message_count: 2
                      rejected_count: 0
                      content-type: application/json
                      droperrors: false
                      dryrun: false
                      timestamp_field: event_created
                      filename: myfile.json
      security:
      - ApiKeyAuth: []
      summary: Data JSON Upload
      operationId: Data JSON Upload
      description: ''
      tags:
      - Data Upload
      parameters:
      - name: account_id
        in: query
        description: Your Lytics account ID.
        required: false
        schema:
          type: string
      - name: stream
        in: path
        description: The DataType, or "Table" of type of data being uploaded
        required: true
        example: user_db
        schema:
          type: string
      - name: access_token
        in: query
        description: The Lytics DATA API key (not management key)
        required: true
        schema:
          type: string
      - name: dryrun
        in: query
        description: ''
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: timestamp_field
        in: query
        description: The name of the column or field in file that contains event timestamp.
        required: false
        schema:
          type: string
      - name: filename
        in: query
        description: Just for record-keeping in our event - stream.
        required: false
        example: '"myfile.json"'
        schema:
          type: string
components:
  schemas:
    BulkJSONUploadModel:
      type: object
      properties:
        status:
          type: number
        message:
          type: string
        data:
          type: object
          properties:
            message_count:
              type: number
            rejected_count:
              type: number
            content-type:
              type: string
            droperrors:
              type: boolean
            dryrun:
              type: boolean
            timestamp_field:
              type: string
            filename:
              type: string
      example:
        status: 200
        message: success
        data:
          message_count: 2
          rejected_count: 0
          content-type: application/json
          droperrors: false
          dryrun: false
          timestamp_field: event_created
          filename: myfile.json
    BulkdCSVUploadModel:
      type: object
      properties:
        status:
          type: number
        message:
          type: string
        data:
          type: object
          properties:
            message_count:
              type: number
            rejected_count:
              type: number
            content-type:
              type: string
            droperrors:
              type: boolean
            dryrun:
              type: boolean
            timestamp_field:
              type: string
            filename:
              type: string
      example:
        status: 200
        message: success
        data:
          message_count: 2
          rejected_count: 0
          content-type: application/json
          droperrors: false
          dryrun: false
          timestamp_field: event_created
          filename: myfile.csv
    DataUploadModel:
      type: object
      properties:
        status:
          type: number
        message:
          type: string
        data:
          type: object
          properties:
            message_count:
              type: number
            rejected_count:
              type: number
            content-type:
              type: string
            droperrors:
              type: boolean
            dryrun:
              type: boolean
            timestamp_field:
              type: string
            filename:
              type: string
      example:
        status: 200
        message: success
        data:
          message_count: 2
          rejected_count: 0
          content-type: application/json
          droperrors: false
          dryrun: false
          timestamp_field: event_created
          filename: myfile.json
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: Authorization
      type: apiKey
x-readme:
  explorer-enabled: true
  proxy-enabled: true