Creators & communities
Substack
Posts, Notes, messages, subscribers and stats for your publication.
50 endpoints
Your AI agent books sessions with a contract and invoice, creates and delivers galleries, tells you about new orders and lists galleries about to expire. Sign in to ShootProof once in your own Cloud Browser. No client ID, no OAuth app.
10 tools Read and write
ShootProof has no MCP server and no ChatGPT or Claude app. Its OAuth API is free with an account, but a client ID comes only by emailing support with your app details (developer docs, checked 8 Nov 2026). Cotlet runs 10 ShootProof tools hosted, over MCP for agents and REST for scripts, in your own ShootProof login.
| What you need | ShootProof API | By hand | Cotlet |
|---|---|---|---|
| Galleries and orders | With a client ID | Yes, one by one | Yes |
| Send a contract or invoice | With a client ID | Yes, one by one | Yes, after your OK |
| Share a gallery | With a client ID | Yes | Yes, after your OK |
| Ask in ChatGPT or Claude | No | No | Yes |
| Developer needed | Yes | No | No |
Checked 8 Nov 2026. Sources: ShootProof for Developers: Authorization · ShootProof for Developers · ShootProof integrated partners · ShootProof plans
Once, in a browser we host for you.
One address in its settings.
It drafts the work, you OK what customers get.
We never keep your ShootProof password, and no gallery, contract or invoice reaches a client until you approve it. Who can see your session
Sign in to ShootProof in a Cloud Browser. Create a Cotlet account, open ShootProof in its Cloud Browser, sign in to your studio on studio.shootproof.com and press Enable for agents.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
ShootProof shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned ShootProof on after connecting? Refresh the connector and the 10 tools appear.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: shootproof_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: shootproof_write New galleries start private. Sharing sets the gallery live and emails the client, after your OK. Orders are read only.
Returns galleries with name, event date, status, number of photos, visits and expiry date. Newest first.
MCP callshootproof_read → list_galleries
REST endpointGET https://cotlet.dev/api/v1/shootproof/galleries
| Name | Type | Description |
|---|---|---|
| status string | string | public, private or expired. Default: all. |
| query string | string | Gallery name. |
| page integer | integer | Page number. Default: 1. |
{
"galleries": [
{
"gallery_id": "41820973",
"name": "Okafor Wedding",
"event_date": "2026-09-20",
"status": "Public",
"photos": 812,
"visits": 146,
"expires": "2027-03-20"
}
],
"page": 1
} Returns albums, price sheet, download settings, expiry and the client favorites lists.
MCP callshootproof_read → get_gallery
REST endpointGET https://cotlet.dev/api/v1/shootproof/galleries/{gallery_id}
| Name | Type | Description |
|---|---|---|
| gallery_id string required | string | Gallery ID from list_galleries. |
{
"gallery_id": "gallery_8c41d2"
} {
"gallery_id": "41820973",
"name": "Okafor Wedding",
"albums": [
"Ceremony",
"Portraits",
"Reception"
],
"price_sheet": "Wedding 2026",
"favorites": [
{
"list": "Album picks",
"photos": 64
}
]
} Creates an empty private gallery with the price sheet and expiry you pass. Nobody sees it until share_gallery, so it runs at once.
MCP callshootproof_write → create_gallery
REST endpointPOST https://cotlet.dev/api/v1/shootproof/galleries
| Name | Type | Description |
|---|---|---|
| name string required | string | Gallery name. |
| event_date string | string | ISO date. |
| price_sheet string | string | Price sheet name. |
| expires string | string | ISO date. |
{
"name": "Jane Doe"
} {
"gallery_id": "41822010",
"name": "Lin Family Session",
"status": "Private",
"price_sheet": "Portrait 2026"
} Returns orders with client, gallery, total and status, so the agent can tell you what needs to go to the lab.
MCP callshootproof_read → list_orders
REST endpointGET https://cotlet.dev/api/v1/shootproof/orders
| Name | Type | Description |
|---|---|---|
| status string | string | new, processing or complete. Default: all. |
| gallery_id string | string | One gallery only. |
| page integer | integer | Page number. Default: 1. |
{
"orders": [
{
"order_id": "9921034",
"client": "Grace Okafor",
"gallery": "Okafor Wedding",
"total": "284.00",
"status": "New"
}
],
"page": 1
} Search contacts before adding one. Contracts come from your templates; contracts and invoices go out only after your OK.
Returns contacts with ID, email, phone and tags. Pass the contact_id to send_contract or send_invoice.
MCP callshootproof_read → list_contacts
REST endpointGET https://cotlet.dev/api/v1/shootproof/contacts
| Name | Type | Description |
|---|---|---|
| query string | string | Name or email. |
| page integer | integer | Page number. Default: 1. |
{
"contacts": [
{
"contact_id": "7730415",
"name": "Grace Lin",
"email": "grace@example.com",
"phone": "555-0166",
"tags": [
"portrait"
]
}
],
"page": 1
} Creates the contact. Search list_contacts first so a returning client does not become a duplicate. Reaches no one, so it runs at once.
MCP callshootproof_write → create_contact
REST endpointPOST https://cotlet.dev/api/v1/shootproof/contacts
| Name | Type | Description |
|---|---|---|
| first_name string required | string | First name. |
| last_name string required | string | Last name. |
| email string required | string | Email. |
| phone string | string | Phone number. |
{
"first_name": "first name",
"last_name": "last name",
"email": "jane@example.com"
} {
"contact_id": "7730502",
"name": "Sam Rivera",
"email": "sam@example.com"
} Creates the contract from your template with the session details and emails it to the contact to sign. By default you confirm each call; you can switch that off for this tool.
MCP callshootproof_write → send_contract
REST endpointPOST https://cotlet.dev/api/v1/shootproof/contacts/{contact_id}/contracts
| Name | Type | Description |
|---|---|---|
| contact_id string required | string | Contact ID from list_contacts. |
| template string required | string | Contract template name. |
| session_date string | string | ISO date. |
{
"contact_id": "7730502",
"template": "Portrait session",
"session_date": "2026-12-06"
} {
"contract_id": "K-55120",
"contact": "Sam Rivera",
"template": "Portrait session",
"status": "Sent"
} Returns invoices with contact, total, amount due, next payment date and status.
MCP callshootproof_read → list_invoices
REST endpointGET https://cotlet.dev/api/v1/shootproof/invoices
| Name | Type | Description |
|---|---|---|
| status string | string | unpaid, partially_paid, paid or all. Default: all. |
| page integer | integer | Page number. Default: 1. |
{
"invoices": [
{
"invoice_id": "I-30871",
"contact": "Grace Okafor",
"total": "4,800.00",
"due": "1,200.00",
"next_payment": "2026-11-20",
"status": "Partially paid"
}
],
"page": 1
} Creates the invoice with your lines and payment schedule and emails it to the contact. By default you confirm each call; you can switch that off for this tool.
MCP callshootproof_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/shootproof/contacts/{contact_id}/invoices
| Name | Type | Description |
|---|---|---|
| contact_id string required | string | Contact ID from list_contacts. |
| items object[] required | object[] | Lines: description, amount. |
| due_date string | string | ISO date. |
{
"contact_id": "contact_8c41d2",
"items": [
"items"
]
} {
"invoice_id": "I-30902",
"contact": "Sam Rivera",
"total": "450.00",
"status": "Sent"
} Your signed-in ShootProof profile, AES-256-GCM encrypted, in Finland. No password.
The 10 ShootProof tools, never the session cookie.
What your studio sees: galleries, orders, contacts, contracts, invoices.
Uploads, deletes, payouts, price sheet edits, lab fulfillment.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your ShootProof password.
Cotlet never types your password: you sign in yourself, and the agent only uses the session. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When ShootProof moves a button in the gallery settings or renames a contract status, we fix the tool and your agent calls it the same way. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a gallery | Yes, delete it in ShootProof |
| Create a contact | Yes, edit or delete it |
| Share a gallery | Make it private again; the email stays sent |
| Send a contract or invoice | Void it in ShootProof; the email stays sent |
3 of 10 tools ask first: share_gallery, send_contract, send_invoice. A new private gallery or a contact reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "send_contract",
"arguments": {
"contact_id": "7730502",
"template": "Portrait session",
"session_date": "2026-12-06"
}
} curl -X POST https://cotlet.dev/api/v1/shootproof/contacts/7730502/contracts \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"template":"Portrait session","session_date":"2026-12-06"}' {
"contract_id": "K-55120",
"contact": "Sam Rivera",
"template": "Portrait session",
"status": "Sent"
} A cron job or n8n flow can call the same tools over REST at /api/v1/shootproof with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $15 a monthfor a photographer with about 10 sessions, 2,600 credits. Your ShootProof plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Session booked: contact, contract, invoice | 4 × 10 | 400 |
| Gallery created and shared | 2 × 10 | 200 |
| New orders checked | 1 × 30 | 300 |
| Expiring galleries, weekly | 4 × 4 | 160 |
| Unpaid invoices, weekly | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 2,600 |
ShootProof publishes no usage counts, so the month is our example. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| ShootProof API | Contacts, contracts, events, invoices and orders for your own developer. | Client ID by email to support; you build and host an OAuth app. |
| ShootProof integrated partners | Ready connections to other studio tools. | Each partner connects one tool for one job. |
| By hand | Every screen of ShootProof. | Your editing time. |
If your developer already has a ShootProof client ID, building on the API is cheaper for simple reads. To deliver galleries and send contracts by asking in ChatGPT or Claude, Cotlet works in the ShootProof account you already have.
Prefer code? Our public repo has a ready ShootProof MCP config for Claude Code, ChatGPT and Cursor, an agent skill and a small command-line tool. Add your Cotlet API key and your agent works in your own ShootProof account.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), in business since 2019, led by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the ShootProof tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open ShootProof under Integrations in the console and sign in to ShootProof in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to ShootProof once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your ShootProof account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in ShootProof: book a session with contract and invoice; create and deliver client galleries; check new print orders. You ask in plain words, and anything that reaches other people waits for your OK first.
No. ShootProof has no ChatGPT or Claude connector of its own and ShootProof has no official MCP server (checked 8 Nov 2026). Cotlet is an independent one that works in ChatGPT, Claude, Cursor and any MCP client, on your signed-in account.
Yes, with Cotlet. ChatGPT creates the gallery with your price sheet and expiry and sends it to the client after your OK.
Yes, with Cotlet. ChatGPT fills your contract template for the session and sends it to the client to sign, after your OK.
Yes, with Cotlet. Ask what came in since yesterday and ChatGPT lists new print and download orders with their totals.
No. Cotlet works through your own ShootProof sign-in, so you skip the support request and the OAuth app. It can do what your studio account can do.
No. Upload from Lightroom or the ShootProof uploader as you do today. The agent creates, shares and reads galleries that are already there.
Only in how it is called. Both carry the same 10 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with ShootProof.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy