Only files that no post uses can be deleted; others answer 409 media_in_use.
Requires posts:write.
Authorization
bearerAuth API key starting with fh_
In: header
Path Parameters
Media id
^med_[0-9a-fA-F]{32}$Header Parameters
Any unique string up to 255 characters. A retry with the same key within 24 hours returns the first response instead of running again.
length <= 255Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://feedhorizon.com/api/v1/media/med_0195f0a27b3c7d4e8f5a1b2c3d4e5f60"{
"data": {
"id": "med_0195f0a27b3c7d4e8f5a1b2c3d4e5f60",
"deleted": true
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "One or more fields are invalid, see details",
"docUrl": "https://feedhorizon.com/docs/api/errors#invalid_request_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "No Authorization: Bearer header",
"docUrl": "https://feedhorizon.com/docs/api/errors#authentication_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "The key lacks the scope for this endpoint",
"docUrl": "https://feedhorizon.com/docs/api/errors#permission_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "not_found_error",
"code": "resource_not_found",
"message": "The resource does not exist, belongs to another organization, or the key cannot see its profile. A malformed id is also a 404",
"docUrl": "https://feedhorizon.com/docs/api/errors#not_found_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "conflict_error",
"code": "media_in_use",
"message": "The file is still used by a post",
"docUrl": "https://feedhorizon.com/docs/api/errors#conflict_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "idempotency_error",
"code": "idempotency_key_reused",
"message": "The key was used for a different request. Use a new key",
"docUrl": "https://feedhorizon.com/docs/api/errors#idempotency_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Too many requests. Wait the seconds in Retry-After",
"docUrl": "https://feedhorizon.com/docs/api/errors#rate_limit_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Something failed on our side. Retry with backoff, using the same Idempotency-Key for writes",
"docUrl": "https://feedhorizon.com/docs/api/errors#api_error",
"requestId": "req_m2x81a0kfd3h9s"
}
}Add a media file POST
Two ways to add a file, then pass its `id` in `mediaIds` when creating or updating a post. - **Import from a URL**: send `url` (public https, up to 100 MB). FeedHorizon downloads it and answers when it is stored. Easiest for agents and scripts. - **Upload**: send `filename`, `mimeType` and `sizeBytes` (up to 5 GB). The answer carries `upload.url`; `PUT` the raw bytes there with the same `Content-Type` within two hours. No API key is needed for that request. Supported types: image/jpeg, image/png, image/gif, image/webp, video/mp4, video/quicktime, video/webm, application/pdf. Which platform takes which type is listed under `GET /platforms`. Requires `posts:write`.
List profiles GET
All profiles the API key can access, oldest first. Filter by `externalId` to find the profile of one of your customers. Requires `profiles:read`.