---
title: "Push from curl"
method: PUT
path: "/{name}"
---

# Push from curl

`PUT /{name}`

## Request

- Base URL: `https://rows.page`
- URL: `https://rows.page/{name}`
- Auth: one of:
  - none
  - HTTP bearer
  - API key in header `X-Rows-Token`

curl -T data.csv https://rows.page. PUT /<id>[/<name>] pushes a new version. Parameters also work as X-Rows-* headers (X-Rows-Title, X-Rows-Id-Column, ...). Plain-text answer unless Accept: application/json or ?json=1. Chunked bodies (curl -T -) are fine.

## Path parameters

- `name` string, required

## Query parameters

- `format` 'csv' | 'tsv' | 'json' | 'jsonl' | 'ndjson' | 'parquet'
- `name` string
- `title` string
- `summary` string
- `key` string
- `id_column` string
- `dataset` string
- `source` string
- `run` string
- `commit` string
- `visibility` 'public' | 'private'
- `json` '1' | 'true'

## Response `200`

New version, or unchanged: true when the bytes match the latest version

- PushResponse
  - `id` string
  - `version` integer
  - `url` string
  - `owner_url` string, nullable: url#t=<token>; only on creation. Treat like a password.
  - `token` string, nullable: Dataset token; only on creation
  - `format` string
  - `bytes` integer
  - `rows` integer, nullable
  - `rows_exact` boolean
  - `columns` Column[]
    - `name` string, required: Dot path for nested fields
    - `type` string, required
  - `expires_at` string, date-time, nullable
  - `unchanged` boolean
  - `changes` object, nullable
    - `previous_version` integer
    - `rows_delta` integer, nullable
    - `columns_added` string[]
    - `columns_removed` string[]
    - `diff_url` string
  - `keep` object, nullable
    - `required` boolean
    - `url` string
    - `message` string
  - `limits` object
    - `plan` string
    - `max_file_bytes` integer
    - `datasets_used` integer, nullable
    - `datasets_limit` integer, nullable

## Other responses

- `201`: New dataset
- `400`: Error
- `401`: Error
- `402`: Upgrade required
- `403`: Error
- `410`: Error
- `413`: Too large for a single request or the plan; the message names the multipart API
- `429`: Rate limited or daily anonymous quota reached

---

[API](https://skmtc.dev/rows/apis/rows-page-api.md) · [All operations](https://skmtc.dev/rows/apis/rows-page-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rows/apis/rows-page-api/revisions/98dacb9eeca7?raw)
