{
    "openapi": "3.1.0",
    "info": {
        "title": "CPAlead Publisher API",
        "version": "1.0.0",
        "description": "Public publisher API for pulling offers, checking conversions, and downloading reversals."
    },
    "servers": [
        {
            "url": "https://www.cpalead.com",
            "description": "CPAlead public API server"
        }
    ],
    "externalDocs": {
        "description": "Human-readable API documentation",
        "url": "https://www.cpalead.com/api"
    },
    "paths": {
        "/api/offers": {
            "get": {
                "summary": "List available offers",
                "description": "Returns CPA, CPI, CPE, and optional CPR offers. Native CPC offers are not returned. Offers with boost clicks keep their natural rank.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "Publisher ID.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "country",
                        "in": "query",
                        "required": false,
                        "description": "Two-letter ISO country code, or use \"user\" to use the visitor country.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Maximum offers to return. Default 2500. Maximum 5000.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "device",
                        "in": "query",
                        "required": false,
                        "description": "Device filter. Examples: ios, android, mobile, desktop, or user.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "required": false,
                        "description": "Comma-separated payout types. CPC is stripped. Examples: cpa,cpi,cpe,cpr.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "updated_since",
                        "in": "query",
                        "required": false,
                        "description": "Only return offers updated on or after this date. Use YYYY-MM-DD or an ISO date and time.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "required": false,
                        "description": "Comma-separated list of offer fields to include.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "offerwall_offers",
                        "in": "query",
                        "required": false,
                        "description": "Use true to include offerwall-only inventory.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "Response format. Use json or jsonp.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "callback",
                        "in": "query",
                        "required": false,
                        "description": "JSONP callback name.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "subid",
                        "in": "query",
                        "required": false,
                        "description": "Optional subid passthrough.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "subid2",
                        "in": "query",
                        "required": false,
                        "description": "Optional second subid passthrough.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "subid3",
                        "in": "query",
                        "required": false,
                        "description": "Optional third subid passthrough.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "gaid",
                        "in": "query",
                        "required": false,
                        "description": "Optional GAID passthrough.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "idfa",
                        "in": "query",
                        "required": false,
                        "description": "Optional IDFA passthrough.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful offers response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/OffersResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/conversions": {
            "get": {
                "summary": "Check conversions",
                "description": "Returns non-reversed conversions for a publisher and subid. Supports JSON and JSONP.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "Publisher ID.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "api_key",
                        "in": "query",
                        "required": true,
                        "description": "Publisher API key.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "subid",
                        "in": "query",
                        "required": true,
                        "description": "Lookup conversion by subid, IP, or use \"user\" to use the caller IP.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "offer_id",
                        "in": "query",
                        "required": false,
                        "description": "Optional offer filter.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "Response format. Use json or jsonp.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "callback",
                        "in": "query",
                        "required": false,
                        "description": "JSONP callback name.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful conversions response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ConversionsResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/reversals": {
            "get": {
                "summary": "Download reversals",
                "description": "Returns reversed leads for a publisher between start_date and end_date. Supports JSON and JSONP.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "Publisher ID.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "api_key",
                        "in": "query",
                        "required": true,
                        "description": "Publisher API key.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "start_date",
                        "in": "query",
                        "required": true,
                        "description": "Start date in YYYY-MM-DD format.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "end_date",
                        "in": "query",
                        "required": true,
                        "description": "End date in YYYY-MM-DD format.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "required": false,
                        "description": "Response format. Use json or jsonp.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "callback",
                        "in": "query",
                        "required": false,
                        "description": "JSONP callback name.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful reversals response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ReversalsResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/openapi.json": {
            "get": {
                "summary": "Machine-readable API schema",
                "description": "Returns the OpenAPI schema for the public CPAlead publisher API.",
                "responses": {
                    "200": {
                        "description": "OpenAPI schema document",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "Offer": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "conversion": {
                        "type": "string"
                    },
                    "device": {
                        "type": "string"
                    },
                    "daily_cap": {
                        "oneOf": [
                            {
                                "type": "integer"
                            },
                            {
                                "type": "boolean"
                            }
                        ]
                    },
                    "is_fast_pay": {
                        "type": "boolean"
                    },
                    "link": {
                        "type": "string"
                    },
                    "preview_link": {
                        "type": "string"
                    },
                    "amount": {
                        "type": "number",
                        "format": "float"
                    },
                    "payout_currency": {
                        "type": "string",
                        "example": "USD"
                    },
                    "payout_type": {
                        "type": "string"
                    },
                    "countries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "epc": {
                        "type": "number",
                        "format": "float"
                    },
                    "creatives": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        }
                    },
                    "offer_rank": {
                        "type": "integer"
                    },
                    "payouts_per_country": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "number",
                            "format": "float"
                        }
                    }
                },
                "required": [
                    "id",
                    "title",
                    "description",
                    "conversion",
                    "device",
                    "daily_cap",
                    "is_fast_pay",
                    "link",
                    "preview_link",
                    "amount",
                    "payout_currency",
                    "payout_type",
                    "countries",
                    "epc",
                    "creatives",
                    "offer_rank"
                ],
                "example": {
                    "id": 999001,
                    "title": "QuizBlitz Pro",
                    "description": "Test your knowledge and win rewards!",
                    "conversion": "Complete Level 5 (New Users Only)",
                    "device": "android",
                    "daily_cap": 50,
                    "is_fast_pay": true,
                    "link": "https://{tracking_domain}/view.php?id=999001&pub={PUBLISHER_ID}&_src=api&_src_sig={SIGNATURE}",
                    "preview_link": "https://example.com/offerblast",
                    "amount": 1.2,
                    "payout_currency": "USD",
                    "payout_type": "CPE",
                    "countries": [
                        "US",
                        "CA",
                        "GB",
                        "AU",
                        "NZ"
                    ],
                    "epc": 0.95,
                    "creatives": {
                        "url": "https://{assets_domain}/images/offerblast.png"
                    },
                    "offer_rank": 7,
                    "payouts_per_country": {
                        "US": 1.2,
                        "CA": 1.1,
                        "GB": 0.9
                    }
                }
            },
            "OffersResponse": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "example": "success"
                    },
                    "number_offers": {
                        "type": "integer"
                    },
                    "country": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "devices": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "offers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Offer"
                        }
                    }
                },
                "example": {
                    "status": "success",
                    "number_offers": 2,
                    "country": "US",
                    "devices": null,
                    "offers": [
                        {
                            "id": 999001,
                            "title": "QuizBlitz Pro",
                            "description": "Test your knowledge and win rewards!",
                            "conversion": "Complete Level 5 (New Users Only)",
                            "device": "android",
                            "daily_cap": 50,
                            "is_fast_pay": true,
                            "link": "https://{tracking_domain}/view.php?id=999001&pub={PUBLISHER_ID}&_src=api&_src_sig={SIGNATURE}",
                            "preview_link": "https://example.com/offerblast",
                            "amount": 1.2,
                            "payout_currency": "USD",
                            "payout_type": "CPE",
                            "countries": [
                                "US",
                                "CA",
                                "GB",
                                "AU",
                                "NZ"
                            ],
                            "epc": 0.95,
                            "creatives": {
                                "url": "https://{assets_domain}/images/offerblast.png"
                            },
                            "offer_rank": 7,
                            "payouts_per_country": {
                                "US": 1.2,
                                "CA": 1.1,
                                "GB": 0.9
                            }
                        },
                        {
                            "id": 999002,
                            "title": "PhotoMaster Lite",
                            "description": "Edit photos with one tap.",
                            "conversion": "Install, open & keep for 2 days (New Users Only)",
                            "device": "ios",
                            "daily_cap": 100,
                            "is_fast_pay": false,
                            "link": "https://{tracking_domain}/view.php?id=999002&pub={PUBLISHER_ID}&_src=api&_src_sig={SIGNATURE}",
                            "preview_link": "https://example.com/photomaster",
                            "amount": 0.85,
                            "payout_currency": "USD",
                            "payout_type": "CPI",
                            "countries": [
                                "US"
                            ],
                            "epc": 1.1,
                            "creatives": {
                                "url": "https://{assets_domain}/images/photomaster.png"
                            },
                            "offer_rank": 12
                        }
                    ]
                }
            },
            "Conversion": {
                "type": "object",
                "properties": {
                    "amount": {
                        "type": "number",
                        "format": "float"
                    },
                    "offer_id": {
                        "type": "integer"
                    },
                    "country": {
                        "type": "string"
                    },
                    "timestamp": {
                        "type": "integer"
                    }
                }
            },
            "ConversionsResponse": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "example": "success"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "conversions": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Conversion"
                        }
                    }
                },
                "example": {
                    "status": "success",
                    "total": 2,
                    "conversions": [
                        {
                            "amount": 1.23,
                            "offer_id": 1321,
                            "country": "US",
                            "timestamp": 1699978573
                        },
                        {
                            "amount": 0.34,
                            "offer_id": 1454,
                            "country": "AU",
                            "timestamp": 1700520813
                        }
                    ]
                }
            },
            "Reversal": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "subid": {
                        "type": "string"
                    },
                    "ip": {
                        "type": "string"
                    },
                    "country": {
                        "type": "string"
                    },
                    "amount": {
                        "type": "number",
                        "format": "float"
                    },
                    "offer_id": {
                        "type": "integer"
                    },
                    "timestamp": {
                        "type": "integer"
                    }
                }
            },
            "ReversalsResponse": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "example": "success"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "reversals": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Reversal"
                        }
                    }
                },
                "example": {
                    "status": "success",
                    "total": 2,
                    "reversals": [
                        {
                            "id": 6211,
                            "subid": "source-42",
                            "ip": "198.51.100.24",
                            "country": "US",
                            "amount": 1.23,
                            "offer_id": 1321,
                            "timestamp": 1699978573
                        },
                        {
                            "id": 6212,
                            "subid": "source-84",
                            "ip": "203.0.113.56",
                            "country": "AU",
                            "amount": 0.34,
                            "offer_id": 1454,
                            "timestamp": 1700520813
                        }
                    ]
                }
            }
        }
    },
    "x-docs-url": "https://www.cpalead.com/api",
    "x-schema-url": "https://www.cpalead.com/api/openapi.json"
}