# 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):

  - `body` (FileCreateFromInline (object) or FileCreateFromUrl (object), required) — one of:
    - FileCreateFromInline:
      - `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.
      - `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"]
    - FileCreateFromUrl:
      - `url` (string, required)
        URL of the file to upload.
        Example: "https://app.rebilly.com/static/gateways/Stripe.png"
      - `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.
      - `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: same as `sourceType` in "FileCreateFromInline" (5 values)
      - `tags` (array)
        List of tags associated with the file.
        Example: ["test","tags"]

## 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: same as `sourceType` in "FileCreateFromInline" (5 values)

  - `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.

  - `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.


