curl --request POST \
--url https://api.mobbin.com/v1/screens/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "login screen with biometric authentication",
"mode": "deep",
"limit": 20,
"image_quality": "optimized",
"exclude_screen_ids": []
}
'import requests
url = "https://api.mobbin.com/v1/screens/search"
payload = {
"query": "login screen with biometric authentication",
"mode": "deep",
"limit": 20,
"image_quality": "optimized",
"exclude_screen_ids": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'login screen with biometric authentication',
mode: 'deep',
limit: 20,
image_quality: 'optimized',
exclude_screen_ids: []
})
};
fetch('https://api.mobbin.com/v1/screens/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mobbin.com/v1/screens/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'login screen with biometric authentication',
'mode' => 'deep',
'limit' => 20,
'image_quality' => 'optimized',
'exclude_screen_ids' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mobbin.com/v1/screens/search"
payload := strings.NewReader("{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mobbin.com/v1/screens/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mobbin.com/v1/screens/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}"
response = http.request(request)
puts response.read_body{
"screens": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image_url": "<string>",
"image": {
"url": "<string>",
"url_expires_at": "2023-11-07T05:31:56Z",
"width": 2,
"height": 2
},
"mobbin_url": "<string>",
"app_name": "<string>",
"platform": "ios"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Search screens with natural language
Search Mobbin for screens using natural language. Returns relevant screens with image URLs, app names, and links to Mobbin.
curl --request POST \
--url https://api.mobbin.com/v1/screens/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "login screen with biometric authentication",
"mode": "deep",
"limit": 20,
"image_quality": "optimized",
"exclude_screen_ids": []
}
'import requests
url = "https://api.mobbin.com/v1/screens/search"
payload = {
"query": "login screen with biometric authentication",
"mode": "deep",
"limit": 20,
"image_quality": "optimized",
"exclude_screen_ids": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'login screen with biometric authentication',
mode: 'deep',
limit: 20,
image_quality: 'optimized',
exclude_screen_ids: []
})
};
fetch('https://api.mobbin.com/v1/screens/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mobbin.com/v1/screens/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'login screen with biometric authentication',
'mode' => 'deep',
'limit' => 20,
'image_quality' => 'optimized',
'exclude_screen_ids' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mobbin.com/v1/screens/search"
payload := strings.NewReader("{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mobbin.com/v1/screens/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mobbin.com/v1/screens/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"login screen with biometric authentication\",\n \"mode\": \"deep\",\n \"limit\": 20,\n \"image_quality\": \"optimized\",\n \"exclude_screen_ids\": []\n}"
response = http.request(request)
puts response.read_body{
"screens": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"image_url": "<string>",
"image": {
"url": "<string>",
"url_expires_at": "2023-11-07T05:31:56Z",
"width": 2,
"height": 2
},
"mobbin_url": "<string>",
"app_name": "<string>",
"platform": "ios"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Your Mobbin API key
Body
Describe one screen in plain language — the UI elements you'd see and how they relate. Be specific; detail helps. Good: "login screen with biometric authentication", "checkout page with promo code field and Apple Pay button". Avoid: combining multiple screens/intents (search separately), negations ("without ads"), vague style words ("modern", "clean"), disconnected keyword lists. Name a specific app to filter results to it (e.g. "Spotify now-playing screen"). Do not include platform (ios/web) — use the dedicated parameter.
1 - 500"login screen with biometric authentication"
Platform to search
ios, web Search mode. "standard" returns results with low latency. "deep" uses an AI-powered pipeline that interprets intent and scores each candidate for relevance, keeping the strong matches — ideal for nuanced queries. "fast" is a deprecated alias for "standard" and will be removed in a future version — use "standard" instead.
deep, standard, fast Maximum number of screens to return
1 <= x <= 100"optimized" returns images sized for AI agents and most programmatic inspection. "high" returns larger images for detailed visual inspection.
optimized, high Screen IDs to exclude from results
100Response
Search results
Show child attributes
Show child attributes