# Create a file

Creates a file.
Additionally, a file can be sent by:
- Multipart/form-data POST request: In this request,
the file is uploaded and all property names are the same as the JSON names.
- File body request: In this request,
the file body is sent as the request body, with the appropriate `Content-Type`.
No additional properties can be set with the request data.

Permitted file types: `.jpg`, `.png`, `.gif`, and `.pdf`.
When using a publishable API key, only private files can be created.
The files can be modified at a later point or time,
or can be accessed using a secret API key.

Endpoint: POST /files
Version: latest
Security: SecretApiKey, JWT, PublishableApiKey

## Request fields (application/json):

  - `file` (string, required)
    File in base64 encoded format.
    Example: R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=

  - `isPublic` (boolean)
    Specifies if the file is available publicly without authentication.
If this value is `true`, the permalink in the `_links` section contains the public URL.
    Example: false

  - `name` (string)
    File name used for downloading.
    Example: logo.png

  - `description` (string)
    Description of the file.
    Example: My file description

  - `sourceType` (string | null)
    Source of the file.
    Enum: "upload", "camera", "organization-export", "organization-closure-export", null

  - `tags` (array)
    List of tags associated with the file.
    Example: ["test","tags"]

  - `url` (string, required)
    URL of the file to upload.
    Example: https://app.rebilly.com/static/gateways/Stripe.png

## Response 201 fields (application/json):

  - `id` (string)
    ID of the file.
    Example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N

  - `name` (string)
    Original file name.

  - `extension` (string)
    File extension.

  - `description` (string)
    Description of the file.

  - `sourceType` (string | null)
    Source of the file.
    Enum: "upload", "camera", "organization-export", "organization-closure-export", null

  - `tags` (array)
    List of tags associated with the file.

  - `mime` (string)
    MIME type of the file.
    Enum: "image/png", "image/jpeg", "image/gif", "application/pdf", "application/json", "application/zip", "text/csv"

  - `size` (integer)
    File size, in bytes.

  - `width` (integer | null)
    Width of the image.
This field is applicable to images only.

  - `height` (integer | null)
    Height of the image.
This field is applicable to images only.

  - `sha1` (string)
    Hash sum of the file.

  - `exifData` (object | null)
    Collection of EXIF tags contained in the image metadata.
This field is applicable to images only.
    Example: {"FileSize":120,"Software":"GIMP 2.4.5"}

  - `createdTime` (string)
    Date and time when the resource is created.
This value is set automatically when the resource is created.

  - `updatedTime` (string)
    Date and time when the resource is updated.
This value is set automatically when the resource is updated.

  - `isPublic` (boolean)
    Specifies if the file is available publicly without authentication.
If this value is `true`, the permalink in the `_links` section contains the public URL.

  - `_links` (array)
    Related links.

  - `_links.href` (string)
    Link URL.

  - `_links.rel` (string)
    Type of link.
    Enum: "self", "download", "signedLink", "permalink"

## Response 401 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 403 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 422 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

  - `invalidFields` (array)
    Invalid field details.
    Example: [{"field":"field1","message":"field1 is invalid"},{"field":"subObject.field2","message":"field2 is invalid"},{"field":"subObject.field2","message":"another error in the field2"}]

  - `invalidFields.field` (string)
    Name of the field.
Dot notation is used for nested object field names.

  - `invalidFields.message` (string)
    Message field.

## Response 429 fields (application/json):

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".
    Example: about:blank

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.
    Example: Rate Limit Exceeded

  - `status` (integer)
    HTTP status code.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.
    Example: A request cannot be executed because the user has sent too many requests within a certain period of time

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

