Comment on page
AskYourPDF API Documentation
AskYourPDF is a cutting-edge solution revolutionising document interactions. Our API empowers developers with the ability to programmatically extract valuable information from PDF files and leverage it to create custom chatbots. By providing seamless access to the content within PDF documents, developers can build powerful applications that enable users to navigate, search, and engage with data effortlessly. This comprehensive guide will walk you through the API's features, pricing, authentication methods, and usage guidelines, opening up endless possibilities to enhance productivity and knowledge retrieval for your applications. Harness the potential of AskYourPDF API and embark on an innovative journey of intelligent document analysis and interactive experiences.
To upload a document, choose between generating a document ID on our website or using the API endpoint. We support various document formats, including '.pdf', '.txt', '.ppt', '.pptx', '.csv', '.epub', and '.rtf'. Additionally, you can upload PDFs using links. Moreover, the API enables interaction with any blog post or website by providing the link to the post.
Authentication is required for all our API endpoints. To access them, you must generate API keys on your AskYourPDF account. These API keys need to be set in your request header as "x-api-key." It is essential to treat your API key as a secret and ensure its protection.
headers: {
"x-api-key": "ask_xxxxx"
}
get
/v1/api/download_pdf
Download Pdf
url
(required): The link to the document. It could be a link to a PDF or a post on a website
201
Successful Responsedoc_id
(string
): The document ID of the uploaded document.
{ "doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd" }
cURL
curl -X GET
'https://api.askyourpdf.com/v1/api/download_pdf?url=https://www.example.com/document.pdf'
-H 'x-api-key: YOUR_API_KEY'
Python
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
response = requests.get('https://api.askyourpdf.com/v1/api/download_pdf',
headers=headers,
params={'url': 'https://www.example.com/document.pdf'})
if response.status_code == 201:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'x-api-key': 'YOUR_API_KEY'
};
axios.get('https://api.askyourpdf.com/v1/api/download_pdf', {
headers: headers,
params: {
url: 'https://www.example.com/document.pdf'
}
})
.then((response) => {
if (response.status === 201) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
post
/v1/api/upload
Upload Pdf
The request body should be sent as a form of data with the name
file
(see example).file
(required): The raw bytes of the file to be uploaded.
201
Successful Responsedoc_id
(string
): The document ID of the uploaded document.
{ "doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd" }
cURL
curl -X POST
-H 'x-api-key: YOUR_API_KEY'
-F "file=@/path/to/yourfile.pdf" https://api.askyourpdf.com/v1/api/upload
Python
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
file_data = open('/path/to/yourfile.pdf', 'rb')
response = requests.post('https://api.askyourpdf.com/v1/api/upload', headers=headers,
files={'file': file_data})
if response.status_code == 201:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const headers = {
'x-api-key': 'YOUR_API_KEY'
};
let form = new FormData();
form.append('file', fs.createReadStream('/path/to/yourfile.pdf'));
axios.post('https://api.askyourpdf.com/v1/api/upload', form, {
headers: {
...headers,
...form.getHeaders()
}
})
.then((response) => {
if (response.status === 201) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
Endpoint for initiating a chat with a document. This endpoint requires API Key Header authentication.
post
/v1/chat/{doc_id}
Chat With Doc Endpoint
doc_id
(string
, required): The ID of the document for the conversation.model_name:
Available values areCLAUDE1
,GPT3
ANDGPT4
(GPT4 Credits Required). Default isGPT3
.stream
(boolean
, optional): Flag for streaming. Default isfalse
.
sender
(required
): The sender of the chat message. The sender should beUser
message
(required
): The chat message content.
The request body to ask a single question.
[
{
"sender": "User",
"message": "What does this document say?"
}
]
To ask a follow-up question and provide the model with context you can send your previous questions and responses in the following format.
[
{
"sender": "user",
"message": "What does the document say?"
},
{
"sender": "bot",
"message": "The document consists of words in different languages expressing gratitude"
},
{
"sender": "user",
"message": "What is the word expressing gratitude in Spanish?"
}
]
The response when the query parameter
stream = False
200
Successful Responsequestion
: The question posed by the user, with sender, message, and type.sender
message
type
answer
: The answer provided by the AI, with sender, message, and type.sender
message
type
created
(string
): The time the chat was created.
{
"question": {
"sender": "user",
"message": "What does this document say?",
"type": "question"
},
"answer": {
"sender": "bot",
"message": "This document talks about AI",
"type": "response"
},
"created": "2023-07-20T11:14:55.928Z"
}
By setting the query parameter
stream = True,
you can receive the response as a stream of token. An example of the response can be seen below.Chunk: This
Chunk: document
Chunk: talks
Chunk: about
Chunk: AI
cURL
curl -X POST
-H 'Content-Type: application/json'
-H 'x-api-key: YOUR_API_KEY'
-d '[{"sender": "User","message": "What does this document say?"}]'
https://api.askyourpdf.com/v1/chat/{YOUR_DOC_ID}
Python
import requests
import json
headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
data = [
{
"sender": "User",
"message": "What does this document say?"
}
]
response = requests.post(
'https://api.askyourpdf.com/v1/chat/{YOUR_DOC_ID}?model_name=GPT3',
headers=headers, data=json.dumps(data))
if response.status_code == 200:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
};
const data = [
{
"sender": "User",
"message": "What does this document say?"
}
];
axios.post('https://api.askyourpdf.com/v1/chat/{YOUR_DOC_ID}?model_name=GPT3',
data, {headers: headers})
.then((response) => {
if (response.status === 200) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
Python
import requests
import json
headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
data = [
{
"sender": "User",
"message": "What does this document say?"
}
]
try:
response = requests.post(
'https://api.askyourpdf.com/v1/chat/YOUR_DOC_ID?stream=True&model_name=GPT3',
headers=headers, data=json.dumps(data))
response.raise_for_status()
for chunk in response.iter_content(chunk_size=24):
chunk_str = chunk.decode('utf-8')
print("Chunk:", chunk_str)
except requests.exceptions.RequestException as error:
print("Error:", error)
Javascript
const fetch = require('node-fetch');
const Readable = require('stream').Readable;
const headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
const data = [
{
"sender": "User",
"message": "What does this document say?"
}
]
fetch('https://api.askyourpdf.com/v1/chat/YOUR_DOC_ID?stream=True&model_name=GPT3', {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.body;
})
.then(stream => {
const reader = Readable.from(stream);
reader.on('data', chunk => {
console.log("Chunk:", chunk.toString('utf-8'));
});
})
.catch(error => {
console.log("Error:", error);
});
This endpoint allows users to retrieve a paginated list of their uploaded documents.
get
/v1/api/documents
Fetch Documents
page
(integer
, optional): The page to return. Defaults to1
.- page_size (integer, optional): The number of documents to return per page. Defaults to 10.
200
Successful Responsetotal_pages
(Integer): The total number of pages available for queryingdocuments
(Array): A list of document details belonging to the user.name
doc_id
summary
language
pages
shareable
date_time
{
"total_pages": 1,
"documents": [
{
"name": "Nature.pdf",
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"summary": "This is a document about nature",
"language": "en",
"pages": 10,
"shareable": true,
"date_time": "2023-07-21T06:18:18.891Z"
}
]
}
cURL
curl -X GET
-H 'x-api-key: YOUR_API_KEY'
'https://api.askyourpdf.com/v1/api/documents?page=1&page_size=10'
Python
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
params = {
'page': 1,
'page_size': 10
}
response = requests.get('https://api.askyourpdf.com/v1/api/documents',
headers=headers, params=params)
if response.status_code == 200:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'x-api-key': 'YOUR_API_KEY'
};
const params = {
'page': 1,
'page_size': 10
};
axios.get('https://api.askyourpdf.com/v1/api/documents',
{headers: headers, params: params})
.then((response) => {
if (response.status === 200) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
This endpoint allows users to retrieve a single document.
get
/v1/api/documents/{doc_id}
Fetch Document
doc_id
(string
, required): The ID of the document for the conversation.200
Successful Responsename
doc_id
summary
language
pages
shareable
date_time
{
"name": "Nature.pdf",
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"summary": "This is a document about nature",
"language": "en",
"pages": 10,
"shareable": true,
"date_time": "2023-07-21T06:18:18.891Z"
}
cURL
curl -X GET
-H 'x-api-key: YOUR_API_KEY'
'https://api.askyourpdf.com/v1/api/documents/{YOUR_DOC_ID}'
Python
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
response = requests.get('https://api.askyourpdf.com/v1/api/documents/{YOUR_DOC_ID}',
headers=headers)
if response.status_code == 200:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'x-api-key': 'YOUR_API_KEY'
};
axios.get('https://api.askyourpdf.com/v1/api/documents/{YOUR_DOC_ID}',
{headers: headers})
.then((response) => {
if (response.status === 200) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
Allows users to delete a single document
delete
/v1/api/documents/{doc_id}
Delete Document
doc_id
(string
, required): The ID of the document to be deleted.200
Successful Response
{"message": "Document deleted successfully"}
cURL
curl -X DELETE
-H 'x-api-key: YOUR_API_KEY'
'https://api.askyourpdf.com/v1/api/documents/DOC_ID'
Python
import requests
headers = {
'x-api-key': 'YOUR_API_KEY'
}
response = requests.delete('https://api.askyourpdf.com/v1/api/documents/DOC_ID', headers=headers)
if response.status_code == 200:
print('Document deleted successfully')
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'x-api-key': 'YOUR_API_KEY'
};
axios.delete('https://api.askyourpdf.com/v1/api/documents/DOC_ID', {headers: headers})
.then((response) => {
if (response.status === 200) {
console.log('Document deleted successfully');
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
Allows users to summarise a single document (summarisation credits required).
post
/v1/api/summary
Document Summary Endpoint
stream
(boolean
,optional
): Flag for streaming. Default isFalse
.
doc_id
(String
,required
): The ID of the document to summarise.length
(String
,required
): How long the summary should be, with optionsAUTO
,LONG
andSHORT
.format
(String
,required
): The arrangement of the summary with optionsAUTO
,PARAGRAPH
,BULLET
andPAPER
.markdown
(boolean
,required
): Flag for determining if the response should be in markdown. Default isfalse
.prompt
(String
,required
): Additional instructions to be given for summarising the document.
The request body to summarise a document
{
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": true,
"prompt": "Summarise the following context"
}
200
Successful Responsesummary
(String
): The summary of the document given based on the instructions from the request.date_time
(String
): The time the summary was created.prompt
(String
): The set of additional instructions given from the request body.language
(String
): The language in which the summary is given.document_name
(String
): The name of the document.pages
(Integer
): The number of pages of the document.
{
"summary": "This is a document that talks about nature",
"date_time": "2023-10-01T12:42:50.675Z",
"prompt": "Summarise the following context",
"language": "en",
"document_name": "Nature.pdf",
"pages": 10
}
By setting the query parameter,
stream = true
, you can receive the response as a stream of token. An example of the response can be seen below.Chunk: This
Chunk: is
Chunk: a
Chunk: document
Chunk: that
Chunk: talks
Chunk: about
Chunk: nature
cURL
curl -X 'POST' \
'https://api.askyourpdf.com/v1/api/summary' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY' \
-d '{
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": true,
"prompt": "Summarise the following context"
}'
Python
import requests
import json
headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
data = {
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": True,
"prompt": "Summarise the following context"
}
response = requests.post('https://api.askyourpdf.com/v1/api/summary',
headers=headers, data=json.dumps(data))
if response.status_code == 200:
print(response.json())
else:
print('Error:', response.status_code)
Javascript
const axios = require('axios');
const headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
};
const data = {
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": true,
"prompt": "Summarise the following context"
};
axios.post('https://api.askyourpdf.com/v1/api/summary', data, {headers: headers})
.then((response) => {
if (response.status === 200) {
console.log(response.data);
} else {
console.log('Error:', response.status);
}
})
.catch((error) => {
console.error(error);
});
Python
import requests
import json
headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
data = {
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": True,
"prompt": "Summarise the following context"
}
try:
response = requests.post(
'https://api.askyourpdf.com/v1/api/summary?stream=True',
headers=headers, data=json.dumps(data))
response.raise_for_status()
for chunk in response.iter_content(chunk_size=24):
chunk_str = chunk.decode('utf-8')
print("Chunk:", chunk_str)
except requests.exceptions.RequestException as error:
print("Error:", error)
Javascript
const fetch = require('node-fetch');
const Readable = require('stream').Readable;
const headers = {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
const data = {
"doc_id": "6e60e87c-6154-4dff-8e62-ff10d8ed16dd",
"length": "AUTO",
"format": "AUTO",
"markdown": true,
"prompt": "Summarise the following context"
};
fetch('https://api.askyourpdf.com/v1/api/summary?stream=True', {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.body;
})
.then(stream => {
const reader = Readable.from(stream);
reader.on('data', chunk => {
console.log("Chunk:", chunk.toString('utf-8'));
});
})
.catch(error => {
console.log("Error:", error);
});
Allows users to summarise text (summarisation credits required).
post
/v1/api/text_summary
Text Summary Endpoint
stream
(boolean
,optional
): Flag for streaming. Default isFalse
.
length
(String
,required
): How long the summary should be, with optionsAUTO
,LONG
andSHORT
.format
(String
,required
): The arrangement of the summary with optionsAUTO
,PARAGRAPH
,BULLET
andPAPER
.