Upload Image from URL
Upload an image by providing its URL. The server fetches, caches, and moderates the image. Returns a CachedImage with the hosted URL and safety score.
Endpoint and Authβ
Use the public gated endpoint, https://pin.intuition.systems/v1/graphql, with an apikey request header. Keep the key in a trusted server runtime.
Mutation Structureβ
mutation UploadImageFromUrl($image: UploadImageFromUrlInput!) {
uploadImageFromUrl(image: $image) {
images {
url
original_url
safe
score
model
created_at
}
}
}
Variablesβ
The mutation takes an image argument with the UploadImageFromUrlInput type:
| Field | Type | Required | Description |
|---|---|---|---|
url | String | Yes | URL of the image to upload |
{
"image": {
"url": "https://example.com/images/logo.png"
}
}
Response Fieldsβ
Returns UploadImageFromUrlOutput containing an images array of CachedImage objects:
| Field | Type | Description |
|---|---|---|
images | [CachedImage!]! | Array of cached image results |
images[].url | String! | Hosted image URL |
images[].original_url | String! | Original source URL |
images[].safe | Boolean! | Whether the image passed moderation |
images[].score | jsonb | Moderation safety score details |
images[].model | String | Moderation model used |
images[].created_at | timestamptz! | Upload timestamp |
Expected Responseβ
{
"data": {
"uploadImageFromUrl": {
"images": [
{
"url": "https://cdn.example.com/images/abc123.png",
"original_url": "https://example.com/images/logo.png",
"safe": true,
"score": null,
"model": null,
"created_at": "2024-01-15T10:30:00Z"
}
]
}
}
}
Use Casesβ
Import External Imagesβ
import { GraphQLClient } from 'graphql-request';
import { PIN_API_URL } from '@0xintuition/graphql';
const client = new GraphQLClient(PIN_API_URL, {
headers: {
apikey: process.env.INTUITION_PIN_API_KEY!,
},
});
async function importExternalImage(imageUrl: string) {
const mutation = `
mutation UploadImageFromUrl($image: UploadImageFromUrlInput!) {
uploadImageFromUrl(image: $image) {
images {
url
safe
}
}
}
`;
const result = await client.request(mutation, {
image: { url: imageUrl },
});
const cached = result.uploadImageFromUrl.images[0];
if (!cached) {
throw new Error('Image host could not be fetched');
}
if (!cached.safe) {
throw new Error('Image failed moderation check');
}
return cached.url;
}
Relatedβ
- Upload Image - Upload base64 image
- Upload JSON to IPFS - Upload metadata
- Pin Person - Create Person with image