Skip to content
Pitch2SaleDevelopers
Open the app
Early access: these pages are being written and reviewed. Facts in the header boxes come straight from the product.

Start a file upload to a record

POST
/api/v1/files/upload-url
curl --request POST \
--url https://api.pitch2sale.com/api/v1/files/upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "filename": "example", "mime_type": "application/pdf", "size_bytes": 1, "entity_type": "lead", "entity_id": "example", "description": "example", "category": "example" }'

Step 1 of 2: returns a presigned S3 PUT URL for a file on entity_type/entity_id. Upload the bytes, then call POST /api/v1/files/confirm.

Media typeapplication/json
object
filename
required
string
>= 1 characters <= 500 characters
mime_type
required
string
Allowed values: application/pdf application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet application/vnd.ms-powerpoint application/vnd.openxmlformats-officedocument.presentationml.presentation text/plain text/csv image/jpeg image/png image/gif image/webp image/svg+xml audio/mpeg audio/wav audio/ogg audio/webm video/mp4 video/webm application/zip application/gzip application/octet-stream
size_bytes
required
integer
> 0 <= 26214400
entity_type
required
string
Allowed values: lead contact activity proposal contract invoice estimate project ticket user_avatar org_avatar
entity_id
required
string
/^[0-9a-fA-F]{24}$/
description
string
<= 1000 characters
category
string
<= 64 characters

Where to upload

Media typeapplication/json
object
file_id
required
string
upload_url
required
string
s3_key
required
string
expires_at
required
string
Examplegenerated
{
"file_id": "example",
"upload_url": "example",
"s3_key": "example",
"expires_at": "example"
}

Validation failed

Media typeapplication/json
object
error
required
string
code
string
message
string
details
Array<object>
object
field
required
string
message
required
string
code
required
string
Examplegenerated
{
"error": "example",
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"message": "example",
"code": "example"
}
]
}

Authentication required or token invalid

Media typeapplication/json
object
error
required
string
code
string
message
string
details
Array<object>
object
field
required
string
message
required
string
code
required
string
Examplegenerated
{
"error": "example",
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"message": "example",
"code": "example"
}
]
}

Role permission or token scope missing

Media typeapplication/json
object
error
required
string
code
string
message
string
details
Array<object>
object
field
required
string
message
required
string
code
required
string
Examplegenerated
{
"error": "example",
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"message": "example",
"code": "example"
}
]
}

Rate limit exceeded

Media typeapplication/json
object
error
required
string
code
string
message
string
details
Array<object>
object
field
required
string
message
required
string
code
required
string
Examplegenerated
{
"error": "example",
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"message": "example",
"code": "example"
}
]
}