Image and media coverage
Living System Image Collector
agents.biomimicry.living_system_image_collector
Finds, screens, and links candidate images for a known living-system record. It is built for image coverage maintenance: callers provide a living_system_id, collection limits, and optional job metadata; the completed job returns accepted images, rejected counts, rejection reasons, provenance fields, and charge_usd.
When to use it
Good fit
- Filling missing image coverage for a known living-system record.
- Improving weak organism galleries while preserving source_url, license, license_url, creator, source, source_id, and attribution.
- Running slower media search and review work asynchronously with polling or webhooks.
- Building organism libraries, biology lessons, biomimicry galleries, research cards, media QA tools, and image coverage dashboards.
Use something else when
- General image upload, image hosting, arbitrary web image search, or image moderation.
- Calling before you have a known living_system_id.
- Choosing the final story-specific image when strong candidates already exist. Use the image selector for that step.
- Final taxonomic proof or final legal clearance for reuse.
- Blindly retrying watermark, missing-attribution, or wrong-organism rejections without changing review criteria or adding manual review.
Use after a living-system record has been resolved and image coverage is missing, weak, or needs a small reviewed expansion.
Required inputs
- inputs.living_system_id
- Identifier of the living-system record to enrich.
Optional inputs
- inputs.target_count
- Target number of new images to collect. Defaults to 5; allowed range is 1 to 20.
- inputs.iteration_limit
- Maximum search and review iterations before returning the best available result. Defaults to 3; allowed range is 1 to 5.
- inputs.extend_existing
- When true, look for additional images even if the record already has coverage. Defaults to true.
- configuration.metadata
- Caller-owned metadata for reconciling the job with your application, such as a lesson ID, client record ID, or coverage ticket.
- configuration.webhook_url
- Optional HTTPS callback URL for terminal job events.
- configuration.webhook_secret
- Optional secret used to sign webhook payloads.
What comes back
The completed job result is structured for integration. Preserve citations, warnings, confidence fields, and source context when the agent returns them.
Representative output fields
- job_id
- Identifier used to poll GET /v1/jobs/{job_id}.
- status
- Job state, such as queued, running, completed, failed, or canceled.
- agent_id
- The invoked agent, here agents.biomimicry.living_system_image_collector.
- poll_url
- Relative polling URL returned when the job is accepted.
- estimated_cost_usd
- Acceptance-time estimate for planning. The final charge can differ.
- created_at / started_at / completed_at
- Job lifecycle timestamps when available.
- result.success
- Whether the collection run completed without an agent-level error.
- result.living_system_id
- The living-system record requested.
- result.living_system_name
- Display name used during collection.
- result.images_collected
- Number of newly accepted and linked images.
- result.images_linked
- Accepted image records with provenance and description fields.
- result.images_rejected
- Number of rejected candidates observed during the run.
- result.rejection_reasons
- Short human-readable rejection reason strings.
- result.iterations_used
- Number of search and review iterations reported by the run.
- result.error
- Agent-level error string when success is false.
- result.charge_usd
- Customer-visible charge for the completed billable public API job.
Accepted image fields
- images_linked[].id
- Image record identifier returned for the accepted image.
- images_linked[].url
- Image URL to render or cache according to your own product policy.
- images_linked[].source_url
- Original source page or source record URL. Preserve it for review and attribution.
- images_linked[].description
- Short visual description for review surfaces, accessibility workflows, or downstream galleries.
- images_linked[].confidence
- Screening signal for organism and image fit. Treat it as a review aid, not proof.
- images_linked[].source
- Source label for the candidate image.
- images_linked[].source_id
- Source-specific image or observation identifier when available.
- images_linked[].license
- License label returned with the candidate image.
- images_linked[].license_url
- License URL returned with the candidate image. Preserve it with the image.
- images_linked[].creator
- Creator or photographer value returned by the source when available.
- images_linked[].attribution
- Attribution string to retain wherever the image is displayed.
How output is produced
- Authenticates the API key and confirms agents:invoke permission.
- Checks whether the account can start a billable collection job before work begins.
- Accepts the request as an asynchronous job and returns job_id, status, agent_id, poll_url, estimated_cost_usd, and created_at.
- Reads the living-system record so search can use the common name, scientific name, description, and biological context.
- Checks current image coverage and avoids extra work when enough coverage already exists and extend_existing is false.
- Builds source queries that favor scientific names first, then common names and biological clarifiers.
- Searches approved public image sources and preserves source_url, license, license_url, creator, source, source_id, and attribution when available.
- Screens candidates for organism match, biological relevance, visual quality, source accessibility, watermarks, and attribution completeness.
- Copies accepted media references into the media library when permitted and keeps the original source_url for review.
- Links accepted images to the living-system record and returns counts, image records, rejection reasons, iteration usage, and charge_usd.
Trust and caution
- confidence is a screening signal, not a taxonomic guarantee.
- source_url, license, license_url, creator, and attribution should be preserved through your review and display pipeline.
- License metadata comes from source records and should be verified before commercial, print, or client-facing publication.
- Visual screening can reduce obvious false positives, but it is not a taxonomic authority.
- A completed job with zero accepted images can be a valid outcome for rare taxa, sparse source coverage, source access blocks, download failures, incomplete attribution, watermarks, or visually similar species.
- Successful jobs can change image coverage for the living-system record, so use controlled records for production tests.
- Use human review for high-stakes scientific, legal, publication, conservation, health, safety, or commercial decisions.
Runtime
Runtime depends on target_count, iteration_limit, source availability, image download latency, number of candidates screened, and number of accepted images analyzed. Treat the endpoint as asynchronous and show queued, running, completed, and failed states.
Cost behavior
Use target_count and iteration_limit as the main public controls for cost and runtime. Use estimated_cost_usd from the queued response for pre-completion display and charge_usd from the completed result for final customer-visible accounting.
Billing notes
- The queued response includes estimated_cost_usd as an acceptance-time estimate used before the job completes.
- Completed billable public API jobs include charge_usd in result. Treat charge_usd as the customer-visible final charge.
- Organization credits are deducted for billable completed work according to the account's public API pricing.
- The final charge can be lower or higher than the estimate depending on target_count, iteration_limit, source availability, candidate downloads, and accepted images analyzed.
- Do not use estimated_cost_usd for final accounting. Reconcile final spend from charge_usd after the job reaches a terminal state.
{
"inputs": {
"living_system_id": "6d9efd47-6726-4678-9c65-8467b116e1dd",
"target_count": 3,
"iteration_limit": 2,
"extend_existing": true
},
"configuration": {
"metadata": {
"client_record_id": "lesson-42",
"collection_reason": "missing gallery coverage"
}
}
}{
"job_id": "job_7f3a2b1c",
"status": "queued",
"agent_id": "agents.biomimicry.living_system_image_collector",
"poll_url": "/v1/jobs/job_7f3a2b1c",
"estimated_cost_usd": 0.12,
"created_at": "2026-05-27T22:30:00Z"
}{
"job_id": "job_7f3a2b1c",
"status": "completed",
"agent_id": "agents.biomimicry.living_system_image_collector",
"created_at": "2026-05-27T22:30:00Z",
"started_at": "2026-05-27T22:30:03Z",
"completed_at": "2026-05-27T22:32:41Z",
"result": {
"success": true,
"living_system_id": "6d9efd47-6726-4678-9c65-8467b116e1dd",
"living_system_name": "Namib desert beetle",
"images_collected": 2,
"images_linked": [
{
"id": "img_123",
"url": "https://media.example.org/living-systems/6d9efd47/img_123.jpg",
"source_url": "https://example-source.org/observations/12345",
"description": "A close view of the beetle on textured sand, with the dark body and raised wing covers clearly visible.",
"confidence": 0.91,
"source": "community_observation",
"source_id": "12345",
"license": "CC BY 4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"creator": "Example Naturalist",
"attribution": "Photo by Example Naturalist (CC BY 4.0)"
}
],
"images_rejected": 4,
"rejection_reasons": [
"Image has a visible watermark.",
"Could not download image for verification."
],
"iterations_used": 1,
"charge_usd": 0.24
}
}Errors and retries
Common failures
- Missing inputs.living_system_id.
- inputs.target_count is outside the allowed range of 1 to 20.
- inputs.iteration_limit is outside the allowed range of 1 to 5.
- 401: the API key is missing or invalid.
- 403: the key does not have agents:invoke scope or this agent is not available to the caller.
- 402: the account does not have enough credits to start the job.
- 400: webhook_url is not HTTPS in production.
- 429: the client exceeded the allowed request rate.
- 503: the platform could not accept or complete the collection job at that time.
- failed: the accepted job could not complete, often because the living_system_id was unknown, candidate sources were unavailable, image verification failed, or billing could not be completed.
- 404: the job ID is wrong, expired, or not owned by the caller.
Retry guidance
- After a job_id is returned, poll GET /v1/jobs/{job_id} with bounded exponential backoff.
- Honor Retry-After on 429 responses.
- Polling retries are safe until the job reaches completed, failed, or canceled, or the result retention window expires.
- Retry transient failures with a lower target_count or iteration_limit when timeouts or rate limits are likely.
- Do not blindly retry rejections caused by watermarks, missing attribution, wrong organism, or source access failures without changing criteria or sending the item to manual review.
- Use a stable record ID in configuration.metadata so your application can reconcile duplicate submissions or delayed webhooks.
Composition ideas
Fill missing coverage
Find records with no linked images, invoke with target_count from 1 to 3 and extend_existing false, then review images_linked before publishing.
Improve weak galleries
Invoke with extend_existing true, inspect images_rejected and rejection_reasons, and decide whether manual review is needed.
Lesson or gallery enrichment
Map lesson organisms to living_system_id values, submit low-count jobs, and preserve url, description, source_url, license, license_url, creator, and attribution.
Selector fallback
When the image selector returns pending_collection, call this collector, review accepted images, then run selection again for the exact display context.
Image QA admin action
Show status, images_collected, images_rejected, and top rejection_reasons so reviewers can understand why a record still lacks coverage.
Application fit
- Organism libraries and living-system profile pages.
- Educational media galleries and lesson-card image coverage.
- Biomimicry research galleries that need source URLs and attribution retained.
- Content operations dashboards that track missing or weak media coverage.
- Review queues that separate accepted images from rejected candidates and reasons.
- Report builders that need candidate image pools before final selection.