> This page is for Glide Classic.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://www.glideapps.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://www.glideapps.com/docs/_mcp/server.

# Overwrite Table

PUT https://api.glideapps.com/tables/{tableID}
Content-Type: application/json

Overwrite an existing Big Table by clearing all rows and (optionally) adding new data.

Row IDs for any added rows are returned in the response in the same order as the input row data is passed in the request. Row data may be passed in JSON, CSV, or TSV format.

If a column is not included in the passed row data, it will be empty in the added row. If a column is passed that does not exist in the updated table schema, or with a value that does not match the column's type, the default behavior is for no action to be taken and the API call to [return an error](/docs/classic-api/general/errors#invalid-row-data). However, you can control this behavior with the `onSchemaError` query parameter.

There is currently no way to supply values for user-specific columns in the API. Those columns will be cleared when using this endpoint.

### Updating the Schema

You can optionally update the table schema at the same time by providing a new schema in the JSON request body. If you do not provide a schema, the existing schema will be used.

When using a CSV or TSV request body, you cannot pass a schema. If you need to update the schema, use the `onSchemaError=updateSchema` query parameter, or [stash](/docs/classic-api/stashing/introduction) the CSV/TSV data and pass a JSON request body referencing the stash ID.

## Examples

To clear all rows from a table, send a PUT request with an empty array in the `rows` field:

```json
{
    "rows": []
}
```

If you want to reset a table's data with a small number of rows, you can do so by providing the data inline in the `rows` field (being sure that row object structure matches the table schema):

```json
[
    {
        "fullName": "Alex Bard",
        "ageInYears": 30,
        "hiredOn": "2021-07-03"
    }
]
```

However, this is only appropriate for relatively small initial datasets (around a few hundred rows or less, depending on schema complexity). If you need to work with a larger dataset you should utilize stashing.

[Stashing](/docs/classic-api/stashing/introduction) is our process for handling the upload of large datasets. Break down your dataset into smaller, more manageable, pieces and [upload them to a single stash ID](/docs/classic-api/stashing/stash-data).

Then, to reset a table's data from the stash, use the `$stashID` reference in the `rows` field instead of providing the data inline:

```json
{
    "rows": { "$stashID": "20240215-job32" }
}
```

This endpoint can be combined with the [Get Rows](/docs/classic-api/tables/get-rows) endpoint and [stashing](/docs/classic-api/stashing/introduction) to fetch the current table data, modify it, and then overwrite the table with the updated data:

1. Call the [Get Rows](/docs/classic-api/tables/get-rows) endpoint to fetch the current table data. Pass a reasonably high `limit` query parameter because you want to fetch all rows in as few requests as possible.
2. Modify the data as desired, and then stash the modified rows using the [Stash Data](/docs/classic-api/stashing/stash-data) endpoint.
3. If a `continuation` was returned in step 1, repeat steps 1-3, passing the `continuation` query parameter to [Get Rows](/docs/classic-api/tables/get-rows) until all rows have been fetched, modified, and stashed.
4. Finally, call this endpoint with same stash ID used in step 2. This will overwrite the table with the updated data:

```json
{
    "rows": { "$stashID": "20240215-job32" }
}
```

**Risk of Data Loss**

We strongly recommend you use the `If-Match` header to ensure the table is not modified between steps 1 and 4. See the [Data Versioning](/docs/classic-api/tables/data-versioning) guide for more information.

Reference: https://www.glideapps.com/docs/classic-api/tables/overwrite-table

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication header of the form Bearer `<token>`, where `<token>` is your [auth token](/docs/api-reference/v2/general/authentication).

## Request

### Path parameters

- `tableID` (string, required)

### Query parameters

- `onSchemaError` (enum, optional) — The action to take when the passed data does not match the table schema: - `abort`: Abort the entire operation and return an error. - `dropColumns`: Ignore the data that caused the error, and do not import those columns in the affected rows. - `updateSchema`: Update the schema as needed to add any missing columns or widen the data types of existing columns, and then import the data from them.
  - Allowed values: `abort`, `dropColumns`, `updateSchema`

### Headers

- `x-glide-asynchronous` (enum, optional) — Allow asynchronous processing, which will return a job ID. Note that this does not force asynchronouys processing. The caller must handle both synchronous and asynchronous responses.
  - Allowed values: `true`, `false`
- `if-match` (string, optional)

### Body (application/json)

This endpoint expects an overwriteTable_Request.

- `overwriteTable_Request`
  - OverwriteTableRequest0
  - A_collection_of_row_objects: list of map from string to any

## Response

### 200

- `data` (TablesTableIdPutResponsesContentApplicationJsonSchemaData, required)

### 202

- `data` (TablesTableIdPutResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

- `error` (TablesTableIdPutResponsesContentApplicationJsonSchemaError, required)

### 402 Payment Required Error

- `error` (TablesTableIdPutResponsesContentApplicationJsonSchemaError, required)

### 404 Not Found Error

- `error` (TablesTableIdPutResponsesContentApplicationJsonSchemaError, required)

### 412 Precondition Failed Error

- `error` (TablesTableIdPutResponsesContentApplicationJsonSchemaError, required)

### 422 Unprocessable Entity Error

- `error` (TablesTableIdPutResponsesContentApplicationJsonSchemaError, required)

## Types

### OverwriteTableRequest0

- `rows` (TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Rows, required)
- `schema` (TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Schema, optional) — The schema of the table as a collection of column definitions.

### TablesTableIdPutResponsesContentApplicationJsonSchemaData

- `jobID` (string, required) — The ID of the asynchronous job

### TablesTableIdPutResponsesContentApplicationJsonSchemaError

- `type` (enum, required)
  - Allowed values: `column_id_reserved`, `column_id_not_unique`, `column_has_invalid_value`, `column_id_not_found`
- `message` (string, required)

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Rows

- A_collection_of_row_objects: list of map from string to any
- TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Rows1

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Schema

The schema of the table as a collection of column definitions.

- `columns` (list of TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItems, required) — A collection of column definitions, in the order that they are to be displayed in the table.

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0Rows1

A single reference to a [stash](/docs/api-reference/v2/stashing) whose data should be used.

- `$stashID` (string, required) — ID of the stash, e.g., `20240215-job32`

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItems

- `id` (string, required) — Internal ID of the column, e.g., `fullName`. This value cannot be changed once created.
- `type` (TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType, required) — The type of the column.
- `displayName` (string, optional) — Human-readable display name of the column, e.g., `Full Name`. Can be modified once created.

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType

The type of the column.

- enum
  - Allowed values: `string`, `uri`, `imageURI`, `audioURI`, `markdown`, `phoneNumber`, `emailAddress`, `emoji`, `date`, `time`, `dateTime`, `duration`, `number`, `boolean`, `json`
- TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType1

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType1

- TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType10
- TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType11

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType10

- `kind` (enum, required)
  - Allowed values: `string`, `uri`, `imageURI`, `audioURI`, `markdown`, `phoneNumber`, `emailAddress`, `emoji`, `date`, `time`, `dateTime`, `duration`, `number`, `boolean`, `json`

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsType11

- `kind` (enum, required)
  - Allowed values: `array`
- `items` (TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsTypeOneOf1OneOf1Items, required)

### TablesTableIdPutRequestBodyContentApplicationJsonSchemaOneOf0SchemaColumnsItemsTypeOneOf1OneOf1Items

- `kind` (enum, required)
  - Allowed values: `string`, `uri`, `imageURI`, `audioURI`, `markdown`, `phoneNumber`, `emailAddress`, `emoji`, `date`, `time`, `dateTime`, `duration`, `number`, `boolean`, `json`

## Examples

### Example 1

**Request**

```json
{
  "rows": [
    {
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    },
    {
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    }
  ]
}
```

**Response**

```json
{
  "data": {
    "rowIDs": [
      "zcJWnyI8Tbam21V34K8MNA",
      "93a19-cf7c-44437-b8c1-e9acbbb"
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6"

payload = { "rows": [
        {
            "amountPaid": 0,
            "fullName": "Alex Bard",
            "invoiceDate": "2024-07-29T14:04:15.561Z",
            "totalAmount": 34.5
        },
        {
            "amountPaid": 20,
            "fullName": "Alicia Hines",
            "invoiceDate": "2023-06-15T10:30:00.000Z",
            "totalAmount": 50.75
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6';
const options = {
  method: 'PUT',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"rows":[{"amountPaid":0,"fullName":"Alex Bard","invoiceDate":"2024-07-29T14:04:15.561Z","totalAmount":34.5},{"amountPaid":20,"fullName":"Alicia Hines","invoiceDate":"2023-06-15T10:30:00.000Z","totalAmount":50.75}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6"

	payload := strings.NewReader("{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6', [
  'body' => '{
  "rows": [
    {
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    },
    {
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["rows": [
    [
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    ],
    [
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example 2

**Request**

```json
{
  "rows": [
    {
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    },
    {
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    }
  ]
}
```

**Response**

```json
{
  "data": {
    "jobID": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6"

payload = { "rows": [
        {
            "amountPaid": 0,
            "fullName": "Alex Bard",
            "invoiceDate": "2024-07-29T14:04:15.561Z",
            "totalAmount": 34.5
        },
        {
            "amountPaid": 20,
            "fullName": "Alicia Hines",
            "invoiceDate": "2023-06-15T10:30:00.000Z",
            "totalAmount": 50.75
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6';
const options = {
  method: 'PUT',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"rows":[{"amountPaid":0,"fullName":"Alex Bard","invoiceDate":"2024-07-29T14:04:15.561Z","totalAmount":34.5},{"amountPaid":20,"fullName":"Alicia Hines","invoiceDate":"2023-06-15T10:30:00.000Z","totalAmount":50.75}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6"

	payload := strings.NewReader("{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6', [
  'body' => '{
  "rows": [
    {
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    },
    {
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"rows\": [\n    {\n      \"amountPaid\": 0,\n      \"fullName\": \"Alex Bard\",\n      \"invoiceDate\": \"2024-07-29T14:04:15.561Z\",\n      \"totalAmount\": 34.5\n    },\n    {\n      \"amountPaid\": 20,\n      \"fullName\": \"Alicia Hines\",\n      \"invoiceDate\": \"2023-06-15T10:30:00.000Z\",\n      \"totalAmount\": 50.75\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["rows": [
    [
      "amountPaid": 0,
      "fullName": "Alex Bard",
      "invoiceDate": "2024-07-29T14:04:15.561Z",
      "totalAmount": 34.5
    ],
    [
      "amountPaid": 20,
      "fullName": "Alicia Hines",
      "invoiceDate": "2023-06-15T10:30:00.000Z",
      "totalAmount": 50.75
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.glideapps.com/tables/2a1bad8b-cf7c-44437-b8c1-e3782df6")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```