API process flow
Get Upload URL
Upload an Audio/Video File
Before you can import an audio or video file into a project, you must generate a secure upload URL. This URL allows you to upload a file directly to Amazon S3 via a pre-signed POST request.
You can generate the upload URL using the
getUploadUrl query.
Query Information
Supported File Types
You can upload the following file extensions: .mp3, .mp4, .wav, .mkv, .webm, .ogg, .m4a, .aac, .opus, .wma
uniqueObjName Requirements:
- Must be a random 30-character alphanumeric string
- Must end with the file extension
- Example: [NAME].ogg
Budget Requirement The query will only succeed if the authenticated user (identified by the API Key) has sufficient remaining budget.
GraphQL Query (Get Upload URL)
fragment awsUrlObject on AWSUrlObject {
url
fields
}
query GetUploadUrl($uniqueObjName: String!) {
getUploadUrl(uniqueObjName: $uniqueObjName) {
...awsUrlObject
}
}
Example JS Code: Fetch the Upload URL
import axios from "axios";
export const GET_UPLOAD_URL = `...`;
const fetchUploadUrl = async () => {
try {
const response = await axios({
method: "POST",
url: "https://api-v2.speechmind.com/external/v2/graphql",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.VUE_APP_API_KEY,
},
data: JSON.stringify({
query: GET_UPLOAD_URL,
variables: { uniqueObjName: "[NAME].ogg" },
}),
});
const { url, fields } = response.data.data.getUploadUrl;
console.log("Upload URL:", url);
console.log("Fields:", fields);
} catch (error) {
console.error("Error fetching upload URL:", error);
}
};
fetchUploadUrl();
Upload the File to S3
Once you have the pre-signed URL and fields, you can upload the file directly to S3.
AWS Response Structure
const { url, fields } = response.data.data.getUploadUrl;
Example cURL Upload
Remember to replace each placeholder with values from your actual getUploadUrl response.
curl --location 'https://your-bucket-name.s3.amazonaws.com/' \
--form 'key="UNIQUE_FILE_NAME"' \
--form 'x-amz-algorithm="AWS4-HMAC-SHA256"' \
--form 'x-amz-credential="FROM_RESPONSE"' \
--form 'x-amz-date="FROM_RESPONSE"' \
--form 'policy="FROM_RESPONSE"' \
--form 'x-amz-signature="FROM_RESPONSE"' \
--form 'file=@"<path-to-local-file>.ogg"'
Example JS Implementation for Uploading to S3
import axios from "axios";
async function uploadAudioToAWS(url, fileBlob, fields, fileName) {
// Build FormData with AWS POST fields
const formData = new FormData();
Object.keys(fields).forEach((key) => {
formData.append(key, fields[key]);
});
// Append the actual file
const file = new File([fileBlob], fileName, {
type: "audio/ogg",
});
formData.append("file", file);
try {
const response = await axios.post(url, formData, {
headers: { "Content-Type": "multipart/form-data" },
});
console.log("File uploaded successfully:", response.data);
} catch (error) {
console.error("Error uploading file:", error);
}
}
URL Expiration
The pre-signed upload URL is:
- Valid only for one file
- Valid for 5 minutes After expiration, you must request a new upload URL.
Have questions?
Still have questions? Talk to support.