SerenAI

Pay Per Call Agentic Commerce

DataResponse_DailyClaimEligibilityResponse

Generic API response wrapper with optional pagination This wrapper provides a consistent structure for all API responses, making it easier for clients to handle responses uniformly. It supports both single resources and collections, with optional pagination metadata. Publisher endpoints use the same wrapper for non-streaming JSON success responses, including first-class publishers. Streaming endpoints such as SSE responses carry metering in response headers and are not wrapped. Payment-required and error responses are also not wrapped so clients can parse their existing wire contracts directly. # Response Structure ```json { "data": T, "pagination": { ... } // optional } ``` # Examples ## Single Resource ```rust use seren_core::http::DataResponse; use serde::Serialize; #[derive(Serialize)] struct Project { id: String, name: String, } let project = Project { id: "123".to_string(), name: "My Project".to_string(), }; let response = DataResponse::new(project); // Serializes to: {"data": {"id": "123", "name": "My Project"}} ``` ## Collection with Pagination ```rust use seren_core::http::DataResponse; use seren_core::pagination::PaginationMeta; use serde::Serialize; #[derive(Serialize)] struct Project { id: String, name: String, } let projects: Vec<Project> = Vec::new(); let pagination = PaginationMeta { total: 0, count: 0, limit: 20, offset: 0, has_more: false, }; let response = DataResponse::with_pagination(projects, pagination); // Serializes to: {"data": [...], "pagination": {"total": 0, "count": 0, "limit": 20, "offset": 0, "has_more": false}} ```

Properties

PropertyTypeRequiredDescription
data object Yes Response for daily claim eligibility check
pagination any No
View JSON Schema
{
  "type": "object",
  "description": "Generic API response wrapper with optional pagination\n\nThis wrapper provides a consistent structure for all API responses,\nmaking it easier for clients to handle responses uniformly. It supports\nboth single resources and collections, with optional pagination metadata.\nPublisher endpoints use the same wrapper for non-streaming JSON success\nresponses, including first-class publishers. Streaming endpoints such as\nSSE responses carry metering in response headers and are not wrapped.\nPayment-required and error responses are also not wrapped so clients can\nparse their existing wire contracts directly.\n\n# Response Structure\n\n```json\n{\n  \"data\": T,\n  \"pagination\": { ... } // optional\n}\n```\n\n# Examples\n\n## Single Resource\n\n```rust\nuse seren_core::http::DataResponse;\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct Project {\n    id: String,\n    name: String,\n}\n\nlet project = Project {\n    id: \"123\".to_string(),\n    name: \"My Project\".to_string(),\n};\n\nlet response = DataResponse::new(project);\n// Serializes to: {\"data\": {\"id\": \"123\", \"name\": \"My Project\"}}\n```\n\n## Collection with Pagination\n\n```rust\nuse seren_core::http::DataResponse;\nuse seren_core::pagination::PaginationMeta;\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct Project {\n    id: String,\n    name: String,\n}\n\nlet projects: Vec<Project> = Vec::new();\nlet pagination = PaginationMeta {\n    total: 0,\n    count: 0,\n    limit: 20,\n    offset: 0,\n    has_more: false,\n};\n\nlet response = DataResponse::with_pagination(projects, pagination);\n// Serializes to: {\"data\": [...], \"pagination\": {\"total\": 0, \"count\": 0, \"limit\": 20, \"offset\": 0, \"has_more\": false}}\n```",
  "required": [
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "description": "Response for daily claim eligibility check",
      "required": [
        "can_claim",
        "claims_remaining_this_month"
      ],
      "properties": {
        "can_claim": {
          "type": "boolean"
        },
        "claim_amount_usd": {
          "type": [
            "string",
            "null"
          ],
          "description": "Formatted USD amount that will be granted on a successful daily claim.\nOptional to avoid breaking older clients."
        },
        "claims_remaining_this_month": {
          "type": "integer",
          "format": "int32"
        },
        "reason": {
          "type": [
            "string",
            "null"
          ]
        },
        "resets_in_seconds": {
          "type": [
            "integer",
            "null"
          ],
          "format": "int64",
          "description": "Seconds until the daily claim resets (midnight UTC).\nOnly present when can_claim is false due to already claiming today."
        }
      }
    },
    "pagination": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/components/schemas/PaginationMeta",
          "description": "Optional pagination metadata"
        }
      ]
    }
  }
}