{"id":47284848,"url":"https://github.com/deploymenttheory/go-sdk-jamfpro-v2","last_synced_at":"2026-03-16T05:43:50.293Z","repository":{"id":339364972,"uuid":"1161249034","full_name":"deploymenttheory/go-sdk-jamfpro-v2","owner":"deploymenttheory","description":"A community Jamf Pro sdk v2 for classic and jamf pro api's, written in go. With full api surface coverage","archived":false,"fork":false,"pushed_at":"2026-03-10T04:42:30.000Z","size":5717,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-10T04:43:39.064Z","etag":null,"topics":["golang","jamf","jamfpro","sdk-go"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deploymenttheory.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-18T22:34:40.000Z","updated_at":"2026-03-10T04:41:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/deploymenttheory/go-sdk-jamfpro-v2","commit_stats":null,"previous_names":["deploymenttheory/go-sdk-jamfpro-v2"],"tags_count":8,"template":false,"template_full_name":"deploymenttheory/Template","purl":"pkg:github/deploymenttheory/go-sdk-jamfpro-v2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-sdk-jamfpro-v2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-sdk-jamfpro-v2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-sdk-jamfpro-v2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-sdk-jamfpro-v2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deploymenttheory","download_url":"https://codeload.github.com/deploymenttheory/go-sdk-jamfpro-v2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deploymenttheory%2Fgo-sdk-jamfpro-v2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30568788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-16T04:42:47.996Z","status":"ssl_error","status_checked_at":"2026-03-16T04:42:44.668Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","jamf","jamfpro","sdk-go"],"created_at":"2026-03-16T05:43:49.743Z","updated_at":"2026-03-16T05:43:50.287Z","avatar_url":"https://github.com/deploymenttheory.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go SDK for Jamf Pro API\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/deploymenttheory/go-sdk-jamfpro-v2)](https://goreportcard.com/report/github.com/deploymenttheory/go-sdk-jamfpro-v2)\n[![GoDoc](https://pkg.go.dev/badge/github.com/deploymenttheory/go-sdk-jamfpro-v2)](https://pkg.go.dev/github.com/deploymenttheory/go-sdk-jamfpro-v2)\n[![License](https://img.shields.io/github/license/deploymenttheory/go-sdk-jamfpro-v2)](LICENSE)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/deploymenttheory/go-sdk-jamfpro-v2)](https://go.dev/)\n[![Release](https://img.shields.io/github/v/release/deploymenttheory/go-sdk-jamfpro-v2)](https://github.com/deploymenttheory/go-sdk-jamfpro-v2/releases)\n[![codecov](https://codecov.io/gh/deploymenttheory/go-sdk-jamfpro-v2/graph/badge.svg)](https://codecov.io/gh/deploymenttheory/go-sdk-jamfpro-v2)\n![Status: Experimental](https://img.shields.io/badge/status-experimental-yellow)\n\nA Go client library for the [Jamf Pro API](https://developer.jamf.com/jamf-pro/reference), supporting both the Classic API and the Jamf Pro API (REST). Uses OAuth2 or Basic auth with bearer token exchange, automatic token refresh, and production-ready transport (retries, sticky sessions, logging, optional OpenTelemetry tracing).\n\n\n## Quick Start\n\nGet started quickly with the SDK using the **[Quick Start Guide](docs/guides/quick-start.md)**, which includes:\n\n- Installation instructions\n- Your first API call\n- Common operations (list, get, create, update, delete)\n- Authentication from environment or config file\n- Error handling and response metadata\n- Links to configuration guides for production use\n\n## Examples\n\nThe [examples directory](examples/) contains working examples for many SDK services:\n\n- **Jamf Pro API:** [examples/jamf_pro_api/](examples/jamf_pro_api/) — API integrations, API roles, buildings, categories, computer groups, computer prestages, departments, dock items, enrollment settings, packages, reenrollment, SSO settings, volume purchasing, and more\n- **Classic API:** [examples/classic_api/](examples/classic_api/) — Network segments, printers, restricted software, webhooks, and other Classic endpoints\n\nEach example includes a complete `main.go` you can run with your Jamf Pro credentials.\n\n\n## HTTP Client Configuration\n\nThe SDK includes a powerful HTTP client with production-ready configuration options:\n\n- **[Authentication](docs/guides/authentication.md)** - OAuth2 and Basic auth with secure credential management\n- **[Timeouts \u0026 Retries](docs/guides/timeouts-retries.md)** - Configurable timeouts and automatic retry logic with exponential backoff\n- **[TLS/SSL Configuration](docs/guides/tls-configuration.md)** - Custom certificates, mutual TLS, and security settings\n- **[Proxy Support](docs/guides/proxy.md)** - HTTP/HTTPS/SOCKS5 proxy configuration\n- **[Custom Headers](docs/guides/custom-headers.md)** - Global and per-request header management\n- **[Structured Logging](docs/guides/logging.md)** - Integration with zap for production logging\n- **[OpenTelemetry Tracing](docs/guides/opentelemetry.md)** - Distributed tracing and observability\n- **[Debug Mode](docs/guides/debugging.md)** - Detailed request/response inspection\n\n## Configuration Options\n\n### Creating a client\n\n```go\nimport (\n    \"github.com/deploymenttheory/go-sdk-jamfpro-v2/jamfpro\"\n)\n\n// From environment (INSTANCE_DOMAIN, AUTH_METHOD, CLIENT_ID, CLIENT_SECRET or BASIC_AUTH_*)\njamfClient, err := jamfpro.NewClientFromEnv()\n\n// From AuthConfig (e.g. from file or secret manager)\nauthConfig := jamfpro.AuthConfigFromEnv() // or jamfpro.LoadAuthConfigFromFile(path)\njamfClient, err := jamfpro.NewClient(authConfig, jamfpro.WithLogger(logger))\n```\n\n### AuthConfig fields\n\n```go\nimport \"github.com/deploymenttheory/go-sdk-jamfpro-v2/jamfpro/constants\"\n\n\u0026jamfpro.AuthConfig{\n    InstanceDomain:           \"https://your-instance.jamfcloud.com\",\n    AuthMethod:               constants.AuthMethodOAuth2, // or constants.AuthMethodBasic\n    ClientID:                 \"your-client-id\",\n    ClientSecret:             \"your-client-secret\",\n    TokenRefreshBufferPeriod: 5 * time.Minute,  // refresh before expiry\n    HideSensitiveData:        true,              // redact tokens in logs\n}\n```\n\n### Optional client options\n\nThe SDK client supports extensive configuration through functional options. Below is the complete list of available configuration options grouped by category.\n\n#### Basic Configuration\n\n```go\njamfpro.WithBaseURL(\"https://...\")                    // Custom base URL\njamfpro.WithTimeout(30*time.Second)                   // Request timeout\njamfpro.WithRetryCount(3)                             // Number of retry attempts\njamfpro.WithRetryWaitTime(2*time.Second)              // Initial retry wait time\njamfpro.WithRetryMaxWaitTime(10*time.Second)          // Maximum retry wait time\njamfpro.WithTotalRetryDuration(2*time.Minute)         // Total retry budget\n```\n\n#### TLS/Security\n\n```go\njamfpro.WithTLSClientConfig(tlsConfig)                // Custom TLS configuration\njamfpro.WithInsecureSkipVerify()                      // Skip cert verification (dev only!)\n```\n\n#### Network\n\n```go\njamfpro.WithProxy(\"http://proxy:8080\")                // HTTP/HTTPS/SOCKS5 proxy\njamfpro.WithTransport(customTransport)                // Custom HTTP transport\n```\n\n#### Headers\n\n```go\njamfpro.WithUserAgent(\"MyApp/1.0\")                    // Set User-Agent header\njamfpro.WithGlobalHeader(\"X-Custom-Header\", \"value\")  // Add single global header\njamfpro.WithGlobalHeaders(map[string]string{...})     // Add multiple global headers\n```\n\n#### Observability\n\n```go\njamfpro.WithLogger(zapLogger)                         // Structured logging with zap\njamfClient.EnableTracing(otelConfig)                 // OpenTelemetry distributed tracing (call after NewClient)\njamfpro.WithDebug()                                   // Enable debug mode (dev only!)\n```\n\n#### Concurrency \u0026 Rate Limiting\n\n```go\njamfpro.WithMaxConcurrentRequests(5)                  // Limit concurrent requests (Jamf Pro recommendation: ≤5)\njamfpro.WithMandatoryRequestDelay(100*time.Millisecond) // Add delay between requests\n```\n\n#### Example: Production Configuration\n\n```go\nimport (\n    \"time\"\n    \"go.uber.org/zap\"\n    \"github.com/deploymenttheory/go-sdk-jamfpro-v2/jamfpro\"\n)\n\nlogger, _ := zap.NewProduction()\nauthConfig := jamfpro.AuthConfigFromEnv()\n\njamfClient, err := jamfpro.NewClient(\n    authConfig,\n    jamfpro.WithTimeout(30*time.Second),\n    jamfpro.WithRetryCount(3),\n    jamfpro.WithLogger(logger),\n    jamfpro.WithMaxConcurrentRequests(5),\n    jamfpro.WithGlobalHeader(\"X-Application-Name\", \"MyJamfIntegration\"),\n)\n\n// Enable OpenTelemetry tracing (optional)\njamfClient.EnableTracing(\u0026jamfpro.OTelConfig{\n    ServiceName: \"my-jamf-integration\",\n})\n```\n\nSee the [configuration guides](docs/guides/) for detailed documentation on each option.\n\n## Documentation\n\n- [Jamf Pro API Reference](https://developer.jamf.com/jamf-pro/reference)\n- [GoDoc](https://pkg.go.dev/github.com/deploymenttheory/go-sdk-jamfpro-v2)\n\n## Contributing\n\nContributions are welcome. Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting pull requests.\n\n## License\n\nThis project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- **Issues:** [GitHub Issues](https://github.com/deploymenttheory/go-sdk-jamfpro-v2/issues)\n- **Jamf Pro API docs:** [developer.jamf.com](https://developer.jamf.com/jamf-pro/reference)\n\n## Disclaimer\n\nThis is a community SDK and is not affiliated with or endorsed by Jamf LLC.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeploymenttheory%2Fgo-sdk-jamfpro-v2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeploymenttheory%2Fgo-sdk-jamfpro-v2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeploymenttheory%2Fgo-sdk-jamfpro-v2/lists"}