# Respond to an access request (file stream upload) (/docs/api-reference/custom-integration/post-v1-datapoint)

If you need to upload a file (e.g. photos, movies, audio, PDFs, etc.), use this endpoint to send a binary stream to the Datapoint within the integration. Unlike /v1/data-silo, this uploads to one datapoint only, rather than several at once.

## POST /v1/datapoint

```json
{
  "servers": [
    {
      "url": "https://multi-tenant.sombra.transcend.io",
      "description": "Multi-tenant (EU)"
    },
    {
      "url": "https://multi-tenant.sombra.us.transcend.io",
      "description": "Multi-tenant (US)"
    },
    {
      "description": "Self-hosted",
      "url": "https://_yourOrganizationSombraURL_.com"
    },
    {
      "description": "Preference Store in Europe",
      "url": "https://consent.transcend.io"
    },
    {
      "description": "Preference Store in the U.S.",
      "url": "https://consent.us.transcend.io"
    },
    {
      "description": "Rules Automation webhook ingestion (EU)",
      "url": "https://rule-automation.transcend.io"
    },
    {
      "description": "Rules Automation webhook ingestion (US)",
      "url": "https://rule-automation.us.transcend.io"
    }
  ],
  "security": [
    {
      "Transcend_API_Key": [],
      "Sombra_Token": [],
      "Transcend_API_Key_If_Multitenant": []
    }
  ],
  "operation": {
    "summary": "Respond to an access request (file stream upload)",
    "responses": {
      "200": {
        "description": "Your request was received without an issue.",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object"
            }
          }
        }
      },
      "400": {
        "description": "While this request passed authentication, the input is malformed. Please double-check that your code conforms to our API specification.",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      },
      "401": {
        "description": "There was a problem authenticating your request. This may be an issue with the Transcend API key (\"authorization\" header), or the Sombra API key (\"x-sombra-authorization\" header used for self-hosted gateways only).",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      },
      "413": {
        "description": "The request body is too large. JSON and raw bodies must be less than 50MB. URL encoded bodies must be less than 30MB.",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      },
      "429": {
        "description": "You are sending requests too quickly and have hit our rate limit. If you hit this, you'll need to throttle your request velocity or try again later.",
        "headers": {
          "Retry-After": {
            "description": "The number of seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Limit": {
            "description": "The maximum number of requests allowed in the time window.",
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Remaining": {
            "description": "The number of requests remaining in the time window.",
            "schema": {
              "type": "integer"
            }
          },
          "X-RateLimit-Reset": {
            "description": "The time at which the rate limit will reset.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      },
      "500": {
        "description": "A 5xx error means there is either an issue with your self-hosted gateway, or a Transcend server is having issues. You check our system status at status.transcend.io. Please reach out to Transcend support if you're experiencing this error.",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      },
      "502": {
        "description": "An upstream service on Transcend's side is having issues. You check our system status at status.transcend.io. Please reach out to Transcend support if you're experiencing this error.",
        "headers": {},
        "content": {
          "application/json": {
            "schema": {
              "description": "",
              "type": "object",
              "properties": {}
            }
          }
        }
      }
    },
    "operationId": "post-v1-datapoint",
    "security": [
      {
        "Transcend_API_Key": [
          "API Key must be associated to this integration"
        ]
      }
    ],
    "parameters": [
      {
        "$ref": "#/components/parameters/authorization"
      },
      {
        "$ref": "#/components/parameters/x-sombra-authorization"
      },
      {
        "$ref": "#/components/parameters/x-transcend-nonce"
      },
      {
        "schema": {
          "type": "string"
        },
        "in": "header",
        "name": "x-transcend-datapoint-name",
        "description": "The Datapoint to upload this file to (e.g. profile_picture). The keys should match a datapoint key you defined for this integration.",
        "required": true
      },
      {
        "schema": {
          "type": "string"
        },
        "in": "header",
        "name": "content-length",
        "description": "The size of the file in bytes. Required when uploading via the default pre-signed upload path.",
        "required": true
      },
      {
        "schema": {
          "type": "string"
        },
        "in": "header",
        "name": "x-transcend-sombra-content-type",
        "description": "The MIME type of the file being uploaded (e.g. image/png). Used as the primary hint when detecting the file type. If omitted, Transcend falls back to the request `content-type` header and then to content-based detection.",
        "required": false
      },
      {
        "schema": {
          "type": "string"
        },
        "in": "header",
        "description": "[DEPRECATED] The profile identifier that is being reported. You should not use this header if you are using multi tenant Sombra or have a Sombra version at or above 7.182.0. For recent versions of Sombra, the profile identifier is encoded within the nonce.",
        "name": "x-transcend-profile-id",
        "required": false
      },
      {
        "schema": {
          "type": "string"
        },
        "in": "header",
        "name": "x-transcend-remote-id",
        "description": "Optional: the name of the file that will be downloaded. If not provided, defaults to the \"{datapoint name} (#)\".",
        "required": false
      },
      {
        "schema": {
          "type": "boolean",
          "default": false
        },
        "in": "header",
        "name": "x-transcend-skip-status-update",
        "description": "If true, the status of the Datapoint will not automatically update to \"resolved\" after you upload a file. This is useful when uploading multiple files to a Datapoint. Set this to false on your final upload to update the status of the Datapoint to \"resolved\".",
        "required": false
      },
      {
        "schema": {
          "type": "boolean",
          "default": true
        },
        "in": "header",
        "name": "x-transcend-overwrite-file",
        "description": "When supplying x-transcend-remote-id in an upload, Transcend will by default overwrite a previously-uploaded file with the same x-transcend-remote-id (when this header is omitted, it defaults to true). To disable this behavior, set x-transcend-overwrite-file to false. If disabled, a remote-id conflict will result in an HTTP 400 error.",
        "required": false
      }
    ],
    "tags": [
      "Custom integration"
    ],
    "requestBody": {
      "content": {
        "application/octet-stream": {
          "schema": {
            "type": "string",
            "format": "binary"
          },
          "examples": {}
        }
      },
      "description": "You can also upload a file to a specific Datapoint for a given profile.\n\nThis is an octet stream of a file you want to upload.\n\nNote the Datapoint name and Profile ID should be included as headers. You may remember these values from /v1/data-silo, but they were included in the JSON body. Because we're streaming a file, these values are in an HTTP header for this request."
    },
    "description": "If you need to upload a file (e.g. photos, movies, audio, PDFs, etc.), use this endpoint to send a binary stream to the Datapoint within the integration. Unlike /v1/data-silo, this uploads to one datapoint only, rather than several at once."
  }
}
```