> ## Documentation Index
> Fetch the complete documentation index at: https://developers.pcibooking.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload Data Block Content

> Upload content to an existing data block (up to 50MB).

<Card title="Data Block Tokenization Guide" icon="book" href="/additional-functions/data-blocks">
  Store and manage arbitrary data securely with GDPR-compliant storage locations
</Card>

Uploads content to an existing data block. Use this after [creating a data block](/api-reference/additional/create-data-block) to store the actual sensitive data (files, documents, or any binary content). Uploading to a data block that already has content replaces the previous content.

## Error Responses

| HTTP Status | Error Code | Description                                                                                                 |
| ----------- | ---------- | ----------------------------------------------------------------------------------------------------------- |
| 401         | -1003      | Not authenticated. The API key is missing or invalid.                                                       |
| 403         | -1003      | Not authorized. The authenticated user does not own this data block or lacks the `CanWriteData` permission. |
| 404         | -160       | Data block not found. No data block exists with the specified ID.                                           |
| 413         | -126       | Payload too large. The `Content-Length` header exceeds the 50 MB limit.                                     |
| 500         | -150       | Internal system error.                                                                                      |

## Parameter Constraints

| Parameter        | Constraint                                                                                                                                            |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Content-Length` | Required. Must not exceed 52,428,800 bytes (50 MB).                                                                                                   |
| `Content-Type`   | Required. Specifies the MIME type of the uploaded content (e.g. `application/json`, `image/png`). This value is stored and returned when downloading. |

<Info title="50MB file size">
  Each data block can hold up to 50MB of content.
</Info>

## Parameters

### Path Parameters

<ParamField path="id" type="string" required>
  The ID of the data block returned in the [create method](/api-reference/additional/create-data-block).
</ParamField>

### Headers

<ParamField header="Authorization" type="string" required>
  Your API key prefixed with `APIKEY`. Example: `APIKEY your-api-key`. See the [Authentication guide](/getting-started/authentication).
</ParamField>

<ParamField header="Content-Type" type="string" required>
  The content type of the body provided.
</ParamField>

### Request Body

<ParamField body="Content" type="string">
  The content of the data block to upload.
</ParamField>

<RequestExample>
  ```javascript Node.js theme={null}
  const dataBlockId = '22222222';
  const content = JSON.stringify({ name: 'John Doe', passport: 'AB1234567' });

  const response = await fetch(`https://service.pcibooking.net/api/datablock/${dataBlockId}/data`, {
    method: 'PUT',
    headers: {
      'Authorization': 'APIKEY your-api-key',
      'Content-Type': 'application/json'
    },
    body: content
  });

  console.log(response.status); // 204 on success
  ```

  ```python Python theme={null}
  import requests

  data_block_id = '22222222'
  content = '{"name": "John Doe", "passport": "AB1234567"}'

  response = requests.put(
      f'https://service.pcibooking.net/api/datablock/{data_block_id}/data',
      headers={
          'Authorization': 'APIKEY your-api-key',
          'Content-Type': 'application/json'
      },
      data=content
  )

  print(response.status_code)  # 204 on success
  ```
</RequestExample>

## Response

<ResponseExample>
  ```text 204 theme={null}
  No content returned.
  ```

  ```json 400 theme={null}
  {
      "code": -125,
      "message": "Bad input data",
      "moreInfo": "...",
      "errorList": null
  }
  ```

  ```json 401 theme={null}
  {
      "code": -1003,
      "message": "Not authorized to access this resource",
      "moreInfo": "Bad or missing authorization data, expected APIKEY",
      "errorList": null
  }
  ```

  ```text 413 theme={null}
  Payload Too Large. Content exceeds the 50 MB limit.
  ```
</ResponseExample>
