1. Create an account

Go to pexafy.com and register a free account. No credit card required.

2. Get your API Key

  1. Open pexafy.com/dashboard/api-keys/create — the New Key form.
  2. Give it a name and submit. The key is shown once, right after creation, with a live example you can run on the spot.
The key works on your first call. No application review, no waiting period, and no mandatory download-tracking call to fire on every download. For comparison, as published by them: Unsplash caps unapproved applications at 50 requests/hour until it reviews your app; Pexels allows 200/hour. The Pexafy free plan starts at 1,200/hour.
Keep your API key secret. Do not expose it in client-side code or public repositories.

3. Make your first request

Pass your API key in the x-api-key header:
curl "https://api.pexafy.com/api/v1/search/photos?q=a+serene+mountain+landscape+at+sunset" \
  -H "x-api-key: YOUR_API_KEY"
Pexafy search is semantic — it understands the meaning of a scene, so full descriptive sentences (a serene mountain landscape at sunset) return better matches than bare keywords (mountain sunset). Describe the scene, light and mood you have in mind.
Response:
{
  "success": true,
  "data": [
    {
      "photo_id": "019e1b61-89b8-7a1c-bd6d-e95e1fef4124",
      "source_photo_id": "7092223",
      "image_url": "https://cdn.example.com/photo/sunset-7092223_1280.jpg",
      "urls": {
        "thumb": "https://cdn.example.com/photo/sunset-7092223_150.jpg",
        "small": "https://cdn.example.com/photo/sunset-7092223_640.jpg",
        "regular": "https://cdn.example.com/photo/sunset-7092223_1280.jpg",
        "large": "https://cdn.example.com/photo/sunset-7092223_1280.jpg",
        "full": "https://cdn.example.com/photo/sunset-7092223_1280.jpg"
      },
      "width": 4080,
      "height": 2667,
      "blur_hash": "LlMsm2s9RjkC0jWUWUazI9oes:ay",
      "orientation": "landscape",
      "color_name": "silver pink",
      "color_hex": "#B9A5A4",
      "photographer_username": "janedoe",
      "photographer_full_name": "Jane Doe",
      "photographer_url": "https://example.com/users/janedoe",
      "source": "Pixabay",
      "license_type": "free",
      "source_image_url": "https://example.com/photos/sunset-over-mountains-7092223/",
      "source_description": null,
      "description": "A serene mountain landscape at sunset with a clear sky.",
      "alt_description": "Mountains bathed in warm orange and pink light at sunset.",
      "uploaded_on": "2026-05-12",
      "relevance_score": 0.8,
      "attribution": {
        "html": "<span class=\"attribution\">Photo by <a href=\"https://example.com/users/janedoe\">janedoe</a> on Pixabay</span>",
        "plain": "Photo by janedoe on Pixabay (https://example.com/photos/...)"
      }
    }
  ],
  "meta": {
    "request_id": "b3f1c2e4-...",
    "took_ms": 71.4
  },
  "pagination": {
    "next_cursor": "eyJycyI6Ij...",
    "per_page": 20,
    "has_more": true
  },
  "error": null
}
Every response follows this shape: your results are in data, request metadata is in meta, list endpoints add a pagination object, and error is null on success (and an object { code, message } on failure). The full field list for each endpoint is documented in the API Reference.

Next steps

  • Learn how to page through results with cursors
  • Browse the Search, Photos, Facets, Collections and Usage sections to discover every endpoint
  • Visit the Dashboard to monitor your usage
  • See Pricing to choose the right plan